ブロックチェーンで仮想通貨つくってみた
背景
ビットコインのソースを見ても、既に文系の私には理解不能で全くcontributeできなそうなので、地道にゼロから作ってみることにした。
やること
ハッシュ関数(※2重のSHA256)に下記3つの引数を渡し、戻り値(16進数表記)の頭N桁が0になるまでnonceを0から順に入れまくる。(N桁が0になった時点で、これが新規ブロックのハッシュとなる)
- 直前ブロックのハッシュ
- 加えたい取引のハッシュ(Merkle Root)
- nonce(32bit乱数)
※hashlib.sha256(引数str)で計算できる模様。
しかし、nonceを全て試してもN桁が0になることはあまりないので、Merkle Rootをcoinbase transactionという採掘者が任意で設定できる値を書き換えて変更する。変更すると2の35乗分の1くらいの確率で新しいハッシュが手に入るらしい。
N桁は、現在17桁のようだ。↓下記サイトで現状確認可。
Bitcoin Block Explorer - Blockchain
この桁数は、採掘難易度dによって変わっていく。発掘難易度は発掘頻度が10分になるように調整するための値で、初期の1/d = 10分 となるような値になっている。
現在は475,705,205,061.63。
・・・
結果
仕組みを理解するために体力を使い果たしてしまったので、また後日改めて作り始める。
余談だが、bitcoinを使ったアプリのテスト環境というものがある。仮想通貨自体ではなく、bitcoinを使ったアプリを作る場合は、こちらを利用できる。