Discuss / 区块链 / block hash

block hash

Topic source

fkdyufu

#1 Created at ... [Delete] [Delete and Lock User]

廖老师,block hash存放在哪?block hash是通过区块头部计算出来的,但是计算出来后会一直验证区块内容是否被修改过吗?或者说什么时候会验证呢?

1:block hash存放在哪?

答:不需要存。一个区块自己的区块哈希并没有记录在区块头部,而是通过计算区块头部的哈希得到的。下一个矿工会主动校验上一个区块是否为合法的区块,然后校验通过的时候矿工会自己计算出来上一个区块的block hash并把上一个区块的Block Hash作为当前区块的Prev Hash。

2:block hash是通过区块头部计算出来的,但是计算出来后会一直验证区块内容是否被修改过吗?或者说什么时候会验证呢?

答:不会一直校验区块内容是否被修改过并且也不需要一直校验。每一个区块有一个Merkle Hash用来确保该区块的所有交易记录无法被篡改。下一个矿工如果要把他打包的区块挂到当前这个区块后面的时候,矿工自己会主动去校验的。矿工不会傻儿吧唧的把自己的区块挂在一个非法的区块后面。矿工首先会计算上一个区块Merkle Hash跟这个区块头部的Merkle Hash是否一样。如果一样,再计算区块头部的Merkle Hash字段+区块头部的Nonce字段+其他字段算出来上一个区块的Block Hash。然后矿工会校验这个Block Hash是否满足比特币规定的规则(是否满足开头有N个0存在)。如果计算出来的Block hash满足比特币规定的规则,那么这个区块就是合法的。如果有人修改了上一个区块里面的交易,那么上一个区块的Merkle Hash字段就会发生变化。发生变化之后的Merkle Hash字段+区块头部的Nonce字段+其他字段算出来的Block Hash肯定就不满足比特币的规则了(是否满足开头有N个0存在),就是不合法的。那个这个区块就不会被矿工承认。注意,注意,超级注意,如果有人修改了区块里面交易内容并且同时把区块头部的Merkle Hash字段修改了,并且修改后的Merkle Hash字段+区块头部的Nonce字段+其他字段算出来的Block Hash又刚好满足比特币的规则(是否满足开头有N个0存在),那这个修改不叫修改,这就是矿工的正常打包区块。也可以叫发生了Hash碰撞了,要知道Block Hash使用的哈希算法是hash256算法,这个算法发生碰撞的概率是非常非常低的,低到你都不敢想象有多低,比地球突然爆炸了的概率都低。

如果一样,再计算区块头部的Merkle Hash字段+区块头部的Nonce字段+其他字段算出来上一个区块的Block Hash。然后矿工会校验这个Block Hash是否满足比特币规定的规则(是否满足开头有N个0存在)

--------------------------------------------------------------------------------

老师,针对这个回复,我有2个疑问:

Merkle Hash字段这字段在经过一次记账后就会重新计算,

1.怎么保证计算出来的Block Hash始终满足比特币规定的规则呢?

2.Merkle Hash重新计算后,会导致Block Hash发生变化,那是否会导致链上的其他区块(下游区块)都需要修改prev_block?

不会

#4 Created at ... [Delete] [Delete and Lock User]

Merkle Hash字段这字段在经过一次记账后就会重新计算,

————

这里你可能有个误区,已产生的区块内的交易记录是固定不变的,新产生的交易记录会在新区块进行打包。所以不存在你说的“经过一次记帐重新计算Merkle Hash”。


  • 1

Reply