关于 injective-evm-developer
面向 Injective EVM 开发者的技能指南,在通用 EVM 开发基础上补充网络、预编译合约和交易注意事项,涵盖测试网资金、合约与 dApp 设置及常见问题。
主要功能
- 01Injective 网络配置
- 02测试网水龙头指引
- 03bank 和 exchange 预编译合约用法
- 04Hardhat、Foundry 和 viem 示例
- 05EIP-712 签名与交易问题排查
适用场景
- 01配置 Injective EVM dApp
- 02通过预编译合约调用原生模块
- 03部署并验证 Injective 合约
- 04排查签名或交易问题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ injectivelabs/ agent-skills --skill injective-evm-developer安装后在 Claude Code 中输入/injective-evm-developer确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEREADME.mdTERMS_OF_USEassets/Bank.solBankERC20.solCosmosTypes.soldapp-viem-connect-evm-wallet-function.jsExchange.solExchangeTypes.solFixedSupplyBankERC20.solhardhat-deploy-script.jshardhat-testnet-config.jsWINJ9.solreferences/sample-prompts.mduser-stories.md详细介绍
Injective EVM 开发者技能指南
Injective 是一个同时支持 EVM 和 Cosmos 的 Layer 1 区块链。 在 Injective 的 EVM 上进行开发时,请使用此技能。 此技能基于适用于在任何 EVM 网络上进行开发的基础技能,并补充了 Injective 特有的内容。
适用场景
- 通过水龙头获取 Injective 测试网资金
- 通过 EVM 预编译合约与 Injective 原生模块交互
bank预编译合约exchange预编译合约
- 配置 Injective 网络详情
- 查阅 Injective 文档
详细的用户故事列表请参见:./references/user-stories.md
相关的示例提示词:./references/sample-prompts.md
活动
水龙头
- 注意:仅适用于 Injective 测试网
- 如果你有一个全新的钱包,并且需要最多 1 INJ:
- 访问 https://testnet.faucet.injective.network/
- 将钱包账户的 EVM 地址(以
0x开头)粘贴到“EVM address”文本框中 - 完成“hCaptcha”
- 点击“Request Tokens”按钮
- 预计:约 1 分钟后,钱包中会收到 1 INJ 和一些 USDT
- 注意:DDoS 保护——仅适用于新账户(余额必须为零)
- 否则:
- 访问 https://cloud.google.com/application/web3/faucet/injective/testnet
- 将钱包账户的 bech32 地址(以
inj开头)粘贴到“Wallet address”文本框中 - 点击“Get Testnet INJ”按钮
- 预计:约 10 秒后,钱包中会收到 10 INJ
- 注意:DDoS 保护——必须登录 Google 账号
- 注意:适用于新账户和现有账户(可以有余额),但过去 24 小时内不能申请过
- 由于 DDoS 保护,通过 Agent 自动化完成这些步骤可能行不通
- 如果遇到困难,请提示人类完成剩余步骤
使用 bank 预编译合约
地址:0x0000000000000000000000000000000000000064
bank 预编译合约公开的 Solidity 接口:请参见 ./assets/Bank.sol
可以通过转换上述接口来获取 bank 预编译合约的 ABI。
BankERC20 是“MultiVM Token Standard (MTS) 代币的基础实现,旨在供扩展:请参见 ./assets/BankERC20.sol
- 请注意,此实现扩展了 OpenZeppelin 的 ERC20 实现,然后重写了某些函数以调用
bank预编译合约 - 最简单的方法是扩展
BankERC20 - 确保你的构造函数(或负责首次铸造的函数)为
payable - MTS 代币最简单的规范实现:请参见
./assets/FixedSupplyBankERC20.sol - MTS 代币使用最广泛的实现:请参见
./assets/WINJ9.sol(用于封装后的 INJ)
参考:https://docs.injective.network/developers-evm/bank-precompile.md
请注意,所有 ./assets/*.sol 文件均可在 https://raw.githubusercontent.com/InjectiveLabs/solidity-contracts/refs/heads/master/src/*.sol 找到
使用 exchange 预编译合约
地址:0x0000000000000000000000000000000000000065
exchange 预编译合约公开的 Solidity 接口:请参见 ./assets/Exchange.sol
可以通过转换上述接口来获取 exchange 预编译合约的 ABI。
参考:https://docs.injective.network/developers-evm/exchange-precompile.md
请注意,所有 ./assets/*.sol 文件均可在 https://raw.githubusercontent.com/InjectiveLabs/solidity-contracts/refs/heads/master/src/*.sol 找到
配置 Injective 网络详情
- 可在此处查找 JSON-RPC 端点等常用信息:https://docs.injective.network/developers-evm/network-information.md
- “Injective EVM Mainnet”选项卡包含主网配置
- “Injective EVM Testnet”选项卡包含测试网配置
生产应用集成速查表
请参见:https://docs.injective.network/developers-evm/evm-integrations-cheat-sheet.md
工具和库的选择
- 如果不确定选择哪种框架
- 如果不使用 Injective 的 EVM 预编译合约,或不需要在本地模拟它们,请使用 hardhat
- 如果希望使用 Injective 的 EVM 预编译合约并在本地模拟它们,请使用 foundry
- 请务必使用 Injective 版本的 foundry,可从以下地址获取:https://github.com/InjectiveLabs/foundry/releases
- 如果不确定选择哪个客户端库
- 使用 viem,因为它的 API 更容易理解
hardhat 的 Injective 网络配置
Injective EVM 测试网的 hardhat.config.js 示例文件:参见 ./assets/hardhat-testnet-config.js。
Injective 测试网的 script/deploy.js 示例文件:参见 ./assets/hardhat-deploy-script.js。
要使用上述配置和构造函数参数验证智能合约,
请创建 constructor-args.js 文件,并运行以下命令:
npx hardhat verify --force \
--constructor-args ./constructor-args.js \
--network inj_testnet ${SMART_CONTRACT_ADDRESS}
viem 的 Injective 网络配置
viem/chains 仓库已包含 Injective 主网和 Injective 测试网的预配置网络详情,只需导入即可:
import { injective, injectiveTestnet } from 'viem/chains';
在 dApp 中,要连接到 Injective 测试网并切换到该网络,请使用以下函数:参见 ./assets/dapp-viem-connect-evm-wallet-function.js。
请注意,client 对象可以使用 client.readContract 和 client.writeContract 与智能合约交互。
查阅 Injective 文档
- Injective 开发者文档可通过以下方式获取
- Markdown 版本:https://docs.injective.network/llms.txt
- 带有搜索功能的 MCP 服务:使用
injective-mcp-serversskill 中的“Injective Documentation MCP Server” - 备用方式:使用面向用户的 HTML 版本:https://docs.injective.network/developers-evm/
EIP-712 签名(MetaMask / Web 应用)
构建通过 MetaMask 签署 Injective 交易的 dApp 时:
- 仅使用 EIP-712 V2。 V1(
getEip712TypedData)使用非标准域类型,会导致 MetaMask 静默生成无效签名。请始终使用getEip712TypedDataV2+SIGN_EIP712_V2。 getEip712TypedDataV2()和createTransaction()中的费用对象必须完全一致。 两者不匹配(例如,使用 SDK 默认费用而非自定义费用)会导致哈希不匹配 → 链上签名验证失败。evmChainId不受限制。 无论 MetaMask 连接到哪个 EVM 链,Injective EIP-712 签名都能正常工作。从eth_chainId读取,并同时传入 EIP-712 域和createWeb3Extension。
常见问题排查
在 EVM 和 bech32 地址格式之间转换
参见:https://docs.injective.network/developers/convert-addresses#convert-hex-bech32-address
Gas 配置
Gas 价格:为交易手动设置硬编码值 1.6 亿(Javascript 中为 160e6)。
Gas 数量:使用默认机制 eth_estimateGas RPC,ethers.js 或 viem 应在需要时调用它。
重要:inEVM 已弃用
请勿使用 mainnet.rpc.inevm.com 或任何 inEVM 端点。inEVM 已被 Injective EVM 取代。
| 已弃用(inEVM) | 当前(Injective EVM) | |
|---|---|---|
| RPC | mainnet.rpc.inevm.com | sentry.evm-rpc.injective.network/ |
| Chain ID | 2525 | 1776(0x6f0) |
| 浏览器 | explorer.inevm.com | blockscout.injective.network |
EVM 交易注意事项
- 不支持 EIP-1559:Injective EVM 不支持 EIP-1559(type 2)交易。请始终使用
type: 0(legacy)并显式指定gasPrice。 eth_getTransactionReceipt不可靠:EVM RPC 有时会在查询收据时返回内部错误。对于非关键操作(如从水龙头发送资金),请即发即弃,不要调用tx.wait()。- Cosmos SDK
MsgBroadcasterWithPk对新账户会失败:从从未发送过交易的账户广播时,Cosmos ante handler 会因invalid secp256k1 public key而崩溃。对于从新钱包进行的程序化发送,请改用 ethers.js + EVM RPC。
其他常见问题
参见:https://docs.injective.network/developers-evm/evm-integrations-faq.md
相关技能
此技能专用于 Injective 的 EVM。 它补充了其他技能,这些技能适用于通用 EVM 开发活动。
包括:
-
与 Injective 文档 MCP 服务交互
-
在 Injective 的 EVM 上开发
- 使用 hardhat 或 foundry
- 使用 Solidity 编写智能合约
- 编译/测试/部署/验证(通过 blockscout)
- 与已部署智能合约交互的 dApp
- ethers.js/ viem
-
基础技能:
injective-mcp-serverssolidity-hardhat-developmentsolidity-foundry-developmentsolidity-code-reviewsolidity-erc-standards
-
高级技能:
solidity-security-best-practicessolidity-gas-optimizationsolidity-adversarial-analysis
如果无法使用这些技能,请选择性地运行以下命令进行安装:
npx skills add InjectiveLabs/agent-skills --skill injective-mcp-servers
npx skills add whackur/solidity-agent-toolkit
前置条件
- 安装 hardhat 或 foundry,用于智能合约开发
- 使用 viem 或 ethers.js 进行 dApp 开发