从图上可知,比特币区块结构分为区块头和区块体,区块体保存交易的具体信息,由它生成的hash保存在区块头里。其中区块头细分为:
父区块头哈希值:前一区块的哈希值,使用SHA256(SHA256(父区块头))计算。
版本(Version):区块版本号,表示本区块遵守的验证规则 。
时间戳(Timestamp):该区块产生的近似时间,精确到秒的UNIX时间戳,必须严格大于前11个区块时间的中值,同时全节点也会拒绝那些超出自己2个小时时间戳的区块。
目标值(Bits):该区块工作量证明算法的难度目标,已经使用特定算法编码。
随机数(Nonce):为了找到满足难度目标所设定的随机数,为了解决32位随机数在算力飞升的情况下不够用的问题,规定时间戳和coinbase交易信息均可更改,以此扩展nonce的位数。
Merkle根(MerkleRoot):该区块中交易的Merkle树根的哈希值。矿工收到计算过的区块,会跟自己的区块进行比较,其中Merkle root就是比较它们包含的交易是否一样。
区块头里的所有信息拼接成一个新的字节数组,pow函数运算的参数就是这个字节数组。函数运算是采用SHA256(SHA256())计算。
var genesisBlock = wire.MsgBlock{
Header: wire.BlockHeader{
Version: 1,
PrevBlock: chainhash.Hash{}, // 0000000000000000000000000000000000000000000000000000000000000000
MerkleRoot: genesisMerkleRoot, // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b
Timestamp: time.Unix(0x495fab29, 0), // 2009-01-03 18:15:05 +0000 UTC
Bits: 0x1d00ffff, // 486604799
Nonce: 0x7c2bac1d, // 2083236893
},
Transactions: []*wire.MsgTx{&genesisCoinbaseTx},
}
1
2
3
4
5
6
7
8
9
10
11
更多内容请进入www店liankexing店com