From e568a8786cdfccaf403b45fb45e7e2ae53769fe7 Mon Sep 17 00:00:00 2001 From: Esteban Ordano Date: Wed, 4 Feb 2015 13:15:06 -0300 Subject: [PATCH] Transaction: Fix wrong logic on input addition --- lib/transaction/transaction.js | 4 ++-- test/transaction/transaction.js | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/lib/transaction/transaction.js b/lib/transaction/transaction.js index 33b00ed..e800ed8 100644 --- a/lib/transaction/transaction.js +++ b/lib/transaction/transaction.js @@ -402,10 +402,10 @@ Transaction.prototype._fromMultisigUtxo = function(utxo, pubkeys, threshold) { */ Transaction.prototype.addInput = function(input, outputScript, satoshis) { $.checkArgumentType(input, Input, 'input'); - if (!input.output || !(input.output instanceof Output) && !outputScript && !satoshis) { + if (!input.output && (_.isUndefined(outputScript) || _.isUndefined(satoshis))) { throw new errors.Transaction.NeedMoreInfo('Need information about the UTXO script and satoshis'); } - if (!input.output && outputScript && satoshis) { + if (!input.output && outputScript && !_.isUndefined(satoshis)) { outputScript = outputScript instanceof Script ? outputScript : new Script(outputScript); $.checkArgumentType(satoshis, 'number', 'satoshis'); input.output = new Output({ diff --git a/test/transaction/transaction.js b/test/transaction/transaction.js index c0ff98d..80d89e1 100644 --- a/test/transaction/transaction.js +++ b/test/transaction/transaction.js @@ -329,6 +329,29 @@ describe('Transaction', function() { expect(deserialized.inputs[0] instanceof Transaction.Input.MultiSigScriptHash).to.equal(true); }); }); + + describe('checks on adding inputs', function() { + var transaction = new Transaction(); + it('fails if no output script is provided', function() { + expect(function() { + transaction.addInput(new Transaction.Input()); + }).to.throw(errors.Transaction.NeedMoreInfo); + }); + it('fails if no satoshi amount is provided', function() { + var input = new Transaction.Input(); + expect(function() { + transaction.addInput(input); + }).to.throw(errors.Transaction.NeedMoreInfo); + expect(function() { + transaction.addInput(new Transaction.Input(), Script.empty()); + }).to.throw(errors.Transaction.NeedMoreInfo); + }); + it('allows output and transaction to be feed as arguments', function() { + expect(function() { + transaction.addInput(new Transaction.Input(), Script.empty(), 0); + }).to.not.throw(); + }); + }); }); var tx_empty_hex = '01000000000000000000';