walletdb: better pathinfo and details handling.
This commit is contained in:
parent
0a5fcad5e8
commit
e324e08bef
@ -1936,13 +1936,15 @@ TXDB.prototype.abandon = function abandon(hash, callback, force) {
|
||||
* Details
|
||||
*/
|
||||
|
||||
function Details(id, tx, table) {
|
||||
function Details(db, id, tx, table) {
|
||||
this.db = db;
|
||||
this.network = db.network;
|
||||
this.id = id;
|
||||
this.hash = tx.hash('hex');
|
||||
this.height = tx.height;
|
||||
this.block = tx.block;
|
||||
this.index = tx.index;
|
||||
this.confirmations = tx.getConfirmations();
|
||||
this.confirmations = tx.getConfirmations(this.db.height);
|
||||
this.fee = tx.hasCoins() ? tx.getFee() : 0;
|
||||
this.ts = tx.ts;
|
||||
this.ps = tx.ps;
|
||||
@ -1991,6 +1993,7 @@ Details.prototype._insert = function _insert(vector, target, table) {
|
||||
};
|
||||
|
||||
Details.prototype.toJSON = function toJSON() {
|
||||
var self = this;
|
||||
return {
|
||||
id: this.id,
|
||||
hash: utils.revHex(this.hash),
|
||||
@ -2002,10 +2005,10 @@ Details.prototype.toJSON = function toJSON() {
|
||||
fee: utils.btc(this.fee),
|
||||
confirmations: this.confirmations,
|
||||
inputs: this.inputs.map(function(input) {
|
||||
return input.toJSON();
|
||||
return input.toJSON(self.network);
|
||||
}),
|
||||
outputs: this.outputs.map(function(output) {
|
||||
return output.toJSON();
|
||||
return output.toJSON(self.network);
|
||||
}),
|
||||
tx: this.tx.toRaw().toString('hex')
|
||||
};
|
||||
@ -2021,11 +2024,11 @@ function DetailsMember() {
|
||||
this.path = null;
|
||||
}
|
||||
|
||||
DetailsMember.prototype.toJSON = function toJSON() {
|
||||
DetailsMember.prototype.toJSON = function toJSON(network) {
|
||||
return {
|
||||
value: utils.btc(this.value),
|
||||
address: this.address
|
||||
? this.address.toBase58()
|
||||
? this.address.toBase58(network)
|
||||
: null,
|
||||
path: this.path
|
||||
? this.path.toJSON()
|
||||
|
||||
@ -170,6 +170,8 @@ Wallet.prototype.init = function init(options, callback) {
|
||||
|
||||
self.account = account;
|
||||
|
||||
self.logger.info('Wallet initialized (%s).', self.id);
|
||||
|
||||
self.tx.open(callback);
|
||||
});
|
||||
});
|
||||
@ -194,6 +196,8 @@ Wallet.prototype.open = function open(callback) {
|
||||
|
||||
self.account = account;
|
||||
|
||||
self.logger.info('Wallet opened (%s).', self.id);
|
||||
|
||||
self.tx.open(callback);
|
||||
});
|
||||
};
|
||||
|
||||
@ -67,7 +67,6 @@ function WalletDB(options) {
|
||||
this.accountCache = new bcoin.lru(10000, 1);
|
||||
this.pathCache = new bcoin.lru(100000, 1);
|
||||
|
||||
// TODO: Move to walletdb.
|
||||
// Try to optimize for up to 1m addresses.
|
||||
// We use a regular bloom filter here
|
||||
// because we never want members to
|
||||
@ -978,8 +977,9 @@ WalletDB.prototype.fetchWallet = function fetchWallet(id, callback, handler) {
|
||||
*/
|
||||
|
||||
WalletDB.prototype.mapWallets = function mapWallets(tx, callback) {
|
||||
var self = this;
|
||||
var addresses = tx.getHashes('hex');
|
||||
var info;
|
||||
var wallets;
|
||||
|
||||
if (!this.testFilter(addresses))
|
||||
return callback();
|
||||
@ -991,9 +991,9 @@ WalletDB.prototype.mapWallets = function mapWallets(tx, callback) {
|
||||
if (!table)
|
||||
return callback();
|
||||
|
||||
info = PathInfo.map(tx, table);
|
||||
wallets = PathInfo.map(self, tx, table);
|
||||
|
||||
return callback(null, info);
|
||||
return callback(null, wallets);
|
||||
});
|
||||
};
|
||||
|
||||
@ -1004,6 +1004,7 @@ WalletDB.prototype.mapWallets = function mapWallets(tx, callback) {
|
||||
*/
|
||||
|
||||
WalletDB.prototype.getPathInfo = function getPathInfo(id, tx, callback) {
|
||||
var self = this;
|
||||
var addresses = tx.getHashes('hex');
|
||||
var info;
|
||||
|
||||
@ -1014,7 +1015,7 @@ WalletDB.prototype.getPathInfo = function getPathInfo(id, tx, callback) {
|
||||
if (!table)
|
||||
return callback();
|
||||
|
||||
info = new PathInfo(id, tx, table);
|
||||
info = new PathInfo(self, id, tx, table);
|
||||
|
||||
return callback(null, info);
|
||||
});
|
||||
@ -1026,13 +1027,13 @@ WalletDB.prototype.getPathInfo = function getPathInfo(id, tx, callback) {
|
||||
* @param {Function} callback - Returns [Error, {@link AddressTable}].
|
||||
*/
|
||||
|
||||
WalletDB.prototype.getTable = function getTable(address, callback) {
|
||||
WalletDB.prototype.getTable = function getTable(addresses, callback) {
|
||||
var self = this;
|
||||
var table = {};
|
||||
var count = 0;
|
||||
var i, keys, values;
|
||||
|
||||
utils.forEachSerial(address, function(address, next) {
|
||||
utils.forEachSerial(addresses, function(address, next) {
|
||||
self.getAddress(address, function(err, paths) {
|
||||
if (err)
|
||||
return next(err);
|
||||
@ -1454,7 +1455,13 @@ Path.prototype.inspect = function() {
|
||||
* Path Info
|
||||
*/
|
||||
|
||||
function PathInfo(id, tx, table) {
|
||||
function PathInfo(db, id, tx, table) {
|
||||
if (!(this instanceof PathInfo))
|
||||
return new PathInfo(db, id, tx, table);
|
||||
|
||||
// Reference to the walletdb.
|
||||
this.db = db;
|
||||
|
||||
// All relevant Accounts for
|
||||
// inputs and outputs (for database indexing).
|
||||
this.accounts = [];
|
||||
@ -1482,7 +1489,7 @@ function PathInfo(id, tx, table) {
|
||||
this.fromTX(tx, table);
|
||||
}
|
||||
|
||||
PathInfo.map = function map(tx, table) {
|
||||
PathInfo.map = function map(db, tx, table) {
|
||||
var hashes = Object.keys(table);
|
||||
var wallets = {};
|
||||
var info = [];
|
||||
@ -1504,7 +1511,7 @@ PathInfo.map = function map(tx, table) {
|
||||
|
||||
for (i = 0; i < wallets.length; i++) {
|
||||
id = wallets[i];
|
||||
info.push(new PathInfo(id, tx, table));
|
||||
info.push(new PathInfo(db, id, tx, table));
|
||||
}
|
||||
|
||||
return info;
|
||||
@ -1550,8 +1557,8 @@ PathInfo.prototype.fromTX = function fromTX(tx, table) {
|
||||
return this;
|
||||
};
|
||||
|
||||
PathInfo.fromTX = function fromTX(id, tx, table) {
|
||||
return new PathInfo(id).fromTX(tx, table);
|
||||
PathInfo.fromTX = function fromTX(db, id, tx, table) {
|
||||
return new PathInfo(db, id).fromTX(tx, table);
|
||||
};
|
||||
|
||||
/**
|
||||
@ -1585,7 +1592,7 @@ PathInfo.prototype.toDetails = function toDetails() {
|
||||
var details = this._details;
|
||||
|
||||
if (!details) {
|
||||
details = new TXDB.Details(this.id, this.tx, this.table);
|
||||
details = new TXDB.Details(this.db, this.id, this.tx, this.table);
|
||||
this._details = details;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user