Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ビットコインのハッシュレートを計算してみた
Search
Kazuki Ikuta
December 15, 2017
0
570
ビットコインのハッシュレートを計算してみた
Kazuki Ikuta
December 15, 2017
Tweet
Share
Featured
See All Featured
Making Projects Easy
brettharned
107
5.5k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
124
32k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
24
2.3k
Fireside Chat
paigeccino
19
2.6k
We Have a Design System, Now What?
morganepeng
42
6.7k
Code Review Best Practice
trishagee
54
15k
Why Our Code Smells
bkeepers
PRO
331
56k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
6
990
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
5
1.5k
Why You Should Never Use an ORM
jnunemaker
PRO
50
8.6k
How to train your dragon (web standard)
notwaldorf
71
5.1k
What's new in Ruby 2.0
geeforr
336
31k
Transcript
ビットコインのハッシュレートを計算してみた blockchain.tokyo#3 ⽣⽥ 和希
2 ©Gunosy Inc. ⾃⼰紹介 名前 : ⽣⽥ 和希 (いくた かずき)
@ikutyy 所属 : 株式会社Gunosy 新規事業開発室 (内定者インターン) 早稲⽥⼤学 ⽂化構想学部 4年 趣味 : 将棋(アマチュア五段くらい) / 能(宝⽣流) 個⼈的なトピック : 先週、卒論提出したぞ!!!!!
3 ©Gunosy Inc. 今⽇の内容 ハッシュレートの計算⽅法(と関連する基本知識) h"ps://blockchain.info/ja/charts/hash-rate より
4 ©Gunosy Inc. ハッシュレートとは マイニングに使われている1秒間の総計算量(理論上)
5 ©Gunosy Inc. ハッシュレートが⼤事な理由 • マイナー視点 -> マイニングの収益性に直結する。 • 投資家視点
-> 価格の上昇と関連があるかも?
6 ©Gunosy Inc. ハッシュレートと価格の関係性 h"ps://bi7nfocharts.com/comparison/hashrate-price-btc.html#3y#1y より
7 ©Gunosy Inc. マイニングとは • 取引を検証して不正がないか確認する • 設定された数値を下回るハッシュ値を⾒つける競争 (ex.サイコロの⽬をn個振って合計がm以下の値にしたら勝ち) •
約10分で⾒つかるように数値が約2週間に1回調整される • 先に⾒つけた⼈が報酬としてコインをもらえる
8 ©Gunosy Inc. マイニングとは • 取引を検証して不正がないか確認する • 設定された数値を下回るハッシュ値を⾒つける競争 (ex.サイコロの⽬をn個振って合計がm以下の値にしたら勝ち) •
約10分で⾒つかるように数値が約2週間に1回調整される • 先に⾒つけた⼈が報酬としてコインをもらえる target
9 ©Gunosy Inc. マイニングとは • 取引を検証して不正がないか確認する • 設定された数値を下回るハッシュ値を⾒つける競争 (ex.サイコロの⽬をn個振って合計がm以下の値にしたら勝ち) •
約10分で⾒つかるように数値が約2週間に1回調整される • 先に⾒つけた⼈が報酬としてコインをもらえる ハッシュ値
10 ©Gunosy Inc. targetについて • 1〜2^256(およそ10の77乗)まで取り得る値 • bitcoinのブロックには「bits」という名前で保存されている • チャートによくある「difficulty」はtargetを⾒やすくしたもの
(difficulty * 2^32 / 600 = target)
11 ©Gunosy Inc. ハッシュ値について • ハッシュ関数を⽤いて⽂字列を変換する。 • 変換された後の値のことをハッシュ値と呼ぶ。 • 少し数値を変えただけで全く違う値に変換される。
• どんな⽂字列でも同じ⻑さになって変換される。 • bitcoinはSHA-256というハッシュ関数を利⽤している。
12 ©Gunosy Inc. ハッシュ値の例 • SHA256(bitcoin0) -> 2277EFD2E9051A1978682CAD7A111876031F7FCDB9A2A06B5FDEEE160DD8F34E • SHA256(bitcoin1)
-> DBDBAC0B3072D7677FC94EEBAF8EBA9E81E5C3B7DE6899DAE12C98D6799B065A • SHA256(bitcoin2) -> 1ED7259A5243A1E9E33E45D8D2510BC0470032DF964956E18B9F56FA65C96E89 16進数表⽰なので64桁。2進数だと256桁(256bit)
13 ©Gunosy Inc. ビットコインのハッシュ値の作り⽅ • ver (バージョン)4byte • preview hash
(前回発⾒されたハッシュ値)32byte • markle root (トランザクションを要約したハッシュ値) : 32byte • time (ハッシュ値を計算したときの時間):4byte • nonce (⾃由に⼊れることができる値)4byte • bits (difficulty targetを変換した値)4byte ハッシュ値の計算に使う値 nonceを⼊れ替えて毎回ハッシュ値を計算する。(実際はもう少し⼯夫してる)
14 ©Gunosy Inc. マイニングとは • targetを下回るハッシュ値を⾒つける競争 どちらも0〜2^256で表現される値 本質的には先にサイコロの出た⽬がn以下になったら、 勝ちと変わらない。極端に難しいだけ。
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 ©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 ©Gunosy Inc. 計算してみた • 400000~410713ブロックを集計(blockchain.infoのAPIから取得) • dayの総ハッシュ計算量 / dayのブロック数(マイニング成功回数)
• ⽣成時間がマイナス(⽣成された時間が前より早い?)のブロックは ひとまず絶対値で計算。
18 ©Gunosy Inc. 結果
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