updateTip
This commit is contained in:
parent
86b9435a12
commit
e13068e7eb
|
@ -79,6 +79,23 @@ Insight.prototype.broadcast = function(rawTx, cb) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Insight.prototype.getBlock = function(hash, cb) {
|
||||||
|
var args = {
|
||||||
|
method: 'GET',
|
||||||
|
path: this.apiPrefix + '/rawblock/' + hash,
|
||||||
|
json: true,
|
||||||
|
};
|
||||||
|
|
||||||
|
this._doRequest(args, function(err, res, data) {
|
||||||
|
if (res && res.statusCode == 404) return cb();
|
||||||
|
if (err || res.statusCode !== 200)
|
||||||
|
return cb(_parseErr(err, res));
|
||||||
|
|
||||||
|
return cb(null, data);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
Insight.prototype.getTransaction = function(txid, cb) {
|
Insight.prototype.getTransaction = function(txid, cb) {
|
||||||
var args = {
|
var args = {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
|
@ -182,6 +199,7 @@ Insight.prototype.getBlockchainHeight = function(cb) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Insight.prototype.initSocket = function() {
|
Insight.prototype.initSocket = function() {
|
||||||
|
|
||||||
// sockets always use the first server on the pull
|
// sockets always use the first server on the pull
|
||||||
|
|
|
@ -10,6 +10,7 @@ var BlockchainExplorer = require('./blockchainexplorer');
|
||||||
var Storage = require('./storage');
|
var Storage = require('./storage');
|
||||||
var MessageBroker = require('./messagebroker');
|
var MessageBroker = require('./messagebroker');
|
||||||
var Lock = require('./lock');
|
var Lock = require('./lock');
|
||||||
|
var Bitcore = require('bitcore-lib');
|
||||||
|
|
||||||
var Notification = require('./model/notification');
|
var Notification = require('./model/notification');
|
||||||
|
|
||||||
|
@ -180,9 +181,10 @@ BlockchainMonitor.prototype._handleTxOuts = function(data) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
BlockchainMonitor.prototype._processBlock = function(network, hash, cb) {
|
||||||
|
|
||||||
BlockchainMonitor.prototype._processBlock = function(network, hash , cb) {
|
var self = this;
|
||||||
console.log('[blockchainmonitor.js.184:network:]',network); //TODO
|
console.log('[blockchainmonitor.js.184:network:]', network); //TODO
|
||||||
|
|
||||||
//1. check block is not reorg
|
//1. check block is not reorg
|
||||||
//2. doProcessBlock
|
//2. doProcessBlock
|
||||||
|
@ -190,8 +192,27 @@ console.log('[blockchainmonitor.js.184:network:]',network); //TODO
|
||||||
if (err) return cb(err);
|
if (err) return cb(err);
|
||||||
|
|
||||||
log.debug('Processing block ' + network + ' ' + hash);
|
log.debug('Processing block ' + network + ' ' + hash);
|
||||||
|
console.log('[blockchainmonitor.js.195:data:]',data); //TODO
|
||||||
|
var block = new Bitcore.Block(new Buffer(data.rawblock, 'hex'));
|
||||||
|
var txs = block.toObject().transactions;
|
||||||
|
|
||||||
console.log('[blockchainmonitor.js.190]', data); //TODO
|
var allAddresses = {};
|
||||||
|
_.each(txs, function(tx) {
|
||||||
|
_.each(tx.outputs, function(o) {
|
||||||
|
if (o.script) {
|
||||||
|
var s = new Bitcore.Script(new Buffer(o.script, 'hex'));
|
||||||
|
var a = s.toAddress(network);
|
||||||
|
if (a) {
|
||||||
|
allAddresses[a] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
allAddresses = _.keys(allAddresses);
|
||||||
|
|
||||||
|
async.eachLimit(allAddresses, 10, function(address, i_cb) {
|
||||||
|
self.storage.updateLastUsedOn(address, i_cb);
|
||||||
|
}, cb);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -214,11 +235,13 @@ BlockchainMonitor.prototype._handleNewBlock = function(network, hash) {
|
||||||
});
|
});
|
||||||
|
|
||||||
self._processBlock(network, hash, function() {
|
self._processBlock(network, hash, function() {
|
||||||
|
self.storage.updateTip(function() {
|
||||||
self.storage.softResetAllTxHistoryCache(function() {
|
self.storage.softResetAllTxHistoryCache(function() {
|
||||||
self._storeAndBroadcastNotification(notification, function(err) {
|
self._storeAndBroadcastNotification(notification, function(err) {
|
||||||
return;
|
return;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
});
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -623,26 +623,35 @@ Storage.prototype.getTxHistoryCache = function(walletId, from, to, cb) {
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
Storage.prototype.softResetAllTxHistoryCache = function(cb) {
|
|
||||||
|
Storage.prototype.updateTip = function(hash, cb) {
|
||||||
this.db.collection(collections.CACHE).update({
|
this.db.collection(collections.CACHE).update({
|
||||||
type: 'historyCacheStatus',
|
type: 'blochainTip',
|
||||||
}, {
|
}, {
|
||||||
isUpdated: false,
|
$set: {
|
||||||
|
hash:hash,
|
||||||
|
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
upsert: true,
|
||||||
|
}, cb);
|
||||||
|
};
|
||||||
|
|
||||||
|
Storage.prototype.softResetAllTxHistoryCache = function(cb) {
|
||||||
|
this.db.collection(collections.CACHE).remove({
|
||||||
|
type: 'historyCacheStatus',
|
||||||
}, {
|
}, {
|
||||||
multi: true,
|
multi: true,
|
||||||
}, cb);
|
}, cb);
|
||||||
};
|
};
|
||||||
|
|
||||||
Storage.prototype.softResetTxHistoryCache = function(walletId, cb) {
|
Storage.prototype.softResetTxHistoryCache = function(walletId, cb) {
|
||||||
this.db.collection(collections.CACHE).update({
|
this.db.collection(collections.CACHE).remove({
|
||||||
walletId: walletId,
|
walletId: walletId,
|
||||||
type: 'historyCacheStatus',
|
type: 'historyCacheStatus',
|
||||||
key: null
|
key: null
|
||||||
}, {
|
|
||||||
isUpdated: false,
|
|
||||||
}, {
|
}, {
|
||||||
w: 1,
|
w: 1,
|
||||||
upsert: true,
|
|
||||||
}, cb);
|
}, cb);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ describe('Blockchain monitor', function() {
|
||||||
storage = res.storage;
|
storage = res.storage;
|
||||||
blockchainExplorer = res.blockchainExplorer;
|
blockchainExplorer = res.blockchainExplorer;
|
||||||
blockchainExplorer.initSocket = sinon.stub().returns(socket);
|
blockchainExplorer.initSocket = sinon.stub().returns(socket);
|
||||||
blockchainExplorer.getBlock = sinon.stub().yields(null);
|
blockchainExplorer.getBlock = sinon.stub().yields('error');
|
||||||
|
|
||||||
helpers.createAndJoinWallet(2, 3, function(s, w) {
|
helpers.createAndJoinWallet(2, 3, function(s, w) {
|
||||||
server = s;
|
server = s;
|
||||||
|
@ -133,7 +133,7 @@ describe('Blockchain monitor', function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it.only('should process incoming blocks', function(done) {
|
it('should process incoming blocks', function(done) {
|
||||||
|
|
||||||
var incoming = {
|
var incoming = {
|
||||||
hash: '123',
|
hash: '123',
|
||||||
|
@ -145,7 +145,9 @@ describe('Blockchain monitor', function() {
|
||||||
|
|
||||||
// TODO add address to block data
|
// TODO add address to block data
|
||||||
|
|
||||||
blockchainExplorer.getBlock = sinon.stub().yields(null, 'xxx');
|
blockchainExplorer.getBlock = sinon.stub().yields(null, {
|
||||||
|
rawblock: TestData.block
|
||||||
|
});
|
||||||
|
|
||||||
socket.handlers['block'](incoming);
|
socket.handlers['block'](incoming);
|
||||||
|
|
||||||
|
|
|
@ -6129,7 +6129,7 @@ describe('Wallet service', function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Downloading history', function() {
|
describe.only('Downloading history', function() {
|
||||||
var h;
|
var h;
|
||||||
beforeEach(function(done) {
|
beforeEach(function(done) {
|
||||||
blockchainExplorer.getBlockchainHeight = sinon.stub().callsArgWith(0, null, 1000);
|
blockchainExplorer.getBlockchainHeight = sinon.stub().callsArgWith(0, null, 1000);
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue