主页 > imtoken官网下载广告 > 科学:比特币的区块和区块链

科学:比特币的区块和区块链

imtoken官网下载广告 2023-01-17 04:37:31

科普:比特币的区块和区块链

对区块头数据做SHA256得到S1的值

00844eeb8713eb62bc33df34ca0cfa7af2ee152a6b16788fd3f2fea69861f3c8

对S1做SHA256得到S2的值

06e533fd1ada86391f3f6c343204b0d278d4aaec1c0b20aa27ba030000000000

这短短的2个,日期区块哈希

000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506

关于nBits和nNonce的含义,下篇介绍。

比特币区块链高度查询

默克尔树

Merkle 树是一个二叉树,它汇总了一个区块中的所有交易,代码参见 merkle.cpp。 Merkle 树会生成整个交易集的数字指纹,形式为

科普:比特币的区块和区块链

交易会放在Merkle树最底层的叶子节点上,如图,如果交易数为奇数,则复制最后一笔交易补上,其中:

科普:比特币的区块和区块链

无论区块中有多少笔交易,都使用 Merkle 树结构进行汇总比特币区块链高度查询,将顶层树根 Merkle Root 的值放在区块头的 hashMerkleRoot 字段中。

比特币区块链高度查询

Merkle 树将区块头与区块中的交易相关联。如果区块中的交易发生变化,默克尔树的根值就会发生变化,从而改变区块头,改变整个区块。哈希 ID。

使用 Merkle 树的另一个好处是它提供了一种有效的方法来验证交易是否存在区块。对于下面的 Merkle 树,

科普:比特币的区块和区块链

为了证明交易K在区块中,使用

科普:比特币的区块和区块链

这四个哈希值构成了一个“Merkle路径”,只需要128个字节。任何人都可以使用这个路径来验证区块是否包含交易 K。

比特币区块链高度查询

币库

一个区块最多只能有一个 Coinbase 交易(通常是该区块中的第一笔交易),它没有输入,并且“从无到有”产生输出,即会发行新的比特币。

随着区块的产生,新的比特币会不断被“创造”出来。

比特币协议规定:

生成 210,000 个区块,大约需要四年时间。

关于比特币的总量,你可以写一个程序来计算。

比特币区块链高度查询

 package main import "fmt" func main() { totalBitcoin := 0 halfCount := 0 // 减半的次数 for coinbase := 5000000000; coinbase >= 1; coinbase /= 2 { fmt.Println(coinbase) totalBitcoin += coinbase * 210000 //  210000 个区块 Coinbase 减半 halfCount += 1 } fmt.Println("------------------") fmt.Println(halfCount) fmt.Println(totalBitcoin) } // 输出 // 5000000000 // 2500000000 // 1250000000 // 625000000 // 312500000 // 156250000 // 78125000 // 39062500 // 19531250 // 9765625 // 4882812 // 2441406 // 1220703 // 610351 // 305175 // 152587 // 76293 // 38146 // 19073 // 9536 // 4768 // 2384 // 1192 // 596 // 298 // 149 // 74 // 37 // 18 // 9 // 4 // 2 // 1 // ------------------ // 33 // 2099999997690000 

需要注意的一点是比特币区块链高度查询,由于Coinbase交易不需要输入,所以可以在解锁脚本中填写任意值(2~100字节),这个值称为Coinbase数据。

根据BIP-34的要求,Coinbase数据需要以本次Coinbase交易所的区块高度开始。

交易d0ec21e1d73d06be76c2b5b1e5ec486085bda8264229046c11b95f66f2eded83的Coinbase数据为

 03ec59062f48616f4254432f53756e204368756e2059753a205a6875616e67205975616e2c2077696c6c20796f75206d61727279206d653f2f06fcc9cacc19c5f278560300 

0x03开头的

比特币区块链高度查询

表示块高数据后跟3个字节,值为0x0659ec(小端模式),即416236。

区块链

注意区块头中 hashPrevBlock 字段的神奇作用。每个块都会将其前一个块的哈希值写入自己的块头中。区块的哈希就是区块头的哈希。

科普:比特币的区块和区块链

如果链中某个区块的数据发生变化(例如,区块中的交易被替换),那么该区块的哈希值也会发生变化。会发生变化(默克尔树的根发生了变化),下一个区块的区块头数据和区块哈希会同时发生变化,带来一系列的连锁反应。

即从这个改变的区块开始,所有后续的区块都必须重新计算。

这是比特币区块链的一个非常重要的特性。

一段时间内产生的交易通过验证后,将被打包(排序)到区块中,并“通知”全网。网络中的节点根据规则选择接受(跟随)这个块(放块)。此块包含在分类帐中),或者被拒绝(丢弃)。