-
Notifications
You must be signed in to change notification settings - Fork 88
Open
Description
We are attempting to leverage the new Bitcoin Recovery App as a migration path to the new firmware which restricts unhardened paths.
We have taken several steps but are hitting significant issues.
1- wallet registration of a multisig wallet fails within the new Bitcoin Recovery app.
2- A device that has already completed wallet registration successfully on the previous firmware / app version fails to sign with the recovery app.
Below are the parameters that are being passed and the errors being returned.
Hopefully this can duplicate the issue within a unit test for quick resolution.
We greatly appreciate any help you can provide.
package.json: "ledger-bitcoin": "0.3.0",
Registration Failure
import * as ledgerBitcoin from 'ledger-bitcoin'
const transport = await getTransport()
const appClient = new ledgerBitcoin.AppClient(transport)
const multisigPolicy = new ledgerBitcoin.WalletPolicy(
"Multisig-1", // policy name
"sh(wsh(sortedmulti(2,@0/**,@1/**,@2/**)))", // descriptor template
["[22943817/49/0/0]xpub6C92h9BRnATnazSRWkRQw9sjy74FBvmNhEUJEu3dEgCfwVHiM7RNz2xtnywei4peFX2bqTjUce4vWXYsQyNMLgz4U7UtAwJjEdQzrXH8ktM",
"[203ddff8/49/0/1]xpub6Ct76xvLRD17X9EavNLkRzLWVwaMQEQEn1qBRgdSE92i7eJ21ndRSC73sW9bdgwkE7xj5p4B7VtAwv2skdu52q66Yo4BVDxNjBqqTmZSc6F",
"[71147f86/49/0/1]xpub6DJH6e3LkiBjqsmd7v11JF55h21RJSERdHC4Q1FNwf95sZjFLwtZ8xHkXYAEnK462rtfBD45MMhBn5MeMG2P5T7yfccYh8pfTnAGpsmdR"
] // keys
)
const [policyId, policyHmac] = await appClient.registerWallet(multisigPolicy)
result:
Transport.ts:277 Uncaught (in promise) TransportStatusError: Ledger device: UNKNOWN_ERROR (0x6a82)
at TransportWebHID.send (Transport.ts:277:13)
at async AppClient.makeRequest (appClient.ts:101:18)
at async AppClient.registerWallet (appClient.ts:188:22)
at async registerWalletPolicy (ledger.ts:411:1)
at async Module.signingDevice_registerWalletPolicy (signingDevice.ts:18:1)
I'm on ledger nano S+ v1.5 running BTC recovery app 2.4.3
Signing Failure:
import * as ledgerBitcoin from 'ledger-bitcoin'
const appClient = new ledgerBitcoin.AppClient(transport)
"Multisig-1", // policy name
"sh(wsh(sortedmulti(2,@0/**,@1/**,@2/**)))", // descriptor template
["[22943817/49/0/0]xpub6C92h9BRnATnazSRWkRQw9sjy74FBvmNhEUJEu3dEgCfwVHiM7RNz2xtnywei4peFX2bqTjUce4vWXYsQyNMLgz4U7UtAwJjEdQzrXH8ktM",
"[203ddff8/49/0/1]xpub6Ct76xvLRD17X9EavNLkRzLWVwaMQEQEn1qBRgdSE92i7eJ21ndRSC73sW9bdgwkE7xj5p4B7VtAwv2skdu52q66Yo4BVDxNjBqqTmZSc6F",
"[71147f86/49/0/1]xpub6DJH6e3LkiBjqsmd7v11JF55h21RJSERdHC4Q1FNwf95sZjFLwtZ8xHkXYAEnK462rtfBD45MMhBn5MeMG2P5T7yfccYh8pfTnAGpsmdR"
] // keys
)
const walletPolicy = new ledgerBitcoin.WalletPolicy(
"Multisig-0", // name
"sh(wsh(sortedmulti(2,@0/**,@1/**,@2/**)))", // template
[
"[1b6531cf/49/0/0]xpub6C92h9BRnATnHMEMQ1885FWavHrDJ2buQmQusSFktV9XKgyC18JcSWFPPK7RtuqFWot4UHHHa4AF5BPV25ZMzYhDMBqBk2eaPv9djqN7Atw",
"[6e35d0d2/49/0/0]xpub6CFfy1RWVBSqbQkPKNiY1eipHiZUs1f4JwvaiHrK7FNGRWVqhU2SdidHkCpUevSeSUpV3WnGRVMjhgt516Yjk64Hvt6Ka8rxPQ6t6WX4VG2",
"[c7ef45fc/49/0/0]xpub6Cdpo8JKvjF7B3bjHmeCuoPnnM2G14NkD4QEdzf7y7q5xzHpHJXD1W1Qd5gqdQWU1AxDqsQcodVbqEW25W5nKCE7eNjN76HHGTtLiwjb25C"
] // keys
)
const walletHmac = ... // this is a data buffer with a bunch of bytes from a wallet registered with a previous firmware version
const psbt = "cHNidP8BAHMBAAAAAdkAOvrslpxXu+GJeJsReSGcmbEsBn7Nqa/JIYW7tv3FAQAAAAD9////AoQEAAAAAAAAF6kUZKS+37bMosSsSxKpswEsaZweE1yHyQkAAAAAAAAXqRTZYMbZGoT6h6lMGQ3CbzInkLtbBocAAAAATwEEiLIeA0JK130AAACzBDeBh3HWfdlqHGkvhrds4BLSGIdZCJGmDN7d6eVXxg8DmqNpOWxXTsxFY0vSurcI5noFI/a4jshBWKjnn4VhC7UQG2UxzzEAAAAAAAAAAAAAAE8BBIiyHgNR38KSAAAAAGF2XcdQq9aA1MDzTsbP5lSvwjP88lNGumk47pw0B/EqApyo3lnbvJUxFEa2UmnolhipdIyDS45zlWIzyY4FEwQOEG410NIxAAAAAAAAAAAAAABPAQSIsh4DhdY0kgAAAAA7j65Q8tZF0xp3H22eWmVO3IPLJ2hH11xb96jZ87E4nwMZwxaDMMWKMaLBaXEh4ug6aNYQBKqZjcvCOwk575DBLBDH70X8MQAAAAAAAAAAAAAAAAEA/ZUBAQAAAAABAc5x0EIitkTZ7oa3ItLZ2WT8WVqo3NrX4xKDB1p/zfYyAAAAACMiACCef5r4KDzBhMGJj4T0EZYIRxHGZboDpo5hVt6IkK1BtP3///8CDQkAAAAAAAAXqRSQO1ECuIjCfFprfslzStwciZCOvYdHEAAAAAAAABepFEUwU9QuI5Ye1SDDs3mjfchuy95KhwQARzBEAiArT4AFpeep9hLDF/z8PZZcjvJtNaPkd+mqg1h04pByBAIgLIKZ+6fknlccxbf1b3F+FxiGlEUQEHB96af54sDZ5nABSDBFAiEA9NkY2KpCvXrjeLA03LF5K6xOGJ1fek/uykHrjN8+uJ4CIDFFhWkJPDZOesFZ5enGUeF8eWA3h1p1td9nd1TB3+cgAWlSIQK5jMAJvgiv28tyg25MOeSxmmBO4UvAmqUV+aVUIeNyLSEDB4NIEVO5isYNNMNayytS93WxNFkExiK6PHegdN+Ue1khA250ZyWqJh+pmHhgLJi6dAcckZKaTW9H83JA/BaMvMNDU64AAAAAAQEgRxAAAAAAAAAXqRRFMFPULiOWHtUgw7N5o33IbsveSocBBCIAILIwyVFtj7xKqVjw9m8g4fVHTPYS+k9YmgwCuUPvRvG8AQVpUiEDxMUPhMzy4OVAQpkLWqQA2kJk7YmjL0qTNiJhhHiGngchA9TJxSLzffvMh3yZ2zgTRQoJkcpcj5pXcmUZO4lUQ4joIQPqB6ybbgDtgQwMu2UxmQDRabhIn29XkyB830yNggpYrlOuIgYDxMUPhMzy4OVAQpkLWqQA2kJk7YmjL0qTNiJhhHiGngcYx+9F/DEAAAAAAAAAAAAAAAEAAAAAAAAAIgYD1MnFIvN9+8yHfJnbOBNFCgmRylyPmldyZRk7iVRDiOgYbjXQ0jEAAAAAAAAAAAAAAAEAAAAAAAAAIgYD6gesm24A7YEMDLtlMZkA0Wm4SJ9vV5MgfN9MjYIKWK4YG2UxzzEAAAAAAAAAAAAAAAEAAAAAAAAAAAABAWlSIQK04XITWjbPgCHQ9WH0QNItN81T1Qw9aTDthy7fJm9K/yEDoTb9CqYbOHUONCwma5JHYXA0wTcFZqomW3A8ChD7LechA/YHmM+hCI5bo4QEeVoR91cHQBOt85rnIQRTNaLW9xaqU64iAgK04XITWjbPgCHQ9WH0QNItN81T1Qw9aTDthy7fJm9K/xgbZTHPMQAAAAAAAAAAAAAAAQAAAAEAAAAiAgOhNv0Kphs4dQ40LCZrkkdhcDTBNwVmqiZbcDwKEPst5xjH70X8MQAAAAAAAAAAAAAAAQAAAAEAAAAiAgP2B5jPoQiOW6OEBHlaEfdXB0ATrfOa5yEEUzWi1vcWqhhuNdDSMQAAAAAAAAAAAAAAAQAAAAEAAAAA"
await client.signPsbt(psbt, walletPolicy, walletHMAC, () => {})
Throws:
TransportStatusError: Ledger device: Invalid data received (0x6a80)
at async AppClient.makeRequest (appClient.ts:101:18)
at async AppClient.signPsbt (appClient.ts:327:5)
at async signPsbt (ledger.ts:579:1)
at async ledger_getSignedBitcoinTransaction (ledger.ts:281:1)
at async Module.signTransaction (signingDevice.ts:108:1)
at async run (react.ts:3:3)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels