wallet: move handleTX.

This commit is contained in:
Christopher Jeffrey 2016-08-12 14:05:17 -07:00
parent 09d8ee224c
commit 45867fffb6
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
3 changed files with 58 additions and 145 deletions

View File

@ -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);
};
/**

View File

@ -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.

View File

@ -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);