Alert Source Discuss
Standards Track: ERC

ERC-601: 用于确定性钱包的以太坊层级结构

Authors Nick Johnson (@arachnid), Micah Zoltu (@micahzoltu)
Created 2017-04-13

摘要

该 EIP 定义了一个基于 BIP32 的确定性钱包的逻辑层级结构,以及在 BIP43 和 eip-draft-ethereum-purpose 中定义的目的方案。

本 EIP 是 eip-draft-ethereum-purpose 的一个特定应用。

动机

目前,不同的以太坊客户端和钱包使用不同的推导路径;可以在这里找到它们的摘要。 其中一些路径违反了 BIP44,该标准定义了以 m/44'/ 开头的推导路径。 这会在钱包实现之间造成混淆和不兼容,在某些情况下使得一个钱包中的资金无法在另一个钱包上访问,而在另一些情况下需要手动提示用户输入推导路径,这阻碍了可用性。

此外,BIP44 的设计考虑了基于 UTXO 的区块链,并且不太适合使用账户抽象的以太坊。

作为替代方案,我们提出了一个更适合以太坊独特要求的确定性钱包层级结构。

规范

我们在 BIP32 路径中定义了以下 4 个级别:

m / purpose' / subpurpose' / EIP' / wallet'

路径中的撇号表示使用了 BIP32 硬化推导。

每个级别都有一个特殊的含义,在下面的章节中描述。

目的

目的 (Purpose) 是一个常数,设置为 43,表示密钥推导用于非比特币加密货币。

在此级别使用硬化推导。

子目的

子目的 (Subpurpose) 设置为 60,即以太坊的 SLIP-44 代码。

在此级别使用硬化推导。

EIP

EIP 设置为指定 BIP32 推导路径其余部分的 EIP 编号。 对于遵循此 EIP 规范的路径,使用分配给此 EIP 的编号。

在此级别使用硬化推导。

钱包

路径的此部分将钱包分成不同的用户身份,允许单个钱包拥有多个公共身份。

账户从索引 0 开始按顺序递增编号。 此编号用作 BIP32 推导中的子索引。

在此级别使用硬化推导。

如果前一个账户没有交易历史记录(意味着其地址以前未使用过),则软件应阻止创建账户。

从外部来源导入种子后,软件需要发现所有已使用的帐户。

理由

现有的约定是使用“以太坊”币种类型,从而导致路径以 m/44'/60'/* 开头。 因为这仍然假设是一种基于 UTXO 的币种,所以我们认为这不太合适,会导致标准化、可用性和安全性方面的妥协。 因此,我们提出了上述建议,以定义一个全新的基于以太坊的链的层级结构。

向后兼容性

引入另一个推导路径需要现有软件除了支持任何现有方案之外,还要增加对此方案的支持。 鉴于以太坊中钱包推导路径的混乱性质,我们预计这造成的额外破坏相对较小,并且有可能从长远来看显着改善情况。

对于使用助记词的应用程序,作者希望提交另一个 EIP 草案,描述一种在过渡到此新推导路径时避免向后兼容性问题的方法。

测试用例

待定

实现

目前还没有。

参考资料

关于推导路径的讨论

版权

版权及相关权利通过 CC0 放弃。

Citation

Please cite this document as:

Nick Johnson (@arachnid), Micah Zoltu (@micahzoltu), "ERC-601: 用于确定性钱包的以太坊层级结构," Ethereum Improvement Proposals, no. 601, April 2017. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-601.