Bitcoinが仮想通貨、正式には暗号通貨と呼ばれているのは知ってて、ハッシュという何かを使っててそれがマイニングとして使われているという雰囲気的なことは皆さん理解していると思います。今回はちょっと専門的な話もしつつ、実際のマイニングとは何なのかを実践で解説したいと思います。
cryptographic hash function
いきなり英語です。これは暗号ハッシュ関数と呼びます。仮想通貨と呼んでいますが英語ではCrypto currencyと書きます。これは仮想ではなく暗号という意味です。仮想だとvirtual(バーチャル)になりますから。プログラムに携わっている人たちはハッシュというとすぐに色々と思いつくでしょう。私は完全なプログラマーではありませんのであまりプログラムは得意じゃないですが、この辺なら解説もたぶんできるでしょう。
この記事では簡単な実験通してハッシュ関数というものを実際に理解してもらいます。
ハッシュ関数って何?
まずはwiki先生の説明から
ハッシュ関数 (ハッシュかんすう、hash function) あるいは要約関数とは、あるデータが与えられた場合にそのデータを代表する数値を得る操作、または、その様な数値を得るための関数のこと。ハッシュ関数から得られた数値のことを要約値やハッシュ値または単にハッシュという。
これでわかる人はまずいないでしょう。私もわかりません。
簡単にいうとハッシュ関数を使うと暗号的な文字が出力されるという解釈で大丈夫です。
実際に試してみる
ここではプログラム言語のpythonを使って実際にハッシュ関数を試してみます。Linux、Macの方は同じように試すことができます。windowsの方はターミナルがないのでpythonが動く環境を作ってください。
ターミナルを開く
ターミナルというアプリを開きます。
ここで
pythonと打ち込みEnterを押します。
このようにpythonのバージョンが書き出されます。このバージョンはそこまで気にしなくても良いです。
こうすることでプログラムをファイルに書かなくても直接ここで試したりできるようになります。
プログラムを打ち込む
このように打ち込んでください。これが何のかは気にしないで大丈夫です。
import hashlib
def hash(mystring):
[TAB] hash_object = hashlib.md5(mystring.encode())
[TAB] print(hash_object.hexdigest())
[ENTER]
打ち込んでhash("bilee")
というように文字を入れていきます。この「””」に囲われた中の文字がハッシュ関数化されて暗号されて出力されます。
hash(“bilee”)の下にabef06c4d678ba151c5f63c53f985f60このような暗号が出力されましたね。これがハッシュ関数で出力した暗号です。
hash(“bilee”) => abef06c4d678ba151c5f63c53f985f60
hash(“bilee !”) => b5d912dde3ca9d1059eba8dd57814ff4
このように文字を少し変更しただけ全く違うハッシュが出力されています。
これがハッシュ関数です。これはデモンストレーション用のプログラムコードなのでウォレットや実際のビットコインはもっと複雑なコードになっています。
マイニングの実験
上記の例では文字が一つでも違うと全く異なる文字列が出力されることがわかりました。
逆にマイニングとは証明を行うわけですから何度も何度も計算をしていきます。
そのトランザクションの時間など色々な情報を加えて計算します。
簡単なデモンストレーションを行います。
先ほどのpython言語で簡単なマイニングを行うことができます。
先ほどの、hash(“bilee !”)に「!」を付け加えていき最初の頭が0になるまで繰り返していきます。
hash(“bilee !!”) => fc6a3c5058f8316fd109ab894ad0296a
hash(“bilee !!!”) => 8aabd58c7188c9f7ef314ea708c657e4
hash(“bilee !!!!”) => 01a1800ba03b95e5c73aaaae96d2335b =>計算終了
このような感じである条件でどんどん計算していきます。
ビットコインブロックの場合は18桁の0になるまで計算していきます。これが10分毎に行われています。
bitcoin block
これがあるbitcoinのブロックです。
ハッシュの数字が0が18個あるのがわかると思います。
重要な箇所だけ解説します。
取引件数: このブロックに含まれている取引数
取引手数料: 取引手数料の総額
サイズ: 999.99KB(1ブロック1MB)
ブロック報酬: マイニング成功業者の報酬
ビットコインのマイニングがどれだけ大変かっていうことがわかったと思います。専用の機械を開発して私たちの取引を認証してくれています。
参照元リンク: Bitcoin Hash Functions Explained