北大肖臻-第5讲-比特币系统的实现

第五讲 比特币系统的实现

两种记账的模式:

  1. 基于交易的账本模式

  1. 基于账户的账本模式

具体区块案例

注意观察:本块的hash值与前一块块头的hash值的特点,前面n位都为0,这是挖矿难度设置的必然结果。

Block Head 的数据结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9VsFi8dT-1596374100640)(http://xwjpics.gumptlu.work/qiniu_picGo/20200619194947.png)]

nNonce是无符号32位整形,最多有2的32次方的随机数,按照当前比特币挖矿的难度,就算把所有的随机数遍历一遍可能都无法达到要求。

单纯调整Nonce的值有很大的概率找不到符合要求的值(因为搜索空间不够大)

还可以修改什么地方的值呢???

如图所示,还可以修改的是Merkle Tree 的根哈希值以及修改一定范围内的时间戳的值(因为比特币对时间没有那么高的要求)

为什么可以修改根哈希值呢?

这是coinbase transaction(铸币交易)的交易内容:

其中的CoinBase域的值是可以随意设置的,这将影响整个Merkle Tree的根哈希值。

从图中的红色标记可以看出,随着coinbase的变化导致由根部向上直到root hash值的改变,所以可以把这个域当做是extra nonce

可以把coinbase的前8个字节(64比特位)作为extra nonce,那么就一共课产生2的96次方种随机数,就要采用双层循环来实现,外层调整coinbase,内层调整块头的nonce值。

再看一个普通的交易内容:

注意:这里的两个脚本是同一个交易的输入和输出,验证交易合法是将这里的Input Script和前一个块的Output Script配对 ,如果两者拼接到一起能够执行不出现错误,那么这个交易就是合法的

找出教材图问题所在

这个教材里面图有哪里出了问题?

hash函数中只需要对Merkle Tree root hash求哈希即可,因为其保证了整个树中的所有交易的确定性,其把许多的tx写进去容易让人产生误解,以为块头中包含了交易信息,其实是没有的。

挖矿过程的概率分析

比特币总量、比特币安全性分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZChL7oud-1596374100658)(http://xwjpics.gumptlu.work/qiniu_picGo/21.jpg)]

猜你喜欢

转载自blog.csdn.net/weixin_43988498/article/details/107751397