本文档涵盖了 Polkadot 和 Kusama 帐户地址的基础知识以及它们如何在链上存在。有关它们背后的密码学的更深入解释,请参阅 密码学页面。
地址格式#
基于 Substrate 的链中使用的地址格式是 SS58。SS58 是对比特币 Base-58-check 的修改,并进行了一些小的修改。值得注意的是,该格式包含将地址标识为属于特定网络的地址类型前缀。
例如:
- Polkadot 地址总是以数字 1 开头。
- Kusama 地址总是以大写字母开头,如 C、D、F、G、H、J...
- 通用基材地址以 5 开头。
这些前缀在此处定义 。
重要的是要了解,不同网络的不同格式只是地址生成工具生成的私钥-公钥对中相同公钥的不同表示。只要您转换格式,这将使地址在基于 Substrate 的链之间兼容。
许多钱包允许您在格式之间进行转换。也存在独立工具,您可以在地址覆盖工具部分找到它们。
地址生成、派生和可移植性#
一个有效的帐户只需要一个可以在支持的曲线和签名方案之一上签名的私钥 。大多数钱包从助记词到账户密钥需要采取许多步骤,这会影响在多个钱包中使用相同助记词的能力。使用不同步骤的钱包将通过相同的助记符到达不同的地址集。
种子生成#
大多数钱包会生成助记词,供用户备份钱包并从助记词生成私钥。并非所有钱包都使用相同的算法将助记词转换为私钥。
基于 Subkey 和 Polkadot-JS 的钱包使用 BIP39 字典生成助记符,但使用熵字节数组生成私钥,而完整的 BIP39 钱包(如 Ledger)在助记符上使用 2048 轮 PBKDF2。因此,相同的助记符不会生成相同的私钥。有关详细信息,请参阅底物 BIP39。
派生路径#
许多 Polkadot 密钥生成工具支持硬派生和软派生。有关派生路径格式的详细信息和示例,请参阅 子密钥文档。Polkadot-JS 应用程序和扩展以及 Parity Signer 支持使用与 Subkey 相同的语法的自定义派生路径。
一些钱包会自动在生成的助记词末尾添加派生路径。这将为单独的路径生成单独的种子,这允许使用相同的助记符单独签名密钥,例如//polkadot
和//kusama
。尽管您可以正确保存助记词,但在另一个钱包中使用它不会生成相同的地址,除非两个钱包使用相同的派生路径。
Polkadot 和 Kusama 都在BIP44 注册表中注册了路径 。
警告:您必须同时拥有父私钥和派生路径才能到达地址的密钥。除非您对本主题的理解感到满意,否则不要使用自定义派生路径。
便携性#
上述信息为我们带来了可移植性:在多个钱包中使用助记词或种子的能力。便携性取决于许多因素:
- 推导路径
- 助记符格式
- 种子衍生
- 签名方案
如果您想在多个钱包中使用相同的助记符,请确保它们遵循兼容的方法来生成密钥和签署消息。如果您找不到易于理解的文档,请联系项目维护人员。
助记符格式 | 推导路径 | 种子衍生 | 签名支持 | |
---|---|---|---|---|
Polkadot{.js} 扩展 | 标准 | 用户自定义 | BIP32 | sr25519 |
Polkadot-JS 应用 | 标准* | 用户自定义 | BIP32 | sr25519、ed25519、secp256k |
分类帐 | BIP39 | BIP44 † | BIP32 ‡ | ed25519 § |
子键 | 标准* | 用户自定义 | BIP32 | sr25519、ed25519、secp256k1 |
* Ed25519 密钥与 BIP39 的兼容性有限。
† BIP44 注册
‡ Ed25519 和 BIP32 基于 Khovratovich
§ Sr25519 计划
好奇:前缀如何工作#
在SS58文件 指出:
- Polkadot 的地址类型为
00000000b
,因此0
为十进制。 - Kusama (Polkadot Canary) 的地址类型为
00000010b
,因此2
为十进制。 - Generic Substrate 具有
00101010b
as 地址类型,为42
十进制。
因为 Base58-check 字母表没有数字 0,所以最低值确实00000000b
是 1。Base58-check 中的 1 也是如此。如果我们尝试 解码Polkadot 地址1FRMM8PEiWXYax7rpS6X4XZX1aAAxSWx1CrKTyrVYhV24fg
,结果是 000aff6865635ae11013a83835c019d44ec3f865145943f487ae82a8e7bed3a66b29d7
。第一个字节是00
,它确实00000000
是二进制和0
十进制的,因此匹配 Polkadot 的地址类型。
我们来看看 Substrate 地址。如果我们解码 5CK8D1sKNwF473wbuBP6NuhQfPaWUetNsWUNAAzVwTfxqjfr
,我们得到 2a0aff6865635ae11013a83835c019d44ec3f865145943f487ae82a8e7bed3a66b77e5
。第一个字节是2a
其中当 从十六进制转换为十进制 是42 42是00101010
在二元的,正如SS58文档的状态。
最后,让我们看看 Kusama 地址。解码CpjsLDC1JFyrhm3ftC9Gs4QoyrkHKhZKtK7YqGTRFtTafgp
给我们020aff6865635ae11013a83835c019d44ec3f865145943f487ae82a8e7bed3a66b0985
的第一个字节是02
,正如指定的那样。如果我们尝试以完全不同的字母开头的 Kusama 地址,例如J4iggBtsWsb61RemU2TDWDXTNHqHNfBSAkGvVZBtn1AJV1a
,我们仍然会得到02
第一个字节:02f2d606a67f58fa0b3ad2b556195a0ef905676efd4e3ec62f8fa1b8461355f1142509
。有些地址总是具有相同的前缀,而其他地址(如 Kusama)可能千差万别,这似乎违反直觉,但这只是 Base58 检查编码的一个怪癖。
获取和管理地址#
创建 Polkadot 或 Kusama 地址的最用户友好的方式是通过 Polkadot-JS UI。请记住备份用于生成帐户的种子短语 - 帐户仅存储在您的浏览器中,因此清除缓存也会擦除您的帐户。然后,您必须使用 UI 提供给您的种子短语重新创建它们 - 这也将恢复您之前持有的所有余额。
使用Polkadot{.js} 扩展来保存帐户存储在您的计算机上的一种更方便和推荐的方法。此扩展程序会记住您的帐户,并允许您无所畏惧地清除浏览器缓存。尽管如此,不要忘记备份您的种子短语 - 如果您无法访问这台计算机,或者扩展程序以某种方式崩溃而无法修复,该短语将派上用场。
请注意,由于这会将您的帐户保留在浏览器中,因此保存大量资产并不是一个安全的地方。根据定义,浏览器是一个“热钱包”,容易受到各种攻击,因此在处理非平凡金额时,请将您的资金存放在冷库中。为了提高安全性,您可以安全地隐藏帐户的种子短语,并在创建帐户后从计算机中删除帐户的所有痕迹。