From 0765051a2111aa60a708a63f9d091f69fc21b0b0 Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Sun, 19 Oct 2014 01:11:19 +1100 Subject: [PATCH] integration tests: refactor helloblock P2SH spending test --- test/integration/helloblock.js | 68 +++++++++++++++++++++++++++++++ test/integration/p2sh.js | 74 ---------------------------------- 2 files changed, 68 insertions(+), 74 deletions(-) create mode 100644 test/integration/helloblock.js delete mode 100644 test/integration/p2sh.js diff --git a/test/integration/helloblock.js b/test/integration/helloblock.js new file mode 100644 index 000000000..7cd04dda0 --- /dev/null +++ b/test/integration/helloblock.js @@ -0,0 +1,68 @@ +var assert = require('assert') + +var bitcoin = require('../../') +var networks = bitcoin.networks +var scripts = bitcoin.scripts + +var Address = bitcoin.Address +var ECKey = bitcoin.ECKey +var TransactionBuilder = bitcoin.TransactionBuilder + +var helloblock = require('helloblock-js')({ + network: 'testnet' +}) + +describe('bitcoinjs-lib (helloblock)', function() { + this.timeout(20000) + + it('can spend from a 2-of-2 address', function(done) { + var privKeys = [ + '91avARGdfge8E4tZfYLoxeJ5sGBdNJQH4kvjJoQFacbgwmaKkrx', + '91avARGdfge8E4tZfYLoxeJ5sGBdNJQH4kvjJoQFacbgww7vXtT' + ].map(ECKey.fromWIF) + var pubKeys = privKeys.map(function(x) { return x.pub }) + + var redeemScript = scripts.multisigOutput(2, pubKeys) + var scriptPubKey = scripts.scriptHashOutput(redeemScript.getHash()) + var p2shAddress = Address.fromOutputScript(scriptPubKey, networks.testnet).toString() + + // Attempt to send funds to the source address + helloblock.faucet.withdraw(p2shAddress, 2e4, function(err) { + if (err) return done(err) + + // get latest unspents from the p2shAddress + helloblock.addresses.getUnspents(p2shAddress, function(err, res, unspents) { + if (err) return done(err) + + // use the oldest unspent + var unspent = unspents[unspents.length - 1] + var spendAmount = Math.min(unspent.value, 1e4) + + // make a random destination address + var targetAddress = ECKey.makeRandom().pub.getAddress(networks.testnet).toString() + + var txb = new TransactionBuilder() + txb.addInput(unspent.txHash, unspent.index) + txb.addOutput(targetAddress, spendAmount) + + privKeys.forEach(function(privKey) { + txb.sign(0, privKey, redeemScript) + }) + + // broadcast our transaction + helloblock.transactions.propagate(txb.build().toHex(), function(err) { + // no err means that the transaction has been successfully propagated + if (err) return done(err) + + // check that the funds (spendAmount Satoshis) indeed arrived at the intended address + helloblock.addresses.get(targetAddress, function(err, res, addrInfo) { + if (err) return done(err) + + assert.equal(addrInfo.balance, spendAmount) + done() + }) + }) + }) + }) + }) +}) diff --git a/test/integration/p2sh.js b/test/integration/p2sh.js deleted file mode 100644 index 0b975b6a2..000000000 --- a/test/integration/p2sh.js +++ /dev/null @@ -1,74 +0,0 @@ -var assert = require('assert') - -var bitcoin = require('../../') -var networks = bitcoin.networks -var scripts = bitcoin.scripts - -var Address = bitcoin.Address -var ECKey = bitcoin.ECKey -var TransactionBuilder = bitcoin.TransactionBuilder - -var helloblock = require('helloblock-js')({ - network: 'testnet' -}) - -describe('Bitcoin-js', function() { - this.timeout(10000) - - it('can spend from a 2-of-2 address', function(done) { - var privKeys = [ - '91avARGdfge8E4tZfYLoxeJ5sGBdNJQH4kvjJoQFacbgwmaKkrx', - '91avARGdfge8E4tZfYLoxeJ5sGBdNJQH4kvjJoQFacbgww7vXtT' - ].map(function(wif) { - return ECKey.fromWIF(wif) - }) - - var coldAmount = 2e4 - var outputAmount = 1e4 - - var pubKeys = privKeys.map(function(eck) { return eck.pub }) - var redeemScript = scripts.multisigOutput(2, pubKeys) - var scriptPubKey = scripts.scriptHashOutput(redeemScript.getHash()) - - var multisigAddress = Address.fromOutputScript(scriptPubKey, networks.testnet).toString() - - // Attempt to send funds to the source address, providing some unspents for later - helloblock.faucet.withdraw(multisigAddress, coldAmount, function(err) { - if (err) return done(err) - }) - - // make a random private key - var targetAddress = ECKey.makeRandom().pub.getAddress(networks.testnet).toString() - - // get latest unspents from the multisigAddress - helloblock.addresses.getUnspents(multisigAddress, function(err, res, unspents) { - if (err) return done(err) - - // use the oldest unspent - var unspent = unspents[unspents.length - 1] - var spendAmount = Math.min(unspent.value, outputAmount) - - var txb = new TransactionBuilder() - txb.addInput(unspent.txHash, unspent.index) - txb.addOutput(targetAddress, spendAmount) - - privKeys.forEach(function(privKey) { - txb.sign(0, privKey, redeemScript) - }) - - // broadcast our transaction - helloblock.transactions.propagate(txb.build().toHex(), function(err) { - // no err means that the transaction has been successfully propagated - if (err) return done(err) - - // Check that the funds (spendAmount Satoshis) indeed arrived at the intended address - helloblock.addresses.get(targetAddress, function(err, res, addrInfo) { - if (err) return done(err) - - assert.equal(addrInfo.balance, spendAmount) - done() - }) - }) - }) - }) -})