<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Injective</title>
        <link>https://paragraph.com/@kaptan_web3</link>
        <description>undefined</description>
        <lastBuildDate>Sun, 08 Nov 2026 03:40:51 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA["Architecting High-Performance DeFi Infrastructure on Injective inEVM"]]></title>
            <link>https://paragraph.com/@kaptan_web3/injective</link>
            <guid>p30hn73F0UHTugjtDj1Z</guid>
            <pubDate>Fri, 16 Jan 2026 15:45:11 GMT</pubDate>
            <description><![CDATA[A deep dive into Tendermint BFT consensus, gas optimization, and production-grade deployment patterns.]]></description>
            <content:encoded><![CDATA[<pre data-type="codeBlock" language="markdown" text="# Zero to Hero: Deploying Your First ERC-20 Token on Injective inEVM with Hardhat

&gt; **TL;DR**: Hardhat + Injective inEVM = sub-second finality, EVM compatibility, and the tooling you already know. Ship faster.


**Why Hardhat + Injective inEVM?**

Injective's inEVM brings the entire Ethereum toolchain to a chain with **~1 second block times** and **instant finality**. No waiting for confirmations. No gas wars. Just deploy and iterate.

Hardhat gives you:
- Native TypeScript support
- Built-in testing framework
- Seamless contract verification
- Plugin ecosystem (ethers.js, OpenZeppelin upgrades, etc.)

**This is the stack for builders who ship.**


**Prerequisites**

```bash
node -v  # v18.0.0 or higher
npm -v   # v9.0.0 or higher
```

If you don't have Hardhat globally:
```bash
npm install --save-dev hardhat
```


**Project Setup**

```bash
mkdir injective-token &amp;&amp; cd injective-token
npx hardhat init
```

Select: **Create a JavaScript project**

Install dependencies:
```bash
npm install --save-dev @nomicfoundation/hardhat-toolbox
npm install @openzeppelin/contracts
```


**Configuration: hardhat.config.js**

Replace your `hardhat.config.js` with:

```javascript
require(&quot;@nomicfoundation/hardhat-toolbox&quot;);
require(&quot;dotenv&quot;).config();

/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
  solidity: {
    version: &quot;0.8.20&quot;,
    settings: {
      optimizer: {
        enabled: true,
        runs: 200,
      },
    },
  },
  networks: {
    injectiveTestnet: {
      url: &quot;https://testnet.rpc.inevm.com&quot;,
      chainId: 2424,
      accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : [],
      gasPrice: 500000000, // 0.5 gwei
    },
    injectiveMainnet: {
      url: &quot;https://mainnet.rpc.inevm.com&quot;,
      chainId: 2525,
      accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : [],
      gasPrice: 500000000,
    },
  },
  etherscan: {
    apiKey: {
      injectiveTestnet: &quot;no-api-key-needed&quot;,
      injectiveMainnet: &quot;no-api-key-needed&quot;,
    },
    customChains: [
      {
        network: &quot;injectiveTestnet&quot;,
        chainId: 2424,
        urls: {
          apiURL: &quot;https://testnet.explorer.inevm.com/api&quot;,
          browserURL: &quot;https://testnet.explorer.inevm.com&quot;,
        },
      },
      {
        network: &quot;injectiveMainnet&quot;,
        chainId: 2525,
        urls: {
          apiURL: &quot;https://explorer.inevm.com/api&quot;,
          browserURL: &quot;https://explorer.inevm.com&quot;,
        },
      },
    ],
  },
};
```

Create a `.env` file:
```bash
PRIVATE_KEY=your_private_key_here_without_0x_prefix
```

&gt; ⚠️ **Never commit your `.env` file. Add it to `.gitignore`.**


**The Contract: contracts/InjectiveToken.sol**

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import &quot;@openzeppelin/contracts/token/ERC20/ERC20.sol&quot;;
import &quot;@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol&quot;;
import &quot;@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol&quot;;
import &quot;@openzeppelin/contracts/access/Ownable.sol&quot;;

/**
 * @title InjectiveToken
 * @dev Production-ready ERC-20 token for Injective inEVM
 * @notice Includes burn functionality and EIP-2612 permit for gasless approvals
 */
contract InjectiveToken is ERC20, ERC20Burnable, ERC20Permit, Ownable {
    uint8 private immutable _decimals;

    /**
     * @dev Constructor that mints initial supply to deployer
     * @param name_ Token name
     * @param symbol_ Token symbol
     * @param decimals_ Token decimals (typically 18)
     * @param initialSupply_ Initial token supply (in whole tokens, not wei)
     */
    constructor(
        string memory name_,
        string memory symbol_,
        uint8 decimals_,
        uint256 initialSupply_
    ) ERC20(name_, symbol_) ERC20Permit(name_) Ownable(msg.sender) {
        _decimals = decimals_;
        _mint(msg.sender, initialSupply_ * 10 ** decimals_);
    }

    function decimals() public view virtual override returns (uint8) {
        return _decimals;
    }

    /**
     * @dev Allows owner to mint additional tokens
     * @param to Recipient address
     * @param amount Amount to mint (in wei)
     */
    function mint(address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }
}
```


**Deployment Script: scripts/deploy.js**

```javascript
const hre = require(&quot;hardhat&quot;);

async function main() {
  const [deployer] = await hre.ethers.getSigners();
  
  console.log(&quot;Deploying contracts with account:&quot;, deployer.address);
  console.log(&quot;Account balance:&quot;, (await deployer.provider.getBalance(deployer.address)).toString());

  // Token parameters
  const TOKEN_NAME = &quot;Injective Builder Token&quot;;
  const TOKEN_SYMBOL = &quot;IBT&quot;;
  const TOKEN_DECIMALS = 18;
  const INITIAL_SUPPLY = 1_000_000; // 1 million tokens

  console.log(&quot;\n📦 Deploying InjectiveToken...&quot;);
  
  const InjectiveToken = await hre.ethers.getContractFactory(&quot;InjectiveToken&quot;);
  const token = await InjectiveToken.deploy(
    TOKEN_NAME,
    TOKEN_SYMBOL,
    TOKEN_DECIMALS,
    INITIAL_SUPPLY
  );

  await token.waitForDeployment();
  const tokenAddress = await token.getAddress();

  console.log(&quot;\n✅ InjectiveToken deployed successfully!&quot;);
  console.log(&quot;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&quot;);
  console.log(&quot;Contract Address:&quot;, tokenAddress);
  console.log(&quot;Token Name:&quot;, TOKEN_NAME);
  console.log(&quot;Token Symbol:&quot;, TOKEN_SYMBOL);
  console.log(&quot;Total Supply:&quot;, INITIAL_SUPPLY.toLocaleString(), TOKEN_SYMBOL);
  console.log(&quot;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━&quot;);
  
  console.log(&quot;\n🔍 View on Explorer:&quot;);
  console.log(`https://testnet.explorer.inevm.com/address/${tokenAddress}`);

  // Return deployment info for verification
  return {
    address: tokenAddress,
    constructorArgs: [TOKEN_NAME, TOKEN_SYMBOL, TOKEN_DECIMALS, INITIAL_SUPPLY],
  };
}

main()
  .then(() =&gt; process.exit(0))
  .catch((error) =&gt; {
    console.error(error);
    process.exit(1);
  });
```


**Deploy to Injective Testnet**

**1. Get Testnet INJ**

Fund your wallet with testnet INJ from the [Injective Faucet](https://testnet.faucet.injective.network/).

**2. Compile**

```bash
npx hardhat compile
```

**3. Deploy**

```bash
npx hardhat run scripts/deploy.js --network injectiveTestnet
```

Expected output:
```
Deploying contracts with account: 0xYourAddress
Account balance: 1000000000000000000

📦 Deploying InjectiveToken...

✅ InjectiveToken deployed successfully!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Contract Address: 0xDeployedContractAddress
Token Name: Injective Builder Token
Token Symbol: IBT
Total Supply: 1,000,000 IBT
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🔍 View on Explorer:
https://testnet.explorer.inevm.com/address/0xDeployedContractAddress
```


**Contract Verification**

Verify your contract on the Injective Explorer:

```bash
npx hardhat verify --network injectiveTestnet \
  DEPLOYED_CONTRACT_ADDRESS \
  &quot;Injective Builder Token&quot; \
  &quot;IBT&quot; \
  18 \
  1000000
```

Replace `DEPLOYED_CONTRACT_ADDRESS` with your actual contract address.

**Manual Verification (Alternative)**

If automated verification fails:

1. Go to [Injective Testnet Explorer](https://testnet.explorer.inevm.com)
2. Search for your contract address
3. Click &quot;Verify &amp; Publish&quot;
4. Select:
   - Compiler: `0.8.20`
   - Optimization: `Yes (200 runs)`
   - License: `MIT`
5. Flatten your contract:
   ```bash
   npx hardhat flatten contracts/InjectiveToken.sol &gt; Flattened.sol
   ```
6. Paste the flattened code and submit


**Testing Your Token**

Create `test/InjectiveToken.test.js`:

```javascript
const { expect } = require(&quot;chai&quot;);
const { ethers } = require(&quot;hardhat&quot;);

describe(&quot;InjectiveToken&quot;, function () {
  let token;
  let owner;
  let addr1;
  
  const NAME = &quot;Injective Builder Token&quot;;
  const SYMBOL = &quot;IBT&quot;;
  const DECIMALS = 18;
  const INITIAL_SUPPLY = 1_000_000;

  beforeEach(async function () {
    [owner, addr1] = await ethers.getSigners();
    const InjectiveToken = await ethers.getContractFactory(&quot;InjectiveToken&quot;);
    token = await InjectiveToken.deploy(NAME, SYMBOL, DECIMALS, INITIAL_SUPPLY);
  });

  it(&quot;Should have correct name and symbol&quot;, async function () {
    expect(await token.name()).to.equal(NAME);
    expect(await token.symbol()).to.equal(SYMBOL);
  });

  it(&quot;Should mint initial supply to deployer&quot;, async function () {
    const expectedSupply = ethers.parseUnits(INITIAL_SUPPLY.toString(), DECIMALS);
    expect(await token.totalSupply()).to.equal(expectedSupply);
    expect(await token.balanceOf(owner.address)).to.equal(expectedSupply);
  });

  it(&quot;Should allow owner to mint&quot;, async function () {
    const mintAmount = ethers.parseUnits(&quot;1000&quot;, DECIMALS);
    await token.mint(addr1.address, mintAmount);
    expect(await token.balanceOf(addr1.address)).to.equal(mintAmount);
  });

  it(&quot;Should allow burning&quot;, async function () {
    const burnAmount = ethers.parseUnits(&quot;1000&quot;, DECIMALS);
    await token.burn(burnAmount);
    const expectedBalance = ethers.parseUnits((INITIAL_SUPPLY - 1000).toString(), DECIMALS);
    expect(await token.balanceOf(owner.address)).to.equal(expectedBalance);
  });
});
```

Run tests:
```bash
npx hardhat test
```


**Quick Reference**

| Network | Chain ID | RPC URL | Explorer |
|---------|----------|---------|----------|
| Testnet | 2424 | https://testnet.rpc.inevm.com | https://testnet.explorer.inevm.com |
| Mainnet | 2525 | https://mainnet.rpc.inevm.com | https://explorer.inevm.com |


**What's Next?**

You just deployed on **the fastest EVM chain**. Here's what you can build next:

- 🔄 **DEX Integration**: List your token on Injective DEXs
- 🌉 **Cross-chain Bridges**: Connect to Ethereum, Cosmos, Solana
- 📊 **DeFi Protocols**: Build lending, staking, or yield protocols
- 🎮 **Gaming/NFTs**: Leverage instant finality for gaming assets


**Resources**

- [Injective inEVM Docs](https://docs.injective.network/develop/guides/inEVM/)
- [Hardhat Documentation](https://hardhat.org/docs)
- [OpenZeppelin Contracts](https://docs.openzeppelin.com/contracts)
- [Injective Discord](https://discord.gg/injective)


**Built with 🥷 for the Injective ecosystem.**
"><code><span class="hljs-section"># Zero to Hero: Deploying Your First ERC-20 Token on Injective inEVM with Hardhat</span>

<span class="hljs-quote">&gt; <span class="hljs-strong">**TL;DR**</span>: Hardhat + Injective inEVM = sub-second finality, EVM compatibility, and the tooling you already know. Ship faster.</span>


<span class="hljs-strong">**Why Hardhat + Injective inEVM?**</span>

Injective's inEVM brings the entire Ethereum toolchain to a chain with <span class="hljs-strong">**~1 second block times**</span> and <span class="hljs-strong">**instant finality**</span>. No waiting for confirmations. No gas wars. Just deploy and iterate.

Hardhat gives you:
<span class="hljs-bullet">-</span> Native TypeScript support
<span class="hljs-bullet">-</span> Built-in testing framework
<span class="hljs-bullet">-</span> Seamless contract verification
<span class="hljs-bullet">-</span> Plugin ecosystem (ethers.js, OpenZeppelin upgrades, etc.)

<span class="hljs-strong">**This is the stack for builders who ship.**</span>


<span class="hljs-strong">**Prerequisites**</span>

<span class="hljs-code">```bash
node -v  # v18.0.0 or higher
npm -v   # v9.0.0 or higher
```</span>

If you don't have Hardhat globally:
<span class="hljs-code">```bash
npm install --save-dev hardhat
```</span>


<span class="hljs-strong">**Project Setup**</span>

<span class="hljs-code">```bash
mkdir injective-token &amp;&amp; cd injective-token
npx hardhat init
```</span>

Select: <span class="hljs-strong">**Create a JavaScript project**</span>

Install dependencies:
<span class="hljs-code">```bash
npm install --save-dev @nomicfoundation/hardhat-toolbox
npm install @openzeppelin/contracts
```</span>


<span class="hljs-strong">**Configuration: hardhat.config.js**</span>

Replace your <span class="hljs-code">`hardhat.config.js`</span> with:

<span class="hljs-code">```javascript
require("@nomicfoundation/hardhat-toolbox");
require("dotenv").config();

/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
  solidity: {
    version: "0.8.20",
    settings: {
      optimizer: {
        enabled: true,
        runs: 200,
      },
    },
  },
  networks: {
    injectiveTestnet: {
      url: "https://testnet.rpc.inevm.com",
      chainId: 2424,
      accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : [],
      gasPrice: 500000000, // 0.5 gwei
    },
    injectiveMainnet: {
      url: "https://mainnet.rpc.inevm.com",
      chainId: 2525,
      accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : [],
      gasPrice: 500000000,
    },
  },
  etherscan: {
    apiKey: {
      injectiveTestnet: "no-api-key-needed",
      injectiveMainnet: "no-api-key-needed",
    },
    customChains: [
      {
        network: "injectiveTestnet",
        chainId: 2424,
        urls: {
          apiURL: "https://testnet.explorer.inevm.com/api",
          browserURL: "https://testnet.explorer.inevm.com",
        },
      },
      {
        network: "injectiveMainnet",
        chainId: 2525,
        urls: {
          apiURL: "https://explorer.inevm.com/api",
          browserURL: "https://explorer.inevm.com",
        },
      },
    ],
  },
};
```</span>

Create a <span class="hljs-code">`.env`</span> file:
<span class="hljs-code">```bash
PRIVATE_KEY=your_private_key_here_without_0x_prefix
```</span>

<span class="hljs-quote">&gt; ⚠️ <span class="hljs-strong">**Never commit your `.env` file. Add it to `.gitignore`.**</span></span>


<span class="hljs-strong">**The Contract: contracts/InjectiveToken.sol**</span>

<span class="hljs-code">```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

/**
 * @title InjectiveToken
 * @dev Production-ready ERC-20 token for Injective inEVM
 * @notice Includes burn functionality and EIP-2612 permit for gasless approvals
 */
contract InjectiveToken is ERC20, ERC20Burnable, ERC20Permit, Ownable {
    uint8 private immutable _decimals;

    /**
     * @dev Constructor that mints initial supply to deployer
     * @param name_ Token name
     * @param symbol_ Token symbol
     * @param decimals_ Token decimals (typically 18)
     * @param initialSupply_ Initial token supply (in whole tokens, not wei)
     */
    constructor(
        string memory name_,
        string memory symbol_,
        uint8 decimals_,
        uint256 initialSupply_
    ) ERC20(name_, symbol_) ERC20Permit(name_) Ownable(msg.sender) {
        _decimals = decimals_;
        _mint(msg.sender, initialSupply_ * 10 ** decimals_);
    }

    function decimals() public view virtual override returns (uint8) {
        return _decimals;
    }

    /**
     * @dev Allows owner to mint additional tokens
     * @param to Recipient address
     * @param amount Amount to mint (in wei)
     */
    function mint(address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }
}
```</span>


<span class="hljs-strong">**Deployment Script: scripts/deploy.js**</span>

<span class="hljs-code">```javascript
const hre = require("hardhat");

async function main() {
  const [deployer] = await hre.ethers.getSigners();
  
  console.log("Deploying contracts with account:", deployer.address);
  console.log("Account balance:", (await deployer.provider.getBalance(deployer.address)).toString());

  // Token parameters
  const TOKEN_NAME = "Injective Builder Token";
  const TOKEN_SYMBOL = "IBT";
  const TOKEN_DECIMALS = 18;
  const INITIAL_SUPPLY = 1_000_000; // 1 million tokens

  console.log("\n📦 Deploying InjectiveToken...");
  
  const InjectiveToken = await hre.ethers.getContractFactory("InjectiveToken");
  const token = await InjectiveToken.deploy(
    TOKEN_NAME,
    TOKEN_SYMBOL,
    TOKEN_DECIMALS,
    INITIAL_SUPPLY
  );

  await token.waitForDeployment();
  const tokenAddress = await token.getAddress();

  console.log("\n✅ InjectiveToken deployed successfully!");
  console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
  console.log("Contract Address:", tokenAddress);
  console.log("Token Name:", TOKEN_NAME);
  console.log("Token Symbol:", TOKEN_SYMBOL);
  console.log("Total Supply:", INITIAL_SUPPLY.toLocaleString(), TOKEN_SYMBOL);
  console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
  
  console.log("\n🔍 View on Explorer:");
  console.log(`https://testnet.explorer.inevm.com/address/${tokenAddress}`);

  // Return deployment info for verification
  return {
    address: tokenAddress,
    constructorArgs: [TOKEN_NAME, TOKEN_SYMBOL, TOKEN_DECIMALS, INITIAL_SUPPLY],
  };
}

main()
  .then(() =&gt; process.exit(0))
  .catch((error) =&gt; {
    console.error(error);
    process.exit(1);
  });
```</span>


<span class="hljs-strong">**Deploy to Injective Testnet**</span>

<span class="hljs-strong">**1. Get Testnet INJ**</span>

Fund your wallet with testnet INJ from the [<span class="hljs-string">Injective Faucet</span>](<span class="hljs-link">https://testnet.faucet.injective.network/</span>).

<span class="hljs-strong">**2. Compile**</span>

<span class="hljs-code">```bash
npx hardhat compile
```</span>

<span class="hljs-strong">**3. Deploy**</span>

<span class="hljs-code">```bash
npx hardhat run scripts/deploy.js --network injectiveTestnet
```</span>

Expected output:
<span class="hljs-code">```
Deploying contracts with account: 0xYourAddress
Account balance: 1000000000000000000

📦 Deploying InjectiveToken...

✅ InjectiveToken deployed successfully!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Contract Address: 0xDeployedContractAddress
Token Name: Injective Builder Token
Token Symbol: IBT
Total Supply: 1,000,000 IBT
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🔍 View on Explorer:
https://testnet.explorer.inevm.com/address/0xDeployedContractAddress
```</span>


<span class="hljs-strong">**Contract Verification**</span>

Verify your contract on the Injective Explorer:

<span class="hljs-code">```bash
npx hardhat verify --network injectiveTestnet \
  DEPLOYED_CONTRACT_ADDRESS \
  "Injective Builder Token" \
  "IBT" \
  18 \
  1000000
```</span>

Replace <span class="hljs-code">`DEPLOYED_CONTRACT_ADDRESS`</span> with your actual contract address.

<span class="hljs-strong">**Manual Verification (Alternative)**</span>

If automated verification fails:

<span class="hljs-bullet">1.</span> Go to [<span class="hljs-string">Injective Testnet Explorer</span>](<span class="hljs-link">https://testnet.explorer.inevm.com</span>)
<span class="hljs-bullet">2.</span> Search for your contract address
<span class="hljs-bullet">3.</span> Click "Verify &amp; Publish"
<span class="hljs-bullet">4.</span> Select:
<span class="hljs-bullet">   -</span> Compiler: <span class="hljs-code">`0.8.20`</span>
<span class="hljs-bullet">   -</span> Optimization: <span class="hljs-code">`Yes (200 runs)`</span>
<span class="hljs-bullet">   -</span> License: <span class="hljs-code">`MIT`</span>
<span class="hljs-bullet">5.</span> Flatten your contract:
   <span class="hljs-code">```bash
   npx hardhat flatten contracts/InjectiveToken.sol &gt; Flattened.sol
   ```</span>
<span class="hljs-bullet">6.</span> Paste the flattened code and submit


<span class="hljs-strong">**Testing Your Token**</span>

Create <span class="hljs-code">`test/InjectiveToken.test.js`</span>:

<span class="hljs-code">```javascript
const { expect } = require("chai");
const { ethers } = require("hardhat");

describe("InjectiveToken", function () {
  let token;
  let owner;
  let addr1;
  
  const NAME = "Injective Builder Token";
  const SYMBOL = "IBT";
  const DECIMALS = 18;
  const INITIAL_SUPPLY = 1_000_000;

  beforeEach(async function () {
    [owner, addr1] = await ethers.getSigners();
    const InjectiveToken = await ethers.getContractFactory("InjectiveToken");
    token = await InjectiveToken.deploy(NAME, SYMBOL, DECIMALS, INITIAL_SUPPLY);
  });

  it("Should have correct name and symbol", async function () {
    expect(await token.name()).to.equal(NAME);
    expect(await token.symbol()).to.equal(SYMBOL);
  });

  it("Should mint initial supply to deployer", async function () {
    const expectedSupply = ethers.parseUnits(INITIAL_SUPPLY.toString(), DECIMALS);
    expect(await token.totalSupply()).to.equal(expectedSupply);
    expect(await token.balanceOf(owner.address)).to.equal(expectedSupply);
  });

  it("Should allow owner to mint", async function () {
    const mintAmount = ethers.parseUnits("1000", DECIMALS);
    await token.mint(addr1.address, mintAmount);
    expect(await token.balanceOf(addr1.address)).to.equal(mintAmount);
  });

  it("Should allow burning", async function () {
    const burnAmount = ethers.parseUnits("1000", DECIMALS);
    await token.burn(burnAmount);
    const expectedBalance = ethers.parseUnits((INITIAL_SUPPLY - 1000).toString(), DECIMALS);
    expect(await token.balanceOf(owner.address)).to.equal(expectedBalance);
  });
});
```</span>

Run tests:
<span class="hljs-code">```bash
npx hardhat test
```</span>


<span class="hljs-strong">**Quick Reference**</span>

| Network | Chain ID | RPC URL | Explorer |
|---------|----------|---------|----------|
| Testnet | 2424 | https://testnet.rpc.inevm.com | https://testnet.explorer.inevm.com |
| Mainnet | 2525 | https://mainnet.rpc.inevm.com | https://explorer.inevm.com |


<span class="hljs-strong">**What's Next?**</span>

You just deployed on <span class="hljs-strong">**the fastest EVM chain**</span>. Here's what you can build next:

<span class="hljs-bullet">-</span> 🔄 <span class="hljs-strong">**DEX Integration**</span>: List your token on Injective DEXs
<span class="hljs-bullet">-</span> 🌉 <span class="hljs-strong">**Cross-chain Bridges**</span>: Connect to Ethereum, Cosmos, Solana
<span class="hljs-bullet">-</span> 📊 <span class="hljs-strong">**DeFi Protocols**</span>: Build lending, staking, or yield protocols
<span class="hljs-bullet">-</span> 🎮 <span class="hljs-strong">**Gaming/NFTs**</span>: Leverage instant finality for gaming assets


<span class="hljs-strong">**Resources**</span>

<span class="hljs-bullet">-</span> [<span class="hljs-string">Injective inEVM Docs</span>](<span class="hljs-link">https://docs.injective.network/develop/guides/inEVM/</span>)
<span class="hljs-bullet">-</span> [<span class="hljs-string">Hardhat Documentation</span>](<span class="hljs-link">https://hardhat.org/docs</span>)
<span class="hljs-bullet">-</span> [<span class="hljs-string">OpenZeppelin Contracts</span>](<span class="hljs-link">https://docs.openzeppelin.com/contracts</span>)
<span class="hljs-bullet">-</span> [<span class="hljs-string">Injective Discord</span>](<span class="hljs-link">https://discord.gg/injective</span>)


<span class="hljs-strong">**Built with 🥷 for the Injective ecosystem.**</span>
</code></pre><br>]]></content:encoded>
            <author>kaptan_web3@newsletter.paragraph.com (Injective)</author>
            <category>injective</category>
            <category>solidity</category>
            <category>defi</category>
            <category>web3</category>
            <category>ethereum</category>
            <enclosure url="https://img.paragraph.com/cdn-cgi/image/format=auto/https://storage.googleapis.com/papyrus_images/5d58db6d6820850829b084dbf83e682cd26b797a1c2bf3bfec8307e8a6ca6e7c.jpg" length="0" type="image/jpg"/>
        </item>
    </channel>
</rss>