我使用单个 Trezor T 使用 Electrum 4.0.9 创建了一个 P2WSH 多重签名钱包,我向该钱包发送了大量 BTC。
当我使用两种不同的衍生产品时,Electrum 允许我使用同一设备设置钱包,一种是“m/48'/0'/0'/2'”,另一种是“m/48'/0'/0 '/3'”。
当我尝试使用第一个钱包派生进行签名时,我得到一个无效的多重签名,这是因为我尝试在第二个钱包派生 3 上签名或查看交易时产生
invalid script_type
错误。
我在解决这个问题方面取得了一些进展,但遇到了障碍。事实证明,script_type
派生“m/48'/0'/0'/2'”中的 2 代表一个 Native Segwit (P2WSH) 钱包,问题是目前script_type
在 BIP 48 下定义的唯一另一个是一个嵌套隔离见证(P2SH-P2WSH),用“m/48'/0'/0'/1'”表示。
我从 BIP 48 文档中发现了这一点,该文档概述了以下可能的推导:
m / purpose' / coin_type' / account' / script_type' / change / address_index
[来源:https://github.com/bitcoin/bips/blob/master/bip-0048.mediawiki]
所以显然 Electrum 和 Trezor 允许我使用未定义的 script_type 3 派生密钥,但现在我无法签署任何交易来花费资金,因为脚本没有定义。
当然,我不会将我的错误信息归咎于软件,而且我知道它允许向前兼容,但为什么 Electrum 和 Trezor T 的代码允许使用未定义的脚本进行密钥派生呢?
有什么方法可以script_type
通过复制 a script_type
of 2 的代码并将其作为新定义插入来自己定义 3,同时仍然能够从 HD 种子中获取密钥并访问我的资金?
我真的很感谢有足够知识的人帮助我回答这个问题,足以确保一些目前无法使用的资金流向任何可以帮助我解决问题的人。
(我应该补充一点,使用 Trezor T 的 HD 种子进行恢复会导致两个派生的 Zpub 和相应地址不同,尽管在两个多重签名钱包恢复中使用相同的种子和原始 Zpub 用于相应的 cosigner)。