2014-08-20 18:08:47 -07:00
|
|
|
#!/usr/bin/env node
|
|
|
|
|
2014-09-25 14:28:08 -07:00
|
|
|
/**
|
|
|
|
* bitcoind.js example
|
|
|
|
*/
|
|
|
|
|
2014-09-12 18:56:31 -07:00
|
|
|
process.title = 'bitcoind.js';
|
|
|
|
|
2014-09-19 15:39:05 -07:00
|
|
|
var util = require('util');
|
2014-09-25 15:22:48 -07:00
|
|
|
var argv = require('optimist').argv;
|
2014-09-25 14:28:08 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* bitcoind
|
|
|
|
*/
|
|
|
|
|
2014-08-20 18:08:47 -07:00
|
|
|
var bitcoind = require('../')();
|
|
|
|
|
2014-09-22 12:05:17 -07:00
|
|
|
var genesisBlock = '0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f';
|
|
|
|
var genesisTx = '0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b';
|
|
|
|
|
2014-09-25 14:28:08 -07:00
|
|
|
bitcoind.on('error', function(err) {
|
2014-09-25 15:13:59 -07:00
|
|
|
print('error="%s"', err.message);
|
2014-09-25 14:28:08 -07:00
|
|
|
});
|
|
|
|
|
|
|
|
bitcoind.on('open', function(status) {
|
2014-09-25 15:13:59 -07:00
|
|
|
print('status="%s"', status);
|
2014-09-25 14:28:08 -07:00
|
|
|
|
2014-10-01 11:20:39 -07:00
|
|
|
if (argv.list) {
|
2014-09-26 15:43:46 -07:00
|
|
|
print(bitcoind.wallet.listAccounts());
|
2014-10-01 11:20:39 -07:00
|
|
|
}
|
2014-09-26 15:43:46 -07:00
|
|
|
|
2014-09-25 15:22:48 -07:00
|
|
|
if (argv.blocks) {
|
|
|
|
getBlocks(bitcoind);
|
|
|
|
}
|
2014-09-25 14:28:08 -07:00
|
|
|
|
2014-10-03 16:39:26 -07:00
|
|
|
function compareObj(obj) {
|
|
|
|
// Hash
|
2014-10-03 14:21:30 -07:00
|
|
|
if (obj.txid) {
|
|
|
|
print('tx.txid: %s', obj.txid);
|
2014-10-03 16:39:26 -07:00
|
|
|
print('tx.getHash("hex"): %s', obj.getHash('hex'));
|
|
|
|
print('tx.txid === tx.getHash("hex"): %s', obj.txid === obj.getHash('hex'));
|
2014-10-03 14:21:30 -07:00
|
|
|
} else {
|
|
|
|
print('block.hash: %s', obj.hash);
|
2014-10-03 16:39:26 -07:00
|
|
|
print('block.getHash("hex"): %s', obj.getHash('hex'));
|
|
|
|
print('block.hash === block.getHash("hex"): %s', obj.hash === obj.getHash('hex'));
|
2014-10-03 14:21:30 -07:00
|
|
|
}
|
2014-10-03 16:39:26 -07:00
|
|
|
|
|
|
|
// Hex
|
2014-10-03 14:21:30 -07:00
|
|
|
if (obj.txid) {
|
2014-10-03 16:39:26 -07:00
|
|
|
print('tx.hex: %s', obj.hex);
|
|
|
|
print('tx.toHex(): %s', obj.toHex());
|
|
|
|
print('tx.hex === tx.toHex(): %s', obj.hex === obj.toHex());
|
2014-10-03 14:21:30 -07:00
|
|
|
} else {
|
2014-10-03 16:39:26 -07:00
|
|
|
print('block.hex: %s', obj.hex);
|
|
|
|
print('block.toHex(): %s', obj.toHex());
|
|
|
|
print('block.hex === block.toHex(): %s', obj.hex === obj.toHex());
|
2014-10-03 14:21:30 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-09-25 15:22:48 -07:00
|
|
|
if (argv['on-block']) {
|
|
|
|
bitcoind.on('block', function(block) {
|
|
|
|
print('Found Block:');
|
|
|
|
print(block);
|
2014-10-03 16:39:26 -07:00
|
|
|
compareObj(block);
|
2014-09-25 15:22:48 -07:00
|
|
|
});
|
|
|
|
}
|
2014-09-25 14:28:08 -07:00
|
|
|
|
2014-09-25 15:22:48 -07:00
|
|
|
if (argv['on-tx']) {
|
|
|
|
bitcoind.on('tx', function(tx) {
|
|
|
|
print('Found TX:');
|
2014-09-25 14:28:08 -07:00
|
|
|
print(tx);
|
2014-10-03 16:39:26 -07:00
|
|
|
compareObj(tx);
|
2014-09-23 13:57:49 -07:00
|
|
|
});
|
2014-09-25 15:22:48 -07:00
|
|
|
bitcoind.on('mptx', function(mptx) {
|
|
|
|
print('Found mempool TX:');
|
|
|
|
print(mptx);
|
2014-10-03 16:39:26 -07:00
|
|
|
compareObj(mptx);
|
2014-09-25 15:22:48 -07:00
|
|
|
});
|
|
|
|
}
|
2014-09-25 14:28:08 -07:00
|
|
|
|
2014-09-25 15:22:48 -07:00
|
|
|
if (argv.broadcast) {
|
|
|
|
bitcoind.once('tx', function(tx) {
|
|
|
|
print('Broadcasting TX...');
|
|
|
|
return tx.broadcast(function(err, hash, tx) {
|
|
|
|
if (err) throw err;
|
|
|
|
print('TX Hash: %s', hash);
|
|
|
|
print(tx);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
2014-08-29 13:54:54 -07:00
|
|
|
});
|
2014-09-19 15:39:05 -07:00
|
|
|
|
2014-09-25 14:28:08 -07:00
|
|
|
/**
|
|
|
|
* Helpers
|
|
|
|
*/
|
|
|
|
|
2014-09-22 16:47:45 -07:00
|
|
|
function getBlocks(bitcoind) {
|
2014-09-25 14:28:08 -07:00
|
|
|
return setTimeout(function() {
|
|
|
|
return (function next(hash) {
|
2014-09-22 16:47:45 -07:00
|
|
|
return bitcoind.getBlock(hash, function(err, block) {
|
|
|
|
if (err) return print(err.message);
|
2014-09-25 15:22:48 -07:00
|
|
|
|
2014-09-26 11:23:21 -07:00
|
|
|
print(block);
|
2014-09-25 15:22:48 -07:00
|
|
|
|
|
|
|
if (argv['get-tx'] && block.tx.length && block.tx[0].txid) {
|
2014-09-22 16:47:45 -07:00
|
|
|
var txid = block.tx[0].txid;
|
2014-09-25 15:22:48 -07:00
|
|
|
// XXX Dies with a segfault
|
2014-09-22 16:47:45 -07:00
|
|
|
// bitcoind.getTx(txid, hash, function(err, tx) {
|
2014-09-26 10:16:10 -07:00
|
|
|
bitcoind.getTx(txid, function(err, tx) {
|
2014-09-22 16:47:45 -07:00
|
|
|
if (err) return print(err.message);
|
|
|
|
print('TX -----------------------------------------------------');
|
|
|
|
print(tx);
|
|
|
|
print('/TX ----------------------------------------------------');
|
|
|
|
});
|
|
|
|
}
|
2014-09-25 15:22:48 -07:00
|
|
|
|
2014-09-25 15:25:12 -07:00
|
|
|
if (block.nextblockhash) {
|
2014-09-25 15:22:48 -07:00
|
|
|
setTimeout(next.bind(null, block.nextblockhash), 500);
|
2014-09-22 16:47:45 -07:00
|
|
|
}
|
|
|
|
});
|
|
|
|
})(genesisBlock);
|
|
|
|
}, 1000);
|
|
|
|
}
|
|
|
|
|
2014-09-19 15:39:05 -07:00
|
|
|
function inspect(obj) {
|
|
|
|
return util.inspect(obj, null, 20, true);
|
|
|
|
}
|
|
|
|
|
|
|
|
function print(obj) {
|
2014-09-25 14:28:08 -07:00
|
|
|
if (typeof obj === 'string') {
|
2014-09-25 15:13:59 -07:00
|
|
|
return process.stdout.write(
|
|
|
|
'bitcoind.js: '
|
|
|
|
+ util.format.apply(util, arguments)
|
|
|
|
+ '\n');
|
2014-09-25 14:28:08 -07:00
|
|
|
}
|
2014-09-19 15:39:05 -07:00
|
|
|
return process.stdout.write(inspect(obj) + '\n');
|
|
|
|
}
|