什么是 SS58 地址?
SS58 是 Polkadot、Kusama 以及所有基于 Substrate 的链所使用的地址格式:网络前缀、32 字节公钥(账户 ID)和 2 字节校验和,以 Base58 编码。该格式记录在 Polkadot wiki 中,前缀则在 SS58 注册表中分配。SS58 地址转换器会解码字符串、验证校验和、提取公钥,并按其他前缀重新编码。
SS58 编码原理
- 前缀字节。前缀 0–63 占一个字节。更大的前缀(最大 16383)以打包形式占两个字节:第一个字节存放前缀的第 2–7 位加上标记 0b01,第二个字节存放第 8–13 位和第 0–1 位。
- 校验和。对
SS58PRE+ 前缀字节 + 公钥计算 BLAKE2b-512,并追加摘要的前两个字节。 - Base58。整个缓冲区(1 或 2 + 32 + 2 字节)用比特币字符表进行 Base58 编码。前缀 0 得到的地址总是以 1 开头,前缀 2 以大写字母 C 到 J 开头,前缀 42 以 5 开头。
示例
著名的开发账户 Alice 的公钥是 0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d。使用前缀 0 编码得到 15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5(Polkadot),前缀 2 得到 HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F(Kusama),前缀 42 得到 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY(通用 Substrate)。把其中任意一个粘贴到上方,即可看到这三个以及另外十四个地址。
前缀与首字符
| 前缀 | 网络 | 地址开头 | 前缀 | 网络 | 地址开头 |
|---|---|---|---|---|---|
| 0 | Polkadot | 1 | 36 | Centrifuge | 4 |
| 2 | Kusama | C, D, E, F, G, H, J | 38 | KILT | 4 |
| 5 | Astar | V, W, X, Y, Z, a, b | 42 | Substrate(通用) | 5 |
| 6 | Bifrost | b, c, d, e, f, g, h | 63 | Hydration | 7 |
| 7 | Edgeware | h, i, j, k, m, n, o | 73 | Zeitgeist | dD, dE |
| 8 | Karura | o, p, q, r, s, t, u | 2032 | Interlay | wd |
| 10 | Acala | 2, z | 2092 | Kintsugi | a3 |
| 12 | Polymesh | 2 | 10041 | Basilisk | bX |
| 30 | Phala | 3, 4 |
首字符只是 Base58 和前缀值共同作用的副产物,可作为快速的视觉提示,但并非保证。请始终以工具显示的解码前缀为准。
为什么校验和很重要
Base58 本身没有错误检测,因此 SS58 增加了两字节的 BLAKE2b 校验和,能捕获任何单字符输入错误和绝大多数多字符错误。实际上不存在会接受校验和错误地址的钱包或交易所;本工具同样会拒绝它,并告诉你校验和失败,而不是去猜测。注意校验和包含前缀,这就是为什么 Kusama 地址会被判定为无效的 Polkadot 地址,即使里面的密钥相同:发送方必须重新编码,而不是重新输入。
典型用途
- 硬件钱包只显示一个网络时,从 Polkadot 地址找到你的 Kusama、Astar 或 Hydration 地址。
- 获取十六进制账户 ID,用于 Polkadot.js API 调用、多签设置或 XCM 目标账户。
- 通过读取解码出的前缀,检查交易所充值地址是否真的位于你打算发送的那条链上。
仅限公钥和地址:本页绝不会要求输入助记词或私钥,你粘贴的任何内容都不会离开浏览器。其他格式请参见加密货币地址验证器。