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