cache address activity
This commit is contained in:
parent
89575da4e8
commit
0b43b3b85c
|
@ -19,6 +19,7 @@ Address.create = function(opts) {
|
||||||
x.publicKeys = opts.publicKeys;
|
x.publicKeys = opts.publicKeys;
|
||||||
x.network = Bitcore.Address(x.address).toObject().network;
|
x.network = Bitcore.Address(x.address).toObject().network;
|
||||||
x.type = opts.type || WalletUtils.SCRIPT_TYPES.P2SH;
|
x.type = opts.type || WalletUtils.SCRIPT_TYPES.P2SH;
|
||||||
|
x.hasActivity = undefined;
|
||||||
return x;
|
return x;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -34,6 +35,7 @@ Address.fromObj = function(obj) {
|
||||||
x.path = obj.path;
|
x.path = obj.path;
|
||||||
x.publicKeys = obj.publicKeys;
|
x.publicKeys = obj.publicKeys;
|
||||||
x.type = obj.type || WalletUtils.SCRIPT_TYPES.P2SH;
|
x.type = obj.type || WalletUtils.SCRIPT_TYPES.P2SH;
|
||||||
|
x.hasActivity = obj.hasActivity;
|
||||||
return x;
|
return x;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -702,10 +702,31 @@ WalletService.prototype._canCreateAddress = function(ignoreMaxGap, cb) {
|
||||||
var latestAddresses = _.takeRight(_.reject(addresses, {
|
var latestAddresses = _.takeRight(_.reject(addresses, {
|
||||||
isChange: true
|
isChange: true
|
||||||
}), WalletService.MAX_MAIN_ADDRESS_GAP);
|
}), WalletService.MAX_MAIN_ADDRESS_GAP);
|
||||||
if (latestAddresses.length < WalletService.MAX_MAIN_ADDRESS_GAP) return cb(null, true);
|
if (latestAddresses.length < WalletService.MAX_MAIN_ADDRESS_GAP || _.any(latestAddresses, {
|
||||||
|
hasActivity: true
|
||||||
|
})) return cb(null, true);
|
||||||
|
|
||||||
var bc = self._getBlockchainExplorer(latestAddresses[0].network);
|
var bc = self._getBlockchainExplorer(latestAddresses[0].network);
|
||||||
bc.getAddressActivity(_.pluck(latestAddresses, 'address'), cb);
|
var activityFound = false;
|
||||||
|
var i = latestAddresses.length;
|
||||||
|
async.whilst(function() {
|
||||||
|
return i > 0 && !activityFound;
|
||||||
|
}, function(next) {
|
||||||
|
bc.getAddressActivity(latestAddresses[--i].address, function(err, res) {
|
||||||
|
if (err) return next(err);
|
||||||
|
activityFound = !!res;
|
||||||
|
return next();
|
||||||
|
});
|
||||||
|
}, function(err) {
|
||||||
|
if (err) return cb(err);
|
||||||
|
if (!activityFound) return cb(null, false);
|
||||||
|
|
||||||
|
var address = latestAddresses[i];
|
||||||
|
address.hasActivity = true;
|
||||||
|
self.storage.storeAddress(self.walletId, address, function(err) {
|
||||||
|
return cb(err, true);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -383,6 +383,17 @@ Storage.prototype.fetchAddresses = function(walletId, cb) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Storage.prototype.storeAddress = function(walletId, address, cb) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
self.db.collection(collections.ADDRESSES).update({
|
||||||
|
address: address.address
|
||||||
|
}, address, {
|
||||||
|
w: 1,
|
||||||
|
upsert: false,
|
||||||
|
}, cb);
|
||||||
|
};
|
||||||
|
|
||||||
Storage.prototype.storeAddressAndWallet = function(wallet, addresses, cb) {
|
Storage.prototype.storeAddressAndWallet = function(wallet, addresses, cb) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue