ブロックチェーンのブロック

ブロックチェーンの仕様の修正はソフトフォークとハードフォークがある。ソフトフォークは古いブロックの仕様と互換性がある仕様の修正。ハードフォークは大きな仕様の変更。マイナーがフォークを採用するかどうかにかかっている

ブロック構造
4バイト: Block Size: ブロックのデータサイズ
80バイト: Block Header: ブロックヘッダ
1〜9バイト: Transaction Counter: ブロックに含まれるトランザクション数
可変長: Transactions: ブロックに含まれるトランザクションのリスト

ブロックの識別子はブロックハッシュとブロック高がある
getchaintipsで先端がわかる
vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ bitcoin-cli getchaintips
[
{
“height”: 0,
“hash”: “000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f”,
“branchlen”: 0,
“status”: “active”
}
]

マイニング処理
当初の設計ではnonceフィールドの値を順次変更しながらsha-256によるハッシュ値の計算を求め、そのハッシュ値がブロックヘッダのdifficulty targetフィールドで定められた難易度ターゲットよりも小さい数値であれば成功

現在は、Thash/sec, PHash/sec, EHash/sec
新規ブロックの作成と同時にマイナーが作成するコインベーストランザクションの領域を利用
コインベーストランザクションをextraNonceとして利用している
hash char[32] 32byte
index uint32_t 4byte
script bytes compactSize unit
height script
coinbase script None
sequence uint32_2 4byte

マイニング難易度はdifficulty target
target = 係数部*2**(8*(指数部-3))

def target(difficulty_target)
	exponent=difficulty_target[0..1].hex
	coefficient=difficulty_target[2..7].hex
	(coefficient*2**(8*(exponent-3)))
end