ブロックチェーン・スマートコントラクトとは[知識編]

# ブロックチェーンとは

ブロックチェーンは、インターネットに次ぐ革命と言われています。
インターネットは「情報交換のネットワーク」であり、ブロックチェーンは「価値交換のネットワーク」です。
また、仮想通貨の基盤技術として使われており、仮想通貨を「ブロックチェーン1.0」、広範な取引や契約管理のインフラとして「ブロックチェーン2.0」と言われたりします。


## 特徴
　分散型で透明性に優れており、改ざんや二重支払いを防ぐことができ、スマートコントラクトが行えます。
　また、ブロックチェーンはP2Pネットワークにより維持され、取引を行う全てのユーザー同士がつながっているため、中央管理者が不要で、特定の誰かの信用を基点にする必要がありません。
## 改ざんされる可能性

　ブロックチェーンは、改ざんを**100%**防ぐことができるという訳ではありません。
まず、改ざんを防ぐ仕組みを説明します。

 ブロックチェーンは、<font color=red>ハッシュ値(またはダイジェスト)</font>*1でつながっており、ブロックチェーンの中には、前のブロックのハッシュ値と・取引データ・ナンスが入っています。
 ブロックチェーンでは取引の検証作業を行なった人が新しい「ブロック」を生成します。この作業は<font color=red>ナンス</font>（Nonce）という値を計算し見つけ出すことで新しいブロックを生成することができます。
　このナンスを見つけるには、膨大な計算量が必要になり、このアルゴリズムのことを<font color=red>PoW</font>(プルーフ・オブ・ワーク)「コストをかけた証拠」といい、この作業のことを<font color=red>マイニング</font>と言います。
このマイニングに成功すると報酬(例：ビットコイン)がもらえます。

大量の計算によってなされたハッシュ関数によって作成されたハッシュ値が次のブロックの最初にくるため、　過去にさかのぼって改ざんするのは指数関数的に難しくなり、改ざんを防いでいます。

>*1 ハッシュとは１つ前のブロックのデータを要約した短いデータのことです。もし前のブロックのデータが１ビットでも改ざんされてしまうと、そのデータのハッシュ値が異なってしまい、チェーンをつなぐことができなくなってしまいます。

