From 4f946cf016e4d6b0cdf9c651dd323fefeed443b3 Mon Sep 17 00:00:00 2001 From: monokh Date: Sun, 20 Oct 2019 22:21:00 +0100 Subject: [PATCH] Fix issue with claiming swap signature sometimes failing This was due to the wrong vout index (always 0) being given to the ledger sign function. It manifested when claiming swaps started by the node, as it has a privacy feature where it randomises the change output index. --- packages/bitcoin-ledger-provider/lib/BitcoinLedgerProvider.js | 4 ++-- packages/bitcoin-swap-provider/lib/BitcoinSwapProvider.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/bitcoin-ledger-provider/lib/BitcoinLedgerProvider.js b/packages/bitcoin-ledger-provider/lib/BitcoinLedgerProvider.js index ec5416218..2aa7748df 100644 --- a/packages/bitcoin-ledger-provider/lib/BitcoinLedgerProvider.js +++ b/packages/bitcoin-ledger-provider/lib/BitcoinLedgerProvider.js @@ -106,7 +106,7 @@ export default class BitcoinLedgerProvider extends LedgerProvider { return this._sendTransaction(transactions) } - async signP2SHTransaction (inputTxHex, tx, address, vout, outputScript, lockTime = 0, segwit = false, index = 0) { + async signP2SHTransaction (inputTxHex, tx, address, vout, outputScript, lockTime = 0, segwit = false) { const app = await this.getApp() const walletAddress = await this.getWalletAddress(address) @@ -118,7 +118,7 @@ export default class BitcoinLedgerProvider extends LedgerProvider { const ledgerTx = await app.splitTransaction(tx.toHex(), true) const ledgerOutputs = (await app.serializeTransactionOutputs(ledgerTx)).toString('hex') const ledgerSig = await app.signP2SHTransaction( - [[ledgerInputTx, index, outputScript.toString('hex'), 0]], + [[ledgerInputTx, vout.n, outputScript.toString('hex'), 0]], [walletAddress.derivationPath], ledgerOutputs.toString('hex'), lockTime, diff --git a/packages/bitcoin-swap-provider/lib/BitcoinSwapProvider.js b/packages/bitcoin-swap-provider/lib/BitcoinSwapProvider.js index 90e37f9f4..6f75ae357 100644 --- a/packages/bitcoin-swap-provider/lib/BitcoinSwapProvider.js +++ b/packages/bitcoin-swap-provider/lib/BitcoinSwapProvider.js @@ -136,7 +136,7 @@ export default class BitcoinSwapProvider extends Provider { const txfee = calculateFee(1, 1, 3) swapVout.txid = initiationTxHash - swapVout.vSat = swapVout.value * 1e8 + swapVout.vSat = BigNumber(swapVout.value).times(1e8).toNumber() if (swapVout.vSat - txfee < 0) { throw new Error('Transaction amount does not cover fee.')