ブロックチェーンのブロックの仕組みとは(SPV・マークルツリー)

スポンサーリンク

ブロックチェーンのブロックはチェーンでつながれたようにリンクされていると言われております。今回はブロックチェーンのブロックについてザックリとした解説をします。

ブロックとトランザクション

ブロックチェーンでは、例えばビットコインでは、1回の取引ごとに取引明細が作られます。

「AさんがBさんへ1BTCを送金した」という取引明細です。これをトランザクションと呼びます。

 

このトランザクションを入れる箱を「ブロック」と呼びます。

ブロックの中には1つのトランザクションのみが入っているわけではなく複数のトランザクションがまとめて1ブロックの中に入っています。

ブロックの中にトランザクションが複数入っている、つまりブロックの中に取引明細がたくさん入っているということですね。

「AさんがBさんへ1BTCを送金した」「CさんがDさんへ0.1BTCを送金した」「EさんがFさんへ0.05BTCを送金した」みたいなのが1つのブロックに入っています。

ブロックの構造

このブロックの構造を見ていきます。

ブロック構造

フィールド サイズ 概要
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 Payment Verification)が使います。SPVノードはフルブロックを持たないノードのことです。

例えば、ビットコインのブロックチェーンは膨大なデータを保持しています。通常のパソコンやタブレットではすべての過去ブロックを保持するのは容量的に厳しいです。

そこでブロックすべてを保持するのでなく、ブロックヘッダだけを保持していてもノードになることができ、このノードをSPVノードを呼びます。

このSPVノードが前述のマークルルートを使ったトランザクションの検索を行います。そもそもSPVノードはトランザクションを持っていないため、トランザクションを検索できませんからね。

だからマークルルートが必要になるというカラクリでした。

まとめ

  • ブロックチェーンは1つのブロックの中に複数のトランザクションが入っている
  • ブロック内のヘッダには親ブロックのリンク情報がある
  • フルブロックを持たずブロックヘッダのみをもつSPVノードがある
  • SPVノードはブロックヘッダにあるマークルルートを見てトランザクションを特定する

以上、ブロックチェーンのブロックの仕組み(SPV・マークルツリー)でした。

コメント