From 8f53fc8bc153cb485d2687bd9e6b0b3b02861b01 Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Mon, 16 Nov 2015 14:11:24 -0500 Subject: [PATCH 1/2] Transaction: Added tests for roundtrip with signatures. --- test/transaction/transaction.js | 47 +++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/test/transaction/transaction.js b/test/transaction/transaction.js index 4788c28..f62417c 100644 --- a/test/transaction/transaction.js +++ b/test/transaction/transaction.js @@ -79,6 +79,33 @@ describe('Transaction', function() { a.should.deep.equal(b); }); + it('serialize to Object with signatures roundtrip', function() { + var tx = new Transaction() + .from(simpleUtxoWith100000Satoshis) + .to([{address: toAddress, satoshis: 50000}]) + .change(changeAddress) + .sign(privateKey); + + var txData = JSON.stringify(tx); + var tx2 = new Transaction(JSON.parse(txData)); + var txData2 = JSON.stringify(tx2); + txData.should.equal(txData2); + }); + + it('serialize to Object with p2sh signatures roundtrip', function() { + var tx = new Transaction() + .from(p2shUtxoWith1BTC, [p2shPublicKey1, p2shPublicKey2, p2shPublicKey3], 2) + .to([{address: toAddress, satoshis: 50000}]) + .change(changeAddress) + .sign(p2shPrivateKey1) + .sign(p2shPrivateKey2); + + var txData = JSON.stringify(tx); + var tx2 = new Transaction(JSON.parse(txData)); + var tx2Data = JSON.stringify(tx2); + txData.should.equal(tx2Data); + }); + it('constructor returns a shallow copy of another transaction', function() { var transaction = new Transaction(tx_1_hex); var copy = new Transaction(transaction); @@ -159,6 +186,26 @@ describe('Transaction', function() { var fourth = 25e6; var half = 5e7; + var p2shPrivateKey1 = PrivateKey.fromWIF('cNuW8LX2oeQXfKKCGxajGvqwhCgBtacwTQqiCGHzzKfmpHGY4TE9'); + var p2shPublicKey1 = p2shPrivateKey1.toPublicKey(); + var p2shPrivateKey2 = PrivateKey.fromWIF('cTtLHt4mv6zuJytSnM7Vd6NLxyNauYLMxD818sBC8PJ1UPiVTRSs'); + var p2shPublicKey2 = p2shPrivateKey2.toPublicKey(); + var p2shPrivateKey3 = PrivateKey.fromWIF('cQFMZ5gP9CJtUZPc9X3yFae89qaiQLspnftyxxLGvVNvM6tS6mYY'); + var p2shPublicKey3 = p2shPrivateKey3.toPublicKey(); + + var p2shAddress = Address.createMultisig([ + p2shPublicKey1, + p2shPublicKey2, + p2shPublicKey3 + ], 2, 'testnet'); + var p2shUtxoWith1BTC = { + address: p2shAddress.toString(), + txId: 'a477af6b2667c29670467e4e0728b685ee07b240235771862318e29ddbe58458', + outputIndex: 0, + script: Script(p2shAddress).toString(), + satoshis: 1e8 + }; + describe('adding inputs', function() { it('adds just once one utxo', function() { From 446760fec765474ce4b44d6ffa397b2387d67d3d Mon Sep 17 00:00:00 2001 From: Kirill Fomichev Date: Fri, 27 Nov 2015 17:46:16 +0300 Subject: [PATCH 2/2] Fix Transaction.fromObject --- lib/transaction/transaction.js | 2 +- test/transaction/transaction.js | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/transaction/transaction.js b/lib/transaction/transaction.js index 225fb35..1acc71e 100644 --- a/lib/transaction/transaction.js +++ b/lib/transaction/transaction.js @@ -381,7 +381,7 @@ Transaction.prototype.fromObject = function fromObject(arg) { this._changeScript = new Script(transaction.changeScript); } if (transaction.fee) { - this.fee(transaction.fee); + this._fee = transaction.fee; } this.nLockTime = transaction.nLockTime; this.version = transaction.version; diff --git a/test/transaction/transaction.js b/test/transaction/transaction.js index f62417c..9389078 100644 --- a/test/transaction/transaction.js +++ b/test/transaction/transaction.js @@ -79,10 +79,11 @@ describe('Transaction', function() { a.should.deep.equal(b); }); - it('serialize to Object with signatures roundtrip', function() { + it('toObject/fromObject with signatures and custom fee', function() { var tx = new Transaction() .from(simpleUtxoWith100000Satoshis) .to([{address: toAddress, satoshis: 50000}]) + .fee(15000) .change(changeAddress) .sign(privateKey); @@ -92,10 +93,11 @@ describe('Transaction', function() { txData.should.equal(txData2); }); - it('serialize to Object with p2sh signatures roundtrip', function() { + it('toObject/fromObject with p2sh signatures and custom fee', function() { var tx = new Transaction() .from(p2shUtxoWith1BTC, [p2shPublicKey1, p2shPublicKey2, p2shPublicKey3], 2) .to([{address: toAddress, satoshis: 50000}]) + .fee(15000) .change(changeAddress) .sign(p2shPrivateKey1) .sign(p2shPrivateKey2);