普通比特币签名对自己花的钱苛刻到像素级:前一笔交易的编号、输出序号,一个比特都不能换。这条焊线对付款方是安全,对状态通道却是税——通道每更新一次资金就换个”户口”,惩罚旧状态的每一笔交易都得为新一代资金重签一套,历史越长、通道越胖。SIGHASH_ANYPREVOUT(BIP118)要松开的正是这根焊线:签名不再承诺”花的哪笔钱”,只承诺”钱怎么分、谁同意”。本文按承诺清单、通道后果、提案现状三层讲清它。
默认签名焊死了哪些格子
常规 SIGHASH 的摘要覆盖交易骨架:版本、每条输入的前序引用与序号、脚本、金额、全部输出、锁定时间。换资金来源、改找零、动序号,签名即刻作废。代价落在通道协议上:以经典闪电为镜,双方每更新一次状态就共同制造一笔新资金输出,为了让任何一代旧状态都能触发惩罚,双方要为全部历史互相预签承诺与撤销组合——通道生命周期越长,链下存储与链上费额越随代数线性增长。

松绑一格换来什么
BIP118(Christian Decker 与 Anthony Towns 起草,2017 年 2 月立项,共识层软分叉,状态 Draft 至今)为 Taproot 时代的脚本路径新增带 ANYPREVOUT 位的哈希类型:计算摘要时把输入的前序引用留空,其余承诺照旧,防重放交给人手写的相对时间锁或序号约束。放进 eltoo 通道(Decker 等人 2018 年论文《Anonymous Multi-Hop Locks》提出的无状态更新方案):双方每轮只签”下一状态生效时如何覆盖当前状态”的通用授权;对手作弊上链时,链上只剩两步——花掉最新状态的交易,或花掉任意一代状态并揭示撤销密钥领取惩罚,而且每一步只需常数条交易。通道历史从必须永久保管的档案变成可以扔掉的中草药渣。同一设计里还有更进一步的 ANYPREVOUTANYSCRIPT:脚本槽位一并通用化,授权书连用在哪个脚本都不挑——重放面更大,提案明确建议默认仍绑定脚本。
为什么停在草案
技术上松绑签名承诺等于压缩攻击面:同一份签名理论上可套到任意资金来源、结构同形的交易,脚本逻辑稍有疏漏,一次误签就从”换不了零件”放大成”换得了钱袋”。工程界因此把它限定在 Taproot 脚本路径内,并要求协议层用时间锁与序号把合法套用范围圈回唯一解。现实原因同样硬:为低频原语维护一套新共识规则,全节点都要长期背着实现与审计成本;而通道的历史膨胀问题还有别的解法可走——密钥聚合方案能压多签的签名体积,弱块与压缩方案在别的维度减负。ANYPREVOUT 至今没有任何实现分支进入主干版本,研究热度随协议路线的竞争起伏。看这类原语的进度只看两点:BIP 状态字段,和有没有客户端把代码合进主干,其余转述都别当真。
一个对比直觉
把一代通道历史想象成一串多米诺骨牌:经典闪电的解法是给每张骨牌配一个专属保安(每代预签惩罚),保安编制随牌数增长;ANYPREVOUT 加 eltoo 的解法是让最后一张牌自带”追认前牌作废”的声明能力,保安编制恒定。代价是声明本身不指名道姓(不绑定资金来源),必须靠时间锁给声明加装使用窗口,防止被拿去花别的钱——这正是两类方案在密码学承诺清单上一紧一松的镜像关系。
快速问答
问:主网现在能签 ANYPREVOUT 交易吗? 答:不能,BIP118 是未部署草案,链上没有对应验证规则。
问:它和 SIGHASH_FORKID 是同类吗? 答:不是。FORKID 只改摘要算法的域、防跨链重放;ANYPREVOUT 删除的是承诺清单里的资金引用项。
问:开闪电通道需要它吗? 答:不需要,现行闪电协议不依赖 ANYPREVOUT 即可运行。
风险提示:本文解释未部署原语与研究路线,不构成投资建议。通道与合约操作存在真实资金风险,请先小额验证。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。