撮影場所 日本触媒工場前@兵庫県姫路市
姫路市の夜景スポットで有名な日本触媒工場前です。写真が緑っぽく見えているのではなく、工場自体が本当に緑っぽい光だったので少し幻想的でした。
バオウです。
仮想通貨の認証アルゴリズム比較でちらっと話をしていたのですが、PoWの仕組みについて解説していきたいと思います。できる限り平易な表現に落とし込めるように努力します!
Proof of Work(以下PoW)とは、以前解説した通り、計算を最速で完了させた者に報酬を支払う事仕組みを指します。計算を行う事を”マイニング”と呼んでいますね。概要はこれでOKです(厳密には違いますが)。では実際にはどういった計算を行っているのでしょうか。なぜCPUではなく、GPUやASICが必要なのでしょう。その疑問を解決してみたいと思います。
マイニングで実施している事を一言で表すと、以下の通りです。
ハッシュ値(32bit)の最上位ビットから、”0”が特定回数続くナンスを探索する。なおディフィカルティの調整により連続数がどの程度かは時期によって異なる。
以上です。何を言っているか意味不明かもしれませんが、内容は今から説明しますので焦らないでください笑
解説を続ける上で2つ重要な概念を認識していただきたいと思います。
それが"ハッシュ関数"と"ナンス"と呼ばれるものです。ハッシュ関数の仕組みについては割愛しますが、機能的には以下のものを指します。
任意長のビット列から規則性のない固定長のビット列を生成する関数
言い換えれば、既知のデータから意味の分からんデータを吐き出す関数です。この認識を頭に置いてください。ハッシュ関数の特徴としては、ハッシュ関数は一方向関数である為、出力データから入力データを推測・推定する事が困難であるという事が挙げられます。カンニングして、答えは知っているのに問題文がわからないようなイメージです。(?笑)
ナンス(number used once)とは文字通り、
ナンス=一度だけ使用される数字
を指します。特に意味のない数字を指します。
前準備が整いました。ここでマイニングで行っている計算について説明します。
実際にマイニングでは以下の計算を実施しています。
hash(α+β+nonce) = 0000000000000000111111111111111111
hash:ハッシュ関数, α:以前のブロックのハッシュ値, β:今回の取引履歴, nonce:ナンス, 1は別に1でなくてもOK, 0はディフィカルティの調整に依るので、個数はタイミングによって異なる
α+β+nonceをハッシュ関数に代入する事によって、0が複数個続くハッシュ値を探索します。この際、ハッシュ値からnonceを逆推測する事は困難となる為、マイニングではnonceを総当たりします。(ランダムに代入した値から適切なハッシュ値を得たときのナンスを探索している)
ここで、ディフィカルティとは0が何個続くかを調整する事です。0が1つしかない場合と、0が16個ある場合では難易度に相当な差がある事は歴然だと思います。この個数を調整する事をディフィカルティの調整といいます。ディフィカルティの調整は結構な頻度で発生しているので確認したタイミングで異なる場合は多いです。ちなみにDGBは1ブロック毎でディフィカルティを調整する仕組みを導入しています。(DigiShieldといいます)
ついでに解説ですが、PoWのアルゴリズムってありますよね。SHA-256とか。あれはハッシュ関数の名前を指している事を覚えておくと、どや顔できるかもしれませんね!中身は趣味で調べてみてください!
今回はPoWで実際に計算している事についてまとめてみました。
以上です。次回もよろしくお願い致します。
by バオウ\(^o^)/
書いた人 バオウ(@twitter)
過去記事一覧(抜粋)