From 22ad1cc5d1d6da434853e9959a5443e2335a42d8 Mon Sep 17 00:00:00 2001 From: Toporin Date: Tue, 14 Jan 2025 13:00:52 +0100 Subject: [PATCH] Patch https://github.com/Toporin/SatochipApplet/issues/15 Null exception can be thrown when signing a multisig transaction from a Sparrow wallet reconstructed from a Bitcoin descriptor. This happens when the user did not configure any keystore with the corresponding Satochip card ('import' button). In this case, the 'fullpath' derivation path remains undefined, leading to the exception. --- .../sparrow/io/satochip/SatoCardApi.java | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/sparrowwallet/sparrow/io/satochip/SatoCardApi.java b/src/main/java/com/sparrowwallet/sparrow/io/satochip/SatoCardApi.java index 132de40d..09e03da9 100644 --- a/src/main/java/com/sparrowwallet/sparrow/io/satochip/SatoCardApi.java +++ b/src/main/java/com/sparrowwallet/sparrow/io/satochip/SatoCardApi.java @@ -164,19 +164,12 @@ public class SatoCardApi extends CardApi { for(PSBTInput psbtInput : psbt.getPsbtInputs()) { if(!psbtInput.isSigned()) { WalletNode signingNode = signingNodes.get(psbtInput); - String fullPath = null; List keystores = wallet.getKeystores(); - for(int i = 0; i < keystores.size(); i++) { - Keystore keystore = keystores.get(i); - WalletModel walletModel = keystore.getWalletModel(); - if(walletModel == WalletModel.SATOCHIP) { - String basePath = keystore.getKeyDerivation().getDerivationPath(); - String extendedPath = signingNode.getDerivationPath().substring(1); - fullPath = basePath + extendedPath; - keystore.getPubKey(signingNode); - break; - } - } + // recover full derivation path + Keystore keystore = keystores.get(0); + String basePath = keystore.getKeyDerivation().getDerivationPath(); + String extendedPath = signingNode.getDerivationPath().substring(1); + String fullPath = basePath + extendedPath; psbtInput.sign(new CardPSBTInputSigner(signingNode, fullPath)); }