EVM 给合约调用设了 256 层深度上限,攻击者可以先用递归调用垫深栈底、再触发目标合约,让它的内部调用恰好撞上天花板而静默失败。2015 年底提出的 EIP-3 想让合约亲手摸到这个问题:新增 CALLDEPTH 指令返回剩余可用深度,把「栈攻击」防御从昂贵的实验性试跑变成一条廉价指令。提案最终撤回,但浅栈攻击作为合约安全教科书条目活了下来,防御手法也演化出别的形态。
EVM 给合约调用设了 256 层深度上限,攻击者可以先用递归调用垫深栈底、再触发目标合约,让它的内部调用恰好撞上天花板而静默失败。2015 年底提出的 EIP-3 想让合约亲手摸到这个问题:新增 CALLDEPTH 指令返回剩余可用深度,把「栈攻击」防御从昂贵的实验性试跑变成一条廉价指令。提案最终撤回,但浅栈攻击作为合约安全教科书条目活了下来,防御手法也演化出别的形态。
2017 年围绕比特币区块大小上限的争吵产生过大量提案,BIP-104 是其中思路最「去政治化」的一份:像难度调整一样,每 2016 个块根据过去两周的平均区块填充率自动重算上限,目标把区块维持在七成满。提案给出公式、激活门槛与被否掉的备选方案,最终随规模之争降温而关闭。这份提案的价值在于它把「上限该多大」翻译成「上限该按什么规律变」。
2017 年春天,隔离见证明明已有超过七成算力在信号,却因为一套自设的 80% 门槛迟迟不锁定。BIP-149 给出用户侧的强制预案:用带超时锁定的 BIP8 在预定日期直接激活,不再等矿工点头。这份提案最终因隔离见证提前部署而无需上场,但「用户激活软分叉」由此成为比特币治理里一个被反复引用的工具,它的设计细节——超时即锁定、与矿工部署互斥的窗口衔接——至今仍是讨论模板。
BIP-18 是 2012 年 P2SH 路线之争里最特别的一份:它不新增操作码,而是宣布 scriptSig 与 scriptPubKey 过时,改用 dataSig、scriptCheck、hashScriptCheck 三件套重述同一件事,还顺手给签名操作定下了按前缀计数的防滥用规则。这份提案标记为 Complete,却没有以文本原样部署——最终上线的 BIP-16 在协议层与它内容几乎一致。这篇讲清它改了什么、账怎么记,以及为什么名字之争也值得写进历史。
今天比特币的脚本哈希地址来自 BIP-16 那条路线,但在 2012 年初,Luke Dashjr 的 BIP-17 一度是最被看好的实现:不新增指令语义,直接把闲置的 OP_NOP2 重定义为 OP_CHECKHASHVERIFY,花销时把真脚本塞进解锁脚本、用一个 OP_CODESEPARATOR 划出待哈希的边界。这份提案最终关闭未部署,但它留下的哈希边界思路、向后兼容处理和矿工字符串投票设计,都是理解比特币脚本升级史的重要切片。
以太坊的改进提案并不同等重要:改共识规则和改钱包接口,对全网互操作性的压力完全不同。2015 年底定稿的 EIP-4 借来比特币 BIP-123 的思路,把标准类提案划进共识、网络、API/RPC、应用四个层,层号越低、被全网卡住的风险越大。这份只有两页纸的元提案解释了为什么有些提案天生就更慢、更保守,也解释了同一件事在不同层做,代价可以差出一个量级。
区块组装器把签名成本计数器起点设为 400 而非零,为尚未生成的 coinbase 输出预留 SigOp 预算,占八万共识上限的半个百分点。拆解预留动机、IPC 参数名与钳制边界。以 v31.0 源码为准。
比特币节点 REST 接口的批量标头端点共用 MAX_REST_HEADERS_RESULTS 上限 2000,越界直接 400;过滤器标头端点默认只给 5 个。拆解免认证入口为何要设闸、翻页接力写法与排错现场。以 v31.0 源码为准。
集群内存池时代,RBF 第五条规则限制一笔替换直接冲突的唯一簇数量不超过 100,超出即以 too many conflicting clusters 拒绝。拆解按簇计量的原因、与包上限的分界和官方测试的边界用例。以 v31.0 源码为准。
dbcache 总预算先被索引层切走:txindex 与 txospenderindex 各按当时余额的八分之一、封顶 1GiB,过滤器索引再合并一份封顶额度。拆解 CalculateCacheSizes 的顺序扣减、32 位封顶与容量规划口径。以 v31.0 源码为准。