はじめに
Aさんが自分のウォレットから、Bさんのアドレス宛に1BTCを送金した場合の、流れについて個人的にまとめてみた。
BTCの送金のしくみ
AさんがBさんに1BTC送金すると、AさんがBさんに1BTC送金しましたよという取引データが作成される。これをトランザクションという。
作成されたトランザクションは、インターネット上にブロードキャストされる。要は、ビットコインの取引に関わっている全ての人にブロードキャストされる事になる。BTCの取引は世界中で行われているため、日夜膨大なトランザクションがネット上に流れている。
複数のトランザクションはまとめられて、1つのブロックという単位が作られる。1つのブロックは数百のトランザクションで構成されている。そのブロックを、最終的にはブロックチェーンという台帳に書き込むのだが、その前にマイニング(採掘)と呼ばれる作業が入る。
マイニングにも様々な仕組みがあり、BTCで採用されているのが、PoW(Proof of Work)という仕組み。直訳すると「作業による検証」ってところだろう。PoWによるマイニングには膨大な計算量が必要になるため、それなりのコンピュータパワーが必要になってくる。
PoWの計算方法についてだが、sha256というハッシュ関数があり、この関数に適当な値をランダムに代入していく。値を代入すると、ハッシュ値を出力してくれるのだが、このハッシュ値に、先頭から0が16桁並んだ値が現れれば正解という事になる。
何の値を入力すれば、このハッシュ値を出力してくれるのか分からないので、見つかるまでランダムに代入していく事になる。この代入する値の事をナンス値という。そして、このナンス値を見つけるのが各マイナーの間で競争になる。誰よりも早く正解のナンス値を見つけられた人が晴れて、ブロックチェーンの最終列に新しいブロックを追加できる名誉ある権利を得る事ができる。そして、その人にはBTCの報酬が与えられる。これがインセンティブになって、マイナーはBTC稼ぎのためにマイニングに精を出すのだ。
この計算競争なのだが、マシンパワーが大きければ大きい程有利である事には違いはないのだが、どうもどれだけ高性能のマシンでマイニングしたとしても、ナンス値が見つかるまで10分前後かかるように自動的に調整がかかるようになっているようだ。
さて、マイニングに成功して、ブロックを既存のブロックチェーンに追加する前に、整合性チェックという工程が入る。マイニングに成功したブロックは、ネット上にブロードキャストされ、マイニングによって見つかったナンス値とハッシュ値との整合性が本当に妥当かどうか、複数人によって再計算のチェックが入る。整合性チェックがOKであれば、晴れてブロックチェーンに追加される事になる。
流れは、まだ終わりではない。
Bさんに送られたトランザクションなのだが、本当に送信元がAさんなのか、Bさん側で確かめる必要がある。この本人確認が公開鍵暗号化方式という仕組みで行われる。
公開鍵暗号化方式の仕組みについてだが、Aさんはトランザクションをハッシュ化して、それに、自分の秘密鍵を用いてデジタル署名を付加させる。そしてBさんに送付する。受け取ったBさんは、Aさんの公開鍵を用いて、デジタル署名からハッシュ値を取得する。その後、送られてきたトランザクションをハッシュ化してみて、そのハッシュ値と比較して同じ値であれば、改竄されていないと判断する事ができる。
これで晴れて、BさんはAさんから1BTCを受け取ったという事になる。