refactor.
This commit is contained in:
parent
9d19388162
commit
3e7f1cea42
@ -8,17 +8,19 @@
|
||||
/*
|
||||
* Database Layout:
|
||||
* R -> tip hash
|
||||
* e/[hash] -> entry
|
||||
* h/[hash] -> height
|
||||
* H/[height] -> hash
|
||||
* n/[hash] -> next hash
|
||||
* b/[hash] -> block
|
||||
* t/[hash] -> extended tx
|
||||
* c/[hash]/[index] -> coin
|
||||
* u/[hash] -> undo coins
|
||||
* T/[address]/[hash] -> dummy (tx by address)
|
||||
* C/[address]/[hash] -> dummy (coin by address)
|
||||
* q/[height] -> block hash to be pruned
|
||||
* e[hash] -> entry
|
||||
* h[hash] -> height
|
||||
* H[height] -> hash
|
||||
* n[hash] -> next hash
|
||||
* b[hash] -> block
|
||||
* t[hash] -> extended tx
|
||||
* c[hash] -> coins
|
||||
* u[hash] -> undo coins
|
||||
* T[addr-hash][hash] -> dummy (tx by address)
|
||||
* C[addr-hash][hash][index] -> dummy (coin by address)
|
||||
* A[witaddr-hash][hash] -> dummy (tx by address)
|
||||
* B[witaddr-hash][hash][index] -> dummy (coin by address)
|
||||
* q[height] -> block hash to be pruned
|
||||
*/
|
||||
|
||||
var bcoin = require('./env');
|
||||
@ -35,108 +37,120 @@ var Parser = bcoin.protocol.parser;
|
||||
|
||||
var layout = {
|
||||
R: function R() {
|
||||
var p = new BufferWriter();
|
||||
p.writeU8(0x52); // R
|
||||
var key = new BufferWriter();
|
||||
key.writeU8(0x52); // R
|
||||
key = key.render();
|
||||
if (utils.isBrowser)
|
||||
return p.render().toString('hex');
|
||||
return p.render();
|
||||
key = key.toString('hex');
|
||||
return key;
|
||||
},
|
||||
e: function e(hash) {
|
||||
var p = new BufferWriter();
|
||||
p.writeU8(0x65); // e
|
||||
p.writeHash(hash);
|
||||
var key = new BufferWriter();
|
||||
key.writeU8(0x65); // e
|
||||
key.writeHash(hash);
|
||||
key = key.render();
|
||||
if (utils.isBrowser)
|
||||
return p.render().toString('hex');
|
||||
return p.render();
|
||||
key = key.toString('hex');
|
||||
return key;
|
||||
},
|
||||
h: function h(hash) {
|
||||
var p = new BufferWriter();
|
||||
p.writeU8(0x68); // h
|
||||
p.writeHash(hash);
|
||||
var key = new BufferWriter();
|
||||
key.writeU8(0x68); // h
|
||||
key.writeHash(hash);
|
||||
key = key.render();
|
||||
if (utils.isBrowser)
|
||||
return p.render().toString('hex');
|
||||
return p.render();
|
||||
key = key.toString('hex');
|
||||
return key;
|
||||
},
|
||||
H: function H(height) {
|
||||
var p = new BufferWriter();
|
||||
p.writeU8(0x48); // H
|
||||
p.writeU32(height);
|
||||
var key = new BufferWriter();
|
||||
key.writeU8(0x48); // H
|
||||
key.writeU32(height);
|
||||
key = key.render();
|
||||
if (utils.isBrowser)
|
||||
return p.render().toString('hex');
|
||||
return p.render();
|
||||
key = key.toString('hex');
|
||||
return key;
|
||||
},
|
||||
n: function n(hash) {
|
||||
var p = new BufferWriter();
|
||||
p.writeU8(0x6e); // n
|
||||
p.writeHash(hash);
|
||||
var key = new BufferWriter();
|
||||
key.writeU8(0x6e); // n
|
||||
key.writeHash(hash);
|
||||
key = key.render();
|
||||
if (utils.isBrowser)
|
||||
return p.render().toString('hex');
|
||||
return p.render();
|
||||
key = key.toString('hex');
|
||||
return key;
|
||||
},
|
||||
b: function b(hash) {
|
||||
var p = new BufferWriter();
|
||||
p.writeU8(0x62); // b
|
||||
p.writeHash(hash);
|
||||
var key = new BufferWriter();
|
||||
key.writeU8(0x62); // b
|
||||
key.writeHash(hash);
|
||||
key = key.render();
|
||||
if (utils.isBrowser)
|
||||
return p.render().toString('hex');
|
||||
return p.render();
|
||||
key = key.toString('hex');
|
||||
return key;
|
||||
},
|
||||
t: function t(hash) {
|
||||
var p = new BufferWriter();
|
||||
p.writeU8(0x74); // t
|
||||
p.writeHash(hash);
|
||||
var key = new BufferWriter();
|
||||
key.writeU8(0x74); // t
|
||||
key.writeHash(hash);
|
||||
key = key.render();
|
||||
if (utils.isBrowser)
|
||||
return p.render().toString('hex');
|
||||
return p.render();
|
||||
key = key.toString('hex');
|
||||
return key;
|
||||
},
|
||||
c: function c(hash) {
|
||||
var p = new BufferWriter();
|
||||
p.writeU8(0x63); // c
|
||||
p.writeHash(hash);
|
||||
var key = new BufferWriter();
|
||||
key.writeU8(0x63); // c
|
||||
key.writeHash(hash);
|
||||
key = key.render();
|
||||
if (utils.isBrowser)
|
||||
return p.render().toString('hex');
|
||||
return p.render();
|
||||
key = key.toString('hex');
|
||||
return key;
|
||||
},
|
||||
u: function u(hash) {
|
||||
var p = new BufferWriter();
|
||||
p.writeU8(0x75); // u
|
||||
p.writeHash(hash);
|
||||
var key = new BufferWriter();
|
||||
key.writeU8(0x75); // u
|
||||
key.writeHash(hash);
|
||||
key = key.render();
|
||||
if (utils.isBrowser)
|
||||
return p.render().toString('hex');
|
||||
return p.render();
|
||||
key = key.toString('hex');
|
||||
return key;
|
||||
},
|
||||
q: function q(height) {
|
||||
var p = new BufferWriter();
|
||||
p.writeU8(0x71); // q
|
||||
p.writeU32(height);
|
||||
var key = new BufferWriter();
|
||||
key.writeU8(0x71); // q
|
||||
key.writeU32(height);
|
||||
key = key.render();
|
||||
if (utils.isBrowser)
|
||||
return p.render().toString('hex');
|
||||
return p.render();
|
||||
key = key.toString('hex');
|
||||
return key;
|
||||
},
|
||||
T: function T(address, hash) {
|
||||
var p = new BufferWriter();
|
||||
var key = new BufferWriter();
|
||||
if (address.length === 64)
|
||||
p.writeU8(0x41); // A
|
||||
key.writeU8(0x41); // A
|
||||
else
|
||||
p.writeU8(0x54); // T
|
||||
p.writeHash(address);
|
||||
p.writeHash(hash);
|
||||
key.writeU8(0x54); // T
|
||||
key.writeHash(address);
|
||||
key.writeHash(hash);
|
||||
key = key.render();
|
||||
if (utils.isBrowser)
|
||||
return p.render().toString('hex');
|
||||
return p.render();
|
||||
key = key.toString('hex');
|
||||
return key;
|
||||
},
|
||||
C: function C(address, hash, index) {
|
||||
var p = new BufferWriter();
|
||||
var key = new BufferWriter();
|
||||
if (address.length === 64)
|
||||
p.writeU8(0x42); // B
|
||||
key.writeU8(0x42); // B
|
||||
else
|
||||
p.writeU8(0x43); // C
|
||||
p.writeHash(address);
|
||||
p.writeHash(hash);
|
||||
p.writeU32(index);
|
||||
key.writeU8(0x43); // C
|
||||
key.writeHash(address);
|
||||
key.writeHash(hash);
|
||||
key.writeU32(index);
|
||||
key = key.render();
|
||||
if (utils.isBrowser)
|
||||
return p.render().toString('hex');
|
||||
return p.render();
|
||||
key = key.toString('hex');
|
||||
return key;
|
||||
},
|
||||
Cc: function Cc(key) {
|
||||
var hash, index;
|
||||
@ -1223,7 +1237,7 @@ ChainDB.prototype.getCoinsByAddress = function getCoinsByAddress(addresses, call
|
||||
return next();
|
||||
|
||||
self.db.iterate({
|
||||
gte: layout.C(address, constants.NULL_HASH, 0),
|
||||
gte: layout.C(address, constants.ZERO_HASH, 0),
|
||||
lte: layout.C(address, constants.MAX_HASH, 0xffffffff),
|
||||
keyAsBuffer: !utils.isBrowser,
|
||||
transform: layout.Cc
|
||||
@ -1273,7 +1287,7 @@ ChainDB.prototype.getTXByAddress = function getTXByAddress(addresses, callback)
|
||||
return next();
|
||||
|
||||
self.db.lookup({
|
||||
gte: layout.T(address, constants.NULL_HASH),
|
||||
gte: layout.T(address, constants.ZERO_HASH),
|
||||
lte: layout.T(address, constants.MAX_HASH),
|
||||
keyAsBuffer: !utils.isBrowser,
|
||||
transform: function(key) {
|
||||
|
||||
@ -588,6 +588,17 @@ exports.ZERO_HASH = new Buffer(
|
||||
'hex'
|
||||
);
|
||||
|
||||
/**
|
||||
* A hash of all 0xff.
|
||||
* @const {Buffer}
|
||||
* @default
|
||||
*/
|
||||
|
||||
exports.MAX_HASH = new Buffer(
|
||||
'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',
|
||||
'hex'
|
||||
);
|
||||
|
||||
/**
|
||||
* A hash of all zeroes.
|
||||
* @const {String}
|
||||
@ -597,15 +608,6 @@ exports.ZERO_HASH = new Buffer(
|
||||
exports.NULL_HASH =
|
||||
'0000000000000000000000000000000000000000000000000000000000000000';
|
||||
|
||||
/**
|
||||
* A hash of all 0xff.
|
||||
* @const {String}
|
||||
* @default
|
||||
*/
|
||||
|
||||
exports.MAX_HASH =
|
||||
'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff';
|
||||
|
||||
/**
|
||||
* BCoin version.
|
||||
* @const {String}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user