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
600
ビットコインのハッシュレートを計算してみた
Kazuki Ikuta
December 15, 2017
Tweet
Share
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
7
510
Code Reviewing Like a Champion
maltzj
524
40k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
730
Side Projects
sachag
455
42k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Designing Experiences People Love
moore
142
24k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
BBQ
matthewcrist
89
9.7k
A better future with KSS
kneath
238
17k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
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