SuperAPI AI Directory

injective-evm-developer

General & other

View repository

Updated 10-15 22:38

About this skill

Injective EVM Developer, Skill Guide

Injective is a layer 1 blockchain that is simultaneously both EVM and Cosmos. Use this skill when building on Injective's EVM. It builds on a baseline of skills that apply to developing on any EVM network, and augments that with Injective specifics.

When to apply

  • Obtain Injective Testnet funds from faucets
  • Interact with native Injective modules via EVM precompiles
    • bank precompile
    • exchange precompile
  • Configure Injective network details
  • Consult Injective documentation

See for detailed list of user stories: ./references/user-stories.md Their associated sample prompts: ./references/sample-prompts.md

Activities

Faucet

  • Note: Only for Injective Testnet
  • If you have a brand new wallet, and need up to 1 INJ:
    • Visit https://testnet.faucet.injective.network/
    • Paste the EVM address of your wallet account (starts with 0x) into the text field for "EVM address"
    • Solve the "hCaptcha"
    • Press the "Request Tokens" button
    • Expect: 1 INJ plus some USDT to arrive in your wallet after around ~ 1 minute
    • Note: DDoS protection - Only works for new accounts (cannot have any balance)
  • Otherwise:
    • Visit https://cloud.google.com/application/web3/faucet/injective/testnet
    • Paste the bech32 address of your wallet account (starts with inj) into the text field for "Wallet address"
    • Press the "Get Testnet INJ" button
    • Expect: 10 INJ to arrive in your wallet after ~ 10 seconds
    • Note: DDoS protection - You must be signed into a Google account
    • Note: Works for new and existing accounts (can have a balance) - but cannot have requested in the past 24 hours
  • These steps are unlikely to work through agent automation due to DDoS protections
    • If you get stuck, prompt your human to complete the remaining steps

Using the bank precompile

Address: 0x0000000000000000000000000000000000000064

Solidity interface exposed by the bank precompile: See ./assets/Bank.sol

The ABI for the bank precompile may be obtained by converting the interface above.

BankERC20 is a "base implementation for MultiVM Token Standard (MTS) token, which is designed to be extended: See ./assets/BankERC20.sol

  • Note that this implementation extends the ERC20 implementation from OpenZeppelin, then overrides certain functions to invoke the bank precompile
  • The easiest way is to extend BankERC20
  • Ensure that your constructor (or function responsible for 1st mint) is payable
  • The simplest canonical implementation of an MTS token: See ./assets/FixedSupplyBankERC20.sol
  • The most heavily used implementation of an MTS token: See ./assets/WINJ9.sol (used in wrapped INJ)

Reference: https://docs.injective.network/developers-evm/bank-precompile.md

