Bank Precompile
Bank Precompile 是一个位于固定地址 0x0000000000000000000000000000000000000064 的系统智能合约。
它为 EVM 开发者提供了一种高效且原生的方式来直接与 Injective 的 bank 模块(x/bank)交互。这有效地将 ERC-20 token 带到链上。任何使用 Bank precompile 的 ERC-20 合约将在链上表示为 erc20:0x... denom。从技术上讲,这意味着 token 仅存在于链上,EVM 提供链状态的视图而不是维护单独的副本。与传统桥接不同,传统桥接需要用户操作来切换两个 token 版本,Bank precompile 为使用链上 bank denom 或 ERC-20 transfer() 方法的任何转账提供实时、双环境反映。
一系列由 Bank precompile 支持的 ERC-20 实现,以及 precompile 接口和抽象合约,可在 Injective 的 Solidity 合约仓库 中找到。关键合约包括:
- Bank.sol – precompile 接口
- BankERC20.sol – 由 Bank precompile 支持的抽象 ERC20 实现
- FixedSupplyBankERC20.sol – 固定供应量的去中心化 ERC20(无所有者,无铸造或销毁)
- MintBurnBankERC20.sol – 具有授权铸造和销毁 token 的所有者的 ERC20
这些实现基于 OpenZeppelin 的 ERC20 合约。开发者可以自由创建使用 Bank precompile 的自定义 ERC20 合约。
ERC20 合约部署
ℹ️ 注意:
为防止 denom 垃圾信息,通过 ERC20 模块部署 ERC20 合约是付费操作,需要 1 INJ 的部署费用。确保你的 ERC20 合约部署交易包含此金额,否则操作将被拒绝。
Bank Precompile 接口
interface IBankModule {
function mint(address,uint256) external payable returns (bool);
function balanceOf(address,address) external view returns (uint256);
function burn(address,uint256) external payable returns (bool);
function transfer(address,address,uint256) external payable returns (bool);
function totalSupply(address) external view returns (uint256);
function metadata(address) external view returns (string memory,string memory,uint8);
function setMetadata(string memory,string memory,uint8) external payable returns (bool);
}
Wrapped INJ (wINJ)
使用 Bank EVM precompile 来实现
MultiVM Token Standard (MTS)。
开始构建
我们准备了一些演示,展示如何使用 Bank、Exchange 和 Staking precompiles 构建合约。这些示例还演示了如何使用最常见的 Ethereum 开发框架 Foundry 与 Injective EVM 交互。
在这里查看 bank precompile 演示并按照相应的 README 操作。Last modified on April 1, 2026