lowlevelup: automatic dummies.
This commit is contained in:
parent
37da047a34
commit
cedc54436a
@ -27,7 +27,6 @@ const ChainEntry = require('./chainentry');
|
||||
const TXMeta = require('../primitives/txmeta');
|
||||
const U8 = encoding.U8;
|
||||
const U32 = encoding.U32;
|
||||
const DUMMY = Buffer.from([0]);
|
||||
|
||||
/**
|
||||
* The database backend for the {@link Chain} object.
|
||||
@ -1318,7 +1317,7 @@ ChainDB.prototype._save = async function save(entry, block, view) {
|
||||
|
||||
// Tip index.
|
||||
this.del(layout.p(entry.prevBlock));
|
||||
this.put(layout.p(hash), DUMMY);
|
||||
this.put(layout.p(hash), null);
|
||||
|
||||
// Update state caches.
|
||||
this.saveUpdates();
|
||||
@ -1520,7 +1519,7 @@ ChainDB.prototype.reset = async function reset(block) {
|
||||
|
||||
// Revert the tip index.
|
||||
this.del(layout.p(tip.hash));
|
||||
this.put(layout.p(tip.prevBlock), DUMMY);
|
||||
this.put(layout.p(tip.prevBlock), null);
|
||||
|
||||
// Remove all records (including
|
||||
// main-chain-only records).
|
||||
@ -1859,7 +1858,7 @@ ChainDB.prototype.indexTX = function indexTX(tx, view, entry, index) {
|
||||
if (this.options.indexAddress) {
|
||||
let hashes = tx.getHashes(view);
|
||||
for (let addr of hashes)
|
||||
this.put(layout.T(addr, hash), DUMMY);
|
||||
this.put(layout.T(addr, hash), null);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1885,7 +1884,7 @@ ChainDB.prototype.indexTX = function indexTX(tx, view, entry, index) {
|
||||
if (!addr)
|
||||
continue;
|
||||
|
||||
this.put(layout.C(addr, hash, i), DUMMY);
|
||||
this.put(layout.C(addr, hash, i), null);
|
||||
}
|
||||
};
|
||||
|
||||
@ -1919,7 +1918,7 @@ ChainDB.prototype.unindexTX = function unindexTX(tx, view) {
|
||||
if (!addr)
|
||||
continue;
|
||||
|
||||
this.put(layout.C(addr, prevout.hash, prevout.index), DUMMY);
|
||||
this.put(layout.C(addr, prevout.hash, prevout.index), null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -10,12 +10,14 @@
|
||||
const assert = require('assert');
|
||||
const Lock = require('../utils/lock');
|
||||
const co = require('../utils/co');
|
||||
|
||||
const LOW = Buffer.from([0x00]);
|
||||
const HIGH = Buffer.from([0xff]);
|
||||
|
||||
let VERSION_ERROR;
|
||||
|
||||
/**
|
||||
* Extremely low-level version of levelup.
|
||||
* The only levelup feature it provides is
|
||||
* error-wrapping.
|
||||
*
|
||||
* This avoids pulling in extra deps and
|
||||
* lowers memory usage.
|
||||
@ -288,6 +290,9 @@ LowlevelUp.prototype.get = function get(key) {
|
||||
*/
|
||||
|
||||
LowlevelUp.prototype.put = function put(key, value) {
|
||||
if (!value)
|
||||
value = LOW;
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!this.loaded) {
|
||||
reject(new Error('Database is closed.'));
|
||||
@ -396,10 +401,10 @@ LowlevelUp.prototype.approximateSize = function approximateSize(start, end) {
|
||||
|
||||
LowlevelUp.prototype.compactRange = function compactRange(start, end) {
|
||||
if (!start)
|
||||
start = Buffer.from([0x00]);
|
||||
start = LOW;
|
||||
|
||||
if (!end)
|
||||
end = Buffer.from([0xff]);
|
||||
end = HIGH;
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!this.loaded) {
|
||||
@ -564,8 +569,8 @@ LowlevelUp.prototype.dump = async function dump() {
|
||||
let records = {};
|
||||
|
||||
let items = await this.range({
|
||||
gte: Buffer.from([0x00]),
|
||||
lte: Buffer.from([0xff])
|
||||
gte: LOW,
|
||||
lte: HIGH
|
||||
});
|
||||
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
@ -678,7 +683,11 @@ function Batch(db) {
|
||||
*/
|
||||
|
||||
Batch.prototype.put = function put(key, value) {
|
||||
if (!value)
|
||||
value = LOW;
|
||||
|
||||
this.batch.put(key, value);
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
|
||||
@ -24,7 +24,6 @@ const Script = require('../script/script');
|
||||
const BlockMapRecord = records.BlockMapRecord;
|
||||
const OutpointMapRecord = records.OutpointMapRecord;
|
||||
const TXRecord = records.TXRecord;
|
||||
const DUMMY = Buffer.from([0]);
|
||||
|
||||
/**
|
||||
* TXDB
|
||||
@ -299,7 +298,7 @@ TXDB.prototype.saveCredit = async function saveCredit(credit, path) {
|
||||
await this.addOutpointMap(coin.hash, coin.index);
|
||||
|
||||
this.put(layout.c(coin.hash, coin.index), raw);
|
||||
this.put(layout.C(path.account, coin.hash, coin.index), DUMMY);
|
||||
this.put(layout.C(path.account, coin.hash, coin.index), null);
|
||||
|
||||
this.coinCache.push(key, raw);
|
||||
};
|
||||
@ -763,7 +762,7 @@ TXDB.prototype._add = async function add(tx, block) {
|
||||
// We need to index every spender
|
||||
// hash to detect "passive"
|
||||
// replace-by-fee.
|
||||
this.put(layout.r(hash), DUMMY);
|
||||
this.put(layout.r(hash), null);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -919,24 +918,24 @@ TXDB.prototype.insert = async function insert(wtx, block) {
|
||||
|
||||
// Save and index the transaction record.
|
||||
this.put(layout.t(hash), wtx.toRaw());
|
||||
this.put(layout.m(wtx.ps, hash), DUMMY);
|
||||
this.put(layout.m(wtx.ps, hash), null);
|
||||
|
||||
if (!block)
|
||||
this.put(layout.p(hash), DUMMY);
|
||||
this.put(layout.p(hash), null);
|
||||
else
|
||||
this.put(layout.h(height, hash), DUMMY);
|
||||
this.put(layout.h(height, hash), null);
|
||||
|
||||
// Do some secondary indexing for account-based
|
||||
// queries. This saves us a lot of time for
|
||||
// queries later.
|
||||
for (let account of details.accounts) {
|
||||
this.put(layout.T(account, hash), DUMMY);
|
||||
this.put(layout.M(account, wtx.ps, hash), DUMMY);
|
||||
this.put(layout.T(account, hash), null);
|
||||
this.put(layout.M(account, wtx.ps, hash), null);
|
||||
|
||||
if (!block)
|
||||
this.put(layout.P(account, hash), DUMMY);
|
||||
this.put(layout.P(account, hash), null);
|
||||
else
|
||||
this.put(layout.H(account, height, hash), DUMMY);
|
||||
this.put(layout.H(account, height, hash), null);
|
||||
}
|
||||
|
||||
// Update block records.
|
||||
@ -1105,12 +1104,12 @@ TXDB.prototype._confirm = async function confirm(wtx, block) {
|
||||
// updated. Also reindex for height.
|
||||
this.put(layout.t(hash), wtx.toRaw());
|
||||
this.del(layout.p(hash));
|
||||
this.put(layout.h(height, hash), DUMMY);
|
||||
this.put(layout.h(height, hash), null);
|
||||
|
||||
// Secondary indexing also needs to change.
|
||||
for (let account of details.accounts) {
|
||||
this.del(layout.P(account, hash));
|
||||
this.put(layout.H(account, height, hash), DUMMY);
|
||||
this.put(layout.H(account, height, hash), null);
|
||||
}
|
||||
|
||||
if (block) {
|
||||
@ -1431,12 +1430,12 @@ TXDB.prototype.disconnect = async function disconnect(wtx, block) {
|
||||
// block properties and reindex due
|
||||
// to the height change.
|
||||
this.put(layout.t(hash), wtx.toRaw());
|
||||
this.put(layout.p(hash), DUMMY);
|
||||
this.put(layout.p(hash), null);
|
||||
this.del(layout.h(height, hash));
|
||||
|
||||
// Secondary indexing also needs to change.
|
||||
for (let account of details.accounts) {
|
||||
this.put(layout.P(account, hash), DUMMY);
|
||||
this.put(layout.P(account, hash), null);
|
||||
this.del(layout.H(account, height, hash));
|
||||
}
|
||||
|
||||
|
||||
@ -38,7 +38,6 @@ const PathMapRecord = records.PathMapRecord;
|
||||
const OutpointMapRecord = records.OutpointMapRecord;
|
||||
const TXRecord = records.TXRecord;
|
||||
const U32 = encoding.U32;
|
||||
const DUMMY = Buffer.from([0]);
|
||||
|
||||
/**
|
||||
* WalletDB
|
||||
@ -1256,7 +1255,7 @@ WalletDB.prototype.savePath = async function savePath(wallet, path) {
|
||||
batch.put(layout.P(wid, hash), path.toRaw());
|
||||
|
||||
// Wallet ID + Account Index + Address Hash -> Dummy
|
||||
batch.put(layout.r(wid, path.account, hash), DUMMY);
|
||||
batch.put(layout.r(wid, path.account, hash), null);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Loading…
Reference in New Issue
Block a user