Note that all ./assets/*.sol files can be found in https://raw.githubusercontent.com/InjectiveLabs/solidity-contracts/refs/heads/master/src/*.sol

Using the exchange precompile

Address: 0x0000000000000000000000000000000000000065

Solidity interface exposed by the exchange precompile: See ./assets/Exchange.sol

The ABI for the exchange precompile may be obtained by converting the interface above.

Reference: https://docs.injective.network/developers-evm/exchange-precompile.md

Note that all ./assets/*.sol files can be found in https://raw.githubusercontent.com/InjectiveLabs/solidity-contracts/refs/heads/master/src/*.sol

Configure Injective network details

Production application integrations cheat sheet

See: https://docs.injective.network/developers-evm/evm-integrations-cheat-sheet.md

Tool and library choices

  • If undecided on framework
    • Use hardhat if you are not using Injective's EVM precompiles, or do not need to emulate them locally
    • Use foundry if you wish to work with Injective's EVM precompiles and emulate them locally
  • If undecided on client library
    • Use viem, as its API is easier to understand

Injective network for hardhat

Sample hardhat.config.js file for Injective EVM testnet: See ./assets/hardhat-testnet-config.js.

Sample script/deploy.js file for Injective Testnet. See ./assets/hardhat-deploy-script.js.

To verify a smart contract with the above configuration and constructor args, create a constructor-args.js file, run the following command:

npx hardhat verify --force \
  --constructor-args ./constructor-args.js \
  --network inj_testnet ${SMART_CONTRACT_ADDRESS}

Injective network for viem

The viem/chains repo already contains pre-configured network details for both Injective Mainnet and Injective Testnet, you simply need to import them:

import { injective, injectiveTestnet } from 'viem/chains';

Within a dApp, to connect to Injective Testnet, and switch to the network, use the following function: See ./assets/dapp-viem-connect-evm-wallet-function.js.

Note that the client object will be able to use both client.readContract and client.writeContract to interact with smart contracts.

Consult Injective documentation

EIP-712 Signing (MetaMask / Web Apps)

When building dApps that sign Injective transactions via MetaMask:

  • Use EIP-712 V2 only. V1 (getEip712TypedData) uses non-standard domain types that cause MetaMask to silently produce invalid signatures. Always use getEip712TypedDataV2 + SIGN_EIP712_V2.
  • Fee objects must be identical in both getEip712TypedDataV2() and createTransaction(). A mismatch (e.g., SDK default vs custom fee) causes hash mismatch → signature verification failure on-chain.
  • evmChainId is flexible. Injective EIP-712 signing works regardless of which EVM chain MetaMask is connected to. Read from eth_chainId and pass to both the EIP-712 domain and createWeb3Extension.

Troubleshooting common issues

Convert between EVM and bech32 formats for addresses

See: https://docs.injective.network/developers/convert-addresses#convert-hex-bech32-address

Gas configuration

For gas price: Manually set a hardcoded value of 160 million (160e6 in Javascript) for transactions.

For gas amount, use the default mechanism: The eth_estimateGas RPC, which should be invoked when needed by ethers.js or viem.

Critical: inEVM is DEPRECATED

Do NOT use mainnet.rpc.inevm.com or any inEVM endpoints. inEVM has been replaced by Injective EVM.

Deprecated (inEVM) Current (Injective EVM)
RPC mainnet.rpc.inevm.com sentry.evm-rpc.injective.network/
Chain ID 2525 1776 (0x6f0)
Explorer explorer.inevm.com blockscout.injective.network

EVM Transaction Quirks

  • No EIP-1559: Injective EVM does not support EIP-1559 (type 2) transactions. Always use type: 0 (legacy) with explicit gasPrice.
  • eth_getTransactionReceipt unreliable: The EVM RPC sometimes returns internal errors on receipt queries. For non-critical operations (like faucet sends), fire-and-forget — don't call tx.wait().
  • Cosmos SDK MsgBroadcasterWithPk fails for fresh accounts: The Cosmos ante handler panics with invalid secp256k1 public key when broadcasting from an account that has never sent a transaction. Use ethers.js + EVM RPC instead for programmatic sends from fresh wallets.

All other FAQs

See: https://docs.injective.network/developers-evm/evm-integrations-faq.md

Related skills

This skill is specific to Injective's EVM. It augments other skills that should be used for general EVM developer activities.

These include:

  • Interacting with Injective's documentation MCP server

  • Developing on Injective's EVM

    • Using hardhat or foundry
    • Smart contracts using Solidity
      • compile/ test/ deploy/ verify (via blockscout)
    • dApps that interact with deployed smart contracts
      • ethers.js/ viem
  • Basic skills:

    • injective-mcp-servers
    • solidity-hardhat-development
    • solidity-foundry-development
    • solidity-code-review
    • solidity-erc-standards
  • Advanced skills:

    • solidity-security-best-practices
    • solidity-gas-optimization
    • solidity-adversarial-analysis

If these skills are not available, selectively run the following commands to install them:

npx skills add InjectiveLabs/agent-skills --skill injective-mcp-servers
npx skills add whackur/solidity-agent-toolkit

Prerequisites

  • Either hardhat or foundry installed for smart contract development
  • Either viem or ethers.js for dApp development