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:
* 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) {

View File

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