見出し画像

未来のために学んでおきたい。「Blockchain (ブロックチェーン) 」の概要9.Bitcoinマイニング~BCを形成

ブロックとブロックチェーン
ブロックはトランザクションを集めた物。それが数珠つなぎになっているのが、BC。

マイニング
トランザクションデータをまとめ、新しいブロックを生成することをいう。
ブロックに取り込まれていない、トランザクションプールにあるデータを正しいかを検証して正しい物だけブロックに集めて入れていく。そのデータの検証をし、ブロックがBCに取り込まれると報酬をうけとることができる。

マイナーが受け取る報酬

1.新たに発行されるコインを受け取ることができる。
ブロックがBCに取り込まれるとコインが発行される。2009年は、1つのブロックが取り込まれると50BTCが発行されていた。それはどんどん減少していて、4年に一回半分に減るイメージ。2020は7BTC。
発行量が減少する理由は、インフレを防ぐため。通貨を発行しつづけると、通貨の価値が下がる。これを防ぐためにコインの流通量が増えるほど、発行量を減らす仕組みになっている。これで、通貨の価値を担保しようとしている。
2.トランザクションの手数料
inputとoutputの手数料を受け取る事ができる。

ブロックは必要なのか
中央機関のないネットワーク上での取引の合意形成を可能にするためにブロックが必要。
マイナーがトランザクションデータが正しいか検証しブロックを作る。そのブロック検証をノードが検証しBCに取り込まれる仕組みをとっている。
これはブロックという単位があるからできることである。
ブロックがあることで、データを後から改ざんすることをできないようにしている。

BCが合意形成される流れ

1.データが正しいかのトランザクションを検証
2.ブロックの作成 (Powを計算してブロックを作成)
3.ブロックの検証・取り込みをする。
ブロックが正しいか検証されBCに取り込まれる。
4.BCを選択 沢山いるマイナーがマイニングすると、同じデータをマイニングする可能性がある。これをどのブロックを採用sるかは、より多くのブロックを積んでいるチェーンが選択される。

①トランザクションの検証
ノードはトランザクションデータがが正しいとき、他のノードに伝える。
そして、トランザクションプールにもデータを伝えている。

トランザクションデータ検証のチェック事項
・データ構造は正しいか? 
・各インプットに対して、トランザクションプールにインプットが参照しているトランザクションアウトプットが見つかるか。
・各インプットは参照しているアウトプットはすでに使用されていないか?
・トランザクションはoutputにあるlocking scriptによってロックされている。このロック状態をinputにあるunlocking scriptによって解除できるか検証している。
・インプットの値の総和はアウトプット値の総和よりも大きいか?

ブロックの作成

トランザクションプールにあるデータをトランザクションデータをブロックに集める。この際に優先順位をつけて集めている。
1.一定以上の古くて、大きなinputを持つトランザクションデータを集める。
トランザクションデータはブロックに入ってBCで取り込まれないと有効かされないから、こういったルールがある。
2.手数料の高いトランザクションデータを優先的に集める。

トランザクションを集めたら?
ブロックにgenerationトランザクションを追加。これはマイナー自身が作成する。内容は払われる報酬! これには、coinbaseというinputを持ち、outputはトランザクションの手数料とgenerationトランザクションの金額。
最後に、ブロッグヘッダをブロックに作成し、powの値を見つけるとブロック完成。

ブロッグヘッダの構築

このテキストでは情報量が多く、重要なものだけを明記する。
前のブロックヘッダのハッシュ
powの難易度
powナンス
ブロックの生成時刻
マークルルート

ブロッグヘッダのハッシュ
・前のブロックヘッダのハッシュ・powの難易度
・powナンス・ブロックの生成時刻・マークルート
上記のブロックヘッタを2重ハッシュ化(SHA256×2)
し、次のブロックヘッダを作る時に使う、「ブロックヘッダのハッシュ」をつくる。
✳︎前のブロックのハッシュ値を通じてブロックは数珠つなぎになっている。

