区块链利用其对修改的敏感性来保证让历史交易记录不被篡改
让历史交易记录不可变的三个要素
- 以对的方式存储历史交易记录,并让对任何交易记录的更改都变得十分醒目且引人注意
- 强制加入修改历史交易记录需要重新编写大部分历史交易记录的要求
- 使更改记录的成本变得很高很高
将新区块添加到区块链数据结构的过程,需要的计算成本并不高,仅仅需要向新区块头增添指向当前区块的哈希引用,并将其作为区块链新的末端
为使添加新区快的成本增加,需要考虑以下几点
-
区块头的哈希引用
计算每个区块头的哈希引用必须要有以下数据: 包含交易数据的默克尔树的根 前一个区块头的哈希引用 哈希难题的难度等级 开始解决哈希难题的时间 解决哈希难题的随机数
-
创建新区块的过程
获取包含要添加的交易数据的默克尔树的根 创建新区块头对前一个区块头的哈希引用 获取所需哈希难题的难度等级 获取当前时间 创建一个包含前四步中所提到的数据的区块头 解决区块头中的哈希难题 将解决哈希难题的随机数添加到创建的区块头中便完成了新区块的创建
-
区块头的验证规则
每个区块头必须满足以下规则: 必须满足对前一个区块的有效哈希引用 必须包含有效交易数据的默克尔树的根 必须包含正确的哈希难度等级 其时间戳需在之前区块头标记的时间戳之后 必须包含一个随机数 上面五个数据组合在一起计算出的哈希值满足难度等级
修改区块链的成本
需要进行以下工作:
重写修改后的交易数据所属的默克尔树
重写被修改的默克尔树的根所属的区块头
重写所有后续的区块头,一直到区块链数据结构的末端
设计一条区块链面对的挑战就在于,确定恰当的哈希难题的难度等级