refactor.

This commit is contained in:
Christopher Jeffrey 2016-06-12 09:51:34 -07:00
parent 9d19388162
commit 3e7f1cea42
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
2 changed files with 102 additions and 86 deletions

View File

@ -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) {

View File

@ -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}