
先明确共享状态与验证责任
区块链的架构需要注意哪些问题,首先取决于系统希望参与者共同确认什么。需要共享的是交易顺序、资产归属,还是程序执行后的状态?架构应明确数据由谁提交、节点依据什么规则验证,以及业务何时接受结果。这些边界决定后续的数据结构和执行方式。
共识与数据模型要配套设计
比特币开发者指南介绍了工作量证明、未花费交易输出和分叉选择规则:节点独立验证区块,交易消耗尚未花费的输出;面对有效分支,节点依据累计工作量选择链。以太坊技术介绍则说明了权益证明、账户状态与EVM,交易可以触发共享状态中的程序执行。
这两种设计说明,数据模型与验证规则需要相互配合。采用交易输出模型时,要明确输入是否可用、是否重复花费;采用账户和程序状态模型时,要明确操作权限以及状态如何变化。不能仅凭某一种模型的名称判断它适合所有业务。
处理分叉与确认状态
区块被接收后,应用仍需按所用协议判断确认状态。对于可能发生链重组的场景,架构应区分请求已提交、交易已入块和业务已认可,并设计状态更新与重复处理的规则。
区块高度也不适合作为所有场景下的唯一标识,因为不同分支可能存在同高度区块。需要精确引用区块时,应结合区块哈希,避免把位置相同误认为内容相同。
区分完整性、真实性与权限
哈希链接和默克尔树能够支持数据完整性检查或交易包含证明,但不能单独证明录入内容符合现实。例如,链上记录可以证明某项声明被提交,却不能自动证明声明所描述的事件真实发生。
签名验证解决的是授权问题,业务仍需定义谁有权执行哪些操作。涉及外部事实时,还应明确事实如何核验,避免把链上验证能力延伸到其无法直接观察的范围。
约束执行成本与业务复杂度
对于支持智能合约的架构,计算会占用网络资源。以太坊通过执行计费约束资源使用,这意味着合约设计需要考虑计算量及失败情形,不能把共享执行环境视为无限计算资源。
常见误区是认为代码上链后,业务规则就自然正确。架构评审仍应检查调用权限、条件判断和异常路径;只有这些规则与业务目标一致,节点对执行结果达成一致才具有实际意义。