|
|
@ -461,6 +461,7 @@ Storage.prototype.storeAddress = function(address, cb) { |
|
|
|
var self = this; |
|
|
|
|
|
|
|
self.db.collection(collections.ADDRESSES).update({ |
|
|
|
walletId: address.walletId, |
|
|
|
address: address.address |
|
|
|
}, address, { |
|
|
|
w: 1, |
|
|
@ -471,45 +472,22 @@ Storage.prototype.storeAddress = function(address, cb) { |
|
|
|
Storage.prototype.storeAddressAndWallet = function(wallet, addresses, cb) { |
|
|
|
var self = this; |
|
|
|
|
|
|
|
function saveAddresses(addresses, cb) { |
|
|
|
if (_.isEmpty(addresses)) return cb(); |
|
|
|
self.db.collection(collections.ADDRESSES).insert(addresses, { |
|
|
|
w: 1 |
|
|
|
}, cb); |
|
|
|
}; |
|
|
|
|
|
|
|
var addresses = [].concat(addresses); |
|
|
|
if (addresses.length == 0) return cb(); |
|
|
|
if (_.isEmpty(addresses)) return cb(); |
|
|
|
|
|
|
|
async.filter(addresses, function(address, next) { |
|
|
|
self.db.collection(collections.ADDRESSES).findOne({ |
|
|
|
address: address.address, |
|
|
|
}, { |
|
|
|
walletId: true, |
|
|
|
}, function(err, result) { |
|
|
|
if (err || !result) return next(true); |
|
|
|
if (result.walletId != wallet.id) { |
|
|
|
log.warn('Address ' + address.address + ' exists in more than one wallet.'); |
|
|
|
return next(true); |
|
|
|
} |
|
|
|
// Ignore if address was already in wallet
|
|
|
|
return next(false); |
|
|
|
}); |
|
|
|
}, function(newAddresses) { |
|
|
|
if (newAddresses.length < addresses.length) { |
|
|
|
log.warn('Attempted to store already existing addresses on wallet ' + wallet.id); |
|
|
|
} |
|
|
|
saveAddresses(newAddresses, function(err) { |
|
|
|
if (err) return cb(err); |
|
|
|
self.storeWallet(wallet, cb); |
|
|
|
}); |
|
|
|
self.db.collection(collections.ADDRESSES).insert(addresses, { |
|
|
|
w: 1 |
|
|
|
}, function(err) { |
|
|
|
if (err) return cb(err); |
|
|
|
self.storeWallet(wallet, cb); |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
Storage.prototype.fetchAddress = function(address, cb) { |
|
|
|
Storage.prototype.fetchAddressByWalletId = function(walletId, address, cb) { |
|
|
|
var self = this; |
|
|
|
|
|
|
|
this.db.collection(collections.ADDRESSES).findOne({ |
|
|
|
walletId: walletId, |
|
|
|
address: address, |
|
|
|
}, function(err, result) { |
|
|
|
if (err) return cb(err); |
|
|
@ -519,6 +497,27 @@ Storage.prototype.fetchAddress = function(address, cb) { |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
Storage.prototype.fetchAddressByCoin = function(coin, address, cb) { |
|
|
|
var self = this; |
|
|
|
|
|
|
|
this.db.collection(collections.ADDRESSES).find({ |
|
|
|
address: address, |
|
|
|
}).toArray(function(err, result) { |
|
|
|
if (err) return cb(err); |
|
|
|
if (!result || _.isEmpty(result)) return cb(); |
|
|
|
if (result.length > 1) { |
|
|
|
result = _.find(result, function(address) { |
|
|
|
return coin == (address.coin || Defaults.COIN); |
|
|
|
}); |
|
|
|
} else { |
|
|
|
result = _.first(result); |
|
|
|
} |
|
|
|
if (!result) return cb(); |
|
|
|
|
|
|
|
return cb(null, Model.Address.fromObj(result)); |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
Storage.prototype.fetchPreferences = function(walletId, copayerId, cb) { |
|
|
|
this.db.collection(collections.PREFERENCES).find({ |
|
|
|
walletId: walletId, |
|
|
@ -610,6 +609,7 @@ Storage.prototype.cleanActiveAddresses = function(walletId, cb) { |
|
|
|
Storage.prototype.storeActiveAddresses = function(walletId, addresses, cb) { |
|
|
|
var self = this; |
|
|
|
|
|
|
|
if (_.isEmpty(addresses)) return cb(); |
|
|
|
async.each(addresses, function(address, next) { |
|
|
|
var record = { |
|
|
|
walletId: walletId, |
|
|
|