bc1 和 tb1 差一个字母,资金就是两个世界:地址前缀与测试币现实 图 1
bc1 和 tb1 差一个字母,资金就是两个世界:地址前缀与测试币现实 · 图 1

一眼可辨的前缀

比特币地址前段的可读部分叫 HRP,是 bech32 编码规范里的人类可读前缀。Bitcoin Core 链参数源码为每个网络各配了一个:主网 bc,Testnet3、Testnet4 和 signet 都是 tb,RegTest 是 bcrt。所以 bc1q 开头的是主网隔离见证地址,tb1 开头的属于某个测试网络,bcrt1 则几乎只出现在本地回归测试里。更老的 base58 地址用首字符表达同样信息:主网 13,测试网 mn2

bc1 和 tb1 差一个字母,资金就是两个世界:地址前缀与测试币现实 图 2
bc1 和 tb1 差一个字母,资金就是两个世界:地址前缀与测试币现实 · 图 2

一个容易被忽略的事实

测试网家族共用 tb 前缀——testnet3、testnet4 与 signet 的地址在字符串层面无法区分。地址本质上是一串脚本数据的编码展示,网络归属不在地址里,而在节点连接的网络与创世块里。同一套私钥在三个测试网上派生的 tb1 地址可能完全相同,而三个网络上的资金互不相干。这解释了一条铁律:地址前缀只能证明”不是主网”,不能证明”是哪个测试网”。

转错网络会发生什么

多数钱包会在解析阶段拦截:当前网络是主网、地址却是 tb1,直接报错不让你提交。风险出在自拼交易的脚本工具与自动化流水线上——有些工具跳过网络校验,把编码解码后的脚本原样写进输出。此时的结局取决于脚本内容在目标网络能否被正确解析:可能落在一条无人能出示有效解锁脚本的输出上,也可能恰好与你在另一网络的公钥程序字节一致而”技术上可花”。结果因配置而异,唯一确定的建议是:别赌,用小额先试,确认到账网络后再走大额。

测试币从哪来

测试币没有市场价值的定位在 BIP94 的动机段落里被反复强调——Testnet3 时代测试币被买卖、被薅空投,被社区视为对测试网络原则的破坏。今天的合理获取渠道:面向对应网络的水龙头(常见配验证码或限额),Testnet4 上利用二十分钟低难度规则自己用 CPU 挖块,或干脆用 RegTest 自给自足。任何”花钱收测试币”的交易都应视为风险信号,因为按协议精神它本就不该值钱。

防御清单

收款前核对三件事:钱包当前连接的网络、地址 HRP 或首字符、对方声称的网络名称是否一致;对方发来 tb1 而你说的是主网付款,立刻终止。自托管开发者建议把”目标网络断言”写进脚本:发送前比对节点 chain 字段与地址 HRP,不一致即中止。测试网数据不反映主网费用与拥堵,用测试网测出的体验外推主网是另一类常见错误。本文地址前缀与 HRP 取值来自链参数源码这一事实来源,长期稳定。本文只做机制科普,不构成任何投资或服务选择建议。

为什么测试网故意不让地址”更好认”

开发者可能会问:为何不给 Testnet4 单独一个 HRP?bech32 规范允许任意 HRP,技术上完全可行,但地址格式承载的校验位与脚本版本语义已经足够多,再为每个测试网络分叉一套前缀,钱包生态要多维护一堆解析分支,收益却只是消掉一类本可被”连接的网络”字段消掉的人为失误。现行方案的实质是:把网络身份交给协议层(起始符、创世块、chain 字段),让人读的前缀只区分”主网与非主网”这一个大类。这也解释了 RegTest 用 bcrt 的特例——它永远只出现在本地开发环境,单独前缀反而方便测试框架一眼区分。作为用户你能做的,就是接受这套分工:钱包 UI 显示的网络标签、节点 RPC 的 chain 字段、地址前缀,三个信号一致才动手;任何一个不一致,先弄清原因再谈转账。地址字符串本身永远不值得单独信任。顺带一提,扫码收款场景是跨网事故的高发区:一张打印错误的 tb1 二维码贴在主网柜台,前缀核对能救命而”扫了再说”不能——这也是多数收银软件默认拒绝非当前网络地址的原因。把这条纪律写进 SOP 只需一行:任何一笔对外付款前,网络标签、前缀、金额三个字段逐一目视确认,机器校验与人的复核缺一不可。