Bit-Wasp/bitcoin-php通过扩展公钥生成比特币地址问题求助
问题解决方案
问题1:测试网配置下生成主网格式地址
原因:AddressCreator默认使用主网配置生成地址,未传入你初始化好的测试网实例,导致网络配置不生效。
修改代码:将返回地址的代码行修改为传入你提前声明的$btc网络实例即可:
// 原代码 // return $child_key->getAddress(new AddressCreator())->getAddress(); // 修改为 $addressCreator = new AddressCreator(); return $child_key->getAddress($addressCreator, $btc)->getAddress();
如果是旧版本的bitcoin-php库,需要将网络注入AddressCreator构造:
$addressCreator = new AddressCreator($btc); return $child_key->getAddress($addressCreator)->getAddress();
修改后测试网环境会生成tb1开头的隔离见证地址、m/n开头的Legacy地址,不会再出现主网bc1格式的错误地址。
问题2:硬化派生路径要求提供私钥
这是BIP32协议的固有规则:带'后缀的硬化派生必须使用父私钥才能完成,仅用公钥无法实现硬化派生,不存在绕过该规则的方法。
可行实现方案:
- 让用户在自己的钱包端完成所有硬化路径的派生,导出对应账户级的扩展公钥(比如BIP84标准的路径
m/84'/0'/0'下的zpub/vpub/tpub)提交给系统 - 系统拿到账户级扩展公钥后,仅对后面的非硬化路径(
0/$index对应收款地址、1/$index对应找零地址)进行派生,全程不需要私钥,完全符合安全要求
内容的提问来源于stack exchange,提问作者brinhildr
相关产品推荐
相关产品推荐

