From d136715322bfcbc5c89e951d2189fa70e27f3ebe Mon Sep 17 00:00:00 2001 From: Esteban Ordano Date: Fri, 6 Feb 2015 09:24:47 -0300 Subject: [PATCH 1/2] Dust: Add test: OP_RETURN is not dust --- test/transaction/transaction.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/test/transaction/transaction.js b/test/transaction/transaction.js index 62f6073..450388c 100644 --- a/test/transaction/transaction.js +++ b/test/transaction/transaction.js @@ -279,7 +279,7 @@ describe('Transaction', function() { return transaction.serialize(); }).to.throw(errors.Transaction.FeeError); }); - it('fails if a dust transaction is created', function() { + it('fails if a dust output is created', function() { var transaction = new Transaction() .from(simpleUtxoWith1BTC) .to(toAddress, 1) @@ -289,6 +289,16 @@ describe('Transaction', function() { return transaction.serialize(); }).to.throw(errors.Transaction.DustOutputs); }); + it('doesn\'t fail if a dust output is an op_return', function() { + var transaction = new Transaction() + .from(simpleUtxoWith1BTC) + .addData('not dust!') + .change(changeAddress) + .sign(privateKey); + expect(function() { + return transaction.serialize(); + }).to.not.throw(errors.Transaction.DustOutputs); + }); }); describe('to and from JSON', function() { From 9cafbd558d838bb55fe8909f6ffa9767dc050b84 Mon Sep 17 00:00:00 2001 From: Esteban Ordano Date: Fri, 6 Feb 2015 09:32:12 -0300 Subject: [PATCH 2/2] Dust outputs: Fix condition (one OP_RETURN was avoiding checks on other outputs) --- lib/transaction/transaction.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/transaction/transaction.js b/lib/transaction/transaction.js index 5c00e91..6c53d3f 100644 --- a/lib/transaction/transaction.js +++ b/lib/transaction/transaction.js @@ -151,12 +151,10 @@ Transaction.prototype._validateChange = function() { Transaction.DUST_AMOUNT = 5460; Transaction.prototype._hasDustOutputs = function() { - var output; - for (output in this.outputs) { - if (this.outputs[output].script.isDataOut()) { - return false; - } - if (this.outputs[output].satoshis < Transaction.DUST_AMOUNT) { + var index, output; + for (index in this.outputs) { + output = this.outputs[index]; + if (output.satoshis < Transaction.DUST_AMOUNT && !output.script.isDataOut()) { return true; } }