HD Wallet钱包 Metamask

HD WALLET是分层推导确定性钱包, 管理着私钥.

HD WALLET是分层推导确定性钱包, 管理着私钥.

具体原理

参考这几篇文章 https://www.jianshu.com/p/e0bca6eafa58 https://learnblockchain.cn/2018/10/25/eth-web-wallet_1 https://learnblockchain.cn/article/784

BIP44路径规则

定义了五层路径规则 m/purpse’/coin_type’/account’/change/address_index m:主扩展密钥 purpose: bip44/bip45 coin_type: 币种 account: 钱包账户 change: 0 对外 / 1 找零 address_index: 地址索引

路径如何与分层对应上

image.png

使用ethers.js库创建HD钱包

// 使用ethers.js库
// 生成16byte的数据(对应12个助记词)
let seed = ethers.utils.randomBytes(16);
// 生成英文助记词 
let mnemonic = ethers.utils.entropyToMnemonic(seed,'en');
// 使用助记词生成对应路径的钱包
// address 0x613B8c0016634185B73f27566185f1F95a63a8Ed
let wt = ethers.Wallet.fromMnemonic(mnemonic,"m/44'/60'/0'/0/0");
// address 0x850BF6c7e76433947c5980663974Eb22533E9096
wt = ethers.Wallet.fromMnemonic(mnemonic,"m/44'/60'/0'/0/1");  

随机字节数与生成的助记词的个数关系

随机数个数    助记词个数
  16           12
  20           15
  24           18
  28           21
  32           24

metamask

在每次重新安装metamask后, 使用相同的助记词, 推导出的账户地址都不变. 而且在创建新账户时也都保证一定的顺序. 因为在重新导入后, 相同助记词推导出相同的主密钥, 在路径相同的情况下, 生成的地址也相同. 在创建新账户时, 增加address_index "m/44'/60'/0'/0/1" "m/44'/60'/0'/0/2"就可以得到新的地址. image.png

BNB币种

查看BNB币种是714 那计算的路径应该是 "m/44'/714'/0'/0/1" 使用相同的助记词, 应该得出不同的wallet.但实际证明地址还是和ETH币种一样的.为啥导入BSC网络后(BNB)地址不变呢? 查看BSC文档, account中描述BNB使用的是与ETH一样的路径.

Binance Chain extension wallet would use a similar way to generate keys as Ethereum, i.e. derive the private key using BIP32/BIP44 with HD prefix as “44’/60’/”, which is the same as Ethereum’s derivation path.

可以看到BNB和ETH一样用的是“44’/60’/”前缀, 所以计算出来的地址也一样.

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
打野工程师
打野工程师
江湖只有他的大名,没有他的介绍。