diff --git a/src/wallet.js b/src/wallet.js index bd30ae9..e843dba 100644 --- a/src/wallet.js +++ b/src/wallet.js @@ -2,6 +2,7 @@ var convert = require('./convert') var Transaction = require('./transaction').Transaction var HDNode = require('./hdwallet.js') var rng = require('secure-random') +var Network = require('./network') function Wallet(seed, options) { if (!(this instanceof Wallet)) { return new Wallet(seed, options); } @@ -169,11 +170,11 @@ function Wallet(seed, options) { }) } - this.createTx = function(to, value, fixedFee) { + this.createTx = function(to, value, fixedFee, changeAddress) { checkDust(value) var tx = new Transaction() - tx.addOutput(to, value) + tx.addOutput(to, value, Network[network]) var utxo = getCandidateOutputs(value) var totalInValue = 0 @@ -189,7 +190,7 @@ function Wallet(seed, options) { var change = totalInValue - value - fee if(change > 0 && !isDust(change)) { - tx.addOutput(getChangeAddress(), change) + tx.addOutput(changeAddress || getChangeAddress(), change, Network[network]) } break } @@ -245,7 +246,7 @@ function Wallet(seed, options) { function estimateFeePadChangeOutput(tx){ var tmpTx = tx.clone() - tmpTx.addOutput(getChangeAddress(), 0) + tmpTx.addOutput(getChangeAddress(), 0, Network[network]) return tmpTx.estimateFee() } @@ -265,7 +266,7 @@ function Wallet(seed, options) { tx.ins.forEach(function(inp,i) { var output = me.outputs[inp.outpoint.hash + ':' + inp.outpoint.index] if (output) { - tx.sign(i, me.getPrivateKeyForAddress(output.address)) + tx.sign(i, me.getPrivateKeyForAddress(output.address), false, Network[network]) } }) return tx diff --git a/test/wallet.js b/test/wallet.js index 8d65f7f..a5b31ec 100644 --- a/test/wallet.js +++ b/test/wallet.js @@ -458,6 +458,33 @@ describe('Wallet', function() { }) }) + describe('testnet', function(){ + it('should create transaction', function(){ + var to = 'mt7MyTVVEWnbwpF5hBn6fgnJcv95Syk2ue' + var wallet = new Wallet(seed, {network: 'testnet'}) + var tx = wallet.createTx(to, value) + assert.equal(tx.outs.length, 1) + }) + }) + + describe('changeAddress', 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" + var changeAddress = 'mfrFjnKZUvTcvdAK2fUX5D8v1Epu5H8JCk' + wallet.setUnspentOutputs([utxo]) + var tx = wallet.createTx(to, 10000, 1000, changeAddress) + assert.equal(tx.outs.length, 2) + }) + }) + describe('transaction outputs', function(){ it('includes the specified address and amount', function(){ var tx = wallet.createTx(to, value)