|
|
@ -2383,7 +2383,9 @@ WalletService.prototype._processBroadcast = function(txp, opts, cb) { |
|
|
|
self._notify('NewOutgoingTx', args); |
|
|
|
} |
|
|
|
|
|
|
|
return cb(err, txp); |
|
|
|
self.storage.softResetTxHistoryCache(self.walletId, function() { |
|
|
|
return cb(err, txp); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
@ -2788,15 +2790,16 @@ WalletService.prototype.getTxHistory = function(opts, cb) { |
|
|
|
self.storage.fetchTxs(self.walletId, {}, next); |
|
|
|
}, |
|
|
|
function(next) { |
|
|
|
var totalItems; |
|
|
|
var totalItems; |
|
|
|
|
|
|
|
async.series([ |
|
|
|
|
|
|
|
function(nextSerie) { |
|
|
|
if (!useCache) return nextSerie(); |
|
|
|
|
|
|
|
self.storage.getTxHistoryCache(self.walletId, from, to, function(err, res) { |
|
|
|
self.storage.getTxHistoryCache(self.walletId, from, to, function(err, res) { |
|
|
|
if (err) return nextSerie(err); |
|
|
|
if (!res || !res[0] ) return nextSerie(); |
|
|
|
if (!res || !res[0]) return nextSerie(); |
|
|
|
|
|
|
|
normalizedTxs = res; |
|
|
|
fromCache = true; |
|
|
@ -2842,10 +2845,13 @@ WalletService.prototype.getTxHistory = function(opts, cb) { |
|
|
|
if (err) return cb(err); |
|
|
|
|
|
|
|
var proposals = res[0]; |
|
|
|
var notes = res[3]; |
|
|
|
var notes = res[2]; |
|
|
|
|
|
|
|
var finalTxs = decorate(normalizedTxs, addresses, proposals, notes); |
|
|
|
|
|
|
|
if (fromCache) |
|
|
|
log.debug("History from cache for:", self.walletId, from, to); |
|
|
|
|
|
|
|
return cb(null, finalTxs, !!fromCache); |
|
|
|
}); |
|
|
|
}); |
|
|
@ -2897,40 +2903,43 @@ WalletService.prototype.scan = function(opts, cb) { |
|
|
|
if (!wallet.isComplete()) return cb(Errors.WALLET_NOT_COMPLETE); |
|
|
|
|
|
|
|
wallet.scanStatus = 'running'; |
|
|
|
self.storage.storeWallet(wallet, function(err) { |
|
|
|
if (err) return cb(err); |
|
|
|
|
|
|
|
var derivators = []; |
|
|
|
_.each([false, true], function(isChange) { |
|
|
|
derivators.push({ |
|
|
|
derive: _.bind(wallet.createAddress, wallet, isChange), |
|
|
|
rewind: _.bind(wallet.addressManager.rewindIndex, wallet.addressManager, isChange), |
|
|
|
}); |
|
|
|
if (opts.includeCopayerBranches) { |
|
|
|
_.each(wallet.copayers, function(copayer) { |
|
|
|
if (copayer.addressManager) { |
|
|
|
derivators.push({ |
|
|
|
derive: _.bind(copayer.createAddress, copayer, wallet, isChange), |
|
|
|
rewind: _.bind(copayer.addressManager.rewindIndex, copayer.addressManager, isChange), |
|
|
|
}); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
}); |
|
|
|
self.storage.clearTxHistoryCache(self.walletId, function() { |
|
|
|
self.storage.storeWallet(wallet, function(err) { |
|
|
|
if (err) return cb(err); |
|
|
|
|
|
|
|
async.eachSeries(derivators, function(derivator, next) { |
|
|
|
scanBranch(derivator, function(err, addresses) { |
|
|
|
if (err) return next(err); |
|
|
|
self.storage.storeAddressAndWallet(wallet, addresses, next); |
|
|
|
var derivators = []; |
|
|
|
_.each([false, true], function(isChange) { |
|
|
|
derivators.push({ |
|
|
|
derive: _.bind(wallet.createAddress, wallet, isChange), |
|
|
|
rewind: _.bind(wallet.addressManager.rewindIndex, wallet.addressManager, isChange), |
|
|
|
}); |
|
|
|
if (opts.includeCopayerBranches) { |
|
|
|
_.each(wallet.copayers, function(copayer) { |
|
|
|
if (copayer.addressManager) { |
|
|
|
derivators.push({ |
|
|
|
derive: _.bind(copayer.createAddress, copayer, wallet, isChange), |
|
|
|
rewind: _.bind(copayer.addressManager.rewindIndex, copayer.addressManager, isChange), |
|
|
|
}); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
}); |
|
|
|
}, function(error) { |
|
|
|
self.storage.fetchWallet(wallet.id, function(err, wallet) { |
|
|
|
if (err) return cb(err); |
|
|
|
wallet.scanStatus = error ? 'error' : 'success'; |
|
|
|
self.storage.storeWallet(wallet, function() { |
|
|
|
return cb(error); |
|
|
|
|
|
|
|
async.eachSeries(derivators, function(derivator, next) { |
|
|
|
scanBranch(derivator, function(err, addresses) { |
|
|
|
if (err) return next(err); |
|
|
|
self.storage.storeAddressAndWallet(wallet, addresses, next); |
|
|
|
}); |
|
|
|
}) |
|
|
|
}, function(error) { |
|
|
|
self.storage.fetchWallet(wallet.id, function(err, wallet) { |
|
|
|
if (err) return cb(err); |
|
|
|
wallet.scanStatus = error ? 'error' : 'success'; |
|
|
|
self.storage.storeWallet(wallet, function() { |
|
|
|
return cb(error); |
|
|
|
}); |
|
|
|
}) |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|