address subscriptions
This commit is contained in:
parent
bee86257ca
commit
d563704e1c
@ -12,6 +12,9 @@ var Address = bitcore.Address;
|
|||||||
|
|
||||||
var AddressModule = function(options) {
|
var AddressModule = function(options) {
|
||||||
BaseModule.call(this, options);
|
BaseModule.call(this, options);
|
||||||
|
|
||||||
|
this.txSubscriptions = {};
|
||||||
|
this.balanceSubscriptions = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
inherits(AddressModule, BaseModule);
|
inherits(AddressModule, BaseModule);
|
||||||
@ -29,6 +32,13 @@ AddressModule.prototype.getAPIMethods = function() {
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
AddressModule.prototype.getEvents = function() {
|
||||||
|
return [
|
||||||
|
['transaction', this, this.subscribeTransaction, this.unsubscribeTransaction],
|
||||||
|
['balance', this, this.subscribeBalance, this.unsubscribeBalance]
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
AddressModule.prototype.blockHandler = function(block, addOutput, callback) {
|
AddressModule.prototype.blockHandler = function(block, addOutput, callback) {
|
||||||
var txs = this.db.getTransactionsFromBlock(block);
|
var txs = this.db.getTransactionsFromBlock(block);
|
||||||
|
|
||||||
@ -82,6 +92,26 @@ AddressModule.prototype.blockHandler = function(block, addOutput, callback) {
|
|||||||
key: [AddressModule.PREFIXES.OUTPUTS, address, timestamp, txid, outputIndex].join('-'),
|
key: [AddressModule.PREFIXES.OUTPUTS, address, timestamp, txid, outputIndex].join('-'),
|
||||||
value: [output.satoshis, script, height].join(':')
|
value: [output.satoshis, script, height].join(':')
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if(self.txSubscriptions[address]) {
|
||||||
|
var subscriptions = self.txSubscriptions[address];
|
||||||
|
for(var i = 0; i < subscriptions.length; i++) {
|
||||||
|
subscriptions[i].emit('transaction', tx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(self.balanceSubscriptions[address]) {
|
||||||
|
var emitters = self.balanceSubsriptions[address];
|
||||||
|
for(var i = 0; i < subscriptions.length; i++) {
|
||||||
|
self.getBalance(address, true, function(err, balance) {
|
||||||
|
if(err) {
|
||||||
|
return self.emit(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
emitters[i].emit('balance', address, balance, block);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(tx.isCoinbase()) {
|
if(tx.isCoinbase()) {
|
||||||
@ -95,6 +125,50 @@ AddressModule.prototype.blockHandler = function(block, addOutput, callback) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
AddressModule.prototype.subscribeTransaction = function(emitter, addresses) {
|
||||||
|
for(var i = 0; i < addresses.length; i++) {
|
||||||
|
if(!this.txSubscriptions[addresses[i]]) {
|
||||||
|
this.txSubscriptions[addresses[i]] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
this.txSubscriptions[addresses[i]].push(emitter);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
AddressModule.prototype.subscribeBalance = function(emitter, addresses) {
|
||||||
|
for(var i = 0; i < addresses.length; i++) {
|
||||||
|
if(!this.balanceSubscriptions[addresses[i]]) {
|
||||||
|
this.balanceSubscriptions[addresses[i]] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
this.balanceSubscriptions[addresses[i]].push(emitter);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
AddressModule.prototype.unsubscribeTransaction = function(emitter, addresses) {
|
||||||
|
for(var i = 0; i < addresses.length; i++) {
|
||||||
|
if(this.txSubscriptions[addresses[i]]) {
|
||||||
|
var emitters = self.txSubscriptions[addresses[i]];
|
||||||
|
var index = emitters.indexOf(emitter);
|
||||||
|
if(index > -1) {
|
||||||
|
emitters.splice(index, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
AddressModule.prototype.unsubscribeBalance = function(emitter, addresses) {
|
||||||
|
for(var i = 0; i < addresses.length; i++) {
|
||||||
|
if(this.balanceSubscriptions[addresses[i]]) {
|
||||||
|
var emitters = self.balanceSubscriptions[addresses[i]];
|
||||||
|
var index = emitters.indexOf(emitter);
|
||||||
|
if(index > -1) {
|
||||||
|
emitters.splice(index, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
AddressModule.prototype.getBalance = function(address, queryMempool, callback) {
|
AddressModule.prototype.getBalance = function(address, queryMempool, callback) {
|
||||||
this.getUnspentOutputs(address, queryMempool, function(err, outputs) {
|
this.getUnspentOutputs(address, queryMempool, function(err, outputs) {
|
||||||
if(err) {
|
if(err) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user