Bitcoin Cash 地址转换器:CashAddr ↔ Legacy

粘贴任一写法的 BCH 地址,即可得到另一种写法,并显示地址类型、网络和底层哈希。工具会先验证校验和,输错的地址会被拒绝而不会被转换。

支持带或不带 bitcoincash: 前缀的 CashAddr(q… 或 p…)、bchtest: 测试网地址,以及 Legacy Base58Check 1… / 3… 地址。

由浏览器中的 JavaScript 检查。地址绝不会被上传或存储。

什么是 Bitcoin Cash 地址转换器?

Bitcoin Cash 地址转换器在同一个 BCH 账户的两种写法之间进行转换:一种是 CashAddr 规范定义的 CashAddr 形式 bitcoincash:q… / p…,另一种是从比特币继承而来的 Legacy Base58Check 形式 1… / 3…。两者包含的都是同一个公钥(P2PKH)或脚本(P2SH)的 160 位哈希,区别仅在于编码方式和校验和。

CashAddr 编码原理

  1. 版本字节。一个字节,高位存放类型(0 = P2PKH,1 = P2SH),低三位编码哈希长度(0 = 160 位,3 = 256 位)。
  2. 按 5 位重新分组。将版本字节与哈希拼接后重新切分为 5 位一组,并用零位补齐,与 bech32 的做法完全一致。
  3. 校验和。使用生成多项式常量 0x98f2bc8e61、0x79b76d99e2、0xf33e5fb3c4、0xae2eabe2a8 和 0x1e4f43e470,对展开后的前缀(每个字符的低 5 位,再加一个零)、载荷和八个零组计算 40 位 BCH 码,并把得到的八个校验和组追加到末尾。
  4. 字符表。每一组都用 32 个字符的字符集 qpzry9x8gf2tvdw0s3jn54khce6mua7l 书写,因此字符串中绝不会出现 1、b、i 或 o。

示例

规范中的第一个测试向量是 1BpEi6DfDAUFd7GtittLSdBeYJvcoaVggu。Base58Check 解码得到版本 0x00(P2PKH)和 hash160 76a04053bda0a88bda5177b86a15c3b29f559873。在前面加上 CashAddr 版本字节 0x00,按 5 位重新分组并追加校验和,就得到 bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a。同一哈希的 P2SH 变体在 Legacy 形式下以 3 开头(3CWFddi6m4ndiGyKqzYvsFYagqDLPVMTzC),在 CashAddr 下以 p 开头(bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq)。把其中任意一个粘贴到上方,即可实时查看转换结果。

格式速览

形式示例校验和能否与 BTC 区分?
Legacy P2PKH1…,26–35 个字符4 字节双重 SHA-256否
Legacy P2SH3…,34 个字符4 字节双重 SHA-256否
CashAddr P2PKHbitcoincash:q…,前缀后 42 个字符40 位 polymod能
CashAddr P2SHbitcoincash:p…,42 个字符40 位 polymod能
CashAddr P2SH-32bitcoincash:p…,62 个字符40 位 polymod能,无 Legacy 形式
测试网bchtest:q… 或 m… / n… / 2…相同仅凭前缀

为什么 Legacy 警告很重要

交易所至今仍在为 BCH 充值显示 Legacy 地址,用户也仍会把比特币地址粘贴进 BCH 提币表单。由于字节完全相同,一笔发往比特币用户 1… 地址的 BCH 交易是有效的,并且会在 Bitcoin Cash 链上确认,而收款方的钱包根本不会去看那条链。币并没有被销毁,但只有持有该私钥的人才能用 BCH 钱包把它们转走,而大多数收款方根本不知道该怎么做。在发送前把每个地址都转换为 CashAddr 可以消除这种歧义:能接受 bitcoincash: 的钱包一定是 BCH 钱包。

典型用途

比特币本身请使用比特币地址验证器;通用 bech32 字符串请使用 bech32 编码 / 解码器。

常见问题

CashAddr 与 Legacy Bitcoin Cash 地址有什么区别?

两者编码的是同一个 20 字节哈希。Legacy 地址使用比特币的 Base58Check(P2PKH 为 1…,P2SH 为 3…),看起来与比特币地址完全一样。CashAddr 于 2018 年 1 月推出,使用 bech32 风格的字符表、bitcoincash: 前缀和 40 位校验和,因此 BCH 地址不再会与 BTC 地址混淆。

Legacy 的 1… 地址是比特币还是 Bitcoin Cash?

两者皆有可能。这种格式在两条链上逐字节完全相同,这正是 CashAddr 诞生的原因。如果交易所给你的 BCH 地址是 1… 形式,把它转换成 bitcoincash:q… 是安全的;但不要假设你在别处看到的 1… 地址就是 BCH 地址。转换器会对每一个 Legacy 输入显示警告。

为什么转换器拒绝我的地址?

CashAddr 的 polymod 校验和或 Base58Check 的双重 SHA-256 校验和验证失败,说明至少有一个字符错误或缺失。大小写混合的 CashAddr 字符串同样无效:规范要求全部小写或全部大写。

可以省略 bitcoincash: 前缀吗?

可以。前缀是校验和的一部分,但大多数钱包都接受不带前缀的 q… 或 p… 字符串并默认视为主网。未给出前缀时,工具会依次尝试 bitcoincash、bchtest 和 bchreg,并告诉你匹配的是哪一个。

什么是 P2SH-32 地址?

自 2023 年 CashTokens 升级起,Bitcoin Cash 支持 32 字节脚本哈希(类型位为 1,长度位为 3)。它们是有效的 CashAddr 字符串,以 p… 开头但更长,并且没有 Legacy Base58 形式。解码器会显示其哈希,并说明为何不提供 Legacy 形式。

支持 Bitcoin SV 或 eCash 吗?

不支持。eCash(XEC)使用相同的 CashAddr 算法但前缀为 ecash:,Bitcoin SV 则沿用 Legacy 地址。如果你粘贴的 CashAddr 带有其他前缀,校验和会按该前缀验证,但会被标记为非标准的 Bitcoin Cash 前缀。