もう一つ改ざんを防ぐ仕組みがあります。それは、「**一番長いチェーンが正しい**」というルールがあります。この仕組みを利用し、コインの取引情報を改ざんされてしまった例があります。
詳しくはこちら
[【図解】ブロックチェーンはどのように改ざんされたのか【仮想通貨モナコイン消失】](https://www.thoughts-make-things.com/entry/block-chain-tampering)

また、ネットワーク全体の51%の計算パワーを持つことができれば、正しいブロックがつながっていく前に、枝分かれした偽情報のブロックを伸ばすことができるため、改ざんし放題になります。


## P2Pネットワーク

　P2Pネットワークとは、取引を行う全てのユーザーが直接繋がり、お互いを管理し合う通信ネットワークのことをいいます。
　ここでのユーザーはnode(ノード)と呼ばれます。中央管理者のいるクライアントサーバ型とは違い、ノードはそれぞれつながっており、ユーザー全員で処理を行います。そのため、どこかのノードに不具合が起きてもシステムが止まることはないため「ダウンタイムゼロ」が実現できます。
　ユーザー全員でブロックチェーンを保持することで、全員が同じデータを持つ仕組みになっており、誰でも中身が確認できます。

## スマートコントラクトを実現するイーサリアムとは

　イーサリアムとは、仮想通貨の一種ですが、分散型のコンピューター、分散型のアプリケーション、分散型の計算をする仕組みにより、スマートコントラクトを実現するためのプラットフォームです。
詳しくは
[Ethereum [基礎知識]](https://qiita.com/kagami-r0927/items/d73492e3a9207c8345dc)
こちらの記事を読んでみてください。

## スマートコントラクトとは

　契約条件・履行内容をブロックチェーンじょうで記述することで、第三者を介さずに契約を自動執行するものです。
　契約を自動にすると、契約の相手を信用する必要性がなくなり、コストの低下を見込めます。なぜなら、契約がプログラムによって機械的にその認証を実行するため、相手からの虚偽情報の申請を気にするリスクが極めて小さくなります。また、ブロックチェーンの技術により、契約の実行履歴が全て公開・記録されるため、透明性が高くなります。
　スマートコントラクトの仕組みは、よく自動販売機の仕組みに例えられます。
「必要なお金を入れて、欲しい飲み物を押す。」と行った条件が揃えば、自動的にその飲み物が出てくるという契約(コントラクト)が実行されます。
　これと同じような発想で、ブロックチェーン上で、「もし〜〜ならば〜〜する」といったスマートコントラクトを実装すれば、ビジネスが効率的になることを期待されています。

　スマートコントラクトで注意しなければならないのが無限ループです。
1+1を無限に繰り返すコントラクトが実行されてしまうと計算が無限に続き、他のコントラクトが実行できず、システム停止を引き起こす可能性があります。
　この問題を回避するために、命令を実行するには「GAS(ガス)」という手数料が発生する仕組みになっています。1+1の処理を一回ごとに1GASが消費されることで、無限に処理させない仕組みを採用しています。
　また、GASを所有するにはためには、Ethe(イーサ)を使います。

# ブロックチェーンの課題

　ブロックチェーンには、大きく分けて２つの課題があります。**技術的課題**と**持続的課題**です。
技術的課題には、３つの課題があります。
**・ファイナリティー**
**・処理速度**
**・秘匿性**

持続的課題には、２つの課題があります。
**・ガバナンス**
**・インセンティブ**

以上についてそれぞれ説明していきます。

# 技術的課題
## ファイナリティー

　ファイナリティーとは、「決済が完了した状態」のことをいいます。
取引の確定までに時間がかかるため、ビジネスで使えるかどうかという問題です。ビットコインの場合は、ブロック確定に約10分かかります。
　時間がかかるということは、改ざんされてしまう可能性があるということです。上記で説明したように悪意のある人が、つながっている正しいブロックの個数よりも枝分かれしたブロックの方が長ければ、悪意のあるブロックの方が優先されるため、改ざんされてしまうことになります。
　ブロックをどんどんん繋げることができれば、改ざんされる可能性は低くなりますが、時間がかかるため、安心できない状態になってしまいます。
　だいたい３〜６個のブロックが新しくつながって入れば改ざんされる可能性は低いと判断されます。

## 処理速度

　単位時間あたりに処理できるトランザクション数が少ないという点です。
ブロックチェーンでのトランザクションとは、取引記録のことをいいます。
ビットコインの場合は、秒間７トランザクションしか送ることができません。
７トランザクションがどれだけ少ないか知りたい人は、[ビットコイン(BTC)の送金時間を比較!実際にビットコイン/イーサリアム(ETH)/ビットコインキャッシュ(BCH)を送金してみた!](https://moblock.jp/articles/18483)をみてくだい。

## 秘匿性

　ビットコインの取引は透明性が高いと言われます。そのため、送る人と受け取る人の名前は実名でなくては良いものの公開鍵でわかる仕組みになっています。取引所で本人が確認されて入れば、それをたどることで誰によって行われた取引かがわかるため、秘匿性が維持できないことになります。

# 持続的課題

## ガバナンス

　ガバナンスの課題は、機能拡張などのシステム工場のポリシー策定や、アップデートが困難であることです。ブロックチェーンは中央集権的ではなく、分散されています。そのため、機能拡張やアップデートをしたい時には、ユーザー全員のほとんどが合意しない限り変更を取り入れることは困難になります。

## インセンティブ

　インセンティブの課題は、仮想通貨を得るという経済的インセンティブに依存した運営になっているため、仮に仮想通貨の価格が下がった場合に、マイニングしても利益が見込めなくなれば、マイナーが少なくなりシステムが破綻してしまいます。


## ネットワークの型(パブリック型)

　パブリック型とは、インターネット上に広く構築される不特定多数が自由に参加できるブロックチェーンシステムです。
ビットコインやイーサリアムなどの仮想通貨に導入されています。
単一障害点がない・改ざんが困難・汎用性が高いが、認証時間が遅いため、大量の取引には向かないという問題があります。

## ネットワークの型(プライベート型)

　プライベート型とは、企業など特定の参加者によって運営されるブロックチェーンシステムです。
こちらは、管理者を置くネットワークになります。
管理者を置くため参加するには許可が必要で、ブロックを認証する作業も参加者たちが行います。プライベート型は認証時間が早いため、取引量も多くなります。
金融機関や企業がブロックチェーンを導入しようとしたらこちらの方が現実的です。