@@ -143,9 +143,16 @@ export const validatePsbt = base64 => {
143143};
144144
145145export const validateSignablePsbt = hd => base64 => {
146− try {
147− bitcoin.Psbt.fromBase64(base64).signAllInputsHD(hd);
148− } catch (e) {
149− return 'No inputs were signed';
150− }
151−};
146+ const psbt = bitcoin.Psbt.fromBase64(base64);
147+ return !psbt.data.inputs.some((input, idx) => {
148+ try {
149+ // removing already derived part, eg 'm/84'/0'/0'/0/0' becomes '0/0'
150+ const path = input.bip32Derivation[0].path.substring(12);
151+ const prv = hd.derivePath(path).privateKey;
152+ psbt.signInput(idx, bitcoin.ECPair.fromPrivateKey(prv));
153+ return true;
154+ } catch (e) {
155+ return false;
156+ }
157+ }) && 'No inputs were signed';
158+ };