理解开发HD 钱包涉及的 BIP32、BIP44、BIP39

数字钱包概念 钱包用来存钱的,在区块链中,我们的数字资产都会对应到一个账户地址上, 只有拥有账户的钥匙(私钥)才可以对资产进行消费(用私钥对消费交易签名)。

BIP32 它是为了避免管理一堆私钥的麻烦提出的分层推导方案。 根据一个随机数种子通过分层确定性推导的方式得到n个私钥,这样保存的时候,只需要保存一个种子就可以,私钥可以推导出来。

BIP44 通过这种分层(树状结构)推导出来的秘钥,通常用路径来表示,每个级别之间用斜杠 / 来表示,由主私钥衍生出的私钥起始以“m”打头。因此,第一个母密钥生成的子私钥是m/0。第一个公共钥匙是M/0。第一个子密钥的子密钥就是m/0/1,以此类推。 BIP44则是为这个路径约定了一个规范的含义(也扩展了对多币种的支持),BIP0044指定了包含5个预定义树状层级的结构: m / purpose’ / coin’ / account’ / change / address_index m是固定的, Purpose也是固定的,值为44(或者 0x8000002C) Coin type 这个代表的是币种,0代表比特币,1代表比特币测试链,60代表以太坊Account 代表这个币的账户索引,从0开始 Change 常量0用于外部链,常量1用于内部链(也称为更改地址)。外部链用于在钱包外可见的地址(例如,用于接收付款)。内部链用于在钱包外部不可见的地址,用于返回交易变更。 (所以一般使用0) address_index 这就是地址索引,从0开始,代表生成第几个地址,官方建议,每个account下的address_index不要超过20 根据 EIP85提议的讨论以太坊钱包也遵循BIP44标准,确定路径是m/44’/60’/a’/0/n a 表示帐号,n 是第 n 生成的地址,60 是在 SLIP44 提案中确定的以太坊的编码。所以我们要开发以太坊钱包同样需要对比特币的钱包提案BIP32、BIP39有所了解。 一句话概括下BIP44就是:给BIP32的分层路径定义规范

BIP39 BIP32 提案可以让我们保存一个随机数种子(通常16进制数表示),而不是一堆秘钥,确实方便一些,不过用户使用起来(比如冷备份)也比较繁琐,这就出现了BIP39,它是使用助记词的方式,生成种子的,这样用户只需要记住12(或24)个单词,单词序列通过 PBKDF2 与 HMAC-SHA512 函数创建出随机种子作为 BIP32 的种子。

经验分享 程序员 微信小程序 职场和发展