various fixes

This commit is contained in:
Ivan Socolsky 2015-05-07 14:16:24 -03:00
parent bfaf7ff5c4
commit 75a834c4cf
7 changed files with 58 additions and 27 deletions

View File

@ -14,7 +14,4 @@ bcm.start(config, function(err) {
if (err) throw err;
console.log('Blockchain monitor started');
_.each(bcm.explorers, function(explorer) {
console.log('\t' + explorer.network.name + ': ' + explorer.url);
});
});

15
bws.js
View File

@ -37,8 +37,10 @@ var start = function(cb) {
if (err) return cb(err);
var server = config.https ? serverModule.createServer(serverOpts, app) :
serverModule.Server(app);
new WsApp().start(server, config);
return server;
var wsApp = new WsApp();
wsApp.start(server, config, function(err) {
return server;
});
});
});
return cb(null, server);
@ -47,8 +49,10 @@ var start = function(cb) {
if (err) return cb(err);
server = config.https ? serverModule.createServer(serverOpts, app) :
serverModule.Server(app);
new WsApp().start(server, config);
return cb(null, server);
var wsApp = new WsApp();
wsApp.start(server, config, function(err) {
return cb(err, server);
});
});
};
};
@ -56,6 +60,9 @@ var start = function(cb) {
if (config.cluster && !config.lockOpts.lockerServer)
throw 'When running in cluster mode, locker server need to be configured';
if (config.cluster && !config.messageBrokerOpts.messageBrokerServer)
throw 'When running in cluster mode, message broker server need to be configured';
start(function(err, server) {
if (err) {
console.log('Could not start BWS:', err);

View File

@ -54,6 +54,14 @@ BlockchainMonitor.prototype._initExplorer = function(provider, network, url) {
});
var socket = explorer.initSocket();
var connectionInfo = provider + ' (' + network + ') @ ' + url;
socket.on('connect', function() {
log.info('Connected to ' + connectionInfo);
});
socket.on('connect_error', function() {
log.error('Error connecting to ' + connectionInfo);
});
socket.emit('subscribe', 'inv');
socket.on('tx', _.bind(self._handleIncommingTx, self));
@ -67,7 +75,8 @@ BlockchainMonitor.prototype._handleIncommingTx = function(data) {
var outs = _.compact(_.map(data.vout, function(v) {
var addr = _.keys(v)[0];
if (addr.indexOf('3') != 0 && addr.indexOf('2') != 0) return;
var startingChar = addr.charAt(0);
if (startingChar != '2' && startingChar != '3') return;
return {
address: addr,
@ -78,8 +87,11 @@ BlockchainMonitor.prototype._handleIncommingTx = function(data) {
async.each(outs, function(out, next) {
self.storage.fetchAddress(out.address, function(err, address) {
if (err || !address) return next(err);
if (address.isChange) return next();
if (err) {
log.error('Could not fetch addresses from the db');
return next(err);
}
if (!address || address.isChange) return next();
var walletId = address.walletId;
log.info('Incoming tx for wallet ' + walletId + ' [' + out.amount + 'sat -> ' + out.address + ']');

View File

@ -18,14 +18,14 @@ function MessageBroker(opts) {
this.mq = require('socket.io-client').connect(url);
this.mq.on('connect', function() {});
this.mq.on('connect_error', function() {
log.warn('Message queue server connection error');
log.warn('Error connecting to message broker server @ ' + url);
});
this.mq.on('msg', function(data) {
self.emit('msg', data);
});
log.info('Using message queue server at ' + url);
log.info('Using message broker server at ' + url);
}
};

View File

@ -282,7 +282,7 @@ WalletService.prototype.replaceTemporaryRequestKey = function(opts, cb) {
walletId: opts.walletId,
copayerId: self.copayerId,
copayerName: opts.name,
}, false, function() {
}, function() {
return cb(null, {
copayerId: self.copayerId,
wallet: wallet
@ -308,11 +308,18 @@ WalletService.prototype._verifySignature = function(text, signature, pubKey) {
*
* @param {String} type
* @param {Object} data
* @param {Boolean} isGlobal - If true, the notification is not issued on behalf of any particular copayer (defaults to false)
* @param {Object} opts
* @param {Boolean} opts.isGlobal - If true, the notification is not issued on behalf of any particular copayer (defaults to false)
*/
WalletService.prototype._notify = function(type, data, isGlobal, cb) {
WalletService.prototype._notify = function(type, data, opts, cb) {
var self = this;
if (_.isFunction(opts)) {
cb = opts;
opts = {};
}
opts = opts || {};
log.debug('Notification', type, data);
var walletId = self.walletId || data.walletId;
@ -324,7 +331,7 @@ WalletService.prototype._notify = function(type, data, isGlobal, cb) {
type: type,
data: data,
ticker: this.notifyTicker++,
creatorId: isGlobal ? null : copayerId,
creatorId: opts.isGlobal ? null : copayerId,
walletId: walletId,
});
this.storage.storeNotification(walletId, n, function() {
@ -393,7 +400,7 @@ WalletService.prototype.joinWallet = function(opts, cb) {
walletId: opts.walletId,
copayerId: copayer.id,
copayerName: copayer.name,
}, false, function() {
}, function() {
return cb(null, {
copayerId: copayer.id,
wallet: wallet
@ -426,7 +433,7 @@ WalletService.prototype.createAddress = function(opts, cb) {
self._notify('NewAddress', {
address: address.address,
}, false, function() {
}, function() {
return cb(null, address);
});
});
@ -726,7 +733,7 @@ WalletService.prototype.createTx = function(opts, cb) {
self._notify('NewTxProposal', {
amount: opts.amount
}, false, function() {
}, function() {
return cb(null, txp);
});
});
@ -800,7 +807,7 @@ WalletService.prototype.removePendingTx = function(opts, cb) {
if (actors.length > 1 || (actors.length == 1 && actors[0] !== self.copayerId))
return cb(new ClientError('TXACTIONED', 'Cannot remove a proposal signed/rejected by other copayers'));
self._notify('TxProposalRemoved', {}, false, function() {
self._notify('TxProposalRemoved', {}, function() {
self.storage.removeTx(self.walletId, txp.id, cb);
});
});
@ -863,13 +870,13 @@ WalletService.prototype.signTx = function(opts, cb) {
self._notify('TxProposalAcceptedBy', {
txProposalId: opts.txProposalId,
copayerId: self.copayerId,
}, false, done);
}, done);
},
function(done) {
if (txp.isAccepted()) {
self._notify('TxProposalFinallyAccepted', {
txProposalId: opts.txProposalId,
}, false, done);
}, done);
} else {
done();
}
@ -918,7 +925,7 @@ WalletService.prototype.broadcastTx = function(opts, cb) {
self._notify('NewOutgoingTx', {
txProposalId: opts.txProposalId,
txid: txid
}, false, function() {
}, function() {
return cb(null, txp);
});
});
@ -964,13 +971,13 @@ WalletService.prototype.rejectTx = function(opts, cb) {
self._notify('TxProposalRejectedBy', {
txProposalId: opts.txProposalId,
copayerId: self.copayerId,
}, false, done);
}, done);
},
function(done) {
if (txp.status == 'rejected') {
self._notify('TxProposalFinallyRejected', {
txProposalId: opts.txProposalId,
}, false, done);
}, done);
} else {
done();
}
@ -1319,7 +1326,9 @@ WalletService.prototype.startScan = function(opts, cb) {
result: err ? 'error' : 'success',
};
if (err) data.error = err;
self._notify('ScanFinished', data, true);
self._notify('ScanFinished', data, {
isGlobal: true
});
};
self.getWallet({}, function(err, wallet) {

View File

@ -100,6 +100,9 @@ Storage.prototype.storeWalletAndUpdateCopayersLookup = function(wallet, cb) {
};
Storage.prototype.fetchCopayerLookup = function(copayerId, cb) {
this.db.collection(collections.COPAYERS_LOOKUP).createIndex({
copayerId: 1
});
this.db.collection(collections.COPAYERS_LOOKUP).findOne({
copayerId: copayerId
}, function(err, result) {
@ -315,6 +318,9 @@ Storage.prototype.storeAddressAndWallet = function(wallet, addresses, cb) {
Storage.prototype.fetchAddress = function(address, cb) {
var self = this;
this.db.collection(collections.ADDRESSES).createIndex({
address: 1
});
this.db.collection(collections.ADDRESSES).findOne({
address: address,
}, function(err, result) {

View File

@ -53,8 +53,8 @@ WsApp.prototype.start = function(server, opts, cb) {
});
socket.emit('challenge', socket.nonce);
done();
});
done();
},
], function(err) {
if (cb) return cb(err);