add GetAddresses(). add "addr" event.
This commit is contained in:
parent
6fadefe761
commit
f0ebef4e8c
|
@ -29,11 +29,11 @@ var genesisTx = '0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda
|
||||||
var testTx = "01000000010b26e9b7735eb6aabdf358bab62f9816a21ba9ebdb719d5299e88607d722c190000000008b4830450220070aca44506c5cef3a16ed519d7c3c39f8aab192c4e1c90d065f37b8a4af6141022100a8e160b856c2d43d27d8fba71e5aef6405b8643ac4cb7cb3c462aced7f14711a0141046d11fee51b0e60666d5049a9101a72741df480b96ee26488a4d3466b95c9a40ac5eeef87e10a5cd336c19a84565f80fa6c547957b7700ff4dfbdefe76036c339ffffffff021bff3d11000000001976a91404943fdd508053c75000106d3bc6e2754dbcff1988ac2f15de00000000001976a914a266436d2965547608b9e15d9032a7b9d64fa43188ac00000000";
|
var testTx = "01000000010b26e9b7735eb6aabdf358bab62f9816a21ba9ebdb719d5299e88607d722c190000000008b4830450220070aca44506c5cef3a16ed519d7c3c39f8aab192c4e1c90d065f37b8a4af6141022100a8e160b856c2d43d27d8fba71e5aef6405b8643ac4cb7cb3c462aced7f14711a0141046d11fee51b0e60666d5049a9101a72741df480b96ee26488a4d3466b95c9a40ac5eeef87e10a5cd336c19a84565f80fa6c547957b7700ff4dfbdefe76036c339ffffffff021bff3d11000000001976a91404943fdd508053c75000106d3bc6e2754dbcff1988ac2f15de00000000001976a914a266436d2965547608b9e15d9032a7b9d64fa43188ac00000000";
|
||||||
|
|
||||||
bitcoind.on('error', function(err) {
|
bitcoind.on('error', function(err) {
|
||||||
print('error="%s"', err.message);
|
bitcoind.log('error="%s"', err.message);
|
||||||
});
|
});
|
||||||
|
|
||||||
bitcoind.on('open', function(status) {
|
bitcoind.on('open', function(status) {
|
||||||
print('status="%s"', status);
|
bitcoind.log('status="%s"', status);
|
||||||
|
|
||||||
if (!argv.list
|
if (!argv.list
|
||||||
|| !argv.blocks
|
|| !argv.blocks
|
||||||
|
@ -45,18 +45,22 @@ bitcoind.on('open', function(status) {
|
||||||
argv['on-block'] = true;
|
argv['on-block'] = true;
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
argv['on-block'] = false;
|
argv['on-block'] = false;
|
||||||
print(bitcoind.getInfo());
|
bitcoind.log(bitcoind.getInfo());
|
||||||
print(bitcoind.getPeerInfo());
|
bitcoind.log(bitcoind.getPeerInfo());
|
||||||
print(bitcoind.wallet.listAccounts());
|
bitcoind.log(bitcoind.wallet.listAccounts());
|
||||||
bitcoind.on('version', function(version) {
|
bitcoind.on('version', function(version) {
|
||||||
print('Version packet:');
|
bitcoind.log('VERSION packet:');
|
||||||
print(version);
|
bitcoind.log(version);
|
||||||
|
});
|
||||||
|
bitcoind.on('addr', function(addr) {
|
||||||
|
bitcoind.log('ADDR packet:');
|
||||||
|
bitcoind.log(addr);
|
||||||
});
|
});
|
||||||
}, 7000);
|
}, 7000);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argv.list) {
|
if (argv.list) {
|
||||||
print(bitcoind.wallet.listAccounts());
|
bitcoind.log(bitcoind.wallet.listAccounts());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argv.blocks) {
|
if (argv.blocks) {
|
||||||
|
@ -65,31 +69,31 @@ bitcoind.on('open', function(status) {
|
||||||
|
|
||||||
if (argv['test-tx']) {
|
if (argv['test-tx']) {
|
||||||
var tx = bitcoind.tx.fromHex(testTx);
|
var tx = bitcoind.tx.fromHex(testTx);
|
||||||
print(tx);
|
bitcoind.log(tx);
|
||||||
print(tx.txid === tx.getHash('hex'));
|
bitcoind.log(tx.txid === tx.getHash('hex'));
|
||||||
}
|
}
|
||||||
|
|
||||||
function compareObj(obj) {
|
function compareObj(obj) {
|
||||||
// Hash
|
// Hash
|
||||||
if (obj.txid) {
|
if (obj.txid) {
|
||||||
print('tx.txid: %s', obj.txid);
|
bitcoind.log('tx.txid: %s', obj.txid);
|
||||||
print('tx.getHash("hex"): %s', obj.getHash('hex'));
|
bitcoind.log('tx.getHash("hex"): %s', obj.getHash('hex'));
|
||||||
print('tx.txid === tx.getHash("hex"): %s', obj.txid === obj.getHash('hex'));
|
bitcoind.log('tx.txid === tx.getHash("hex"): %s', obj.txid === obj.getHash('hex'));
|
||||||
} else {
|
} else {
|
||||||
print('block.hash: %s', obj.hash);
|
bitcoind.log('block.hash: %s', obj.hash);
|
||||||
print('block.getHash("hex"): %s', obj.getHash('hex'));
|
bitcoind.log('block.getHash("hex"): %s', obj.getHash('hex'));
|
||||||
print('block.hash === block.getHash("hex"): %s', obj.hash === obj.getHash('hex'));
|
bitcoind.log('block.hash === block.getHash("hex"): %s', obj.hash === obj.getHash('hex'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hex
|
// Hex
|
||||||
if (obj.txid) {
|
if (obj.txid) {
|
||||||
print('tx.hex: %s', obj.hex);
|
bitcoind.log('tx.hex: %s', obj.hex);
|
||||||
print('tx.toHex(): %s', obj.toHex());
|
bitcoind.log('tx.toHex(): %s', obj.toHex());
|
||||||
print('tx.hex === tx.toHex(): %s', obj.hex === obj.toHex());
|
bitcoind.log('tx.hex === tx.toHex(): %s', obj.hex === obj.toHex());
|
||||||
} else {
|
} else {
|
||||||
print('block.hex: %s', obj.hex);
|
bitcoind.log('block.hex: %s', obj.hex);
|
||||||
print('block.toHex(): %s', obj.toHex());
|
bitcoind.log('block.toHex(): %s', obj.toHex());
|
||||||
print('block.hex === block.toHex(): %s', obj.hex === obj.toHex());
|
bitcoind.log('block.hex === block.toHex(): %s', obj.hex === obj.toHex());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,32 +102,32 @@ bitcoind.on('open', function(status) {
|
||||||
if (!argv['on-block']) {
|
if (!argv['on-block']) {
|
||||||
return bitcoind.removeListener('block', callee);
|
return bitcoind.removeListener('block', callee);
|
||||||
}
|
}
|
||||||
print('Found Block:');
|
bitcoind.log('Found Block:');
|
||||||
print(block);
|
bitcoind.log(block);
|
||||||
compareObj(block);
|
compareObj(block);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argv['on-tx']) {
|
if (argv['on-tx']) {
|
||||||
bitcoind.on('tx', function(tx) {
|
bitcoind.on('tx', function(tx) {
|
||||||
print('Found TX:');
|
bitcoind.log('Found TX:');
|
||||||
print(tx);
|
bitcoind.log(tx);
|
||||||
compareObj(tx);
|
compareObj(tx);
|
||||||
});
|
});
|
||||||
bitcoind.on('mptx', function(mptx) {
|
bitcoind.on('mptx', function(mptx) {
|
||||||
print('Found mempool TX:');
|
bitcoind.log('Found mempool TX:');
|
||||||
print(mptx);
|
bitcoind.log(mptx);
|
||||||
compareObj(mptx);
|
compareObj(mptx);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argv.broadcast) {
|
if (argv.broadcast) {
|
||||||
bitcoind.once('tx', function(tx) {
|
bitcoind.once('tx', function(tx) {
|
||||||
print('Broadcasting TX...');
|
bitcoind.log('Broadcasting TX...');
|
||||||
return tx.broadcast(function(err, hash, tx) {
|
return tx.broadcast(function(err, hash, tx) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
print('TX Hash: %s', hash);
|
bitcoind.log('TX Hash: %s', hash);
|
||||||
print(tx);
|
bitcoind.log(tx);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -137,19 +141,19 @@ function getBlocks(bitcoind) {
|
||||||
return setTimeout(function() {
|
return setTimeout(function() {
|
||||||
return (function next(hash) {
|
return (function next(hash) {
|
||||||
return bitcoind.getBlock(hash, function(err, block) {
|
return bitcoind.getBlock(hash, function(err, block) {
|
||||||
if (err) return print(err.message);
|
if (err) return bitcoind.log(err.message);
|
||||||
|
|
||||||
print(block);
|
bitcoind.log(block);
|
||||||
|
|
||||||
if (argv['get-tx'] && block.tx.length && block.tx[0].txid) {
|
if (argv['get-tx'] && block.tx.length && block.tx[0].txid) {
|
||||||
var txid = block.tx[0].txid;
|
var txid = block.tx[0].txid;
|
||||||
// XXX Dies with a segfault
|
// XXX Dies with a segfault
|
||||||
// bitcoind.getTx(txid, hash, function(err, tx) {
|
// bitcoind.getTx(txid, hash, function(err, tx) {
|
||||||
bitcoind.getTx(txid, function(err, tx) {
|
bitcoind.getTx(txid, function(err, tx) {
|
||||||
if (err) return print(err.message);
|
if (err) return bitcoind.log(err.message);
|
||||||
print('TX -----------------------------------------------------');
|
bitcoind.log('TX -----------------------------------------------------');
|
||||||
print(tx);
|
bitcoind.log(tx);
|
||||||
print('/TX ----------------------------------------------------');
|
bitcoind.log('/TX ----------------------------------------------------');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,17 +164,3 @@ function getBlocks(bitcoind) {
|
||||||
})(genesisBlock);
|
})(genesisBlock);
|
||||||
}, 1000);
|
}, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
function inspect(obj) {
|
|
||||||
return util.inspect(obj, null, 20, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
function print(obj) {
|
|
||||||
if (typeof obj === 'string') {
|
|
||||||
return process.stdout.write(
|
|
||||||
'bitcoind.js: '
|
|
||||||
+ util.format.apply(util, arguments)
|
|
||||||
+ '\n');
|
|
||||||
}
|
|
||||||
return process.stdout.write(inspect(obj) + '\n');
|
|
||||||
}
|
|
||||||
|
|
|
@ -256,6 +256,10 @@ Bitcoin.prototype.start = function(options, callback) {
|
||||||
self._pollPeers();
|
self._pollPeers();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (name === 'addr') {
|
||||||
|
self._pollAddresses();
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (name === 'block') {
|
if (name === 'block') {
|
||||||
self._pollBlocks();
|
self._pollBlocks();
|
||||||
return;
|
return;
|
||||||
|
@ -373,13 +377,13 @@ Bitcoin.prototype._pollPeers = function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
if (this._pollingPeers) return;
|
if (this._pollingPeers) return;
|
||||||
this._pollingPeers = true;
|
this._pollingPeers = true;
|
||||||
var peers = bitcoindjs.getPeerInfo();
|
var lastPeers = bitcoindjs.getPeerInfo();
|
||||||
(function next() {
|
(function next() {
|
||||||
var newPeers = bitcoindjs.getPeerInfo();
|
var peers = bitcoindjs.getPeerInfo();
|
||||||
newPeers = newPeers.filter(function(peer, i) {
|
peers = peers.filter(function(peer, i) {
|
||||||
return !peers[i] || peer.addr !== peers[i].addr;
|
return !lastPeers[i] || peer.addr !== lastPeers[i].addr;
|
||||||
});
|
});
|
||||||
newPeers.forEach(function(peer) {
|
peers.forEach(function(peer) {
|
||||||
self.emit('peer', peer);
|
self.emit('peer', peer);
|
||||||
self.emit('version', {
|
self.emit('version', {
|
||||||
version: peer.version,
|
version: peer.version,
|
||||||
|
@ -391,6 +395,32 @@ Bitcoin.prototype._pollPeers = function() {
|
||||||
relay: null // peer.fRelayTxes
|
relay: null // peer.fRelayTxes
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
lastPeers = peers;
|
||||||
|
return setTimeout(next, self.pollInterval);
|
||||||
|
})();
|
||||||
|
};
|
||||||
|
|
||||||
|
Bitcoin.prototype._pollAddresses = function() {
|
||||||
|
var self = this;
|
||||||
|
if (this._pollingAddresses) return;
|
||||||
|
this._pollingAddresses = true;
|
||||||
|
var lastAddrs = bitcoindjs.getAddresses();
|
||||||
|
(function next() {
|
||||||
|
var addrs = bitcoindjs.getAddresses();
|
||||||
|
addrs = addrs.filter(function(addr, i) {
|
||||||
|
return !lastAddrs[i] || addr.time !== lastAddrs[i].time;
|
||||||
|
});
|
||||||
|
addrs.forEach(function(addr) {
|
||||||
|
self.emit('addr', {
|
||||||
|
services: addr.services,
|
||||||
|
time: addr.time,
|
||||||
|
last: addr.last,
|
||||||
|
ip: addr.ip,
|
||||||
|
port: addr.port,
|
||||||
|
address: addr.address
|
||||||
|
});
|
||||||
|
});
|
||||||
|
lastAddrs = addrs;
|
||||||
return setTimeout(next, self.pollInterval);
|
return setTimeout(next, self.pollInterval);
|
||||||
})();
|
})();
|
||||||
};
|
};
|
||||||
|
@ -421,6 +451,10 @@ Bitcoin.prototype.getPeerInfo = function() {
|
||||||
return bitcoindjs.getPeerInfo();
|
return bitcoindjs.getPeerInfo();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Bitcoin.prototype.getAddresses = function() {
|
||||||
|
return bitcoindjs.getAddresses();
|
||||||
|
};
|
||||||
|
|
||||||
Bitcoin.prototype.log =
|
Bitcoin.prototype.log =
|
||||||
Bitcoin.prototype.info = function() {
|
Bitcoin.prototype.info = function() {
|
||||||
if (typeof arguments[0] !== 'string') {
|
if (typeof arguments[0] !== 'string') {
|
||||||
|
|
|
@ -168,6 +168,7 @@ NAN_METHOD(VerifyTransaction);
|
||||||
NAN_METHOD(FillTransaction);
|
NAN_METHOD(FillTransaction);
|
||||||
NAN_METHOD(GetInfo);
|
NAN_METHOD(GetInfo);
|
||||||
NAN_METHOD(GetPeerInfo);
|
NAN_METHOD(GetPeerInfo);
|
||||||
|
NAN_METHOD(GetAddresses);
|
||||||
NAN_METHOD(GetBlockHex);
|
NAN_METHOD(GetBlockHex);
|
||||||
NAN_METHOD(GetTxHex);
|
NAN_METHOD(GetTxHex);
|
||||||
NAN_METHOD(BlockFromHex);
|
NAN_METHOD(BlockFromHex);
|
||||||
|
@ -1480,7 +1481,7 @@ NAN_METHOD(FillTransaction) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GetInfo()
|
* GetInfo()
|
||||||
* bitcoindjs.GetInfo()
|
* bitcoindjs.getInfo()
|
||||||
* Get miscellaneous information
|
* Get miscellaneous information
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -1529,7 +1530,7 @@ NAN_METHOD(GetInfo) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GetPeerInfo()
|
* GetPeerInfo()
|
||||||
* bitcoindjs.GetPeerInfo()
|
* bitcoindjs.getPeerInfo()
|
||||||
* Get peer information
|
* Get peer information
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -1593,6 +1594,66 @@ NAN_METHOD(GetPeerInfo) {
|
||||||
NanReturnValue(array);
|
NanReturnValue(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GetAddresses()
|
||||||
|
* bitcoindjs.getAddresses()
|
||||||
|
* Get all addresses
|
||||||
|
*/
|
||||||
|
|
||||||
|
NAN_METHOD(GetAddresses) {
|
||||||
|
NanScope();
|
||||||
|
|
||||||
|
if (args.Length() > 0) {
|
||||||
|
return NanThrowError(
|
||||||
|
"Usage: bitcoindjs.getAddresses()");
|
||||||
|
}
|
||||||
|
|
||||||
|
Local<Array> array = NanNew<Array>();
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
std::vector<CAddress> vAddr = addrman.GetAddr();
|
||||||
|
|
||||||
|
BOOST_FOREACH(const CAddress& addr, vAddr) {
|
||||||
|
// //unsigned char *ip = addr.ip; // [16]
|
||||||
|
//bool a = addr.IsIPv4();
|
||||||
|
//bool a = addr.IsIPv6();
|
||||||
|
////bool a = addr.IsTor();
|
||||||
|
//bool a = addr.IsLocal();
|
||||||
|
//bool a = addr.IsRoutable();
|
||||||
|
//bool a = addr.IsValid();
|
||||||
|
//bool a = addr.IsMulticast();
|
||||||
|
//enum Network n = addr.GetNetwork();
|
||||||
|
//std::string ip = addr.ToString();
|
||||||
|
//std::string ip = addr.ToStringIP();
|
||||||
|
//std::string ip = addr.ToStringIPPort();
|
||||||
|
//uint64_t hash = addr.GetHash();
|
||||||
|
//unsigned short port = addr.GetPort();
|
||||||
|
//std::vector<unsigned char> key = addr.GetKey();
|
||||||
|
// //unsigned short port = addr.port;
|
||||||
|
//uint64_t nServices = addr.nServices;
|
||||||
|
//unsigned int nTime = addr.nTime;
|
||||||
|
//int64_t nLastTry = addr.nLastTry;
|
||||||
|
|
||||||
|
Local<Object> obj = NanNew<Object>();
|
||||||
|
|
||||||
|
char nServices[21] = {0};
|
||||||
|
int written = snprintf(nServices, sizeof(nServices), "%020lu", (uint64_t)addr.nServices);
|
||||||
|
assert(written == 20);
|
||||||
|
|
||||||
|
obj->Set(NanNew<String>("services"), NanNew<String>((char *)nServices));
|
||||||
|
obj->Set(NanNew<String>("time"), NanNew<Number>((unsigned int)addr.nTime)->ToUint32());
|
||||||
|
obj->Set(NanNew<String>("last"), NanNew<Number>((int64_t)addr.nLastTry));
|
||||||
|
obj->Set(NanNew<String>("ip"), NanNew<String>((std::string)addr.ToStringIP()));
|
||||||
|
obj->Set(NanNew<String>("port"), NanNew<Number>((unsigned short)addr.GetPort())->ToUint32());
|
||||||
|
obj->Set(NanNew<String>("address"), NanNew<String>((std::string)addr.ToStringIPPort()));
|
||||||
|
|
||||||
|
array->Set(i, obj);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
NanReturnValue(array);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GetBlockHex()
|
* GetBlockHex()
|
||||||
* bitcoindjs.getBlockHex(callback)
|
* bitcoindjs.getBlockHex(callback)
|
||||||
|
@ -3292,6 +3353,7 @@ init(Handle<Object> target) {
|
||||||
NODE_SET_METHOD(target, "fillTransaction", FillTransaction);
|
NODE_SET_METHOD(target, "fillTransaction", FillTransaction);
|
||||||
NODE_SET_METHOD(target, "getInfo", GetInfo);
|
NODE_SET_METHOD(target, "getInfo", GetInfo);
|
||||||
NODE_SET_METHOD(target, "getPeerInfo", GetPeerInfo);
|
NODE_SET_METHOD(target, "getPeerInfo", GetPeerInfo);
|
||||||
|
NODE_SET_METHOD(target, "getAddresses", GetAddresses);
|
||||||
NODE_SET_METHOD(target, "getBlockHex", GetBlockHex);
|
NODE_SET_METHOD(target, "getBlockHex", GetBlockHex);
|
||||||
NODE_SET_METHOD(target, "getTxHex", GetTxHex);
|
NODE_SET_METHOD(target, "getTxHex", GetTxHex);
|
||||||
NODE_SET_METHOD(target, "blockFromHex", BlockFromHex);
|
NODE_SET_METHOD(target, "blockFromHex", BlockFromHex);
|
||||||
|
|
Loading…
Reference in New Issue