ブロックチェーン 雑談
こんにちは、Inagoraの技術チームです。 少し前に開催された勉強会の内容を共有させていただきます。 今回は陳さんによる「ブロックチェーン雑談」です。
以下の三方面から、ご紹介したいと思います。
-
ブロックチェーンの本質
-
ブロックチェーンの特徴
-
ビットコインの採掘・マイニング
Wikipediaの定義により、ブロックチェーンは、「ブロック」と呼ばれるデータの単位を生成し、鎖(チェーン)のように連結していくことによりデータを保管するデータベースである。つまり、ブロックチェーンはデータベースであることが分かりました。
Q:どんな型のデータベース?従来のRDBMSとの違いは何?
ブロックチェーンはP2P(Peer to Peer)の分散型台帳技術を利用する特殊な分散型データベースです。
従来のRDBMS、例えば我々よく使うMySQL、PostgreSQLはクライアント・サーバの分散データベースです。
Q:一般の分散データベースとブロックチェーン、それぞれの設計目的は何でしょう?
-
分散データベース
-
負荷を分散させる
-
災害に備えてデータを分散させる
-
処理スピードを速くするために分散させる
-
-
ブロックチェーン
-
処理権限を分散させる(恣意性を排除する)
-
データの改ざんを限りなく低くするためにデータを分散させる
-
時間やコストを削減するために分散させる
-
あらゆる価値を取引するために分散させる
-
1.改ざんが非常に困難
まずはブロックチェーンという名前の由来を説明します。「データのかたまり(=ブロック)」同士が時系列に「繋がって(=チェーン)」データが形成されているので、「ブロック + チェーン」という名前が付けられています。
ブロックチェーンのブロックは、連鎖するデータ構造となっており、一つ前のブロックの情報を要約しながらつながり、共有される。そのため、過去の取引を改ざんしようとすると、それ以降連なっているすべての連鎖するブロックの内容を書き換えねばならず、また全ノードのブロック内容を書き換えなければならないため、データの改ざんが非常に困難といえます。
2.システムダウンが起きない
分散型ネットワークシステムの特徴を利用した、高い可用性があげられます。すなわち、一部のノードがダウンしても、他のノードが情報を共有しているので、システムを継続できます。サーバーがダウンしても高い持続性を期待できます。
3.自律分散システム
今までの多くの分散システムにはシステムの中央となる管理者が存在していた。ところがブロックチェーンは、全ての参加者が自律して取引履歴をコピーし続けています。これは自律分散システムと呼ばれます。この自律分散システムの、不正や改ざんを許さず、公正な取引の履歴を安定して記録し続ける特性は持っています。
ビットコインの採掘・マイニング
マイニングとは、ざっくり言うと、新たなブロックを生成することです。
Q:ブロックの構造は?
ブロック全体のデータ構造は、「取引データ」+「前ブロックのハッシュ値」+「ナンス値」から構成されるが、このうち、「取引データ」+「前ブロックのハッシュ値」の部分はすでに決定しているため、後続するブロックに使用するハッシュ値を決定するために変化させることができる要素は、ナンス値のみとなる。
Q:ナンス値とは?
ナンス値は「新しいブロックを生成するために必要な数値」です。「number used once」の略称であり、使い捨ての数字のことを意味します。マイニングに参加する人(企業や個人)をマイナーと呼びます。マイナーたちはこの必要な数値を見つけるために計算競争をしています。その値が見つかると、新たなブロックが完成します。 重要なポイントは、「約10分間に1回のサイクルで行われるマイニング」というプロセスが完了するたびに、各ノード(マイナー)が検証するブロック(=トランザクション群)がただひとつに決定されるという点です。各ノードが同じブロックをそれぞれ検証し、完了次第、ノードが保持する分散型取引台帳(=ブロックチェーン)における最新ブロックが更新されます。
Q:ビットコインの採掘は難しい?
ハッシュ関数とは、入力したデータを元に、全く別の文字列(=ハッシュ値)を出力する関数だ。ビットコインのブロックチェーンのハッシュ関数はSHA256が採用されています。 ビットコインでは、ハッシュ値をブロックに含めるためには、一定数以上の0がハッシュ値の先頭に並んでいるという条件があります。例えば、21年2月15日午前7時58分に生成された67万637番目のブロックのハッシュ値は「000000000000000000022b7feae833431ff23d433fdf920af05f053b4de343e2」(https://www.blockchain.com/explorer/blocks/btc/000000000000000000022b7feae833431ff23d433fdf920af05f053b4de343e2)です。 この条件を満たすハッシュ値を出力するための入力値(=ナンス値)を、マイナーは数字を一つ一つハッシュ関数に総当たりで代入して求めています。総当たりで代入しないといけないのは、ハッシュ値からは入力データを逆算できないように設計されているからです。 ナンス値を最初に発見した人にビットコイン報酬が支払われるコンセンサスアルゴリズムをPoW(プルーフ・オブ・ワーク=仕事量の証明の意味)と言うが、これはナンス値を求めるのに莫大な計算量を投入することに由来しています。
感想
ブロックチェーンを支える技術は少し理解できました。特に分散型データベースの構造、ブロックチェーンの特徴、マイニングの全体像などは、個人的に面白かったです。