0x0000000000000000000000000000000000000065に存在するシステムスマートコントラクトです。Solidity開発者に、Injectiveチェーンのexchangeモジュールと直接インタラクションするためのgas効率が良くネイティブな手段を提供します。このprecompileを活用することで、スマートコントラクトは以下のようなexchange関連のアクションをシームレスに実行できます:
- サブアカウントへの資金の入金と引き出し。
- スポットおよびデリバティブ注文の作成またはキャンセル。
- サブアカウント残高とオープンポジションのクエリ。
- 他のアカウントまたはコントラクトへの認可グラントの管理。
Precompileの呼び出し:直接アクセス vs. プロキシアクセス
Exchange Precompileとのインタラクションには、2つの主要なアプローチがあります: 1. 直接アクセス(自己呼び出しコントラクト) このモードでは、スマートコントラクトが自身の代わりにprecompileとインタラクションします。コントラクト自体が、自身の資金を使用してexchangeモジュールでの操作を実行し、自身のポジションを管理するアクターです。 例:grantee)がユーザー(userAddress、granter)によって指定されたアクションを実行する明示的な認可を受ける必要があります。この認可は、precompileが提供するapproveおよびrevokeメソッドを使用して管理されます。ユーザーの資金のセキュリティを確保するために、これらの認可を慎重に扱うことが重要です。
コントラクトに代わりに特定のアクションを実行する権限を付与するには:
grantee: 認可されるコントラクトのアドレス。msgTypes:granteeが実行を許可されるメッセージタイプの配列(例:MsgCreateDerivativeLimitOrder、MsgDeposit)。完全なリストはExchangeTypes.solまたはInjective Protocolのprotobuf定義を参照してください。spendLimit:granteeがメッセージタイプごとまたはグラント全体で使用できる指定トークンの最大量を定義するCosmos.Coin構造体の配列。duration: 認可が有効な期間(秒単位)。
例:直接メソッド
以下のExchangeDemoコントラクトは、スマートコントラクトが直接アクセスメソッドを使用する方法を示しています。資金の入金、資金の引き出し、デリバティブ指値注文の作成、サブアカウントポジションのクエリなどの基本的なexchangeアクションを、すべて自身のサブアカウントと資金を使用して実行します。
Exchange.solおよびExchangeTypes.solファイルには、precompileとインタラクションするために必要なインターフェース定義とデータ構造が含まれています。これらは通常、公式のInjective Solidityコントラクトリポジトリで利用可能であるか、プロジェクトの依存関係として含めることができます。
ビルドを開始する
このExchangeDemoスマートコントラクトのビルド、デプロイ、インタラクション方法(サブアカウントのセットアップと資金供給を含む)の詳細な手順については、solidity-contractsリポジトリの包括的なデモを参照してください。
まとめ
Exchange Precompileは、洗練されたプロトコル統合型のトレーディングロジックをInjective上のスマートコントラクトに直接組み込むことを可能にする強力なツールです。コントラクトが自身のポートフォリオを管理する場合でも、(approveとrevokeによるプロキシパターンを使用して)他のユーザーのための多機能なトレーディングインターフェースとして機能する場合でも、このprecompileはSolidityを使用してコアexchangeモジュールとインタラクションするための、クリーンで安全かつ効率的な方法を提供します。
自己完結型のコントラクトロジックには直接呼び出しを優先し、より広いInjectiveエコシステム向けの再利用可能なコントラクトインターフェースを構築する際には、堅牢な認可を備えたプロキシパターンを慎重に実装してください。
\