在区块链中,无论是公链还是联盟链,至少需要四个模块组成:P2P 网络协议、分布式一致性算法(共识机制)、加密签名算法、账户与存储模型。
1. P2P 网络协议。P2P 网络协议是所有区块链的最底层模块,负责交易数据的网络传输和广播、节点发现和维护。它遵循一定的交互原则工作。
2. 分布式一致性算法。在经典分布式计算领域,有Raft和Paxos算法家族代表的非拜占庭容错算法,以及具有拜占庭容错特性的PBFT共识算法。而在区块链领域,多采用PoW工作量证明算法、PoS权益证明算法,以及DPoS代理权益证明算法,以上三种是业界主流的共识算法,这些算法与经典分布式一致性算法不同的是融入了经济学博弈的概念。
3. 加密签名算法。在区块链领域,应用最多的是哈希算法。哈希算法具有抗碰撞性、原像不可逆、难题友好性等特征。
4. 账户与存储模型。从技术角度可以认为区块链是一种分布式数据库,那么,多数区块链到底使用了什么类型的数据库呢?在区块链中主要有两种记录保存方式,UTXO模式(Unspent Transaction Output)和Account(账户)模式。UTXO是“unspent transaction input/output”的缩写,翻译过来就是指“未花费的交易输入输出”。UTXO模型中,交易只是代表了UTXO集合的变更,而账户和余额的概念是在UTXO集合上更高的抽象,账号和余额的概念只存在于钱包中,计算是在链外的,交易本身既是结果也是证明。节点只做验证即可,不需要对交易进行额外的计算,也没有额外的状态存储,链的状态一般在区块中以StateRoot和ReceiptRoot等形式进行共识,交易只是事件本身,不包含结果,交易的共识和状态的共识本质上可以隔离,合约以代码形式保存在Account中,并且Account拥有自身状态。这种模型具有更好的可编程性,容易开发人员理解,场景更广泛。