From 8ef70978d0e75187f1ba12546a4ac32a9f3d134e Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Fri, 12 Aug 2016 14:25:47 -0700 Subject: [PATCH] wallet: events. --- lib/bcoin/http/server.js | 35 ++++++++++++++++++++--------------- lib/bcoin/txdb.js | 5 ++--- lib/bcoin/wallet.js | 27 ++++++++++----------------- lib/bcoin/walletdb.js | 12 ++++++++++++ 4 files changed, 44 insertions(+), 35 deletions(-) diff --git a/lib/bcoin/http/server.js b/lib/bcoin/http/server.js index 66f62f25..8d141ee9 100644 --- a/lib/bcoin/http/server.js +++ b/lib/bcoin/http/server.js @@ -968,19 +968,31 @@ HTTPServer.prototype._initIO = function _initIO() { }); }); - this.walletdb.on('tx', function(id, tx, details) { - details = details.toJSON(); + this.walletdb.on('tx', function(id, tx, info) { + var details = info.toJSON(); self.server.io.to(id).emit('wallet tx', details); self.server.io.to('!all').emit('wallet tx', id, details); }); - this.walletdb.on('confirmed', function(id, tx, details) { - details = details.toJSON(); + this.walletdb.on('confirmed', function(id, tx, info) { + var details = info.toJSON(); self.server.io.to(id).emit('wallet confirmed', details); self.server.io.to('!all').emit('wallet confirmed', id, details); }); - this.walletdb.on('balance', function(id, balance, details) { + this.walletdb.on('unconfirmed', function(id, tx, info) { + var details = info.toJSON(); + self.server.io.to(id).emit('wallet unconfirmed', details); + self.server.io.to('!all').emit('wallet unconfirmed', id, details); + }); + + this.walletdb.on('conflict', function(id, tx, info) { + var details = info.toJSON(); + self.server.io.to(id).emit('wallet conflict', details); + self.server.io.to('!all').emit('wallet conflict', id, details); + }); + + this.walletdb.on('balance', function(id, balance) { balance = { confirmed: utils.btc(balance.confirmed), unconfirmed: utils.btc(balance.unconfirmed), @@ -990,19 +1002,12 @@ HTTPServer.prototype._initIO = function _initIO() { self.server.io.to('!all').emit('wallet balance', id, balance); }); - this.walletdb.on('address', function(id, receive, change, details) { - details = details.toJSON(); - + this.walletdb.on('address', function(id, receive) { receive = receive.map(function(address) { return address.toJSON(); }); - - change = change.map(function(address) { - return address.toJSON(); - }); - - self.server.io.to(id).emit('wallet address', receive, change, details); - self.server.io.to('!all').emit('wallet address', id, receive, change, details); + self.server.io.to(id).emit('wallet address', receive); + self.server.io.to('!all').emit('wallet address', id, receive); }); }; diff --git a/lib/bcoin/txdb.js b/lib/bcoin/txdb.js index ff5ddc66..be44e456 100644 --- a/lib/bcoin/txdb.js +++ b/lib/bcoin/txdb.js @@ -72,9 +72,8 @@ TXDB.prototype.prefix = function prefix(key) { */ TXDB.prototype.emit = function emit(event, tx, info) { - var details = info.toDetails(); - this.db.emit(event, info.id, tx, details); - this.wallet.emit(event, tx, details); + this.db.emit(event, info.id, tx, info); + this.wallet.emit(event, tx, info); }; /** diff --git a/lib/bcoin/wallet.js b/lib/bcoin/wallet.js index e93e2972..35430f74 100644 --- a/lib/bcoin/wallet.js +++ b/lib/bcoin/wallet.js @@ -1058,10 +1058,9 @@ Wallet.prototype.getOutputPaths = function getOutputPaths(tx, callback) { Wallet.prototype.syncOutputDepth = function syncOutputDepth(info, callback) { var self = this; - var change = []; var receive = []; var accounts = {}; - var i, path, details, unlock; + var i, path, unlock; unlock = this.writeLock.lock(syncOutputDepth, [info, callback]); @@ -1117,9 +1116,6 @@ Wallet.prototype.syncOutputDepth = function syncOutputDepth(info, callback) { if (rcv) receive.push(rcv); - if (chng) - change.push(chng); - next(); }); }); @@ -1129,15 +1125,15 @@ 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); + if (receive.length > 0) { + self.db.emit('address', self.id, receive); + self.emit('address', receive); + } self.commit(function(err) { if (err) return callback(err); - return callback(null, receive, change); + return callback(null, receive); }); }); }; @@ -1150,9 +1146,8 @@ Wallet.prototype.syncOutputDepth = function syncOutputDepth(info, callback) { * @param {Function} callback */ -Wallet.prototype.updateBalances = function updateBalances(info, callback) { +Wallet.prototype.updateBalances = function updateBalances(callback) { var self = this; - var details; if (this.db.listeners('balance').length === 0 && this.listeners('balance').length === 0) { @@ -1163,10 +1158,8 @@ Wallet.prototype.updateBalances = function updateBalances(info, callback) { if (err) return callback(err); - details = info.toDetails(); - - self.db.emit('balance', self.id, balance, details); - self.emit('balance', balance, details); + self.db.emit('balance', self.id, balance); + self.emit('balance', balance); return callback(); }); @@ -1186,7 +1179,7 @@ Wallet.prototype.handleTX = function handleTX(info, callback) { if (err) return callback(err); - self.updateBalances(info, callback); + self.updateBalances(callback); }); }; diff --git a/lib/bcoin/walletdb.js b/lib/bcoin/walletdb.js index 6885a60e..90dead00 100644 --- a/lib/bcoin/walletdb.js +++ b/lib/bcoin/walletdb.js @@ -1771,6 +1771,7 @@ function PathInfo(id, tx, table) { // Wallet-specific details cache. this._details = null; + this._json = null; if (tx) this.fromTX(tx, table); @@ -1886,6 +1887,17 @@ PathInfo.prototype.toDetails = function toDetails() { return details; }; +PathInfo.prototype.toJSON = function toJSON() { + var json = this._json; + + if (!json) { + json = this.toDetails().toJSON(); + this._json = json; + } + + return json; +}; + /* * Helpers */