隔离见证同时改变交易标识、区块承诺和容量计量。见证数据不进入txid但进入wtxid;它也不是“所有字节四分之一价格”的简单折扣。
本文用序列化和权重算例解释BIP-141,不延伸到Taproot的签名规则。
一个权重算例
设某交易基础序列化大小为150字节,包含见证后的总大小为250字节。权重是150 × 3 + 250 = 700 WU,虚拟大小为ceil(700/4)=175 vB。只有新增见证部分按权重结构获得折扣,基础字段仍按更高权重计算。
| 标识 | 哈希覆盖范围 | 典型用途 |
|---|---|---|
| txid | 不含marker、flag和见证栈的传统序列化 | UTXO引用与兼容系统 |
| wtxid | 包含完整见证序列化 | 见证承诺与完整交易识别 |
区块把所有wtxid形成的见证Merkle根,与coinbase输入的见证保留值一起写进特定OP_RETURN承诺。验证者不仅检查普通Merkle根,还要检查这条见证承诺链。
操作前后逐项勾选
- 分别序列化基础交易和完整见证交易
- 计算txid与wtxid并确认二者覆盖范围
- 用基础大小和总大小复算weight与vsize
- 验证coinbase见证保留值和OP_RETURN承诺
- 先识别见证版本,再选择对应脚本验证规则
三个必须保留的事实
- txid与wtxid:BIP-141把见证数据与传统交易序列化分离,txid不包含见证而wtxid包含完整见证序列化。
- 见证承诺链:区块通过coinbase输入见证保留值和OP_RETURN承诺绑定所有交易wtxid形成的见证Merkle根。
- 区块权重公式:区块权重按基础大小乘3再加总大小计算并限制为四百万单位;见证折扣不是把所有交易字节统一按四分之一计费。
txid与wtxid如何做双盲复核
作者先依照“分别序列化基础交易和完整见证交易”收集一份不含结论的证据包,内容包括目标对象、网络或版本、完整返回、查询时点和使用的工具。复核者收到材料后,按“计算txid与wtxid并确认二者覆盖范围”自行解释见证承诺链。双方最后才交换结果;如果结论不同,优先比较原始字段与口径,不能用页面颜色或多数意见裁决。
接着建立反例包。反例一只模拟“把wtxid用于前序输出引用,破坏兼容语义”,反例二只模拟“用总字节数直接除以四估算费用”。每个反例必须说明预期拒绝点和实际拒绝点。程序若把错误输入修正后继续执行,应把修正动作完整展示;静默修正会让用户误以为原输入有效,因此仍判为不通过。
为了覆盖见证版本边界,还要在状态改变前后各保存一次“用基础大小和总大小复算weight与vsize”的结果。两份证据必须有独立时间和上下文,不能只留最终快照。若变化由缓存、节点或索引造成,报告应注明观察层级,而不是直接断言链上事实改变。
上线页面把原始证据、解释规则和结果状态拆开呈现。原始栏不做舍入和自然语言改写;解释栏写清公式、版本或字段映射;结果栏允许已确认、被否定和待核验。触发“看到bc1地址就假设一定是version 0 P2WPKH”时,按“验证coinbase见证保留值和OP_RETURN承诺”重新取证,禁止继续自动处理。
三个容易造成错误结论的做法
- 不要这样做:把wtxid用于前序输出引用,破坏兼容语义
- 不要这样做:用总字节数直接除以四估算费用
- 不要这样做:看到bc1地址就假设一定是version 0 P2WPKH
来源、增量与风险边界
- Bitcoin Improvement Proposals:正式接口、字段与规范语义。
- BIP-144:实现路径、兼容性或安全边界。
本文资料读取于2026-07-20。不同见证版本拥有不同脚本规则,钱包不能仅凭bc1前缀推断脚本类型或可花费性。
站内相邻主题可继续阅读:比特币交易结构、Taproot花费路径。不同见证版本的脚本规则不同。钱包构造和签名时必须识别程序版本,不能用BIP-141概览替代具体花费规则。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。