
一、把PoW或PoS当成完整共识
以太坊共识机制文档说明,共识包含协议、激励与分叉选择等组成部分。工作量证明和权益证明承担抗女巫攻击、区块生产者选择等作用,单独使用这些名称不能完整描述节点如何达成一致。
实现时需要分别回答:谁能提出区块、节点如何检查区块、出现竞争分支后如何选择。仅实现出块资格判断,仍不足以说明网络如何处理分歧。
二、把“最长链”理解为区块最多
上述共识文档中的工作量证明链选择依据是累计工作量,不能简单替换成区块数量;权益证明下的分叉选择则涉及按质押权重计量的投票。
因此,链选择代码中的比较指标必须对应具体协议。测试两个竞争分支时,应检验协议规定的权重计算,不能仅因某分支多一个区块就认定它应被接受。
三、把UTXO当成账户余额字段
比特币开发者交易指南描述了UTXO模型:输入引用先前交易的具体输出,输出附带花费条件;钱包显示的余额可以由多个未花费输出汇总形成。
这一模型适用于比特币相关交易实现,不能直接套用到所有区块链。代码若只维护一个余额数字,就无法仅凭该数字确定输入引用了哪个输出,也无法准确表达该输出是否已被花费。
四、把签名通过等同于交易有效
比特币交易指南以P2PKH说明公钥、签名与脚本条件之间的关系,同时强调脚本验证成功仍以交易不存在其他问题为前提。
签名检查只覆盖交易有效性的一部分。实现还需检查所引用输出的状态及其他协议约束。一个有用的测试问题是:如果签名本身正确,但输入引用的输出已经被花费,验证流程能否拒绝它?
五、把示例规则推广为所有交易规则
P2PKH是具体的交易脚本类型,示例中的地址表达、签名数据位置和验证流程都有适用范围。编写解析器时,应明确支持哪些交易与脚本类型,不能把示例字段布局当作所有交易的统一模板。
另一个常见问题是普通交易规则能否覆盖coinbase交易。比特币交易指南明确将其作为例外处理,因此实现和测试都需要区分这类特殊交易,避免无条件复用普通输入的验证逻辑。