加密货币百科
脚本校验器的开关板:一次软分叉在验证代码里拧开哪几颗螺丝
同一笔交易在某些区块高度被拒、在另一些高度被收,背后是 SCRIPT_VERIFY_* 这组验证标志按位开关。本文以 v31.0 源码的 interpreter.h 与 validation.cpp 为准,拆解这组标志的分工、63 位位域的设计、部署项如何在区块高度上点亮开关,以及劝退类标志怎样给未来升级留白。
汇总与「共识规则」相关的文章,帮助你系统了解该主题。
同一笔交易在某些区块高度被拒、在另一些高度被收,背后是 SCRIPT_VERIFY_* 这组验证标志按位开关。本文以 v31.0 源码的 interpreter.h 与 validation.cpp 为准,拆解这组标志的分工、63 位位域的设计、部署项如何在区块高度上点亮开关,以及劝退类标志怎样给未来升级留白。
比特币脚本有一个容易被忽略的资源线:MAX_OPS_PER_SCRIPT 为 201,但它数的是操作而非字节。本文基于 Bitcoin Core 31.0 源码拆解这条预算线的计数规则——压数据与小常数不计费、多签按公钥数量计费——以及它与签名操作数预算的区别。
v31.0 源码把区块未来时间上限写死为两小时,配合前序区块时间中位数构成时间戳的窄带约束。本文拆解 MAX_FUTURE_BLOCK_TIME 的两端逻辑,给出 timeoffset 异常与本机时钟漂移的定位顺序。
矿工给区块盖时间戳并不自由:必须晚于前十一个块的中位时间,又不得超过节点本地时钟加两小时。正因为相邻两个难度周期的交界处不受连续性约束,历史上出现过利用边界让难度被错误下调的时间弯曲思路。本文按共识规则拆解这三条时间约束如何咬合,以及改进提案如何堵住边界缺口。