Ethereum の新しいトランザクション タイプについて 1 つの記事で学びましょう
この記事の由来はMycryptoこの記事の由来は

、原著者:Maarten Zuidhoorn、Odaily翻訳者のKatie Kuによって編集されました。
イーサリアムには、アドレスへの ETH の送信、コントラクトの展開など、さまざまな種類のトランザクションがあります。ベルリンのネットワークがアップグレードされる前、イーサリアムには 4 つの異なるトランザクション タイプがありました。
受信アドレス、データフィールドなどを使用した定期的なトランザクション。
宛先アドレスのないコントラクト展開トランザクションの場合、データ フィールドはコントラクト コードに使用されます。
v-value 署名方式を使用するトランザクションですが、チェーン ID (EIP-155 以前) は含まれません。
v-value 署名を持つトランザクションですが、チェーン ID が含まれます。
さまざまな Ethereum クライアント、ライブラリ、その他のツールが各トランザクションを分析し、各トランザクション タイプを理解します。トランザクションの種類は 4 つしかありませんが、対処しなければならない複雑な状況や状況が数多くあります。技術者はトランザクション内のすべてのフィールドをチェックして、トランザクションの種類を把握する必要があります。これは、メタ トランザクションやマルチシグ トランザクションなどの EIP-2718 以前のトランザクション タイプなど、新しいタイプのトランザクションにとって重要です。
この記事では、ベルリンのアップグレードに含まれるいくつかの標準と、将来含まれる可能性のあるその他の標準について詳しく説明します。
副題
標準トランザクションエンベロープ
RLP([nonce, gasPrice, gasLimit, to, value, data, v, r, s])
イーサリアムにはトランザクション形式があります。各トランザクションには、ノンス、ガス価格、ガス制限、宛先アドレス、値、データ、v、r、および s が含まれます。これらのフィールドは次のように RLP エンコードされます。
TransactionType || TransactionPayload
EIP-2718 は、型付きトランザクションの新しい広範なエンベロープを定義します。新しい標準では、トランザクションは次のようになります。
ここで、フィールドは次のように定義されます。
トランザクション タイプ: 0 から 0x7f までの数値。合計 128 個の可能なトランザクション タイプがあります。
トランザクション ペイロード: トランザクション タイプによって定義された任意のバイト配列。
これらのフィールドは連結および結合されて、型付きトランザクションを形成します。この標準では、トランザクション ペイロードの形式については説明されていません。新しいトランザクション タイプ (RLP、SSZ など) によって定義されたエンコーダによってエンコードされた、任意の一連のバイトにすることができます。単純なバイト連結が選択されたのは、バイト配列の最初のバイトの読み取りにライブラリやツールが必要ないためです。トランザクション タイプをチェックするために RLP または SSZ パーサーは必要ありません。
複雑さが増す好例は、トランザクションでチェーン ID を使用することによる応答保護を導入する EIP-155 です。トランザクション パラメーターに新しいフィールドを追加すると、下位互換性が失われるため、チェーン ID はトランザクション署名 (v) の回復パラメーター (v) にエンコードされます。 EIP-2718 を使用すると、新しいトランザクション タイプを作成するだけで下位互換性を維持できます。
副題
下位互換性とRawトランザクション
EIP-2718 の大きなテーマは下位互換性です。 EIP-2718 は完全な下位互換性モードにあります。つまり、既存のツール、ライブラリ、(ハードウェア) ウォレット、トランザクションは EIP-2718 を使用できますが、EIP-2718 と標準によって提供される新しい「機能」は使用できません。 。古いトランザクション形式 (現在は raw トランザクションと呼ばれています) は、イーサリアム ネットワーク上の新しいトランザクションに対して引き続き有効です。
新しいトランザクション タイプの最大数 0x7f は、これらの古いトランザクションとの下位互換性を維持するために選択されました。 RLP エンコードされたトランザクションは常に l のバイトで始まり、パラメーターは 0xc0 以上であるため、型付きトランザクションが古いトランザクションと衝突することはなく、最初のバイトと古いトランザクションをチェックするだけで型付きトランザクションを区別できます。
EIP-2718 自体はトランザクション タイプを定義していませんが、新しい標準に対していくつかの提案があります。
EIP-1559: ETH1.0 チェーン市場手数料の変更。
EIP-2711: スポンサーシップ、有効期限、バッチ トランザクションも開発者の Micah Zoltu によって作成されました。これが EIP-2718 が作成された理由です。
これらの基準の一部については、以下でさらに詳しく説明します。
副題
新しいトランザクションタイプが必要なのはなぜですか?
EIP-2711 は、(前のセクションで説明したように) プリミティブ タイプのトランザクションとの下位互換性を維持しながら、この機能をイーサリアム ネットワークにネイティブに追加します。実行するためにスマート コントラクトや専用ノードは必要ありません。ただし、現時点では EIP-2711 はまだドラフトであり、この EIP がすぐにイーサリアム ネットワークに参加するかどうかは不明です。また、複数の小さな EIP (EIP-3074 など) に分割される場合もあります。
副題
EIP-1559 の新しいトランザクション形式
0x02 || RLP([chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gasLimit, to, value, data, accessList, signatureYParity, signatureR, signatureS])
EIP-1559 では、ガスの仕組みが大きく変わりました。採掘者に全額のガスを支払う代わりに、ガスの一部が燃焼されます。 EIP-1559 のすべての変更点については詳しく説明しませんが、新しいトランザクション形式が指定されています。
最も注目すべき変更は次のとおりです。
ガス価格は「ガスごとの最優先料金」と「ガスごとの最大料金」に置き換えられました。
チェーン ID は、署名 v 値に含まれるのではなく、個別にエンコードされます。これは本質的に、EIP-155 をより単純な実装に置き換えます。
署名 v 値は、楕円曲線上のどの点を使用するかに応じて、0 または 1 の単純なパリティ ビット (「署名 Y パリティ」) になりました。
EIP-1559 はガス料金の仕組みに大幅な変更を加えているため、生のトランザクションとは直接互換性がありません。下位互換性を維持するために、EIP-1559 では、生のトランザクションを EIP-1559 互換のトランザクションにアップグレードする方法が説明されています。これは、生ガス価格を最優先料金として使用し、ガスあたりの最高ガス料金を使用して行われます。
副題
生のメタトランザクションとバッチトランザクション
メタトランザクションは数年前から存在していますが、これまでは依然としてスマート コントラクトが必要でした。期限切れのトランザクションと同様に、これには ETH をスマート コントラクトに送信する必要があり、スマート コントラクトは特にメタ トランザクションをサポートする必要があります。
0x02 || RLP([...SenderPayload, ...SenderSignature, ...GasPayerPayload, ...GasPayerSignature])
EIP-2711 により、スマート コントラクトを必要とせずに、ネイティブ メタ トランザクション (スポンサー付きトランザクションと呼ばれる) とバッチ トランザクションが可能になります。新しいトランザクション形式はトランザクション タイプ 0x02 で定義されます (ただし、EIP-1559 は同じトランザクション タイプを使用するため、これは変更される可能性があります)。取引は次のとおりです。
[1, ChildTransaction[], nonce, ChainId, ValidUntil, gasLimit, gasPrice]
基本的に、EIP-2711 には (オプションの) ペイロードとガス支払者の署名が含まれています。このアカウントは、トランザクションのガス料金の支払いに使用されます。たとえば、ERC-20 トークンは、ETH を保持しないアドレスから送信できます。送信者のペイロード、署名などは、トランザクションのサブタイプに基づいて定義されます。たとえば、トランザクション タイプ 1 のトランザクションの場合、送信者のペイロードは次のように定義されます。
副題
要約する
要約する
型付きトランザクションは、イーサリアム ネットワークに多くの可能性をもたらします。これらは、イーサリアム クライアント、ライブラリ、その他の利用可能なツールをあまり複雑にすることなく作成できます。


