ビットコインのハッシュレートを計算してみた

457400ff559f14cf1c2f76916e1673ba?s=47 Kazuki Ikuta
December 15, 2017
450

 ビットコインのハッシュレートを計算してみた

457400ff559f14cf1c2f76916e1673ba?s=128

Kazuki Ikuta

December 15, 2017
Tweet

Transcript

  1. ビットコインのハッシュレートを計算してみた blockchain.tokyo#3 ⽣⽥ 和希

  2. 2 ©Gunosy Inc. ⾃⼰紹介 名前 : ⽣⽥ 和希 (いくた かずき)

    @ikutyy 所属 : 株式会社Gunosy 新規事業開発室 (内定者インターン) 早稲⽥⼤学 ⽂化構想学部 4年 趣味 : 将棋(アマチュア五段くらい) / 能(宝⽣流) 個⼈的なトピック : 先週、卒論提出したぞ!!!!!
  3. 3 ©Gunosy Inc. 今⽇の内容 ハッシュレートの計算⽅法(と関連する基本知識) h"ps://blockchain.info/ja/charts/hash-rate より

  4. 4 ©Gunosy Inc. ハッシュレートとは マイニングに使われている1秒間の総計算量(理論上)

  5. 5 ©Gunosy Inc. ハッシュレートが⼤事な理由 •  マイナー視点 -> マイニングの収益性に直結する。 •  投資家視点

    -> 価格の上昇と関連があるかも?
  6. 6 ©Gunosy Inc. ハッシュレートと価格の関係性 h"ps://bi7nfocharts.com/comparison/hashrate-price-btc.html#3y#1y より

  7. 7 ©Gunosy Inc. マイニングとは •  取引を検証して不正がないか確認する •  設定された数値を下回るハッシュ値を⾒つける競争  (ex.サイコロの⽬をn個振って合計がm以下の値にしたら勝ち) • 

    約10分で⾒つかるように数値が約2週間に1回調整される •  先に⾒つけた⼈が報酬としてコインをもらえる
  8. 8 ©Gunosy Inc. マイニングとは •  取引を検証して不正がないか確認する •  設定された数値を下回るハッシュ値を⾒つける競争  (ex.サイコロの⽬をn個振って合計がm以下の値にしたら勝ち) • 

    約10分で⾒つかるように数値が約2週間に1回調整される •  先に⾒つけた⼈が報酬としてコインをもらえる target
  9. 9 ©Gunosy Inc. マイニングとは •  取引を検証して不正がないか確認する •  設定された数値を下回るハッシュ値を⾒つける競争  (ex.サイコロの⽬をn個振って合計がm以下の値にしたら勝ち) • 

    約10分で⾒つかるように数値が約2週間に1回調整される •  先に⾒つけた⼈が報酬としてコインをもらえる ハッシュ値
  10. 10 ©Gunosy Inc. targetについて •  1〜2^256(およそ10の77乗)まで取り得る値 •  bitcoinのブロックには「bits」という名前で保存されている •  チャートによくある「difficulty」はtargetを⾒やすくしたもの

    (difficulty * 2^32 / 600 = target)
  11. 11 ©Gunosy Inc. ハッシュ値について •  ハッシュ関数を⽤いて⽂字列を変換する。 •  変換された後の値のことをハッシュ値と呼ぶ。 •  少し数値を変えただけで全く違う値に変換される。

    •  どんな⽂字列でも同じ⻑さになって変換される。 •  bitcoinはSHA-256というハッシュ関数を利⽤している。
  12. 12 ©Gunosy Inc. ハッシュ値の例 •  SHA256(bitcoin0) -> 2277EFD2E9051A1978682CAD7A111876031F7FCDB9A2A06B5FDEEE160DD8F34E •  SHA256(bitcoin1)

    -> DBDBAC0B3072D7677FC94EEBAF8EBA9E81E5C3B7DE6899DAE12C98D6799B065A •  SHA256(bitcoin2) -> 1ED7259A5243A1E9E33E45D8D2510BC0470032DF964956E18B9F56FA65C96E89 16進数表⽰なので64桁。2進数だと256桁(256bit)
  13. 13 ©Gunosy Inc. ビットコインのハッシュ値の作り⽅ •  ver (バージョン)4byte •  preview hash

    (前回発⾒されたハッシュ値)32byte •  markle root (トランザクションを要約したハッシュ値) : 32byte •  time (ハッシュ値を計算したときの時間):4byte •  nonce (⾃由に⼊れることができる値)4byte •  bits (difficulty targetを変換した値)4byte ハッシュ値の計算に使う値 nonceを⼊れ替えて毎回ハッシュ値を計算する。(実際はもう少し⼯夫してる)
  14. 14 ©Gunosy Inc. マイニングとは •  targetを下回るハッシュ値を⾒つける競争 どちらも0〜2^256で表現される値 本質的には先にサイコロの出た⽬がn以下になったら、 勝ちと変わらない。極端に難しいだけ。

  15. 15 ©Gunosy Inc. マイニング成功確率の計算 サイコロの場合 l  1回振ったときにn以下になる確率 —  n /

    6 マイニングの場合 l  1回ハッシュ値を計算したときにtarget以下になる確率 —  1 / target —  いまはだいたい 1 / 2^68 くらい l  ⾒⽅を変えれば、2^68回計算したら1回はたぶん⾒つかる。 l  10分に1回⾒つかるように調整されてるということは、   10分間で2^68回ハッシュ値が計算されると想定されている。 => これでハッシュレートを計算できるぞ!
  16. 16 ©Gunosy Inc. ハッシュレートの計算 計算例 l  target = 2^68 とする。

    l  ハッシュ値の発⾒時間は前回のマイニング成功から10分(600秒)とする。 —  target / 600 = 491913175298921408(hash/second) l  実際には係数を考慮する必要があるのでもう少し⼤きい。 l  ブロックにあるbitsからtargetへ変換する必要がある。 githubにコードを置いておきました。 https://github.com/ikutyy/bitcoin_hash_rate_culculate
  17. 17 ©Gunosy Inc. 計算してみた •  400000~410713ブロックを集計(blockchain.infoのAPIから取得) •  dayの総ハッシュ計算量 / dayのブロック数(マイニング成功回数)

    •  ⽣成時間がマイナス(⽣成された時間が前より早い?)のブロックは ひとまず絶対値で計算。
  18. 18 ©Gunosy Inc. 結果

  19. 19 ©Gunosy Inc. 参考資料 •  bitcoin wiki •  https://en.bitcoin.it/wiki/Difficulty • 

    https://en.bitcoin.it/wiki/Target •  Gunosy Tech Blog •  http://tech.gunosy.io/entry/crypto-mining-summary •  その他 •  『ビットコインとブロックチェーン:暗号通貨を⽀える技術』 •  https://www.bitcoinbook.info/translations/ja/book.pdf