メインコンテンツへスキップ

Bank Precompile

Bank Precompileは、固定アドレス0x0000000000000000000000000000000000000064に存在するシステムスマートコントラクトです。 EVM開発者に、Injectiveのbankモジュールx/bank)と直接インタラクションするためのgas効率が良くネイティブな手段を提供します。これにより、ERC-20トークンを効果的にオンチェーンに導入できます。Bank precompileを使用するERC-20コントラクトは、オンチェーンでerc20:0x... denomとして表現されます。技術的には、トークンはオンチェーンにのみ存在し、EVMはチェーン状態へのビューを提供するだけで、別のコピーを維持しません。2つのトークンバージョンの切り替えにユーザーアクションが必要な従来のブリッジとは異なり、Bank precompileはオンチェーンのbank denomまたはERC-20 transfer()メソッドのいずれかを使用した転送に対してリアルタイムのデュアル環境反映を提供します。 Bank precompileに基づくERC-20実装の一連のコントラクト、precompileインターフェース、抽象コントラクトがInjectiveのSolidity Contractsリポジトリで利用可能です。主要なコントラクトは以下の通りです:
  • Bank.sol – precompileインターフェース
  • BankERC20.sol – Bank precompileに基づく抽象ERC20実装
  • FixedSupplyBankERC20.sol – 固定サプライの分散型ERC20(オーナーなし、mintおよびburnなし)
  • MintBurnBankERC20.sol – オーナーがmintとburnを許可されたERC20
これらの実装はOpenZeppelinのERC20コントラクトに基づいています。開発者はBank precompileを利用したカスタムERC20コントラクトを自由に作成できます。

ERC20コントラクトのデプロイ

ℹ️ 注意: denom spamを防止するため、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)は、 MultiVM Token Standard (MTS)を実装するためにBank EVM precompileを利用しています。

ビルドを開始する

Bank、Exchange、Staking precompileを使用したコントラクトの構築方法を示すデモを用意しました。これらの例では、最も一般的なEthereum開発フレームワークであるFoundryを使用してInjective EVMとインタラクションする方法も示しています。 Bank precompileのデモはこちらから、対応するREADMEに従ってください。