ブロックチェーンのブロックはチェーンでつながれたようにリンクされていると言われております。今回はブロックチェーンのブロックについてザックリとした解説をします。
ブロックとトランザクション
ブロックチェーンでは、例えばビットコインでは、1回の取引ごとに取引明細が作られます。
「AさんがBさんへ1BTCを送金した」という取引明細です。これをトランザクションと呼びます。
このトランザクションを入れる箱を「ブロック」と呼びます。
ブロックの中には1つのトランザクションのみが入っているわけではなく複数のトランザクションがまとめて1ブロックの中に入っています。
ブロックの中にトランザクションが複数入っている、つまりブロックの中に取引明細がたくさん入っているということですね。
「AさんがBさんへ1BTCを送金した」「CさんがDさんへ0.
ブロックの構造
このブロックの構造を見ていきます。
ブロック構造
フィールド | サイズ | 概要 |
Block Size | 4 | データサイズ |
Block Header | 80 | ヘッダ情報 |
Transaction Counter | 1~9 | ブロックの中のトランザクション数 |
Transactions | 可変 | トランザクション |
こちらはブロックの構造です。ブロックはメインデータであるトランザクションとヘッダで構成されているんですね。
ブロックヘッダ構造
フィールド | サイズ | 概要 |
Version | 4 | バージョン |
Previous Bloc Hash | 32 | 親ブロックのハッシュ値 |
Markle Root | 32 | マークルツリーのルートハッシュ |
Timestamp | 4 | ブロックの作成時間 |
Difficulty Target | 4 | ブロックの作成時の難易度 |
Nonce | 4 | ナンス値 |
そしてこちらはブロックに含まれるブロックヘッダの構造です。
Previous Block Hash
ヘッダには「Previous Block Hash」があります。これは親ブロックのハッシュ値です。この親ブロックのハッシュ値が親ブロックのリンクになるので、こうして各ブロックがつながっているんですね。
ブロックチェーンと呼ばれているのは、このブロックヘッダの「Previous Block Hash」があるからなんですね。なるほど。
Markle Root(マークルツリーのルート)
「マークルツリー」という聞きなれないものがヘッダにあります。マークルツリーとは二分木と呼ばれるデータベースで使用される技術です。
ザックリいうと、「速く検索する」ための技術です。
マークルツリー
マークルツリーを具体的にみていきます。
1つのブロックに4つのトランザクション「Tx1」「Tx2」「Tx3」「Tx4」があるとします。トランザクション「Tx1」と「Tx2」のハッシュ値を足します。同じようにトランザクション「Tx3」と「Tx4」のハッシュ値を足します。
その足したハッシュ値をさらに足します。すると、4つのハッシュ値を連結したハッシュ値が出来上がります。これをマークルートと呼びます。
ブロック内のすべてのトランザクションのハッシュ値をふくんだマークルート
例えば、トランザクション「Tx3」がどのブロックに含まれるか調べる場合。
この場合、ブロックに含まれるすべてのトランザクションを1つずつ確認していくのはとても時間がかかります。ブロックは1つだけではなく多くのブロックがあり、それを順番に探し、さらにブロック内のトランザクションを1つずつ探していきます・・・時間がかかりますね。
そこでマークルルートを使います。マークルルートはブロック内のトランザクションのハッシュ値がすべて含まれています。
トランザクション「Tx3」が含まれるか?はブロックのヘッダにあるマークルルートを確認すればすぐにわかります。こうしてトランザクション検索の高速化を図っているんですね。
マークルルートを使うSPVノード
このマークルルートはSPVノード(Simplified
例えば、ビットコインのブロックチェーンは膨大なデータを保持しています。通常のパソコンやタブレットではすべての過去ブロックを保持するのは容量的に厳しいです。
そこでブロックすべてを保持するのでなく、ブロックヘッダだけを保持していてもノードになることができ、このノードをSPVノードを呼びます。
このSPVノードが前述のマークルルートを使ったトランザクションの検索を行います。そもそもSPVノードはトランザクションを持っていないため、トランザクションを検索できませんからね。
だからマークルルートが必要になるというカラクリでした。
まとめ
- ブロックチェーンは1つのブロックの中に複数のトランザクションが入っている
- ブロック内のヘッダには親ブロックのリンク情報がある
- フルブロックを持たずブロックヘッダのみをもつSPVノードがある
- SPVノードはブロックヘッダにあるマークルルートを見てトランザクションを特定する
以上、ブロックチェーンのブロックの仕組み(SPV・マークルツリー)でした。
コメント