From eba08fa761274e663e06c686122906186b73f7e0 Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Tue, 6 May 2014 14:13:00 +1000 Subject: [PATCH 1/5] Fixes indentation for assertions --- test/wallet.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/test/wallet.js b/test/wallet.js index a5b31ec..9426b07 100644 --- a/test/wallet.js +++ b/test/wallet.js @@ -141,10 +141,14 @@ describe('Wallet', function() { wallet.generateAddress() wallet.generateAddress() - assertEqual(wallet.getPrivateKeyForAddress("n2fiWrHqD6GM5GiEqkbWAc6aaZQp3ba93X"), - wallet.getExternalAccount().derive(1).priv) - assertEqual(wallet.getPrivateKeyForAddress("mnXiDR4MKsFxcKJEZjx4353oXvo55iuptn"), - wallet.getInternalAccount().derive(0).priv) + assertEqual( + wallet.getPrivateKeyForAddress("n2fiWrHqD6GM5GiEqkbWAc6aaZQp3ba93X"), + wallet.getExternalAccount().derive(1).priv + ) + assertEqual( + wallet.getPrivateKeyForAddress("mnXiDR4MKsFxcKJEZjx4353oXvo55iuptn"), + wallet.getInternalAccount().derive(0).priv + ) }) it('raises an error when address is not found', function(){ From 695eb64a3ae24405c2cb49fa8ebaba49859b01fe Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Mon, 5 May 2014 21:17:34 +1000 Subject: [PATCH 2/5] Clarifies Transaction.addOutput param documentation --- src/transaction.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/transaction.js b/src/transaction.js index 137b175..12f0f38 100644 --- a/src/transaction.js +++ b/src/transaction.js @@ -84,7 +84,7 @@ Transaction.prototype.addInput = function (tx, outIndex) { * Can be called with: * * i) An existing TransactionOut object - * ii) An address object or an address and a value + * ii) An address object or a string address, and a value * iii) An address:value string * iv) Either ii), iii) with an optional network argument * From 4012b82bec0c0f3e1d6cf7ee6e0b90ecf9079c7a Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Mon, 5 May 2014 15:48:44 +1000 Subject: [PATCH 3/5] Fixes Transaction.addOutput(Address, Number) --- src/transaction.js | 18 +++++++++--------- test/transaction.js | 5 +++++ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/transaction.js b/src/transaction.js index 12f0f38..f4d78ce 100644 --- a/src/transaction.js +++ b/src/transaction.js @@ -96,20 +96,20 @@ Transaction.prototype.addOutput = function (address, value, network) { return } - if (arguments[0].indexOf(':') >= 0) { - network = value - - var args = arguments[0].split(':') - address = args[0] - value = parseInt(args[1]) - } + if (typeof address === 'string') { + if (arguments[0].indexOf(':') >= 0) { + var args = arguments[0].split(':') + address = args[0] + value = parseInt(args[1]) - network = network || Network.bitcoin + network = arguments[1] + } - if (typeof address === 'string') { address = Address.fromBase58Check(address) } + network = network || Network.bitcoin + this.outs.push(new TransactionOut({ value: value, script: Script.createOutputScript(address, network) diff --git a/test/transaction.js b/test/transaction.js index a9e5ef7..616135c 100644 --- a/test/transaction.js +++ b/test/transaction.js @@ -154,6 +154,11 @@ describe('Transaction', function() { verifyTransactionOut() }) + it('allows an Address object and value to be passed in', function(){ + tx.addOutput(Address.fromBase58Check('15mMHKL96tWAUtqF3tbVf99Z8arcmnJrr3'), 40000) + verifyTransactionOut() + }) + it('allows a string in the form of address:index to be passed in', function(){ tx.addOutput("15mMHKL96tWAUtqF3tbVf99Z8arcmnJrr3:40000") verifyTransactionOut() From a77846701f4e6846eed445bb3d530fba6bfc0d33 Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Tue, 6 May 2014 14:12:37 +1000 Subject: [PATCH 4/5] Fixes network support for TxOut --- src/transaction.js | 8 ++++++-- test/transaction.js | 9 +++++++++ test/wallet.js | 3 +++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/transaction.js b/src/transaction.js index f4d78ce..4d5bd91 100644 --- a/src/transaction.js +++ b/src/transaction.js @@ -112,7 +112,8 @@ Transaction.prototype.addOutput = function (address, value, network) { this.outs.push(new TransactionOut({ value: value, - script: Script.createOutputScript(address, network) + script: Script.createOutputScript(address, network), + network: network })) } @@ -485,7 +486,10 @@ var TransactionOut = function (data) { : data.address ? Script.createOutputScript(data.address) : new Script() - if (this.script.buffer.length > 0) this.address = this.script.getToAddress(); + var network = data.network || Network.bitcoin + if (this.script.buffer.length > 0) { + this.address = this.script.getToAddress(network) + } this.value = Array.isArray(data.value) ? convert.bytesToNum(data.value) diff --git a/test/transaction.js b/test/transaction.js index 616135c..e672411 100644 --- a/test/transaction.js +++ b/test/transaction.js @@ -173,6 +173,15 @@ describe('Transaction', function() { verifyTransactionOut() }) + it('supports alternative networks', function(){ + var addr = 'mkHJaNR7uuwRG1JrmTZsV4MszaTKjCBvCR' + + tx.addOutput(addr, 40000, network.testnet) + verifyTransactionOut() + + assert.equal(tx.outs[0].address.toString(), addr) + }) + function verifyTransactionOut(){ assert.equal(tx.outs.length, 1) diff --git a/test/wallet.js b/test/wallet.js index 9426b07..f83c160 100644 --- a/test/wallet.js +++ b/test/wallet.js @@ -467,7 +467,10 @@ describe('Wallet', function() { var to = 'mt7MyTVVEWnbwpF5hBn6fgnJcv95Syk2ue' var wallet = new Wallet(seed, {network: 'testnet'}) var tx = wallet.createTx(to, value) + assert.equal(tx.outs.length, 1) + assert.equal(tx.outs[0].address.toString(), to) + assert.equal(tx.outs[0].value, value) }) }) From 63231fb67d684c3a4a49fab296a0c83e05e21ccc Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Tue, 6 May 2014 14:10:25 +1000 Subject: [PATCH 5/5] Extends test for custom Wallet change addresses --- test/wallet.js | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/test/wallet.js b/test/wallet.js index f83c160..dd4d2ed 100644 --- a/test/wallet.js +++ b/test/wallet.js @@ -478,17 +478,27 @@ describe('Wallet', function() { it('should allow custom changeAddress', function(){ var wallet = new Wallet(seed, {network: 'testnet'}) var address = wallet.generateAddress() - utxo = { - "hash":"b3c5fde139dc0a3bba2729bfd5b9e16f5894131dc3dc46a91151da3053e7e3a5", - "outputIndex": 0, - "address" : address, - "value": 100000 - } - var to = "mt7MyTVVEWnbwpF5hBn6fgnJcv95Syk2ue" + + wallet.setUnspentOutputs([{ + hash: fakeTxHash(0), + outputIndex: 0, + address: address, + value: value + }]) + assert.equal(wallet.getBalance(), value) + var changeAddress = 'mfrFjnKZUvTcvdAK2fUX5D8v1Epu5H8JCk' - wallet.setUnspentOutputs([utxo]) - var tx = wallet.createTx(to, 10000, 1000, changeAddress) + var to = 'mt7MyTVVEWnbwpF5hBn6fgnJcv95Syk2ue' + var toValue = value / 2 + var fee = 1e3 + + var tx = wallet.createTx(to, toValue, fee, changeAddress) assert.equal(tx.outs.length, 2) + assert.equal(tx.outs[0].address.toString(), to) + assert.equal(tx.outs[0].value, toValue) + + assert.equal(tx.outs[1].address.toString(), changeAddress) + assert.equal(tx.outs[1].value, value - (toValue + fee)) }) })