You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.4 KiB
107 lines
3.4 KiB
'use strict';
|
|
|
|
var run = function() {
|
|
// Replace '../bitcore' with 'bitcore' if you use this code elsewhere.
|
|
var bitcore = require('../bitcore');
|
|
var Peer = bitcore.Peer;
|
|
|
|
var TransactionBuilder = bitcore.TransactionBuilder;
|
|
var PeerManager = bitcore.PeerManager;
|
|
|
|
// Unspent transactions can be found via the insight.bitcore.io or blockchain.info APIs
|
|
var unspent = [{
|
|
'txid': '707108b5ba4f78dc951df4647a03365bf36432ea57fb641676045c5044daaea7',
|
|
'vout': 0,
|
|
'address': 'n3QDC7DzsMmN4mcyp3k7XGPX7zFXXHG387',
|
|
'scriptPubKey': '76a914f00c4a92ee2314ab08ac0283dc8d07d9bf2be32388ac',
|
|
'amount': 0.12345600,
|
|
'confirmations': 43537
|
|
}, {
|
|
'txid': '87a158d32833cb555aea27b6a21af569ccaeb8f9b19691e05f1e6c2b3440bdb3',
|
|
'vout': 1,
|
|
'address': 'mxdrp9s4mVxS9X4RBYiLe99v59V81XA5C3',
|
|
'scriptPubKey': '76a914bbc87986da6b17c7876db4efacf59a95e14f6cf588ac',
|
|
'amount': 0.05749800,
|
|
'confirmations': 43536
|
|
}
|
|
|
|
];
|
|
|
|
// Private keys in WIF format (see TransactionBuilder.js for other options)
|
|
var keys = [
|
|
'cQA75LXhV5JkMT8wkkqjR87SnHK4doh3c21p7PAd5tp8tc1tRBAY',
|
|
'cRz85dz9AiDieRpEwoucfXXQa1jdHHghcv6YnnVVGZ3MQyR1X4u2',
|
|
'cSq7yo4fvsbMyWVN945VUGUWMaSazZPWqBVJZyoGsHmNq6W4HVBV',
|
|
'cPa87VgwZfowGZYaEenoQeJgRfKW6PhZ1R65EHTkN1K19cSvc92G',
|
|
'cPQ9DSbBRLva9av5nqeF5AGrh3dsdW8p2E5jS4P8bDWZAoQTeeKB'
|
|
];
|
|
|
|
var peerman = new PeerManager({
|
|
network: 'testnet'
|
|
});
|
|
peerman.addPeer(new Peer('127.0.0.1', 18333));
|
|
|
|
peerman.on('connect', function() {
|
|
var conn = peerman.getActiveConnection();
|
|
if (conn) {
|
|
// define transaction output
|
|
var outs = [{
|
|
address: 'mhNCT9TwZAGF1tLPpZdqfkTmtBkY282YDW',
|
|
amount: 0.1337
|
|
}];
|
|
// set change address
|
|
var opts = {
|
|
remainderOut: {
|
|
address: 'n4g2TFaQo8UgedwpkYdcQFF6xE2Ei9Czvy'
|
|
}
|
|
};
|
|
var tx = new TransactionBuilder(opts)
|
|
.setUnspent(unspent)
|
|
.setOutputs(outs)
|
|
.sign(keys)
|
|
.build();
|
|
|
|
/* Create and signing can be done in multiple steps:
|
|
*
|
|
* var builder = new bitcore.TransactionBuilder(opts)
|
|
* .setUnspent(utxos)
|
|
* .setOutputs(outs);
|
|
*
|
|
* // Sign with the first key
|
|
* builder.sign(key1);
|
|
* var tx = builder.build(); // Partially signed transaction
|
|
*
|
|
* // Sign with the second key
|
|
* builder.sign(key2);
|
|
* if (builder.isFullySigned()){
|
|
* var tx = builder.build();
|
|
* }
|
|
*
|
|
* var selectedUnspent = build.getSelectedUnspent(); // Retrieve selected unspent outputs from the transaction
|
|
*/
|
|
|
|
var txid = tx.getHash().toString('hex');
|
|
console.log('Created transaction with txid '+txid);
|
|
var raw_tx = tx.serialize().toString('hex');
|
|
console.log('Transaction raw hex dump:');
|
|
console.log('-------------------------------------');
|
|
console.log(raw_tx);
|
|
console.log('-------------------------------------');
|
|
// finally, send transaction to the bitcoin network
|
|
conn.sendTx(tx);
|
|
|
|
// for now, the network won't respond in any case
|
|
// (transaction accepted, transaction rejected)
|
|
// in the future, we may listen to 'reject' message
|
|
// see https://gist.github.com/gavinandresen/7079034
|
|
}
|
|
});
|
|
|
|
peerman.start();
|
|
|
|
};
|
|
|
|
module.exports.run = run;
|
|
if (require.main === module) {
|
|
run();
|
|
}
|
|
|