diff --git a/lib/bcoin/txdb.js b/lib/bcoin/txdb.js index 0f91c564..ff5ddc66 100644 --- a/lib/bcoin/txdb.js +++ b/lib/bcoin/txdb.js @@ -72,7 +72,9 @@ TXDB.prototype.prefix = function prefix(key) { */ TXDB.prototype.emit = function emit(event, tx, info) { - return this.walletdb.emitTX(event, tx, info); + var details = info.toDetails(); + this.db.emit(event, info.id, tx, details); + this.wallet.emit(event, tx, details); }; /** diff --git a/lib/bcoin/wallet.js b/lib/bcoin/wallet.js index 9a0986e8..e93e2972 100644 --- a/lib/bcoin/wallet.js +++ b/lib/bcoin/wallet.js @@ -1061,7 +1061,7 @@ Wallet.prototype.syncOutputDepth = function syncOutputDepth(info, callback) { var change = []; var receive = []; var accounts = {}; - var i, path, unlock; + var i, path, details, unlock; unlock = this.writeLock.lock(syncOutputDepth, [info, callback]); @@ -1129,6 +1129,11 @@ Wallet.prototype.syncOutputDepth = function syncOutputDepth(info, callback) { return callback(err); } + details = info.toDetails(); + + self.db.emit('address', self.id, receive, change, details); + self.emit('address', receive, change, details); + self.commit(function(err) { if (err) return callback(err); @@ -1137,6 +1142,54 @@ Wallet.prototype.syncOutputDepth = function syncOutputDepth(info, callback) { }); }; +/** + * Emit balance events after a tx is saved. + * @private + * @param {TX} tx + * @param {PathInfo} info + * @param {Function} callback + */ + +Wallet.prototype.updateBalances = function updateBalances(info, callback) { + var self = this; + var details; + + if (this.db.listeners('balance').length === 0 + && this.listeners('balance').length === 0) { + return callback(); + } + + this.getBalance(function(err, balance) { + if (err) + return callback(err); + + details = info.toDetails(); + + self.db.emit('balance', self.id, balance, details); + self.emit('balance', balance, details); + + return callback(); + }); +}; + +/** + * Derive new addresses and emit balance. + * @private + * @param {TX} tx + * @param {PathInfo} info + * @param {Function} callback + */ + +Wallet.prototype.handleTX = function handleTX(info, callback) { + var self = this; + this.syncOutputDepth(info, function(err) { + if (err) + return callback(err); + + self.updateBalances(info, callback); + }); +}; + /** * Get a redeem script or witness script by hash. * @param {Hash} hash - Can be a ripemd160 or a sha256. diff --git a/lib/bcoin/walletdb.js b/lib/bcoin/walletdb.js index 8779ec6e..6885a60e 100644 --- a/lib/bcoin/walletdb.js +++ b/lib/bcoin/walletdb.js @@ -259,93 +259,6 @@ WalletDB.prototype.testFilter = function testFilter(addresses) { return false; }; -/** - * Emit balance events after a tx is saved. - * @private - * @param {TX} tx - * @param {PathInfo} info - * @param {Function} callback - */ - -WalletDB.prototype.updateBalances = function updateBalances(wallet, info, callback) { - var self = this; - var details; - - if (this.listeners('balances').length === 0 - && !this.hasListener(wallet.id, 'balance')) { - return callback(); - } - - wallet.getBalance(function(err, balance) { - if (err) - return callback(err); - - details = info.toDetails(); - - self.emit('balance', wallet.id, balance, details); - self.fire(wallet.id, 'balance', balance, details); - - return callback(); - }); -}; - -/** - * Derive new addresses after a tx is saved. - * @private - * @param {TX} tx - * @param {PathInfo} info - * @param {Function} callback - */ - -WalletDB.prototype.syncOutputs = function syncOutputs(wallet, info, callback) { - var self = this; - var details; - - wallet.syncOutputDepth(info, function(err, receive, change) { - if (err) - return callback(err); - - details = info.toDetails(); - - self.emit('address', wallet.id, receive, change, details); - self.fire(wallet.id, 'address', receive, change, details); - - return callback(); - }); -}; - -/** - * Emit transaction event. - * @private - * @param {String} event - * @param {TX} tx - * @param {PathInfo} info - */ - -WalletDB.prototype.emitTX = function emitTX(event, tx, info) { - var details = info.toDetails(); - this.emit(event, info.id, tx, details); - this.fire(info.id, event, tx, details); -}; - -/** - * Derive new addresses and emit balance. - * @private - * @param {TX} tx - * @param {PathInfo} info - * @param {Function} callback - */ - -WalletDB.prototype.handleTX = function handleTX(wallet, info, callback) { - var self = this; - this.syncOutputs(wallet, info, function(err) { - if (err) - return callback(err); - - self.updateBalances(wallet, info, callback); - }); -}; - /** * Dump database (for debugging). * @param {Function} callback - Returns [Error, Object]. @@ -418,61 +331,6 @@ WalletDB.prototype.unregister = function unregister(object) { return false; }; -/** - * Watch an object (increment reference count). - * @param {Object} object - */ - -WalletDB.prototype.watch = function watch(object) { - var id = object.id; - var watcher = this.watchers[id]; - - if (!watcher) - return; - - watcher.refs++; -}; - -/** - * Fire an event for a registered object. - * @param {WalletID} id - * @param {...Object} args - */ - -WalletDB.prototype.fire = function fire(id) { - var watcher = this.watchers[id]; - var i, args; - - if (!watcher) - return; - - args = new Array(arguments.length - 1); - - for (i = 1; i < arguments.length; i++) - args[i - 1] = arguments[i]; - - watcher.object.emit.apply(watcher.object, args); -}; - -/** - * Test for a listener on a registered object. - * @param {WalletID} id - * @param {String} event - * @returns {Boolean} - */ - -WalletDB.prototype.hasListener = function hasListener(id, event) { - var watcher = this.watchers[id]; - - if (!watcher) - return false; - - if (watcher.object.listeners(event).length !== 0) - return true; - - return false; -}; - /** * Get a wallet from the database, setup watcher. * @param {WalletID} id @@ -1402,7 +1260,7 @@ WalletDB.prototype.addTX = function addTX(tx, callback, force) { if (err) return next(err); - self.handleTX(wallet, info, next); + wallet.handleTX(info, next); }); }); }, callback);