Aptosブロックチェーン詳細解説
Aptosトランザクションのライフサイクル(運用の観点から)をより深く理解するために、Aptosフルノードに送信されてからAptosブロックチェーンにコミットされるまでのトランザクションの旅路を辿ります。その後、Aptosノードの論理コンポーネントに焦点を当て、トランザクションがこれらのコンポーネントとどのように相互作用するかを見ていきます。
トランザクションの一生
Section titled “トランザクションの一生”- AliceとBobは、それぞれAptosブロックチェーン上にアカウントを持つ2人のユーザーです。
- Aliceのアカウントには110 Aptos Coinがあります。
- AliceはBobに10 Aptos Coinを送信しています。
- Aliceのアカウントの現在のシーケンス番号は5です(これは、Aliceのアカウントから既に5つのトランザクションが送信されたことを示しています)。
- ネットワーク上には合計100のバリデーターノード — V1からV100があります。
- AptosクライアントがAliceのトランザクションをAptosフルノードのRESTサービスに送信します。フルノードはこのトランザクションをバリデーターフルノードに転送し、それがバリデーターV1に転送します。
- バリデーターV1は現在のラウンドの提案者/リーダーです。
このセクションでは、クライアントがトランザクションT5を送信してからAptosブロックチェーンにコミットされるまでのライフサイクルを説明します。
関連するステップについては、バリデーターノードの対応するコンポーネント間相互作用へのリンクを含めています。トランザクションのライフサイクルのすべてのステップに慣れた後、各ステップの対応するコンポーネント間相互作用の情報を参照することをお勧めします。
graph LR subgraph Fullnodes direction TB REST_Service[REST Service] end
Client(Client) -->|1| REST_Service
subgraph Other_Validators[Other Validators] direction TB end
subgraph Validators direction TB Mempool[3\nMempool] Consensus[Consensus] Consensus -->|7, 9| Execution Execution -->|11| Storage Execution -->|8| Virtual_Machine(Virtual Machine) Mempool --> Virtual_Machine Virtual_Machine --> Storage end
Other_Validators <-->|6, 10| Consensus REST_Service -->|2| Mempool Mempool <-->|4| Other_Validators(Other Validators) Consensus -->|5| Mempool
トランザクションのライフサイクルには5つの段階があります:
- 受信: トランザクションの受信
- 共有: 他のバリデーターノードとのトランザクション共有
- 提案: ブロックの提案
- 実行とコンセンサス: ブロックの実行とコンセンサス達成
- コミット: ブロックのコミット
以下では、各段階で何が起こるかを、対応するAptosノードコンポーネント相互作用へのリンクと共に説明しています。
クライアントがトランザクションを送信
Section titled “クライアントがトランザクションを送信”Aptosクライアントが生のトランザクション(Traw5と呼びましょう)を構築し、AliceのアカウントからBobのアカウントに10 Aptos Coinを転送します。AptosクライアントはAliceの秘密鍵でトランザクションに署名します。署名されたトランザクションT5には以下が含まれます:
- 生のトランザクション
- Aliceの公開鍵
- Aliceの署名
生のトランザクションには以下のフィールドが含まれます:
フィールド | 説明 |
---|---|
アカウントアドレス | Aliceのアカウントアドレス |
ペイロード | Aliceの代わりに実行するアクションまたは一連のアクションを示します。これがMove関数の場合、チェーン上のMoveバイトコードに直接呼び出します。あるいは、Moveバイトコードのピアツーピアトランザクションスクリプトの場合もあります。また、関数またはスクリプトへの入力のリストも含まれます。この例では、AliceのアカウントからBobのアカウントにAptos Coinの金額を転送する関数呼び出しで、Aliceのアカウントはトランザクション送信により暗示され、Bobのアカウントと金額がトランザクション入力として指定されます。 |
ガス単価 | 送信者がトランザクションを実行するためにガス単位あたりに支払う意志のある金額。これはOctasで表されます。 |
最大ガス量 | AliceがこのトランザクションのためにAPTで支払う意志のある最大ガス量。ガス料金は、計算とIOによってカバーされる基本ガスコストにガス価格を掛けたものと等しくなります。ガスコストには、APT固定価格ストレージモデルによるストレージも含まれます。これはOctasで表されます。 |
有効期限 | トランザクションの有効期限。 |
シーケンス番号 | アカウントのシーケンス番号(この例では5)は、そのアカウントから送信されてオンチェーンでコミットされたトランザクションの数を示します。この場合、Traw5を含めてAliceのアカウントから5つのトランザクションが送信されています。注意:シーケンス番号5のトランザクションは、アカウントのシーケンス番号が5の場合のみオンチェーンでコミットできます。 |
チェーンID | Aptosネットワークを区別する識別子(クロスネットワーク攻撃を防ぐため)。 |
トランザクションの受信
Section titled “トランザクションの受信”説明 | Aptosノードコンポーネント相互作用 |
---|---|
1. クライアント → RESTサービス: クライアントがトランザクションT5をAptosフルノードのRESTサービスに送信します。フルノードはRESTサービスを使用してトランザクションを自身のメンプールに転送し、メンプールはネットワーク内の他のノードで実行されているメンプールにトランザクションを転送します。トランザクションは最終的にバリデーターフルノードで実行されているメンプールに転送され、それがバリデーターノード(この場合はV1)に送信されます。 | 1. RESTサービス |
2. RESTサービス → メンプール: フルノードのメンプールがトランザクションT5をバリデーターV1のメンプールに送信します。 | 2. RESTサービス, 1. メンプール |
3. メンプール → 仮想マシン(VM): メンプールは仮想マシン(VM)コンポーネントを使用して、署名検証、アカウント残高検証、シーケンス番号を使用したリプレイ耐性などのトランザクション検証を実行します。 | 4. メンプール, 3. 仮想マシン |
他のバリデーターノードとのトランザクション共有
Section titled “他のバリデーターノードとのトランザクション共有”説明 | Aptosノードコンポーネント相互作用 |
---|---|
4. メンプール: メンプールはT5をインメモリバッファに保持します。メンプールには既にAliceのアドレスから送信された複数のトランザクションが含まれている可能性があります。 | メンプール |
5. メンプール → 他のバリデーター: 共有メンプールプロトコルを使用して、V1は自身のメンプール内のトランザクション(T5を含む)を他のバリデーターノードと共有し、それらから受信したトランザクションを自身の(V1の)メンプールに配置します。 | 2. メンプール |
ブロックの提案
Section titled “ブロックの提案”説明 | Aptosノードコンポーネント相互作用 |
---|---|
6. コンセンサス → メンプール: — バリデーターV1がこのトランザクションの提案者/リーダーとして、メンプールからトランザクションのブロックを引き出し、このブロックをコンセンサスコンポーネント経由で他のバリデーターノードへの提案として複製します。 | 1. コンセンサス, 3. メンプール |
7. コンセンサス → 他のバリデーター: V1のコンセンサスコンポーネントは、提案されたブロック内のトランザクションの順序について、すべてのバリデーター間の合意を調整する責任があります。 | 2. コンセンサス |
ブロックの実行とコンセンサス達成
Section titled “ブロックの実行とコンセンサス達成”説明 | Aptosノードコンポーネント相互作用 |
---|---|
8. コンセンサス → 実行: 合意達成の一環として、トランザクションのブロック(T5を含む)が実行コンポーネントと共有されます。 | 3. コンセンサス, 1. 実行 |
9. 実行 → 仮想マシン: 実行コンポーネントはVM内でのトランザクション実行を管理します。この実行は、ブロック内のトランザクションについて合意が成立する前に投機的に行われることに注意してください。 | 2. 実行, 3. 仮想マシン |
10. コンセンサス → 実行: ブロック内のトランザクションを実行した後、実行コンポーネントはブロック内のトランザクション(T5を含む)を(台帳履歴の)Merkleアキュムレーターに追加します。これはMerkleアキュムレーターのインメモリ/一時的なバージョンです。これらのトランザクション実行の提案/投機的結果の必要な部分がコンセンサスコンポーネントに返され、合意されます。「コンセンサス」から「実行」への矢印は、トランザクション実行要求がコンセンサスコンポーネントによって行われたことを示します。 | 3. コンセンサス, 1. 実行 |
11. コンセンサス → 他のバリデーター: V1(コンセンサスリーダー)は、コンセンサスに参加している他のバリデーターノードと提案されたブロックの実行結果についてコンセンサス達成を試みます。 | 3. コンセンサス |
ブロックのコミット
Section titled “ブロックのコミット”説明 | Aptosノードコンポーネント相互作用 |
---|---|
12. コンセンサス → 実行, 実行 → ストレージ: 提案されたブロックの実行結果について合意が成立し、クォーラムの票数を持つバリデーターのセットによって署名された場合、バリデーターV1の実行コンポーネントは投機的実行キャッシュから提案されたブロック実行の完全な結果を読み取り、提案されたブロック内のすべてのトランザクションをその結果と共に永続ストレージにコミットします。 | 4. コンセンサス, 3. 実行, 4. 実行, 3. ストレージ |
Aliceのアカウントは現在100 Aptos Coinを持ち、そのシーケンス番号は6になります。もしBobがT5をリプレイしようとしても、Aliceのアカウントのシーケンス番号(6)がリプレイされたトランザクションのシーケンス番号(5)より大きいため、それは拒否されます。