如何在Hedera JS SDK中通过BIP-39助记词指定MetaMask的ECDSA派生路径
如何在Hedera JS SDK中通过BIP-39助记词生成适配MetaMask以太坊派生路径的ECDSA密钥对
问题背景
之前通过直接传入私钥生成ECDSA密钥对的代码如下:
const privateKey = PrivateKey.fromStringECDSA(process.env.TARGET_HEX_PRIVATE_KEY);
现在需要改用BIP-39助记词生成,且要适配MetaMask硬编码的以太坊派生路径m/44'/60'/0'/0/0(前3段为hardened派生,后2段为非hardened派生),但Hedera JS SDK的Mnemonic.toEcdsaPrivateKey方法不接受字符串格式的派生路径,只接受数字数组。
解决方案
根据BIP-32规范,hardened派生的索引需要在基础数值上加上2^31(即0x80000000),将路径m/44'/60'/0'/0/0转换为数字数组的规则如下:
44'→44 + 2147483648 = 214748369260'→60 + 2147483648 = 21474837080'→0 + 2147483648 = 21474836480→ 直接使用00→ 直接使用0
正确代码示例
const mnemonic = Mnemonic.fromString(process.env.TARGET_SEED_PHRASE); // 对应m/44'/60'/0'/0/0的派生路径数组 const derivationPath = [2147483692, 2147483708, 2147483648, 0, 0]; const privateKey = await mnemonic.toEcdsaPrivateKey('', derivationPath);
说明
- 第一个参数传入空字符串,表示助记词未设置额外密码(若有助记词密码可替换为对应字符串)
- 数字数组中的每个元素对应派生路径的每一段,hardened段必须按规则转换为带偏移量的数值
内容的提问来源于stack exchange,提问作者bguiz
相关产品推荐
相关产品推荐

