0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Blocks

Last updated at Posted at 2024-12-18

Previous << Differences vs. EVM
Next >> Collections

Overview

ブロックは、Flowブロックチェーンを構成するエンティティです。各ブロックは、実行され、その結果グローバル・ブロックチェーンの状態(ステート)が変更されたトランザクションのリストが含まれています。各ブロックは、ブロックの内容の暗号ハッシュである固有のIDによって識別されます。ブロックには、Flowブロックチェーンと呼ばれるブロックの連結リストを作成する親ブロックIDへのリンクも含まれています。

固有のブロックIDは、ブロックの内容を証明するものであり、任意のオブサーバーが独自に検証することができます。ブロックIDを構成するハッシュの興味深い暗号学的特性により、ブロックデータに変更が加えられた場合、異なるハッシュが生成されることを保証します。ブロックはリンクしているため、異なるハッシュは次のブロックで参照されなくなるため、リンクが切断されます。

ブロックの最も基本的な表現は次の通りです。

image.png

各ブロックは、ブロックヘッダーブロックペイロードに分割されより多くのデータが含まれています。Flowプロトコル内には、ブロックデータのさまざまな表現方法があります。API、ノードタイプ、ノード内の特定のコンポーネントは、異なる観点からブロックを見る場合があります。このドキュメントでは、クライアントにAPIを通じて公開したブロックデータについて説明します。

image.png

Block Header

Block headerには以下のフィールドが含まれます。

  • ID はブロックの固有識別子を表し、ペイロードハッシュを含むハッシュ化したブロックヘッダーから抽出されます。 Flowでのコンテンツをハッシュ化し、IDを取得するために使用されるアルゴリズムは SHA3 256 です。 この ID はブロック内のすべての値が同じ状態を維持していることを保証します。
  • Parent ID はブロックチェーンを構成するリスト内の一つ前のブロック ID へのリンクです。
  • Heightはブロックのシーケンス番号で、ブロック0が最初のブロックとして生成され、次のブロックごとに値が1ずつ増加します。
  • Timestampは、コンセンサスノードによってこのブロックが提案された時点のタイムスタンプです。あなたのユースケースによっては、この時間が正確でない場合がありますので、Flowブロックチェーンでの時間の測定について、こちらをお読みください
  • Payload Hashは、ブロックのIDを生成する時にブロックに含まれるペイロードハッシュを表します。ペイロードハッシュは、collection guarantees, seals, execution receipts, and execution resultsのメルケル・ルート・ハッシュをとり、それらをまとめてハッシュ化することで計算されます。これらの各値のより詳しい情報についてはBlock Payloadセクションをご覧ください。

Block Payload

ブロックペイロードには以下のフィールドが含まれます。

  • Collection Guarantees は、収集して(トランザクションの)コレクションを生成したコレクションノードからの署名付きのコレクションIDのリストです。これは、他のノードから後日リクエストがあった場合に、コレクション内のトランザクションデータがコレクションノードで利用可能であることを保証するものです。Flowでは、意図的にトランザクションデータをブロックに含めることをスキップし、ブロックを可能な限り小さくし、コンセンサスノードによる新しいブロックの生成を高速化します。これは、コンセンサスノードがノード間で提案されたブロックを同期する必要があり、データは可能な限り最小限にすべきであるためです。コンセンサスノードは、トランザクションが有効である限り、そのトランザクションが何を行うかについては特に気にしていません。コンセンサスノードが気にするのは、ブロック内のトランザクションの順序を定義することだけです。
  • Block Sealsとは、検証ノードが以前に実行されたブロック内のトランザクションが検証済みであることを証明するものです。これはブロックIDによって参照される以前のブロックを封印します。また、結果IDと実行ルートハッシュも参照します。この中には、シールを作成した検証ノードの署名が含まれています。

Lifecycle and Status

Block statusはブロック内に格納されている値ではなく、ブロックのライフサイクルを表します。この値は、ブロックがFlowブロックチェーンに組み込まれたことをベースとして抽出され、ブロックに含まれる変更の最終的な状態を示す重要な指標としてユーザーに提示されます。

ここでは、ブロックが通過するさまざまなフェーズの概要を説明します。詳細についてはホワイトペーパーをご覧ください。また、ブロックの状態の多くは、開発者にとっては必ずしも重要ではなく、Flowブロックチェーンの機能にとってのみ重要です。

新しいトランザクションがネットワークに送信されていない場合でも、新しいブロックは常に提案されています。コンセンサスノードはブロックの生成を担当します。コンセンサスノードはコンセンサスアルゴリズム(HotStuffの実装)を使用して、新しいブロックの内容について合意します。ブロックにはコレクションの順序付きリストが含まれ、各コレクションにはトランザクションの順序付きリストが含まれます。これは重要な事実であり、繰り返し述べる必要があるでしょう。ブロックは、Flowステートマシンに対する遷移(トランジション)のリストとして働きます。ブロックは、トランザクションがステート(状態)に対して行うすべての変更を順序付きリストとして記録します。

次のブロックに対して、コンセンサスアルゴリズムHotStuffの実装を使用するコンセンサスノードによって合意されたブロックは 確定(finalized) されます。これにより、ブロックはそれ以上変更されず、次に実行ノードによって実行されることになります。ブロックは封印(sealed) されるまでは(ステートの)変更が信頼できないため、ご注意ください。検証ノードが実行結果の正当性を検証し、合意した後、ブロックが封印され、コンセンサスノードがこれらの封印を新しいブロックに含めます。

まとめると、ブロックは、そのブロックに含まれるトランザクションが変更されず(will stay the same)、実行されることを保証する確定(finalized)、またはブロックの実行が検証されたことを意味する封印(sealed) のどちらかとなります。

image.png

Block Retrieval

Flow CLI を使用してブロックデータを取得するには、次のコマンドを実行します:

flow blocks get latest -network mainnet

コマンドの詳細については、CLI ドキュメントで確認してください。
ブロックはアクセスノード API から取得できます。現在、gRPC と REST API の 2 種類があります。それらに関する詳細な情報は、こちらでご確認ください:

gRPC Block API

REST Block API

上記APIを実装した複数のSDKが、さまざまな言語向けに提供されています。

Javascript SDK

Go SDK

Find a list of all SDKs here

Last updated on Dec 9, 2024 by Alex

翻訳元


Previous << Differences vs. EVM

Flow BlockchainのCadence version1.0ドキュメント (Blocks)

Next >> Collections

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?