マークルルート
マークルツリーは、ブロックに含まれるトランザクションデータを要約する方法
目的は2つあり
・トランザクションデータの改ざんを検知する。
・あるトランザクションがブロックに含まれるかを効率よく検証
できる。
あるデータがあり、それをようやくするためにマークツリーを使用!
tx1~tx4までのトランザクションデータがある。それぞれのトランザクションデータをSHA256×2でハッシュ化。結果として、H1~H4のデータがそれぞれできる。H1とH2を足してH12ハッシュ化。H3とH4も同様H34最後に両方を+してハッシュ化H1234をさくせい。この最後のH1234を要約されたマークルルートという。これをブロッグヘッダに保存。
トランザクションデータが奇数だった場合はどうする?H1~H3だった場合、H3を二乗して偶数にし対応する。

あるトランザクションがブロックに含まれるかを効率よく検証
できる。
SPVノードがブルームフィルタをセットするよ〜とフルノードに情報を送信し、フィルタに合ったデータだけちょうだ〜いとリクエスト。
ブルームフィルタに合った(ブロッグヘッダとマークルパス)と関係しているトランザクションデータをSPVに渡す。マークルパスはマークルルートに到る道筋を抽出するもの。

プルーフオブワーク

莫大な計算処理をした証拠。マイニングのための計算競争のこと。ひとつのパラメータ(ナンス)を変え、ブロッグヘッダの難易度の値より小さくなるまでの値を変え続けている。
ハッシュ値がPowより小さくなるまで、数を変える数あてきょうそう。
例えば、サイコロを2つ振った合計値。これをある値よりも小さいかをチェックする。 合計値<10 こうなるかどうかをずっとサイコロを転がし続ける。
合計値<3は難易度が難しくなる。
この難易度はBCの場合自動調整されている。新たなブロックが生成される時間が10分になるようになっている。コンピューターの処理速度が高まる現代で、それに対応できるように作られている。
ブロックの完成時間が10分なのは。いみがあり、データの改ざんを防ぐためにあり、難しくなる。
ブロックが完成すれば、取引が成立することになる。そのため、かいざんを防ぎながら、通貨としての利便性を担保するために新しいブロックが作れらる時間が10分とビットコインでは調整されている。

実際の計算の手順
2016ブロックごとに難易度を再計算。(10分×2016=2週間)さいごのブロックを作成するのにかかった時間と予想時間との比で調整。プルーフオブワークはナンスの値がみつかると終わり、ブロックヘッダに入れ込む。

プルーフオブワークはなのためにあるの?
データのかいざんをふせぐためにプルーフオブワークはある。
トランザクジョンのデータを悪いやつがかいざんして、マークルルートが変更されたとします。これはトランザクション全てのデータをハッシュ化して要約しているもの、中身のトランザクションのデータがかわると、マークルルートの値もかわる。 するとブロッグヘッダのデータがかわるのでプルーフオブワークを満たす、ナンスを再計算しなければならない。 10分かかり、ナンスをみつけるとブロックが完成する。ただ、ブロックヘッダのハッシュ値がかわっていて、次のブロッグのナンスを計算しないといけない。
改ざんしたいブロックが、それより6ブロック以上あると現実的に計算できない。なぜなら、改ざんが追いつかないから。

新しいブロックを検証し取り込む

ブロックは正しければ他のノードに伝え、正しくなければデータはけされていく。正しかったデータはどうなっていくのか?自分の最後の持っているブロックがMだとしたら、それにM+1としてブロックチェーンにとりこんでいく。これが一連の流れ。
BCは何をチェックして正しいのかを判断をしているか?
・ブロック構造
・ブロックヘッダのハッシュが難易度より低いか?要はpowは正しくおこなわれているか?
・トランザクションデータが正しいかの検証

同じブロックが同時に生成されたら?
この状況をフォークという。その場合は長い方のチェーンをノードが選択して残る。 (累積難易度が最も高いチェーン)このようなフォークが枝分かれするのは、1つのブロック分くらい。6ブロック以上積み上がるとブロックが変更されることはほとんどない。1時間あれば、取引データが確定といわれている。

この記事が気に入ったらサポートをしてみませんか?