区块链是一个多机复制数据库,并且网络中每台计算机上维护相同的数据。这种类型的分布式系统也被称为“复制状态机”。
复制状态机是一种多机复制、确定性状态机,但因为网络中每台计算机都维护着相同的状态,因此在功能上看起来就像一台单机。
“确定性” 可以简单地理解为,给定一个确定的输入,状态机将始终产生相同的输出。在区块链系统中,“确定性”意味着如果你从一个给定状态开始执行相同的事务序列,你总是会得到相同的最终状态。
复制状态机从某个状态开始执行,每笔有效事务都将导致系统状态转变到下一个状态(这与数据库中数据更新相同,如果你更新数据,数据库将迁移到包含该更新后数据的新状态)。
复制状态机在概念起码可以分成三个层次:
1.应用层
应用层负责状态转变,并在事务发生后更新状态机状态。
2.网络层
网络层负责将在某一个状态机上执行的事务传播到网络中其他所有状态机上。
3.共识层
共识层由算法组成,负责确保在事务执行后每一台状态机都存储相同的状态,即分布式一致性。
4.抗女巫攻击层
如果复制状态机需要运行在去中心化网络,那么它还需要抗女巫攻击层,确保任何一台状态机都不能破坏网络。如果没有这一层,状态机可以通过创建许多假身份来篡改状态,从而获得与其投入不成比例的影响或收益(即,发起女巫攻击)。
总之,应用层负责状态更新与状态转变。网络与共识层负责保持每台机器上状态一致,即分布式一致性。抗女巫攻击层负责避免女巫攻击。
最后,让我们看看在比特币和以太坊中是如何定义与实现以上架构的。
比特币的架构
1.应用层
比特币的主要应用是 P2P 交易。比特币使用 Script(一种堆栈式非图灵完备的语言)来定义与执行交易。当发送方通过交易发送比特币时,发送方将使用 Script来编码指定谁才能得到这笔资金。 Script 包含一组操作码或命令,发送方可以使用这些操作码来指定要花费一笔比特币所需满足的条件。
2.网络层
当发送方向接收方发送比特币时,该转账交易必须被广播到网络中,才能使矿工将其打包进区块中。比特币使用Gossip 协议来确保每个节点都会将其接收的所有新区块或交易发送至邻居节点。Gossip 协议是确保消息在全部节点间传播的 P2P 协议。比特币网络中所有节点都会将其新接收的有效交易立即发送给其邻居节点,从而使得待打包交易能够在几秒钟内通过点对点网络传播到大多数节点。
3.共识层
在交易被转播到网络中后,还需要将其添加到区块链中才能完成转账。验证交易并将其打包到区块中的过程称为“中本聪共识(Nakamoto Consensus)”。
4.抗女巫攻击层
中本聪共识依赖于“工作量证明(Proof-of-Work)”来防止女巫攻击。因为矿工需要大量的算力来产生下一个区块,他们无法在不增加大量算力(与资金)投入的情况下“伪造”多个身份。基本上,产生一个新区块所需的算力使得比特币共识协议自身能够抵抗女巫攻击。
以太坊的架构
1.应用层
与比特币不同,以太坊旨在构建一个能够运行去中心化应用的平台。以太坊包含一种高级语言(即,Solidity),使得开发者能够通过编写智能合约来实现去中心化应用。EVM(以太坊虚拟机,Ethereum Virtual Machine)是以太坊应用层的核心。它使用 EVM 编译器将智能合约代码编译成字节码,并将该字节码上传到区块链,和执行这些字节码,从而改变以太坊区块链的状态。
2.网络层
与比特币相似,以太坊也使用 Gossip 协议,使得节点能够与其邻居节点通信。
3.共识层
为了达成共识,以太坊使用了与中本聪共识相似的“Ethash”,但 Ethash 与中本聪共识有一些关键区别。
4.抗女巫攻击层
与比特币一样,Ethash 依赖于工作量证明(未来以太坊 2.0 将切换到 PoS 共识机制)来抵御女巫攻击。