事前必読 #1: Transaction Lifecycle 事前必読 #2: Injective上のトランザクション Web3Gatewayマイクロサービスは、Injective上で発生するトランザクションのfee delegationを提供することを主な目的としたAPIをエンドユーザーに公開します。これにより、ガスはWeb3Gatewayサービスの運用者が負担するため、ユーザーはInjectiveを操作する際にガスレス環境を享受できます。 Web3Gatewayはfee delegationのサポートに加えて、開発者がMessageをEIP712 typed dataへ変換できるようにします。MessageをEIP712 dataへ変換した後、任意のEthereumネイティブウォレットで署名し、Injectiveへブロードキャストできます。Documentation Index
Fetch the complete documentation index at: https://injectivelabs-mintlify-jp-native-developers-first-half.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Fee Delegation
前述のとおり、fee delegationによりユーザーはガスを支払うことなくInjectiveを操作(トランザクションを送信)できます。Cosmos-SDKをベースとするすべてのチェーンの_Transaction Lifecycle_の一部として、AnteHandlerがあり、署名検証、ガス計算、手数料控除などを実行します。
知っておくべきいくつかの事項があります:
- トランザクションは複数の署名者を持つことができます(つまり、トランザクション内に複数の署名を含めることができます)。
- トランザクションのガス手数料は
authInfo.fee.feePayerの値から差し引かれ、feePayerに対して検証される署名は、トランザクションの署名リスト内の最初の署名です(reference)。 - 残りの署名はトランザクションの実際の送信者に対して検証されます。
privateKeyのアドレスをfeePayerとして含め、Injectiveを操作するために使用したいprivateKeyでこのトランザクションに署名し、そのトランザクションをブロードキャストする必要があります。
Web3Gateway API
誰でもWeb3Gatewayマイクロサービスを実行し、自分のユーザーにfee delegationサービスを提供できます。例えば、Injective上で取引所dAppを構築する開発者がこのマイクロサービスを実行し、ガスレスの取引環境をトレーダーに提供する、というような使用例が考えられます。 このマイクロサービスは、2つのコアメソッドを含むAPIを公開します:PrepareTx(およびPrepareCosmosTx)BroadcastTx(およびBroadcastCosmosTx)
PrepareTx
PrepareTxメソッドは、ユーザーが実行したいトランザクションに関するコンテキスト(chainId、signerAddress、timeoutHeightなど)を含むMessage(s)を受け取り、特定のメッセージのEIP712 typed data(EIP712 typed data内の署名を含む)を返します。このEIP712 typed dataを使用して任意のEthereumネイティブウォレットで署名し、Injectiveを操作したいユーザー用の署名を取得できます。
EIP712 typed dataは、PrepareTxメソッドに渡したMessageのproto定義から生成されます。
BroadcastTx
BroadcastTxメソッドはノードへトランザクションをブロードキャストする役割を担います。PrepareTx API呼び出しの完全なレスポンスとともに、EIP712 typed dataの署名を渡します。するとBroadcastTxはMessageをネイティブCosmosトランザクションへパックし、トランザクション(およびそのコンテキスト)を準備し、Injectiveへブロードキャストします。結果として、トランザクションハッシュがユーザーへ返されます。
Prepare/BroadcastCosmosTx
上記のメソッドは、Ethereumネイティブウォレットを使用してトランザクションに署名・ブロードキャストする際に、EIP712トランザクション表現に署名する場合に使用されます。 Cosmosネイティブウォレットに対してWeb3Gatewayでfee delegationをサポートしたい場合、PrepareCosmosTx呼び出しを省略(または、Web3Gateway署名者のpublicKeyが必要な場合は呼び出し)し、クライアント側でトランザクションを準備し、Cosmosウォレットで署名し、BroadcastCosmosTxメソッドを使用してブロードキャストできます。
この仕組みは、Web3Gateway署名者のpublicKeyをTxRawのauthInfoオブジェクトに追加し、その後ブロードキャストする際にAPI側でprivateKeyを使用してトランザクションに署名する、というものです。
従来のEIP712アプローチとの違いは、
Web3Gateway署名者を使用して事前にトランザクションに署名する必要がある(つまり、EIP712を生成する時点)ことです。これは、PrepareTxを使用する必要があり、クライアント側でトランザクションを生成できないことを意味します。