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

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 precompileに基づくERC-20実装の一連のコントラクト、precompileインターフェース、抽象コントラクトがInjectiveのSolidity Contractsリポジトリで利用可能です。主要なコントラクトは以下の通りです: これらの実装はOpenZeppelinのERC20コントラクトに基づいています。開発者はBank precompileを利用したカスタムERC20コントラクトを自由に作成できます。

始めるためのデモ

Bank、Exchange、Staking precompileを使用したコントラクトの構築方法を示すデモを用意しました。これらの例では、最も一般的なEthereum開発フレームワークであるFoundryを使用してInjective EVMとインタラクションする方法も示しています。 Foundryのcastツールを活用することで、ターミナルから直接コントラクトをデプロイし、Injectiveチェーンとインタラクションできます。これにより、ビルダーはInjectiveのネイティブモジュールを活用したパワフルなアプリケーションを素早く実験、テスト、デプロイできます。 以下のデモで確認できること:
  • トークン管理、トレーディング、stakingのためにprecompileを呼び出すSolidityコントラクトの書き方。
  • Foundryスクリプトとcastコマンドを使用して、Injective EVMでこれらのコントラクトをデプロイし、インタラクションする方法。
  • EVMロジックとInjectiveのネイティブ機能をブリッジするためのベストプラクティス。
Injective Solidity Contractsリポジトリをクローンし、各デモディレクトリのステップバイステップガイドに従って開発を開始してください。

Precompileアドレス

名前用途EVMアドレス
Bankトークン管理0x64
Exchangeオンチェーンオーダーブック0x65
Stakingネイティブstakingトークンのオンチェーン管理0x66

non-contract addressエラー

Foundryを使用して、Injective MainnetまたはInjective Testnetをローカルに「fork」し、 その環境でスマートコントラクトを実行すると、 以下のようなエラーが表示される場合があります:
[Revert] call to non-contract address 0x0000000000000000000000000000000000000064
これは、FoundryがInjectiveを実際に実行するのではなく、ローカルでシミュレーションしているために発生します。 そのため、Injective固有のEVMシミュレーションではなく、汎用的なEVMシミュレーションを実行しています。 違いは、Injectiveのネイティブ機能が存在しないため、precompileを認識できないことにあります。 修正は簡単です: Injectiveのprecompileを含むようにパッチされたFoundryバージョンを使用してください: github.com/InjectiveLabs/foundry/releases これらにはx86_64 LinuxおよびmacOS ARM64用のプリビルドバイナリが含まれています。