网友发帖:
【转】AsicBoost和SegWit的技术讨论。关于AsicBoost和SegWit的讨论已经冷清了很多,但我还是想从技术的角度尝试解释下:
- AsicBoost是什么
- AsicBoost和SegWit有什么关系
在说这两件事情之前,离不开一个关键词:挖矿,那就先来说说挖矿吧!挖矿比特币的挖矿机制:比特币挖矿机制采用的是SHA256算法,但SHA256算法并不是针对整个块做的,而是只是针对块头(Block Header)做SHA256,下图是block的组成:
从上图中可以看到Block hash是从哪些字段组合之后再做hash而得到的,其中黄色背景的字段就是块头,它包含:- 版本号
- 上一个块的hash
- Merkle root
- timestamp(时间戳)
- bits(难度)
- Nonce (随机数)
在一轮挖矿过程中,其中的版本号、上一块的hash、难度都是确定的,矿工需要做的就是不断的修改Nonce,以改变当前块的hash值以找到小于当前难度的Block Header。但Nonce的可用搜索空间是不够的,原因就是Nonce的位数只有4bytes。Block Header中各字段所占的位数:4bytes的Nonce的意味着他的搜索概率空间为2^32,也就4G次的hash运算就能遍历完,对于当前的单个矿机来说也就是一瞬间就可以完成的事。在Nonce的搜索空间不够的情况下,就只剩下timestamp和Merkle root可以改变了,timestamp可以前后调整,但是调整之后的搜索空间还是不够。矿工通过修改Coinbase交易、或者交易顺序、或者其他的方式,获取新的Merkle Root,再重新做232次Nonce的遍历。而`Merkle Root`是32 bytes,它的搜索空间足够大。总结比特币的挖矿:简单来说比特币挖矿就是通过不断更改Nonce来改变块hash以寻找小于当前难度的Block Header,但是Nonce的搜索空间太小了,在做完232 次哈希没有找到对应的块头就需要变更Merkle Root重新计算。
上面说了简单说了下比特币挖矿机制,那AsicBoost又是怎么回事呢?AsicBoostAsicBoost是和SHA256的计算、Block Header结构有关的一种算法,在开始计算块头hash的时候是需要补齐到128 bytes再做SHA256计算,而上面所示块头只有80 bytes,剩下的需要使用固定的48 bytes填充到128 bytes。而在计算128 bytes的hash的过程是分两个过程进行的,前64 bytes一起计算,后64 bytes一起运算:
这样一个被填充过的块头就被分成了两个部分,比较有意思的是Merkle Root,Merkle Root的32个bytes中前28个bytes被放在前部分计算,后4个bytes被放在后部分计算,Block Header hash的计算公式为:SHA256=F(Chunk1)+B(Chunk2)Chunk1=(version)+(Previous hash)+F28(Merkle root)Chunk2=B4(Merkle Root)+Timetamp+Bits+No