bitcoind: change dataformat of addresstxid event
Adds the address to the message to quickly determine the address associated with the event.
This commit is contained in:
parent
6fbadb6c42
commit
1800294dfe
@ -214,30 +214,52 @@ Bitcoin.prototype.unsubscribe = function(name, emitter) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Bitcoin.prototype.subscribeAddress = function(emitter, addresses) {
|
Bitcoin.prototype.subscribeAddress = function(emitter, addresses) {
|
||||||
for(var i = 0; i < addresses.length; i++) {
|
var self = this;
|
||||||
var hashHex = bitcore.Address(addresses[i]).hashBuffer.toString('hex');
|
|
||||||
if(!this.subscriptions.address[hashHex]) {
|
function addAddress(addressStr) {
|
||||||
this.subscriptions.address[hashHex] = [];
|
if(self.subscriptions.address[addressStr]) {
|
||||||
|
var emitters = self.subscriptions.address[addressStr];
|
||||||
|
var index = emitters.indexOf(emitter);
|
||||||
|
if (index === -1) {
|
||||||
|
self.subscriptions.address[addressStr].push(emitter);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
self.subscriptions.address[addressStr] = [emitter];
|
||||||
}
|
}
|
||||||
this.subscriptions.address[hashHex].push(emitter);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(var i = 0; i < addresses.length; i++) {
|
||||||
|
if (bitcore.Address.isValid(addresses[i], this.node.network)) {
|
||||||
|
addAddress(addresses[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
log.info(emitter.remoteAddress, 'subscribe:', 'bitcoind/addresstxid', 'total:', _.size(this.subscriptions.address));
|
log.info(emitter.remoteAddress, 'subscribe:', 'bitcoind/addresstxid', 'total:', _.size(this.subscriptions.address));
|
||||||
};
|
};
|
||||||
|
|
||||||
Bitcoin.prototype.unsubscribeAddress = function(emitter, addresses) {
|
Bitcoin.prototype.unsubscribeAddress = function(emitter, addresses) {
|
||||||
|
var self = this;
|
||||||
if(!addresses) {
|
if(!addresses) {
|
||||||
return this.unsubscribeAddressAll(emitter);
|
return this.unsubscribeAddressAll(emitter);
|
||||||
}
|
}
|
||||||
for(var i = 0; i < addresses.length; i++) {
|
|
||||||
var hashHex = bitcore.Address(addresses[i]).hashBuffer.toString('hex');
|
function removeAddress(addressStr) {
|
||||||
if(this.subscriptions.address[hashHex]) {
|
var emitters = self.subscriptions.address[addressStr];
|
||||||
var emitters = this.subscriptions.address[hashHex];
|
var index = emitters.indexOf(emitter);
|
||||||
var index = emitters.indexOf(emitter);
|
if(index > -1) {
|
||||||
if(index > -1) {
|
emitters.splice(index, 1);
|
||||||
emitters.splice(index, 1);
|
if (emitters.length === 0) {
|
||||||
|
delete self.subscriptions.address[addressStr];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(var i = 0; i < addresses.length; i++) {
|
||||||
|
if(this.subscriptions.address[addresses[i]]) {
|
||||||
|
removeAddress(addresses[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
log.info(emitter.remoteAddress, 'unsubscribe:', 'bitcoind/addresstxid', 'total:', _.size(this.subscriptions.address));
|
log.info(emitter.remoteAddress, 'unsubscribe:', 'bitcoind/addresstxid', 'total:', _.size(this.subscriptions.address));
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -533,61 +555,43 @@ Bitcoin.prototype._updateTip = function(node, message) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Bitcoin.prototype._getAddressHashesFromInput = function(input, addressHashes) {
|
Bitcoin.prototype._getAddressesFromTransaction = function(transaction) {
|
||||||
if (!input.script) {
|
var addresses = [];
|
||||||
return;
|
|
||||||
}
|
|
||||||
var hashBuffer;
|
|
||||||
var script = input.script;
|
|
||||||
if (script.isPublicKeyHashIn()) {
|
|
||||||
hashBuffer = bitcore.crypto.Hash.sha256ripemd160(input.script.chunks[1].buf);
|
|
||||||
} else if (script.isScriptHashIn()) {
|
|
||||||
hashBuffer = bitcore.crypto.Hash.sha256ripemd160(input.script.chunks[input.script.chunks.length - 1].buf);
|
|
||||||
} else {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
addressHashes.push(hashBuffer.toString('hex'));
|
|
||||||
};
|
|
||||||
|
|
||||||
Bitcoin.prototype._getAddressHashesFromOutput = function(output, addressHashes) {
|
|
||||||
if (!output.script) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var script = output.script;
|
|
||||||
var hashBuffer;
|
|
||||||
if (script.isPublicKeyHashOut()) {
|
|
||||||
hashBuffer = script.chunks[2].buf;
|
|
||||||
} else if (script.isScriptHashOut()) {
|
|
||||||
hashBuffer = script.chunks[1].buf;
|
|
||||||
} else {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
addressHashes.push(hashBuffer.toString('hex'));
|
|
||||||
};
|
|
||||||
|
|
||||||
Bitcoin.prototype._getAddressHashesFromTransaction = function(transaction) {
|
|
||||||
var addressHashes = [];
|
|
||||||
|
|
||||||
for (var i = 0; i < transaction.inputs.length; i++) {
|
for (var i = 0; i < transaction.inputs.length; i++) {
|
||||||
var input = transaction.inputs[i];
|
var input = transaction.inputs[i];
|
||||||
this._getAddressHashesFromInput(input, addressHashes);
|
if (input.script) {
|
||||||
|
var inputAddress = input.script.toAddress(this.node.network);
|
||||||
|
if (inputAddress) {
|
||||||
|
addresses.push(inputAddress.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var j = 0; j < transaction.outputs.length; j++) {
|
for (var j = 0; j < transaction.outputs.length; j++) {
|
||||||
var output = transaction.outputs[j];
|
var output = transaction.outputs[j];
|
||||||
this._getAddressHashesFromOutput(output, addressHashes);
|
if (output.script) {
|
||||||
|
var outputAddress = output.script.toAddress(this.node.network);
|
||||||
|
if (outputAddress) {
|
||||||
|
addresses.push(outputAddress.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return addressHashes;
|
return addresses;
|
||||||
};
|
};
|
||||||
|
|
||||||
Bitcoin.prototype._notifyAddressTxidSubscribers = function(txid, transaction) {
|
Bitcoin.prototype._notifyAddressTxidSubscribers = function(txid, transaction) {
|
||||||
var addressHashes = this._getAddressHashesFromTransaction(transaction);
|
var addresses = this._getAddressesFromTransaction(transaction);
|
||||||
for (var i = 0; i < addressHashes.length; i++) {
|
for (var i = 0; i < addresses.length; i++) {
|
||||||
if(this.subscriptions.address[addressHashes[i]]) {
|
var address = addresses[i];
|
||||||
var emitters = this.subscriptions.address[addressHashes[i]];
|
if(this.subscriptions.address[address]) {
|
||||||
|
var emitters = this.subscriptions.address[address];
|
||||||
for(var j = 0; j < emitters.length; j++) {
|
for(var j = 0; j < emitters.length; j++) {
|
||||||
emitters[j].emit('bitcoind/addresstxid', txid);
|
emitters[j].emit('bitcoind/addresstxid', {
|
||||||
|
address: address,
|
||||||
|
txid: txid
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user