diff --git a/lib/bcoin/chaindb.js b/lib/bcoin/chaindb.js index 49f110cc..4eab67fe 100644 --- a/lib/bcoin/chaindb.js +++ b/lib/bcoin/chaindb.js @@ -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) { diff --git a/lib/bcoin/protocol/constants.js b/lib/bcoin/protocol/constants.js index 8fcf5481..dcecb689 100644 --- a/lib/bcoin/protocol/constants.js +++ b/lib/bcoin/protocol/constants.js @@ -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}