区块链特点

区块链中的区块,是记录有特定信息的节点,这些节点收尾相连,构成了区块链。

区块链技术有以下特点:

  1. 去中心化

    不再需要一个中央处理机构负责区块的记录,接入区块链网络的任何节点,都保存有完整的链,都可以接受和处理请求

  2. 数据防篡改

    由于数据全量存储并公开给所有人,必须保证数据是不可更改的

区块链的应用,基本都是围绕上述特点落地,同时也是整个区块链设计中最难的点。

比特币的区块链技术

要实现去中心化和防篡改,比特币采用了两种技术:区块链技术和工作量证明共识机制。

区块链技术blockchain

每个区块保存有特定的信息、本区块ID和上一个区块的ID,其中本区块ID是根据本区块的内容通过hash算法生成的,对内容的改动会导致本区块ID发生变化,导致整个链条断裂,除非修改后面的节点。于是越老的区块,越难修改,可以一定程度上实现数据防篡改。

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b496528e-0bc9-47c5-a569-bd0c2ccad254/Untitled.png

工作量证明(proof-of-work)共识机制

区块链是分布式的,所有节点都可以参与区块的记录,那么大家都进行记录,以谁为准?那个人的记录可靠么?这个就涉及到分布式一致性的问题,可以参考 分布式系统之一:分布式事务和一致性

既然没有一个权威的机构,那么谁可信只能采取少数服从多数的原则,大多数人认为是对的记录,就认为是对的。

比特币采用的做法是,每个区块都有个唯一hash ID,这个ID的生成会有一个要求,需要通过大量的CPU计算,才能得到满足要求的ID。当一个区块的原始数据发布后,全网开始计算,第一个得到这个ID的,将ID公布给其他人,其他人使用原始数据验证没有问题后,就会记录这个结果,并放弃计算。

由于ID的生成很难,同一时间基本只有1个合法ID被计算出来,如果同时出现多个,比特币就会出现分叉,大家可以任意选择一个分叉进行记录(因为计算ID是很费力的,所以大家只能赌其中一个分叉),最终比较短的分叉,会被废弃(即实现了少数服从多数)。

而且,如果篡改原始数据,使得篡改数据可以得到和原始数据一样的满足要求的hash ID,需要特别久的时间(这时候已经有别的人计算出正确的ID了),所以篡改的可能性几乎不存在。如果执意篡改生成错误的ID,否则产生的ID不被认可,也不会被其他节点接受,除非控制全网50%以上的计算节点,这也是很难实现的。

好了,说了这么多,下面看看比特币区块的设计和PoW里面的hash ID如何要求的。

比特币的设计

下面是比特币的区块格式