blockchain - HD钱包(bip32)地址派生路径
问题描述
我正在创建一个需要从提供的XPUB
密钥生成新地址的应用程序。
例如xpub6CUGRUonZSQ4TWtTMmzXdrXDtypWKiKrhko4egpiMZbpiaQL2jkwSB1icqYh2cfDfVxdx4df189oLKnC5fSwqPfgyP3hooxujYzAu3fDVmz
我正在使用 Electrum 钱包和这个应用程序提供的密钥。
我的应用程序允许用户添加他们自己的 xpub 密钥,因此我的应用程序将能够在不影响用户隐私的情况下生成新地址,因为xpub
密钥仅由我的应用程序使用并且不向公众公开。
所以我正在寻找一种正确生成新地址的方法,我找到了一些库,但是我不确定派生路径,它应该是什么样子?
考虑以下路径示例
推导路径更像是约定而不是规则吗?
Bitcoin first external first m / 44' / 0' / 0' / 0 / 0
这是一条有效的路径吗?我在这里找到了它https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki我还发现 Electrum 钱包使用以下格式的另一种模式https://bitcoin.stackexchange.com/questions/36955/what-bip32-derivation-path-does-electrum-use/36956。它使用 m/0/ 接收地址,使用 m/1/ 更改地址。
地址的最大数量 (n) 是多少?在线工具如何计算HD钱包的余额,如果N个数很大,计算总和需要很大的处理能力。
所以总而言之,我想知道我应该使用什么格式的派生路径才能在兼容性方面没有问题?
如果有任何帮助,我将不胜感激。
解决方案
问题 1-3:这是 bip44 约定,electrum 没有遵循它,因此它与其他支持 bip44 的钱包不兼容。
问题4:数量可以是无限的,如果你说的是某个父键的最大数量,答案是:
每个扩展密钥有 2^31 个普通子密钥和 2^31 个强化子密钥 - https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki
如果您的应用程序设计导致大量地址,那是您自己的问题,您需要通过更好的设计来处理它,如果您的意思是与其他钱包的兼容性,根据 bip44,
地址间隙限制当前设置为 20。如果软件连续命中 20 个未使用的地址,它预计在此点之外没有使用的地址并停止搜索地址链。 https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#Address_gap_limit
推荐阅读
- mongodb - MongoDB 性能 - 与使用索引的两个字段的查询不同
- dc.js - DC.js - 复合图表 - 行间填充
- jakarta-ee - 在payara服务器上设置许多jdbcRealm
- sql - SQL 在“WHERE IN ()”子句中显示所有带有 COUNT 的值
- mysql - 无法创建 helloPheonix.repo 的 Pheonix(MySQL) 数据库
- django - 如何覆盖 Django 贡献的 url 模式?
- javascript - 为什么使用选中属性更改复选框时未调用 onchange 函数
- javascript - 如何使用 onlick 填写多个输入表单
- reactjs - 多个 BrowserRouter 显示多个组件
- vaadin - Vaadin Charts:用悬停点触发点击事件