最先端技術即席実装(SSJ)

最先端技術即席実装(SSJ)

いかに時間をかけないで、最新技術を使いこなすかを目標にした活動記録

ブロックチェーンで仮想通貨つくってみた

背景

ビットコインのソースを見ても、既に文系の私には理解不能で全くcontributeできなそうなので、地道にゼロから作ってみることにした。

github.com

やること

ハッシュ関数(※2重のSHA256)に下記3つの引数を渡し、戻り値(16進数表記)の頭N桁が0になるまでnonceを0から順に入れまくる。(N桁が0になった時点で、これが新規ブロックのハッシュとなる)

  1. 直前ブロックのハッシュ
  2. 加えたい取引のハッシュ(Merkle Root)
  3. 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。

 

 

・・・

 

 

f:id:tetsuyaimagawa:20170328191818p:plain

 

結果

仕組みを理解するために体力を使い果たしてしまったので、また後日改めて作り始める。

 

余談だが、bitcoinを使ったアプリのテスト環境というものがある。仮想通貨自体ではなく、bitcoinを使ったアプリを作る場合は、こちらを利用できる。

testnet.blockexplorer.com