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.