InjectiveにおけるPrecompileとは?
Injectiveでは、precompileはプロトコルレベルでEVM(Ethereum Virtual Machine)レイヤーに直接組み込まれた、特別な高度に最適化されたスマートコントラクトです。ユーザーがデプロイする標準的なSolidityスマートコントラクトとは異なり、precompileはチェーンのコアロジックの一部です。Solidityではなく Goで記述され、固定アドレスでEVMに公開されるため、Solidityスマートコントラクトから他のスマートコントラクトと同様に呼び出すことができます。 precompileは、Ethereumスタイルのインターフェースが付与されたInjectiveチェーンのネイティブ関数と考えてください。なぜ必要なのか?(EVMとネイティブモジュールのブリッジ)
Injective EVMはサイロ内で動作しているわけではありません。Bankモジュール(トークン管理用)、Exchangeモジュール(オンチェーンオーダーブック用)、Stakingモジュールなど、InjectiveのパワフルなネイティブCosmos SDKモジュールと深く統合されています。 Precompileは、EVMの世界(Solidityコントラクトが存在する場所)とこれらのInjectiveネイティブ機能の間の重要なブリッジとして機能します。precompileがなければ、EVMスマートコントラクトは孤立し、より広いInjectiveエコシステムの豊富な機能と流動性を活用できなくなります。 例えば、ネイティブ環境とEVM環境間で統一されたトークン残高を保証するMultiVM Token Standard (MTS)モデルは、Bank Precompileに大きく依存しています。開発者にとってのメリット
- ネイティブ機能へのアクセス: オンチェーンオーダーブック、ネイティブstaking、governance、MTSのためのbankモジュールなど、Injectiveのユニークなモジュールと直接インタラクションできます。
- パフォーマンスの向上: precompileを介して実行される操作は、複雑なネイティブロジックを純粋にSolidityで再現しようとするよりも大幅に高速でgas効率が良く、最適化されたネイティブコードとして実行されます。
- シームレスな相互運用性: EVMとInjectiveのCosmos ネイティブ機能の両方の強みを活かした、真に統合されたアプリケーションを構築できます。
- 開発の簡素化: 馴染みのあるSolidityインターフェースを通じて複雑なネイティブ機能とインタラクションし、基盤となるCosmosの複雑さの多くを抽象化します。
- Bank.sol – precompileインターフェース
- BankERC20.sol – Bank precompileに基づく抽象ERC20実装
- FixedSupplyBankERC20.sol – 固定サプライの分散型ERC20(オーナーなし、mintおよびburnなし)
- MintBurnBankERC20.sol – オーナーがmintとburnを許可されたERC20
始めるためのデモ
Bank、Exchange、Staking precompileを使用したコントラクトの構築方法を示すデモを用意しました。これらの例では、最も一般的なEthereum開発フレームワークであるFoundryを使用してInjective EVMとインタラクションする方法も示しています。 Foundryのcastツールを活用することで、ターミナルから直接コントラクトをデプロイし、Injectiveチェーンとインタラクションできます。これにより、ビルダーはInjectiveのネイティブモジュールを活用したパワフルなアプリケーションを素早く実験、テスト、デプロイできます。
以下のデモで確認できること:
- トークン管理、トレーディング、stakingのためにprecompileを呼び出すSolidityコントラクトの書き方。
- Foundryスクリプトと
castコマンドを使用して、Injective EVMでこれらのコントラクトをデプロイし、インタラクションする方法。 - EVMロジックとInjectiveのネイティブ機能をブリッジするためのベストプラクティス。
