はじめに
先日、「ブロックチェーンの基礎から応用まで」に関する勉強会に参加しました。今回の投稿はその内容の簡単な紹介となります。
発表
発表は途中10分の休憩を挟んで前後半30分で行われました。前半はブロックチェーン仕組みなどの基礎的な内容で、後半はライトニングネットワークの説明やスマートコントラクトの課題などについての内容でした。
前半(ブロックチェーンの基礎)
仮想的な通貨の取引を実装しようと考えた場合に最初に思いつくのは、ある価値を持ったデータを作りそれを送ることです。
2重支払い問題
デジタルデータを取引に用いる場合、コピーすることができるという問題があります(2重支払い問題)そこで、デジタルデータの所持数(ストック)を記録するのではなく取引(フロー)を記録することによってこの問題を解決しました。
トランザクションとブロック
ブロックチェーンでは複数の取引(トランザクション)をまとめたブロックをつなげることで価値の移動を実現します。
新しいブロックを繋げる
ブロックチェーンに新しいブロックを繋げるためにはマイニングという作業が必要になります。マイニングではハッシュ関数に代入すると先頭に決められた数の0が並ぶ数(ナンス)を探します。ハッシュ関数の性質上どういう値を代入すれば求める様な値になるかということを計算で求めることはできないため、ナンスを見つけ出すためには膨大な計算量が必要になります(ちなみに、同時にナンスが見つかってブロックが繋げられた場合、よりブロックが長い方が正しいとみなされます)
マイニングの報酬
このように膨大なマシンパワーを使うマイニングをなぜ行うかというと報酬があるからです(ビットコインが付与されるなど)このような仕組みのことをプルーフオブワーク(PoW)と言います。
なぜブロックチェーンは改ざんできないのか
ナンスは各ブロックに記録されているのですが取引を改ざんするとナンスが条件を満たさなくなります。その為、改ざんした取引を正とするためには以降全てのナンスを計算し直さなければならず、膨大な計算量となります(計算している最中にもブロックチェーンはどんどん長くなります)
ブロックチェーンでの送金
ブロックチェーンでの送金には公開鍵から生成されたアドレスを利用するP2PKH(Pay 2 Public Key Hash)の他にスクリプトのハッシュを利用するP2SH(Pay 2 Script Hash)があります。ほかにもm of n multisig(2 of 3 multisigなら3人中2人の鍵があれば引き出せる)というものもあります。
後半(ブロックチェーンの応用)
ブロックチェーンでトランザクションを作る際にはマイナーフィーを払う必要があります。少額の取引を行う場合このマイナーフィーによる手数料が馬鹿にならず、また、送金に10分程度かかってしまいます。この問題を解決する技術としてライトニングネットワークがあります(諸事情によりこの部分の発表が聞けていないので参考リンクを貼ります。ライトニングネットワークとは?ビットコインの少額支払いを可能にする最新技術を解説!)
スマートコントラクト
スマートコントラクトは契約をプログラムで実装したものです。スマートコントラクトはプログラムなので確実に履行させることができますが、万人が中身を理解できるわけではないという課題があります。
Smart Contract 時代の契約書
これからは以下の3つの契約書が必要になるのではないかと言われています。
- コモンズ証(利用者可読)
- ライセンス(専門家可読)
- メタデータ(機械可読)
ドライな契約・ウェットな運用
スマートコントラクトでは契約内容を確実に履行させることができますが、実際の世界では契約通り運用されないことが多々あります(例えば返済期限を延長するなど)そのため、スマートコントラクトを実装するためには実際の運用を正しく理解しプログラムに落とし込む必要があります。
規制の種類
規制には以下の4つの種類があります。
- 法
- 規範
- 市場
- アーキテクチャ
この内アーキテクチャはもっとも強固です(例えば法律は破ろうとお思えば破ることはできるが、他人のFacebookのアカウントは削除できない)
規制への懸念
強すぎる規制は近代社会の価値観を殺しかねないと登壇者は言います(例えばYoutubeなどのグレーなビジネスは生まれない)規制の不完全性はビジネスを成長させるため、規制への規制が必要となります。
さいごに
現在のブロックチェーンはインターネット黎明期に近いといいます(GoogleやFacebookやAmazonなどが存在しない時代のインターネット)また、ステーキをろうそくで焼く(火力不足=まだまだ発展途上でビジネスをするには不十分)と例えられることがあります。
登壇者曰く、エンジニアとして実際にスマートコントラクトを掛ける必要はないが、ブロックチェーンの仕組みは理解したほうが良いそうです(例えば、TCP/IPの仕組みはみんな理解している)
引き続きブロックチェーンに関する技術についてはアンテナを張っていようと思います。