分层确定性钱包资料整理

提前明确的几个知识点:

  1. BIP32:从单一个 seed 产生一树状结构储存多组 keypairs(私钥和公钥))
  2. BIP39:助记词生成算法(对BIP32种子概念的优化,便于记录)
  3. BIP44:赋予树状结构中的各层特殊的意义。让同一个 助记词 可以支持多币种、多帐户

格式:m / purpose' / coin_type' / account' / change / address_index,

purpose:固定是44,代表用BIP44,

coin_type:表示不同币种

Account:代表这个币的账户索引,从0开始

Change:

常量0用于外部链,常量1用于内部链(也称为更改地址)。外部链用于在钱包外可见的地址(例如,用于接收付款)。内部链用于在钱包外部不可见的地址,用于返回交易变更。 (所以一般使用0)

address_index:

这就是地址索引,从0开始,代表生成第几个地址,并且官方建议,每个account下的address_index不要超过20

举例:m/44'/60'/0'/0 -> 以太坊 m/44'/0'/0'/0 -> BTC

参考:https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki

几个概念:

私钥 = 助记词 = (keystore+密码)

私钥:用户的身份钥匙,跟公钥配对使用

助记词(种子):私钥的一种便携记忆表现形式

keystore:私钥的加密格式,需要用户设置密码生成,可以以文件和字符串方式存储。

钱包(具体某个币种,比如BTC)地址:通过公钥的某种正向不可逆算法生成

几点注意:

  1. 私钥跟助记词可以相互推导出来
  2. keystore+密码才可以还原私钥(助记词)

HD多链钱包(同一种子生成BTC/ETH/EOS钱包助记词,私钥、地址)步骤

  1. HD钱包助记词生成
  2. BTC钱包通过助记词生成私钥、公钥、地址
  3. ETH钱包通过助记词生成私钥、公钥、地址
  4. EOS钱包通过助记词生成私钥、公钥、地址

测试结果:

同一套助记词,可以在不同钱包下生成不同的公钥私钥

参考:https://blog.csdn.net/qq_16137795/article/details/84530528

一个钱包下多个账户/地址方案:

首先确定一点,一个助记词是可以管理多个钱包的,从BIP44中路径分层可以看出,我们可以用一个助记词生成多个Account(身份)账户(也可以说是子私钥),每个身份可以通过地址索引address_index字段生成多个收款地址,要明确地的是,每个账户(权限)肯定可以单独导出自己的私钥的。

官网给出的方案:

从外部源导入主种子(助记词)时,软件应开始以下列方式发现帐户:

  1. 生成第一个帐户的节点(索引= 0) m/44'/0'/0'/0
  2. 生成此帐户的外部链节点 m/44'/0'/0'/0
  3. 扫描外部链的地址; 遵循下面描述的数量限制 m/44'/0'/0'/0...m/44'/0'/0'/19 有交易->go
  4. 如果外部链上未找到任何交易(非余额),停止查找 m/44'/0'/0'/3 没有交易记录->stop
  5. 如果有某些交易,请增加帐户索引并转到步骤1 m/44'/0'/0'/0 --> m/44'/1/0'/0

此算法是成功的,因为如果上一个帐户没有交易历史记录,软件应该禁止创建新帐户,如上面“帐户”所述。

请注意,该算法适用于交易历史记录,而不是帐户余额,因此您可以拥有一个总共0个硬币的帐户,算法仍将继续发现

收款地址数量限制:

地址限制当前设置为20.如果软件连续命中20个未使用的地址,则预计在此之后没有使用过的地址并停止搜索地址链。我们只扫描外部链,因为内部链仅接收来自相关外部链的硬币。

当用户试图通过生成新地址来超过外部链的数量限制时,钱包软件应该警告。

iOS钱包开发QQ群:123296370

你可能感兴趣的:(分层确定性钱包资料整理)