协议演进 / BIP/比特币改进提案 / BIP-94
BIP-94
新建一条测试网络取代 Testnet 3,用三处共识微调堵住区块风暴与时间扭曲,让仅靠 CPU 挖矿攻击测试网变得不切实际。本 BIP 目前处于已部署状态。
一、档案卡
| 编号 | BIP-94 |
|---|---|
| 标题 | Testnet 4 |
| 作者 | Fabian Jahr <[email protected]> |
| 指定日期 | 2024-05-27 |
| 层级 | Applications(应用) |
| 类型 | Specification(规范类) |
| 状态 | Deployed(已部署) |
| 阅读版 | https://bips.dev/94 |
| 官方原文 | https://github.com/bitcoin/bips/blob/master/bip-0094.mediawiki |
二、放在哪一族
测试网络族。比特币的测试网供开发者在无真实价值的环境里试验交易、钱包与二层协议;上一代 Testnet 3 已运行约 13 年,问题积累到难以继续使用,BIP-94 因此另起一条新链 Testnet 4 来取代它,而不是在旧链上打补丁。
它与主网的关系是“同规则、异参数”:共识规则与主网一致,仅保留三处测试网特例(见第四节),且截至 2024 年 5 月主网已激活的全部软分叉(最新为 Taproot)从创世块起即强制执行。它的后继者是 BIP-95(Testnet 5,草案),原文写作时 Testnet 4 本身就是为解决 Testnet 3 的区块风暴而生,读它要连同 Testnet 3 的 20 分钟例外规则一起理解。
三、它要解决什么
3.1 Testnet 3 的区块风暴
Testnet 3 有一条“20 分钟例外”:若距上一块已超过 20 分钟,新块可用最低难度(难度 1)出块,本意是让 CPU 也能挖到测试币。但难度调整以周期内最后一块的难度为基准——若最后一块恰是难度 1 的例外块,下一周期难度被钳制在 1–4 之间,于是短时间内可涌出海量区块,即“区块风暴”(block storm)。原文记述:曾有三年份的区块在数周内被挖完,网络几近不可用。
3.2 测试币被当成有价物
Testnet 3 高度已达 250 万以上,区块奖励降至约 0.014 TBTC,挖矿不再能有效分发测试币;同时 Testnet 3 被用于带有欺诈性质的空投,TBTC 被公开买卖,“测试币无价值”这一根本原则被打破。继续修补旧链,不如从创世块重新开始。
四、规则本身
Testnet 4 与主网共识规则相同,仅有以下三处例外。
4.1 20 分钟例外(保留)
除每个难度周期(2016 块)的第一块外:若某块时间戳比上一块晚 20 分钟以上,该块必须使用最低难度 nBits = 0x1d00ffff,不受实际难度约束;周期第一块必须使用实际难度。此规则使 CPU 挖矿在测试网上仍可行。
4.2 区块风暴修复(新增)
难度调整的基准难度,改取上一周期第一块的难度,而不是最后一块;调整倍数仍按周期实际时长计算,并钳制在 1/4 至 4 倍之间。这样例外块的难度 1 不再污染下一周期的难度计算。
4.3 时间扭曲(time warp)防范(新增)
对高度模 2016 等于 0 的块(即每周期第一块):其 nTime 必须不小于前一块 nTime 减 600 秒,且仍须满足既有的中位过去时间(Median-Time-Past)限制。此条借鉴 Great Consensus Cleanup 提案,防止矿工操纵时间戳人为压低难度、放大区块风暴。
4.4 网络参数
- 创世块信息串:
03/May/2024 000000000000000000001ebd58c244970b3aa9d783bb001011fbe8ea8e98e00e,时间戳 1714777860,创世哈希00000000da84f2bafbbc53dee25a72ae507ff4914b867c565be350b0da8bf043; - 报文起始字节(magic):
0x1c163f28,为随机生成、无特殊含义; - 默认 P2P 端口:48333。
原文 Rationale 还记录了被否决的备选:取消 20 分钟例外、提高最低难度、延长例外时延等,均因会断绝 CPU 参与或支持不足而未采纳。
五、谁必须动
普通持币人:主网资产不受任何影响;Testnet 4 上的币按设计无价值。
钱包与应用开发者:需要测试时改连 Testnet 4 的参数(创世块、magic、端口),地址格式与主网工具链可沿用 Testnet 3 的支持再加新参数。
全节点实现者:若要跟随 Testnet 4,必须校验三条新规则并拒绝违规块;只实现 Testnet 3 规则的软件会接受违反 Testnet 4 规则的链,有被分叉出去的风险。
矿工(测试网):仍可借 20 分钟例外用 CPU 出块,但周期第一块必须按实际难度挖,风暴式刷块的路径已被堵住。
六、现在算不算数,以及一个常见误读
状态为 Deployed(已部署):Testnet 4 已作为正式测试网络启用,取代 Testnet 3 成为默认测试环境。它约束的只是测试网这条独立链,主网共识规则没有因 BIP-94 改变分毫。
常见误读:“Testnet 4 的三条新规则是给主网做的升级预演,主网也会照此修改难度规则。”不对。20 分钟例外与风暴修复是测试网特有问题的解法,主网从无 20 分钟例外;时间扭曲防范虽源自面向主网讨论的 Consensus Cleanup 思路,但本 BIP 只把它部署在 Testnet 4 上。
七、延伸
- 阅读版:https://bips.dev/94
- 官方原文:https://github.com/bitcoin/bips/blob/master/bip-0094.mediawiki
- 相关:BIP-95 Testnet 5(拟取代本网络)
- 仓库总目录:https://github.com/bitcoin/bips
