Blocks

[Previous << Differences vs. EVM](https://qiita.com/flowcadence/items/dd17b842da62ae1fc37b)
[Next >> Collections](https://qiita.com/flowcadence/items/a3f85e924b5aec3e2624)


https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a#flow-developers

<h1>Overview</h1>

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

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912821/a0a5b697-4d70-0f28-958f-45c5dd32fe29.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912821/a405c43a-bfc7-6839-f67d-d365ab0abf62.png)

<h3>Block Header</h3>

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


<h3>Block Payload</h3>

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

<h1>Lifecycle and Status</h1>

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

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

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

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912821/3e94bf8f-09e0-9fd8-3dd7-81b5032c7d41.png)

<h1>Block Retrieval</h1>

Flow CLI を使用してブロックデータを取得するには、次のコマンドを実行します:
```ruby
flow blocks get latest -network mainnet
```

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

[**gRPC Block API**](https://developers.flow.com/networks/node-ops/access-onchain-data/access-nodes/accessing-data/access-api#blocks)

[**REST Block API**](https://developers.flow.com/http-api)

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

[**Javascript SDK**](https://qiita.com/flowcadence/items/4174cc0ae785b1ddb1d6)

[**Go SDK**](https://qiita.com/flowcadence/items/3616deed7fbb2d69f91e)

Find a list of all SDKs [here](https://qiita.com/flowcadence/items/4d0e75b7f49d02f75445)

*Last updated on **Dec 9, 2024** by **Alex***

翻訳元

https://developers.flow.com/build/basics/blocks

***

<b>[Previous << Differences vs. EVM](https://qiita.com/flowcadence/items/dd17b842da62ae1fc37b)
</b>

[Flow blockchain / Cadence version1.0ドキュメント](https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a) (Blocks)

<b>[Next >> Collections](https://qiita.com/flowcadence/items/a3f85e924b5aec3e2624)</b>