mempool: preliminary work for persistent fees.
This commit is contained in:
parent
e7f850b4ba
commit
73210b3ed4
@ -439,8 +439,6 @@ function PolicyEstimator(network, logger) {
|
|||||||
this.map = {};
|
this.map = {};
|
||||||
this.mapSize = 0;
|
this.mapSize = 0;
|
||||||
this.bestHeight = 0;
|
this.bestHeight = 0;
|
||||||
|
|
||||||
this.init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -10,6 +10,7 @@ var layout = {
|
|||||||
binary: false,
|
binary: false,
|
||||||
R: 'R',
|
R: 'R',
|
||||||
V: 'V',
|
V: 'V',
|
||||||
|
F: 'F',
|
||||||
e: function e(hash) {
|
e: function e(hash) {
|
||||||
return 'e' + hex(hash);
|
return 'e' + hex(hash);
|
||||||
},
|
},
|
||||||
|
|||||||
@ -17,6 +17,7 @@ var layout = {
|
|||||||
binary: true,
|
binary: true,
|
||||||
R: new Buffer([0x52]),
|
R: new Buffer([0x52]),
|
||||||
V: new Buffer([0x76]),
|
V: new Buffer([0x76]),
|
||||||
|
F: new Buffer([0x46]),
|
||||||
e: function e(hash) {
|
e: function e(hash) {
|
||||||
var key = new Buffer(33);
|
var key = new Buffer(33);
|
||||||
key[0] = 0x65;
|
key[0] = 0x65;
|
||||||
|
|||||||
@ -27,6 +27,7 @@ var Network = require('../protocol/network');
|
|||||||
var encoding = require('../utils/encoding');
|
var encoding = require('../utils/encoding');
|
||||||
var layout = require('./layout');
|
var layout = require('./layout');
|
||||||
var LDB = require('../db/ldb');
|
var LDB = require('../db/ldb');
|
||||||
|
var Fees = require('./fees');
|
||||||
var VerifyError = errors.VerifyError;
|
var VerifyError = errors.VerifyError;
|
||||||
var VerifyResult = errors.VerifyResult;
|
var VerifyResult = errors.VerifyResult;
|
||||||
|
|
||||||
@ -106,7 +107,7 @@ util.inherits(Mempool, AsyncObject);
|
|||||||
|
|
||||||
Mempool.prototype._open = co(function* open() {
|
Mempool.prototype._open = co(function* open() {
|
||||||
var size = (this.options.maxSize / 1024).toFixed(2);
|
var size = (this.options.maxSize / 1024).toFixed(2);
|
||||||
var i, entries, entry;
|
var i, entries, entry, fees;
|
||||||
|
|
||||||
yield this.chain.open();
|
yield this.chain.open();
|
||||||
yield this.cache.open();
|
yield this.cache.open();
|
||||||
@ -123,6 +124,17 @@ Mempool.prototype._open = co(function* open() {
|
|||||||
entry = entries[i];
|
entry = entries[i];
|
||||||
this.updateAncestors(entry);
|
this.updateAncestors(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.fees) {
|
||||||
|
fees = yield this.cache.getFees();
|
||||||
|
|
||||||
|
if (fees) {
|
||||||
|
this.fees.inject(fees);
|
||||||
|
this.logger.info(
|
||||||
|
'Loaded mempool fee data (rate=%d).',
|
||||||
|
this.fees.estimateFee());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.logger.info('Mempool loaded (maxsize=%dkb).', size);
|
this.logger.info('Mempool loaded (maxsize=%dkb).', size);
|
||||||
@ -189,8 +201,11 @@ Mempool.prototype._addBlock = co(function* addBlock(block, txs) {
|
|||||||
entries.push(entry);
|
entries.push(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.fees)
|
if (this.fees) {
|
||||||
this.fees.processBlock(block.height, entries, this.chain.synced);
|
this.fees.processBlock(block.height, entries, this.chain.synced);
|
||||||
|
// Note: disable for now.
|
||||||
|
// this.cache.writeFees(this.fees);
|
||||||
|
}
|
||||||
|
|
||||||
// We need to reset the rejects filter periodically.
|
// We need to reset the rejects filter periodically.
|
||||||
// There may be a locktime in a TX that is now valid.
|
// There may be a locktime in a TX that is now valid.
|
||||||
@ -2299,6 +2314,7 @@ function MempoolCache(options) {
|
|||||||
|
|
||||||
this.logger = options.logger;
|
this.logger = options.logger;
|
||||||
this.chain = options.chain;
|
this.chain = options.chain;
|
||||||
|
this.network = options.network;
|
||||||
this.db = null;
|
this.db = null;
|
||||||
this.batch = null;
|
this.batch = null;
|
||||||
|
|
||||||
@ -2326,6 +2342,15 @@ MempoolCache.prototype.getTip = co(function* getTip() {
|
|||||||
return hash.toString('hex');
|
return hash.toString('hex');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
MempoolCache.prototype.getFees = co(function* getFees() {
|
||||||
|
var data = yield this.db.get(layout.F);
|
||||||
|
|
||||||
|
if (!data)
|
||||||
|
return;
|
||||||
|
|
||||||
|
return Fees.fromRaw(data, this.network);
|
||||||
|
});
|
||||||
|
|
||||||
MempoolCache.prototype.getEntries = function getEntries() {
|
MempoolCache.prototype.getEntries = function getEntries() {
|
||||||
return this.db.values({
|
return this.db.values({
|
||||||
gte: layout.e(encoding.ZERO_HASH),
|
gte: layout.e(encoding.ZERO_HASH),
|
||||||
@ -2380,6 +2405,13 @@ MempoolCache.prototype.sync = function sync(hash) {
|
|||||||
this.batch.put(layout.R, new Buffer(hash, 'hex'));
|
this.batch.put(layout.R, new Buffer(hash, 'hex'));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
MempoolCache.prototype.writeFees = function writeFees(fees) {
|
||||||
|
if (!this.db)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.batch.put(layout.F, fees.toRaw());
|
||||||
|
};
|
||||||
|
|
||||||
MempoolCache.prototype.clear = function clear() {
|
MempoolCache.prototype.clear = function clear() {
|
||||||
this.batch.clear();
|
this.batch.clear();
|
||||||
this.batch = this.db.batch();
|
this.batch = this.db.batch();
|
||||||
@ -2459,6 +2491,7 @@ MempoolCache.prototype.wipe = co(function* wipe() {
|
|||||||
|
|
||||||
batch.put(layout.V, encoding.U32(MempoolCache.VERSION));
|
batch.put(layout.V, encoding.U32(MempoolCache.VERSION));
|
||||||
batch.put(layout.R, new Buffer(this.chain.tip.hash, 'hex'));
|
batch.put(layout.R, new Buffer(this.chain.tip.hash, 'hex'));
|
||||||
|
batch.del(layout.F);
|
||||||
|
|
||||||
yield batch.write();
|
yield batch.write();
|
||||||
|
|
||||||
|
|||||||
@ -65,6 +65,7 @@ function FullNode(options) {
|
|||||||
|
|
||||||
// Fee estimation.
|
// Fee estimation.
|
||||||
this.fees = new Fees(this.network, this.logger);
|
this.fees = new Fees(this.network, this.logger);
|
||||||
|
this.fees.init();
|
||||||
|
|
||||||
// Mempool needs access to the chain.
|
// Mempool needs access to the chain.
|
||||||
this.mempool = new Mempool({
|
this.mempool = new Mempool({
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user