ブロックヘッダの構築
仕事が忙しくなりだして、いつのまにか3月に。。
ブロックヘッダのフォーマットは、前にも書いたように下のようになっているけど、ブロックヘッダについてもう一度まとめてみる。
ブロックヘッダ(Block Header)フォーマット
サイズ | フィールド名 | 説明 |
---|---|---|
4バイト | Version | ソフトウェア・プロトコルバージョン情報 |
32バイト | Previous Block Hash | 親ブロックのハッシュ値 |
32バイト | Merkle Root | ブロックの全トランザクションに対するマークルツリーのルートハッシュ |
4バイト | TimeStamp | ブロックの生成時刻 |
4バイト | Difficulty Target | ブロック生成時のproof of workのdifficulty |
4バイト | Nonce | proof of workで用いるカウンタ |
$ bitcoin-cli getblock 0000000000000c2e8d3c2a3f74e3006011cc1f4f43b122b587564ad99f3906f6 { "hash": "0000000000000c2e8d3c2a3f74e3006011cc1f4f43b122b587564ad99f3906f6", "confirmations": 80105, "strippedsize": 57982, "size": 58018, "weight": 231964, "height": 1377316, "version": 536870912, "merkleroot": "ab16d417f9dd28c7ad727bc42c363fa37c543fa9a428090fb4c97f0445f886b8", "tx": [ "c84ec94f40f618a6fc168d0d17e869a6b81d342304212999ca81c1ebf0a17de9", "3aca442b1fdf9210ae2d66a530759c407d465203005d5ea7250b3dd2169511d4" ], "time": 1533339910, "mediantime": 1533339846, "nonce": 1902934454, "bits": "1a0f78e0", "difficulty": 1084331.558052198, "chainwork": "000000000000000000000000000000000000000000000085c1e541b4628b5cdf", "nTx": 205, "previousblockhash": "0000000000000cf58ba5dc4f8f2eba6beeb6d7fa79f8272325a4f5aae3ae58c5", "nextblockhash": "0000000000000d7969601e46be6a1407de6cccf72af4d4dd7b48e364801b8d0d"
- Version
"versionHex": "20000000",
リトルインディアンなので、version2ということかな。
- previousblockhash 前のブロックのハッシュは、
"previousblockhash": "0000000000000cf58ba5dc4f8f2eba6beeb6d7fa79f8272325a4f5aae3ae58c5",
- マークルルート "merkleroot": "ab16d417f9dd28c7ad727bc42c363fa37c543fa9a428090fb4c97f0445f886b8",
トランザクションのマークルツリーを作ってそのハッシュを算出すると。
- タイムスタンプ "time": 1533339910,
UNIX秒なと日2016本時間で 2018/08/04 08:45:10
- nonce
"nonce": 1902934454,
- difficulty "difficulty": 1084331.558052198,
difficultyは、約10分でマイニングされるようになってるのは、何回も書いてきたと思うけど、 この値をどのように調整するか分かってなかったので、調べてみた。
2016ブロックごとに更新が行われて、下の式で産出されるとのこと 新しいDifficulty = 旧Dfficulty * 2016ブロック目にかかった時間 / 20160(分) とのこと。