すべての人へ / 仕組み

トランザクションの旅路

ウォレットから Ethereum まで五つの段階で、その大半は目に見えないほど速く進みます。このページは仕組みを、確認のページは各段階が約束するものを説明します。

旅路

ウォレットで何かに署名して送信します。それは一台のコンピューター、シーケンサーに届きます。シーケンサーは失われないようにそれを書き留め、すぐに仕事をし、あなたがボタンから手を離す前に答えを知っています。一秒のうちに何度も、シーケンサーは直前に出した答えをまとめ、その束に署名して公開します。それより少し低い頻度で、それらの束を Ethereum のブロックとまったく同じ見た目のブロックに包みます。これがウォレットやエクスプローラーが見せるものです。

それから別に、そのブロックに入っていたすべてを書き留め、その一覧の指紋を Ethereum に送ります。誰でもその一覧を手に取り、自分で再生して、同じ答えになることを確かめられます。この最後の段階が、Pickle を「そう言っているだけの速いコンピューター」ではなく Ethereum の一部にしているものです。

1. 送信する。ウォレットがトランザクションに署名し、標準的な JSON-RPC を通じて、チェーンを動かす単一のプロセスであるシーケンサーに送信します。

2. 受け付けられ、耐久性を持つ。シーケンサーは署名者を復元し、トランザクションを上限付きのキューに置き、実行前にディスク上のチェックサム付きログに追記します。これにより、受領されたトランザクションはクラッシュを生き延びます。

3. すぐに実行される。単一のコーディネーターが、受け付け順にトランザクションをコミットします。レシートはどのブロックよりも先に存在します。

4. 事前確認され、その後確認される。10 ミリ秒のスケジューリング目標でその区間のトランザクションが署名付きミニブロックに封印され、250 ミリ秒のスケジューリング目標でその区間のミニブロックが、すべてのツールが理解する番号を持つ標準的な EVM ブロックに包まれます。

5. Ethereum にコミットされる。封印された各ブロックは、その完全なトランザクション一覧を運ぶペイロードを生成し、それはデータ可用性レイヤーに保存され、60 秒のスケジューリング目標ごとに一つのコミットメントが Ethereum 上のインボックス契約に投稿されます。それらから、レプリカを動かす誰もがすべてのトランザクションを再実行し、同じ状態に到達します。

RPC 層は署名者を復元し、トランザクションを送信者ごとの上限を持つ有界の受け付けキューに置きます。キューが満杯なら、メモリを際限なく増やすのではなくエラーを返します。受け付けられたすべてのトランザクションはチェックサム付きの先行書き込みログに追記され、実行前に耐久性を持たされます。fsync はバッチごとに一回です。単一の実行コーディネーターが受け付け順にコミットし、同じ送信者を並行して実行することは決してないので、メンプールの並べ替えなしにノンスの安全性が保たれます。実行は即時なので、レシートはそれを含むブロックが封印される前に存在します。

プロデューサーは 10 ミリ秒のスケジューリング目標でミニブロックを封印します。その区間のトランザクション、レシート、ログ、状態差分ハッシュ、マイクロ秒のタイムスタンプ、そしてヘッダーに対するシーケンサーの署名です。第二のプロデューサーは 250 ミリ秒のスケジューリング目標で、その区間のミニブロックを包む Cancun 形式の EVM ブロックを封印します。次のブロックのタイムスタンプは前のブロックが封印された時点で固定されるので、ブロックのタイムスタンプを読むトランザクションは、ヘッダーがコミットする値を見ます。封印された各ブロックは、完全なトランザクション一覧、ブロック範囲、親ハッシュ、ブロックハッシュ、コミットされたタイムスタンプからなる導出ペイロードをコンテンツアドレス方式のデータ可用性レイヤーへ送出し、60 秒のスケジューリング目標ごとに一つのエンベロープが L1 のインボックス契約にコミットされ、calldata が代替経路になります。

三つの段階が数値を伴い、どれも約束ではない

10 ミリ秒、250 ミリ秒、60 秒という数値はスケジューリング目標であり、シーケンサーが目指す間隔です。どれもレイテンシの保証ではなく、スループットの主張でもありません。

ライフサイクル、一歩ずつ

  1. クライアントが、標準的な JSON-RPC を通じて署名済みトランザクションを送信します。
  2. RPC 層が署名者を復元し、トランザクションを送信者ごとの上限を持つ有界の受け付けキューに置きます。キューが満杯なら、メモリを際限なく増やすのではなくエラーを返します。
  3. 単一の実行コーディネーターが、受け付け順にトランザクションをコミットします。同じ送信者が並行して実行されることは決してなく、メンプールの並べ替えなしにノンスの安全性が保たれます。
  4. 実行は即時です。レシートは、それを含む EVM ブロックが封印される前に存在します。
  5. 受け付けられたすべてのトランザクションはチェックサム付きの先行書き込みログに追記され、実行前に耐久性を持たされます。fsync はバッチごとに一回で、受領されたトランザクションはクラッシュを生き延びます。

三つの実行方法

シーケンサーはすべてのトランザクションを同じ方法で実行するわけではありません。三つの形を認識し、それぞれに最短の正しい経路を取ります。

  • 単純な ETH 送金は、仮想マシンをまったく起動せずにネイティブの経路を取ります。
  • 正規の ERC-20 送金は、残高スロットを直接移動して標準イベントを発行する高速パスを取り、完全な仮想マシンが出すのと同じ結果を生みます。
  • それ以外のすべては、Cancun ハードフォークに固定された revm である汎用 EVM を通ります。

三つとも標準的なガスを課し、手数料を同じ方法で分割するので、手数料からどの経路が取られたかを見分けることはできず、その必要もないはずです。高速パスが存在するのは、チェーンのトラフィックの大半がこの二つの最も単純な種類のトランザクションであり、時間がかかるのはそこだからです。

決定的である理由

他のチェーンが運営者に任せている二つのものが、ここではコンパイル時定数です。実行ハードフォークと最低ガス価格です。調整可能にすると、どちらもシーケンサーが受け付けたトランザクションをレプリカが拒否したり再価格付けしたりできるようになり、独立した導出は停止してしまいます。同じ理由付けが、次のブロックのタイムスタンプを前回の封印時に固定し、ミニブロックの間隔を運営者ごとの設定ではなくコンセンサスパラメータにしています。同じハッシュを再現するには、レプリカがストリームの切り方について合意していなければならないからです。

このように作られている理由

珍しい決定は、封印の前に実行することです。多くのチェーンではトランザクションは次のブロックを待ち、ブロックを組み立てる一部として実行されます。ここでは到着時に実行され、ブロックはすでに存在する結果から後で組み立てられます。それが最初の瞬間を速くしているものであり、ミニブロックがブロックとは別のものとして存在する理由です。ミニブロックは、シーケンサーがすでに計算した結果に署名を置くものであり、ふつうのブロックはその後ろで独自のリズムで届きます。各瞬間が保証するものは確認のページに、記録がどこに行き着くかは決済のページにあります。