0x 地址有四种结果,而不是两种
全小写的 EVM 地址格式正确,但完全没有防护:其中没有任何东西能发现输入错误。全大写的地址也一样。大小写混合才是 EIP-55 校验和,它要么与地址的 Keccak-256 哈希相符,要么不符。本页会区分这四种情况,因为有效与无校验和之间的差别,就是安全粘贴与抛硬币之间的差别。
转账前检查比特币或以太坊地址。0x 地址用 EIP-55 校验和,1 和 3 开头的地址用 Base58Check,bc1q 用 bech32,taproot 用 bech32m,并指出未通过的检查和出错的字符。
格式正确。以太坊及所有 EVM 链,EVM 账户或合约。EIP-55 校验和相符。
空格和换行会被去除,bitcoin: 或 ethereum: 支付链接会被拆开,取出其中的地址。
以太坊及所有 EVM 链 · EVM 账户或合约。格式正确是指这个字符串内部一致,并不代表该地址存在,也不代表它属于某个特定的人。
地址是对二十或三十二个字节的编码,外加一个说明如何花费它们的标签。下面就是这些字节。
校验和能发现输入错误,却发现不了替换。防范替换的方法是通过你信任的第二个渠道核对地址,比对整个字符串而不只是开头和结尾的四个字符;金额较大时,先发送一笔小额测试转账。
前缀不是装饰:它编码了网络和脚本类型,并且受校验和保护,所以无法通过修改前缀让地址指向别处。
| 开头 | 网络 | 编码 | 类型 | 字符数 | 含义 |
|---|---|---|---|---|---|
| 1 | 比特币主网 | Base58Check | P2PKH | 26 至 34 | 最早的地址类型,存放单个公钥的哈希。版本字节为 0x00,编码后以 1 开头。 |
| 3 | 比特币主网 | Base58Check | P2SH | 34 | 支付到脚本哈希:多签,以及原生 segwit 被广泛接受之前钱包使用的嵌套 segwit。版本字节为 0x05。 |
| bc1q | 比特币主网 | bech32 | P2WPKH 或 P2WSH | 42 或 62 | 原生 segwit,见证版本 0。四十二个字符是单个密钥(20 字节程序),六十二个字符是脚本(32 字节程序)。 |
| bc1p | 比特币主网 | bech32m | P2TR | 62 | Taproot,见证版本 1。它必须带有 BIP-350 的 bech32m 校验和,而不是 bc1q 使用的 bech32 校验和。 |
| 0x | 以太坊及所有 EVM 链 | Hex | 账户或合约 | 42 | 二十个字节写成四十个十六进制字符。大小写混合即 EIP-55 校验和;全部同一种大小写则表示没有校验和。 |
| tb1 | 比特币测试网和 signet | bech32 或 bech32m | Segwit | 42 或 62 | 测试网前缀。真正的比特币不可能发送到 tb1 地址,因为主网节点会拒绝它。 |
| m | 比特币测试网 | Base58Check | P2PKH | 26 至 34 | 版本字节为 0x6f。测试网密钥地址以 m 或 n 开头,取决于后面的哈希。 |
| n | 比特币测试网 | Base58Check | P2PKH | 26 至 34 | 与 m 相同的版本字节 0x6f。出现哪个字母由有效载荷决定,而不是由地址类型决定。 |
| 2 | 比特币测试网 | Base58Check | P2SH | 35 | 版本字节为 0xc4,对应主网中 3 开头的地址。 |
本页的每项检查都是对你眼前这个字符串的运算,使用 Keccak-256、SHA-256 和 bech32 多项式计算,全部在页面内实现。不会向任何服务器发出请求。
如今使用的每种地址格式都内置了检错码。Base58Check 在有效载荷后附加对其做双重 SHA-256 得到的四个字节;bech32 和 bech32m 附加一个六字符的 BCH 码,足以发现字符串中任意位置的四个错误字符;EIP-55 则把 Keccak-256 校验和藏在 EVM 地址的字母大小写里,这在链上不花任何成本,复制粘贴后也不会丢失。这些都不需要区块链,所以验证可以完全在这个标签页里完成。但它们都无法告诉你这个地址属于谁,正因为存在这个缺口,下面坦诚列出的局限才和上面的结论同样重要。
空格和换行会被去除,bitcoin: 或 ethereum: 支付链接会被拆开,取出其中的地址。不要手动重新输入地址:输入错误正是在重新输入时混进来的,而校验和的意义就在于发现你没注意到的那个错误。
通过时会显示网络、脚本类型和底层字节。未通过时会指出哪项检查失败,并高亮字符串中第一个出错的字符,让输错的地址可以被诊断,而不只是被拒绝。
校验和能发现输入错误,却无法发现替换,而替换正是剪贴板恶意软件的手法。请把整个字符串与你信任的来源比对,而不只是看开头和结尾几个字符;金额较大时,先发送一笔小额测试转账。
全小写的 EVM 地址格式正确,但完全没有防护:其中没有任何东西能发现输入错误。全大写的地址也一样。大小写混合才是 EIP-55 校验和,它要么与地址的 Keccak-256 哈希相符,要么不符。本页会区分这四种情况,因为有效与无校验和之间的差别,就是安全粘贴与抛硬币之间的差别。
bc1q 地址必须以 BIP-173 最初的校验和结尾,bc1p taproot 地址必须以 BIP-350 的 bech32m 校验和结尾。为见证版本用错常量是这类代码的经典错误,所以两者都已实现,并都用公开的测试向量测试过,包括 BIP 正是为此特意提供的混用用例。
校验和错误、被排除的字符、bech32 字符串中大小写混合、长度与前缀不符、未知的版本字节、无法识别的人类可读部分:每种情况都会返回各自的消息,格式允许时还会给出位置。只回答是或否的验证器,会让你自己去找输入错误。
1 开头的地址带有版本 0x00,3 开头的地址带有 0x05,并用四字节的双重 SHA-256 校验和验证。校验和有效但版本字节属于其他币种时,会得到单独的答复,因为把 Litecoin 地址粘贴到比特币输入框,与输错地址是不同的错误,应该给出不同的提示。
最多粘贴两百个地址,即可得到一张逐行说明原因的表格,并统计重复项,而重复正是手工拼凑的付款文件最容易出的问题。所有内容都留在标签页中,所以客户地址清单不会为了检查而被上传到任何地方。
这里的每项检查都是对你眼前这个字符串做运算。没有区块浏览器请求,没有 RPC 调用,不连接钱包,也不会以任何形式生成密钥或助记词。这是有意设定的限制,也正因如此,本页才能坦诚说明通过检查能证明什么、不能证明什么。
意味着这个字符串格式正确且内部一致:字符属于正确的字母表,长度与前缀声明的类型相符,地址内置的校验和与其余部分吻合。仅此而已。它不代表这个地址存在、有人持有它的私钥、它曾收到过资金、它在你以为的那条链上,或者它属于你要付款的人。这些问题不询问节点都无法回答,而本页不询问任何东西。
因为它是有效地址,只是没有防护。EIP-55 把校验和藏在字母大小写里,所以全部用同一种大小写书写的地址根本不带校验和,其中输错一个字符也完全不会被发现。这就是本页给出四种结果而不是两种的原因:全小写和全大写标记为无校验和,大小写混合的地址会用 Keccak-256 哈希验证,而未通过验证的大小写混合地址会被标记为输入错误或被篡改。如果可以选择,请始终传播带校验和的形式。
所有 EVM 链都使用同样的二十字节地址格式,所以字符串本身无法告诉你。以太坊、Arbitrum、Optimism、Base、Polygon、BNB Chain 等都接受同一个地址,同一把私钥在所有这些链上都控制着它。这很方便,直到出问题为止:把代币发到正确的地址却选错了链,是最常见的资金丢失方式之一,而任何验证器都无法提醒你,因为地址本身没有任何问题。请在钱包里确认网络,而不是看地址。
离线做不到。外部账户与合约的区别在于该地址是否存有代码,这是链上状态,而不是字符串中编码的内容。区块浏览器可以告诉你,而这一点很重要:把代币发送到并非为接收代币而编写的合约,是众所周知的永久丢失代币的方式。
bc1 后面的字符是见证版本。q 表示版本 0,即原生 segwit:单个密钥为四十二个字符,脚本为六十二个字符。p 表示版本 1,即 taproot。它们使用的校验和也不同。版本 0 使用 BIP-173 最初的 bech32 常量,版本 1 及以上使用 BIP-350 的 bech32m。这一变化是有意为之:只认识 bech32 的旧钱包会拒绝 taproot 地址,而不是悄悄把它弄错。所以这里两种常量都已实现,常量不匹配会作为单独的错误报告。
Base58 就是去掉了易混淆字符的 Base64。在许多字体中,数字零和大写 O 看起来很像,大写 I 和小写 l 也一样;而 Base64 中的加号和斜杠在双击选中地址或把地址放进 URL 时会出问题。Bech32 用另一种方式做了同样的取舍:从字母表中去掉 1、b、i 和 o,并且全部使用小写。这也是 bech32 地址从不大小写混合的原因:校验和是基于单一大小写计算的,所以大小写混合的字符串根本无法验证。
几乎可以肯定是被替换了,而不是输入错误。剪贴板劫持恶意软件会监视任何看起来像地址的内容,并替换成攻击者自己的地址,而那是一个完全有效的地址,能通过本页的所有检查。地址投毒攻击的原理类似:在你的交易记录里植入一个相似的地址,让你之后从错误的那一行复制时,地址依然能通过验证。校验和只能发现损坏,永远发现不了调包。防范方法是通过其他渠道核实地址,比对整个字符串而不只是开头和结尾的四个字符,并先发送一笔小额测试转账。
不作为有效目标,但能识别到足以说出名称的程度。Litecoin 地址会被解码为 Base58Check,但版本字节不是比特币的;ltc1 地址的人类可读部分不是 bc。所以两者都会返回它们所属的链,而不只是简单拒绝。Solana 和 Monero 使用完全不同的编码,会显示为无法识别的格式。本页验证的是比特币和 EVM 链。
WIF 私钥会通过其版本字节被识别出来,并被拦下给出警告而不是结论,因为这个字符串可以花掉你的币,绝不应输入任何网站,包括本站。无论如何都不会传输任何内容,因为本页不发出任何请求,但安全习惯必须毫无例外:收款地址是公开的,可以粘贴到任何地方,而私钥或助记词只应输入到你自己的钱包软件中。本工具从不生成密钥、助记词或地址,只读取你粘贴的内容。
不会。Keccak-256、SHA-256 和 bech32 多项式都在页面内实现,所以验证是在你的标签页中运行的纯运算。没有区块浏览器查询,没有 RPC 端点,不对输入做分析统计,也不连接钱包。一批两百个客户地址在检查时不会有任何一个离开你的电脑,这正是使用本地验证器、而不是把付款清单粘贴到搜索框里的主要理由。
探索不断扩充的工具合集,涵盖计算、文档、写作和日常工作。