txdb orphan storage.
This commit is contained in:
parent
2e0948faa5
commit
2c9756f38b
@ -11,6 +11,8 @@ var assert = bcoin.utils.assert;
|
|||||||
var EventEmitter = require('events').EventEmitter;
|
var EventEmitter = require('events').EventEmitter;
|
||||||
var DUMMY = new Buffer([0]);
|
var DUMMY = new Buffer([0]);
|
||||||
var pad32 = utils.pad32;
|
var pad32 = utils.pad32;
|
||||||
|
var BufferReader = require('./reader');
|
||||||
|
var BufferWriter = require('./writer');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TXPool
|
* TXPool
|
||||||
@ -89,8 +91,8 @@ TXPool.prototype.getMap = function getMap(tx, callback) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
TXPool.prototype.mapAddresses = function mapAddresses(address, callback) {
|
TXPool.prototype.mapAddresses = function mapAddresses(address, callback) {
|
||||||
var prefix = this.prefix + '/';
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
var prefix = this.prefix + '/';
|
||||||
var map = {};
|
var map = {};
|
||||||
var iter;
|
var iter;
|
||||||
|
|
||||||
@ -152,29 +154,28 @@ TXPool.prototype.mapAddresses = function mapAddresses(address, callback) {
|
|||||||
|
|
||||||
TXPool.prototype._addOrphan = function _addOrphan(key, hash, index, callback) {
|
TXPool.prototype._addOrphan = function _addOrphan(key, hash, index, callback) {
|
||||||
var prefix = this.prefix + '/';
|
var prefix = this.prefix + '/';
|
||||||
var orphans;
|
var p;
|
||||||
|
|
||||||
this.db.get(prefix + 'o/' + key, function(err, buf) {
|
this.db.get(prefix + 'o/' + key, function(err, buf) {
|
||||||
if (err && err.type !== 'NotFoundError')
|
if (err && err.type !== 'NotFoundError')
|
||||||
return callback(err);
|
return callback(err);
|
||||||
|
|
||||||
if (!buf)
|
p = new BufferWriter();
|
||||||
buf = new Buffer([]);
|
|
||||||
|
|
||||||
orphans = new Buffer(buf.length + 36);
|
if (buf)
|
||||||
utils.copy(buf, orphans, 0);
|
p.writeBytes(buf);
|
||||||
utils.copy(new Buffer(hash, 'hex'), orphans, buf.length);
|
|
||||||
utils.writeU32(orphans, index, buf.length + 32);
|
|
||||||
|
|
||||||
return callback(null, orphans);
|
p.writeHash(hash);
|
||||||
|
p.writeU32(index);
|
||||||
|
|
||||||
|
return callback(null, p.render());
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
TXPool.prototype._getOrphans = function _getOrphans(key, callback) {
|
TXPool.prototype._getOrphans = function _getOrphans(key, callback) {
|
||||||
var prefix = this.prefix + '/';
|
|
||||||
var self = this;
|
var self = this;
|
||||||
var orphans = [];
|
var prefix = this.prefix + '/';
|
||||||
var i;
|
var p, orphans;
|
||||||
|
|
||||||
this.db.get(prefix + 'o/' + key, function(err, buf) {
|
this.db.get(prefix + 'o/' + key, function(err, buf) {
|
||||||
if (err && err.type !== 'NotFoundError')
|
if (err && err.type !== 'NotFoundError')
|
||||||
@ -183,14 +184,18 @@ TXPool.prototype._getOrphans = function _getOrphans(key, callback) {
|
|||||||
if (!buf)
|
if (!buf)
|
||||||
return callback();
|
return callback();
|
||||||
|
|
||||||
for (i = 0; i < buf.length; i += 36) {
|
p = new BufferReader(buf);
|
||||||
if (i + 36 > buf.length)
|
orphans = [];
|
||||||
return callback(new Error('Incomplete orphan list.'));
|
|
||||||
|
|
||||||
orphans.push({
|
try {
|
||||||
hash: utils.toHex(buf.slice(i, i + 32)),
|
while (p.left()) {
|
||||||
index: utils.readU32(buf, i + 32)
|
orphans.push({
|
||||||
});
|
hash: p.readHash('hex'),
|
||||||
|
index: p.readU32()
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
return callback(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
utils.forEach(orphans, function(orphan, next) {
|
utils.forEach(orphans, function(orphan, next) {
|
||||||
@ -933,8 +938,8 @@ TXPool.prototype._unconfirm = function unconfirm(tx, map, callback, force) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
TXPool.prototype.getTXHashes = function getTXHashes(address, callback) {
|
TXPool.prototype.getTXHashes = function getTXHashes(address, callback) {
|
||||||
var prefix = this.prefix + '/';
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
var prefix = this.prefix + '/';
|
||||||
var txs = [];
|
var txs = [];
|
||||||
var iter;
|
var iter;
|
||||||
|
|
||||||
@ -996,8 +1001,8 @@ TXPool.prototype.getTXHashes = function getTXHashes(address, callback) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
TXPool.prototype.getPendingHashes = function getPendingHashes(address, callback) {
|
TXPool.prototype.getPendingHashes = function getPendingHashes(address, callback) {
|
||||||
var prefix = this.prefix + '/';
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
var prefix = this.prefix + '/';
|
||||||
var txs = [];
|
var txs = [];
|
||||||
var iter;
|
var iter;
|
||||||
|
|
||||||
@ -1060,8 +1065,8 @@ TXPool.prototype.getPendingHashes = function getPendingHashes(address, callback)
|
|||||||
};
|
};
|
||||||
|
|
||||||
TXPool.prototype.getCoinIDs = function getCoinIDs(address, callback) {
|
TXPool.prototype.getCoinIDs = function getCoinIDs(address, callback) {
|
||||||
var prefix = this.prefix + '/';
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
var prefix = this.prefix + '/';
|
||||||
var coins = [];
|
var coins = [];
|
||||||
var iter;
|
var iter;
|
||||||
|
|
||||||
|
|||||||
@ -20,7 +20,7 @@ var HEADER_SIZE = 12;
|
|||||||
* Master
|
* Master
|
||||||
*/
|
*/
|
||||||
|
|
||||||
workers.MAX_WORKERS = +process.env.BCOIN_WORKERS || 30;
|
workers.MAX_WORKERS = +process.env.BCOIN_WORKERS || 6;
|
||||||
workers.TIMEOUT = 10000;
|
workers.TIMEOUT = 10000;
|
||||||
workers.children = {};
|
workers.children = {};
|
||||||
workers.uid = 0;
|
workers.uid = 0;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user