[bitcoin]ブロックの構造

はじめに

前回はBitcoinトランザクションだったので、今回はブロックを見ていく。

申し訳ないが、今回も文字ばっかりだ。

ブロックも、Bitcoinプロトコルのページを参照しながら読み解こう。

ここでは8項目載っているが、大きくはブロックヘッダとそれ以外に分かれる。versionからnonceまでの6項目がブロックヘッダだ。ブロックハッシュと呼ばれる値があるが、実はあれはブロックヘッダの部分をハッシュ計算している。

ブロックヘッダ

Bitcoin Coreのコードだとこの辺りになる。ブロックのデータは読み込むことはあっても、マイニングとかしないと書き込むことはあまりないんじゃなかろうか。そう思って、あんまり勉強していない・・・。

気になる項目だけ見ておこう。

まずは nonce だ( extra nonceというフィールドもあるらしいが調べてない)。コンセンサスアルゴリズムがProof of Workの場合、 nonce の値を変更しながらブロックハッシュを計算し、ハッシュ値(というかハッシュ値のエンディアンを逆にした値)の先頭からゼロが難易度に応じた数以上連続になる値を見つけた人を「仕事した」とするようになってたはずだ。ハッシュ値は32バイトあるので、16進数の桁数だと64桁。

例えばこのブロックだと、0が19個連続している。その付近のブロックも19個連続しているので、その時点での難易度は19桁なのだろう。計算式があるようだが、そこら辺は調べてない。

ハッシュの結果は元データからは推測できない(とされている)ので、 nonce をどういう値にしたらよいのかというのは事前には分からない。なのでがんばって nonce の値を変更しては計算し、変更しては計算してを繰り返して条件を満たす値を探すしかないのだ。その作業がマイニングと呼ばれているやつである。

マイニングはそういう大変な作業なのだが、やってる人が結構いる(人というか企業)。なんでかというと、該当する nonce の値を見つけて、それを他の人たちも「仕事してるね」と見なしてくれると報酬がもらえるからである(他の理由もあるだろうけど、人数比としたらたぶんそうだろう)。どのくらいかというと、今だとブロックが67万くらいだから1ブロック辺り6.25 BTCだ。

1ブロック辺りだいたい10分くらいで生成される(されるように難易度が自動調整される)ので、1日チャンスは144回程度ある。今のBitcoin価格からすると結構な額になる(先のことは知らん)ので、何日に1回以上当たればプラスになる、みたいな感じでやってるんじゃなかろうか。勝手な想像だけど。

なので、その nonce探し競争に勝とうという参加者が増えていき、そうすると難易度が高くなって・・・という感じになって、もはや個人ではやれない領域になってきているそうだ。マイニング業とかマイニングプールとか集団でやるようになってるのだが、詳しくないので割愛だ。

そんな感じで nonce を見つける作業はBitcoinを維持する上で重要なのだけど、それを善意とかじゃなくて経済的な理由で成り立たせてるのが面白いですな。

次は timestamp かな。文字通りタイムスタンプで、形式としてはUNIXと同じく1970年1月1日からの秒数が入っている。
で、ここが4バイト分しかない。備考欄にも”Currently limited to dates before the year 2106!”と書いてあるように、あと85年くらいで値がいっぱいになってしまう(符号付きの4バイトだと2038年問題になるが、ここは符号無しだ)。

2106年で4バイトいっぱいになった後はどうなるんだろうね? また0から始めるんだろうか。コードを読んだらわかるかもしれんが、そのときBitcoinがどういう状況か分からんし、新しいBIPとかで変更になるかもしれんし、気にしても仕方ないのか。

merkle_root は、ブロックに入っているトランザクションたちのTXIDの集合や順番を一つの数字として表したものだ。merkle_root の値を単独で使うことはあまりなくて、TXIDの検証をするときに使うはずだ。

1つ前のブロックハッシュであるprev_block ももちろん大切な要素だ。これがあるから、ブロックがチェーン上につながっていることになるのだし、過去のブロックが変更されたらそれが最新のブロックまで連帯責任(?)でハッシュ計算に影響してくることになるのだ。

ブロックヘッダに続いて、トランザクション数と、あとはその数のトランザクションデータが入っている。

おわりに

ざっとした感じでBitcoinブロックの説明をした。

そういえば、今回はProof of Workでしか考えてなかったので、signetの場合にどうなるのかは別途調べないといけないな。

https://github.com/bitcoin/bitcoin/blob/master/share/pixmaps/bitcoin256.png

株式会社Nayuta

Bitcoinの2nd Layer技術-ライトニングネットワークのプロトコルとアプリケーションの開発を両輪で行う。この分野において当社は世界的認知を得、コントリビュータとしてグローバルなコミュニティで活動を継続中。最新のリリースの中には利便性とセキュリティを両立したSPVとフルノードのハイブリッドモデルNayuta Coreがある。
また、様々なタイプのブロックチェーンが共存する時代が近づいていることから、エンタープライズ向けブロックチェーンに関するビジネスも行っている。

--

--