All skills
injectivelabs avatar

/injective-evm-developer

@7d36d9d

Develop EVM smart contracts and dApps on Injective

Use this Skill: https://skilld.dev/gh/injectivelabs/agent-skills/injective-evm-developer

This session only. Nothing lands on disk.

SKILL.md

≈19 tokens always: the name and description. ≈2.3k when used: this file. ≈1.4k more on demand in 3 files.

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

Source: SKILL.md on GitHub

2 warnings5mo4 checks · Risk SAFE
  • Gen Agent Trust Hub5mo

    This skill provides a comprehensive development environment for building on the Injective EVM, including templates for core precompiles, Hardhat/Foundry configurations, and dApp integration examples. It facilitates access to official documentation and network information. Security findings include the recommendation of third-party toolkits and a standard surface for indirect prompt injection common to developer tools analyzing source code.

  • Socket5mo

    No alerts

  • Snyk5mo

    Risk: MEDIUM · 2 issues

  • Runlayer6mo

    4/14 files flagged

Signed by skilld at 7d36d9d. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub last month.

Steadyupdated 6 months ago
activates_on
[
  "*.sol",
  "hardhat.config.*",
  "foundry.toml",
  "*.ts",
  "*.js"
]
metadata
{
  "author": "bguiz",
  "version": "0.0.0"
}
Other metadata
uses
[
  "injective-mcp-servers",
  "solidity-hardhat-development",
  "solidity-foundry-development",
  "solidity-code-review",
  "solidity-erc-standards",
  "solidity-security-best-practices",
  "solidity-gas-optimization",
  "solidity-adversarial-analysis"
]

README badge

README badge for injectivelabs/agent-skills/injective-evm-developer