
共识设计的范围
共识协议需要解决谁能提出区块、区块是否有效,以及出现竞争历史时如何选择等问题。以太坊开发者文档将共识机制描述为协议、激励与相关规则的整体,工作量证明和权益证明承担抗女巫攻击、参与区块生产等作用。
设计时应分别定义参与资格、有效性验证、分叉选择和确认条件。只确定采用哪种证明机制,还不足以说明节点如何持续形成一致的账本。
参与资格与安全假设
在开放网络中,一个参与者可能创建多个身份,因此不能直接把身份数量当作独立支持力量。设计需要说明参与权重依据什么资源,以及攻击者集中这些资源后能影响哪些行为。
安全条件还应区分恶意行为与暂时离线,说明网络通信受阻时哪些保证仍然成立。协议能否避免冲突历史被确认,与能否持续处理新区块,是需要分别分析的问题。
独立验证与分叉选择
比特币开发者指南说明,全节点独立验证区块;面对均有效的竞争分支,依据累计工作量选择链。这体现出有效性判断和历史选择是两个不同步骤。
设计时应先明确交易授权、重复花费和状态更新规则,再定义如何比较有效分支。即使某个分支得到较大权重支持,其中违反验证规则的区块也不能因此变成有效区块。
确认条件与网络传播
不同节点收到区块的时间可能不同,同一位置出现竞争区块并不必然意味着攻击。协议需要规定节点如何处理这种差异,以及收到新证据后何时调整所接受的历史。
应用关心的是记录何时足够稳定。因此,应把区块产生、暂时接受与确认条件区分开,并说明这些条件依赖的假设。评估处理速度时,也需要考虑传播和验证所需的时间。
激励约束与常见问题
采用经济激励的协议,需要让奖励、惩罚与可验证行为相对应,并分析参与者偏离规则的动机。经济成本可以约束攻击,但不能替代对验证规则和攻击条件的分析。
常见误区包括把节点更多等同于更安全、把最长链理解为区块数量最多,以及把共识等同于简单多数表决。实际判断必须结合参与权重、分叉规则和确认条件;不同协议的阈值与保证不能直接套用。