Open7
【技術書メモ】ブロックチェーンのしくみと開発がしっかりわかる教科書
ブロックチェーンとは
ひとことでいうと「取引履歴をまとめた台帳」
- ネットワーク上にたくさん存在する(理論上地理的にも分散している?)コンピュータがそれぞれ取引を検証する
- つまり可用性が高い
- 本質としては 台帳の共有
- すべての取引はオープンで、誰でも参照できる
非中央集権的
- ブロックチェーンのネットワーク自体が信用を担保する
- 取引者同士の間に入って信用を担保する第三者の存在がいらなくなる
信頼性が高い
- データの改竄は実質的に極めて困難
- ブロックには "前のブロックによって決まる部分" があるため、1つのブロックを書き換えてもチェーン上で整合性が取れなくなる
- (計算能力で改竄を防ぐ仕組みの場合)不正を行うためには膨大な計算能力が必要になる
- しかしそれをもって不正を行うよりも、正当にブロックチェーンの運営に貢献(ビットコインの場合マイニング?)したほうが得をする( 報酬 として仮想通貨が得られる)
- 仕組みとして 不正行為が得にならないように設計されている
ブロックチェーンの歴史
- 世界初のブロックチェーンはビットコイン
- "サトシ・ナカモト" が2008年に発表した論文、運用は2009年に始まった
- その後ビットコインをベースにしてちょっと変更したアルトコインが登場する
- さらにその後、ビットコインのチェーン上にデータを乗せる形で運用するコインが登場
- 通貨以外の用途で活用しようとしたもの
イーサリアム
- ブロックチェーンを活用してより複雑なアプリケーションを開発できる プラットフォーム として設計されたもの
- Solidityなどのプログラミング言語で記述されている
- イーサリアムのチェーン上で実行されるプログラムは コントラクト と呼ぶ
- 送金などの決済手段以外に、ゲームなどにも活用されている
- ブロックチェーン上で稼働するアプリケーション = DApps
パブリックチェーンとプライベートチェーン
ブロックチェーンには「パブリック」なものと「プライベート」なものが存在する。
パブリックチェーン
- ビットコインやイーサリアムなど、誰でも参加できるもの
- それぞれのチェーンにおいてコミュニティやグループが存在している
- イーサリアムの場合:イーサリアム財団など
- 機能追加や改善を提案する方法として "xIP" (<ChainName> Improvement Proposal)がある
- 多くの人が携わっているので、開発における意思決定スピードは遅い
プライベートチェーン
- 企業が主体となって開発をすすめるもの
- 例
- Corda:金融業界向け
- Hyperledger Project:ブロックチェーン技術の活用を推進するコミュニティ
- 用途に応じてブロックチェーンの設計を簡単に変えられることがメリットとしてある
- 参加者がある程度限られるので、開発における意思決定スピードは早め
ビットコインブロックチェーンの仕組み
価値の源泉
- 法定通貨の場合
- 国家や中央銀行が価値を保証している
- 国家に対する "信用" = 国家が発行する通貨に対する "信用" = 価値
- ビットコインの場合
- ビットコインのシステムに高い利用価値があると "信じている人がたくさんいること" = 価値
- 「国家などの中央集権に依存せずとも、誰でもオンラインで価値を移動できる」という事実に高い価値があると思っている人が集まっているから成り立っている
仕組みの概要
- 取引記録 = トランザクション を作成し、ネットワークへ申請する
- 金額、送り主、受取人などの情報がまとめられたもの
- 「ウォレット」を利用することで内部的な処理を意識せずとも行える
- トランザクションはネットワークに参加するすべてのコンピュータ間で共有される
- トランザクションは約10分ごとに ブロック に取りまとめられる
- ブロックが有効だと確認されれば処理が完了する
確率的ファイナリティ
- ビットコインでは理論上、取引が確定することはない(将来的に取引記録が取り消される可能性がある)
- 時間の経過とともに取引が覆る可能性が0に近づく
- ビットコインの場合は約60分待機し、「6ブロック分の確認ができれば取引が確定したとみなせる」とされている
P2Pネットワーク
- ノードと呼ばれる各コンピュータが直接通信する方式
- クライアント・サーバー両方の役割をそれぞれが果たす
- 単一障害点がない ため、ネットワークの規模に比例して耐障害性が高くなる
- デメリット
- 一度ネットワークに流れた情報を完全に削除することは難しい
- ノードが増えるとシステムを停止することは難しい
トランザクション
- アドレスA → アドレスB の送金取引を記録したもの(ブロックチェーンのメインデータ)
- ブロックチェーン上に記録するためには手数料が必要
- 一般的に手数料の高いものが優先的に処理される
- 公開鍵暗号方式で正当性を保証している
UTXO
- "Unspent Transaction Output" = 未使用残高
- ビットコインブロックチェーンではアカウントごとの「残高」は記録されていない
- 送金などのアクションを行う度に、過去のトランザクションをすべて集計して未使用残高を算出する
ブロック
- 帳簿に例えるなら "ページ"
- 構成要素
- ブロックヘッダ:直前ブロックのハッシュ値やタイムスタンプなどのメタデータ
- トランザクション:実際のトランザクションデータ(送金額の単位は "Satoshi" )
- 直前ブロックのハッシュ値
PreviousBlockHash
をたどっていけばジェネシスブロック(そのチェーンの一番はじめのブロック)まで参照できる
採掘難易度(Difficulty)とスケーラビリティ
- ビットコインブロックチェーンにおける制約
- ブロックの生成ペース:約10分に1度
- ブロックの最大サイズ:1MB
- これらがあることによって、ブロックチェーンで処理できるデータ量に制限が生まれる = スケーラビリティ問題