Skip to main content

密钥和地址

Sui 遵循加密货币行业中广泛接受的钱包规范,包括 BIP-32(及其变种 SLIP-0010)、BIP-44 和 BIP-39,以便为用户提供密钥管理。目前,Sui 支持纯 Ed25519、ECDSA Secp256k1、ECDSA Secp256r1 和用于签名交易的多重签名。

有关每个钱包规范的更多信息,请单击相关链接:

密钥派生方案

Sui 遵循 SLIP-0010 来管理支持 Ed25519(EdDSA)签名方案的钱包。

对于支持 Ed25519(EdDSA)签名方案的钱包管理,Sui 遵循 SLIP-0010,该协议要求始终使用硬化密钥路径从父私钥派生子私钥。

Sui 遵循 BIP-32 来管理支持 ECDSA Secp256k1 和 ECDSA Secp256r1 签名方案的钱包。

BIP-32 定义了分层确定性钱包结构,以逻辑关联一组密钥。以这种方式对密钥进行分组减少了为用户跟踪大量私钥的开销。此方法还允许监护人为一种控制源下的每个用户帐户发行不同的托管地址。使用 BIP-32 将私钥派生与公钥派生分离开来,实现了只读钱包用例,其中可以派生公钥链及其地址,而私钥可以脱机保持以进行签名。

密钥派生路径

BIP-44 进一步定义了派生路径的五个级别及其确切含义:m / purpose' / coin_type' / account' / change / address_index。在此结构中,斜杠表示层次结构中的新级别或子级。

purpose 级别通常设置为 44,对应于 BIP 编号。但是,在 Sui 中,purpose 级别用于区分不同的签名方案:为 Ed25519 设置为 44,为 ECDSA Secp256k1 设置为 54,为 Secp256r1 设置为 74。虽然将 purpose 级别设置为非 44 的值是非标准的,但通常使用 purpose 字段来区分不同的签名方案是常见的。例如,BIP-49 和 BIP-84 用于在比特币中标识脚本类型。Sui 选择使用 54 表示 ECDSA Secp256k1,因为在 54 下没有现有的 BIP,避免与任何比特币标准混淆。

coin_type 值由所有其他加密货币的存储库管理。两种签名方案都使用 Sui 注册的 coin_type,784(在电话键盘上为 SUI)。

account 级别通常用于逻辑上分隔用户帐户并创建特定的帐户类别。

通常认为,基于帐户的货币仅定义前三个级别,基于 UTXO 的货币添加了更改和地址级别的定义。由于 Sui 的面向对象的数据模型既不是 UTXO 也不是基于帐户的(实际上结合了两者),因此它使用所有五个级别以实现最大的兼容性。

方案路径注释
Ed25519m/44'/784'/{account}'/{change}'/{address}'派生路径的每个级别都是硬化的。
ECDSA Secp256k1m/54'/784'/{account}'/{change}/{address}前三个级别是硬化的。
ECDSA Secp256r1m/74'/784'/{account}'/{change}/{address}前三个级别是硬化的。

助记词支持

在 Sui 定义了从种子派生主密钥的确定性方法之后,引入了 BIP-39 以使用助记词使种子更具人类可读性和可记忆性。Sui 接受 BIP-39 单词列表中经过适当校验和的 12、15、18、21 和 24 个单词,分别对应于 128、160、192、224 和 256 位的熵。Sui 钱包和 SDK 提供了一个灵活的界面,以各种签名方案对交易进行签名。

地址格式

为了派生一个 32 字节的 Sui 地址,Sui 使用 BLAKE2b(256 位输出)哈希函数将包含公钥字节的签名方案标志 1 字节连接起来。Sui 地址当前支持纯 Ed25519、Secp256k1、Secp256r1 和 MultiSig,对应的标志字节分别为 0x00、0x01、0x02 和 0x03。

示例

Sui 钱包和 SDK 提供了一个灵活的界面,以各种签名方案对交易进行签名。

const keypair = Ed25519Keypair.deriveKeypair(TEST_MNEMONIC, `m/44'/784'/0'/0'/0'`);
const address = keypair.getPublicKey().toSuiAddress();

查看更多测试向量 pure Ed25519 或者 ECDSA Secp256k1