From 46fbaf951472be6bc76ab62a8586ee7b90aae7d4 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Sun, 12 Jun 2016 11:16:36 -0700 Subject: [PATCH] optimize keys. --- lib/bcoin/chaindb.js | 116 +++++++++++++++++++++++-------------------- 1 file changed, 63 insertions(+), 53 deletions(-) diff --git a/lib/bcoin/chaindb.js b/lib/bcoin/chaindb.js index f604bce0..4acf4377 100644 --- a/lib/bcoin/chaindb.js +++ b/lib/bcoin/chaindb.js @@ -39,109 +39,109 @@ var layout = { ? new Buffer([0x52]) // R : '52', e: function e(hash) { - var key = new BufferWriter(); - key.writeU8(0x65); // e - key.writeHash(hash); - key = key.render(); + var key = new Buffer(33); + key[0] = 0x65; // e + write(key, hash, 1); if (utils.isBrowser) key = key.toString('hex'); return key; }, h: function h(hash) { - var key = new BufferWriter(); - key.writeU8(0x68); // h - key.writeHash(hash); - key = key.render(); + var key = new Buffer(33); + key[0] = 0x68; // h + write(key, hash, 1); if (utils.isBrowser) key = key.toString('hex'); return key; }, H: function H(height) { - var key = new BufferWriter(); - key.writeU8(0x48); // H - key.writeU32(height); - key = key.render(); + var key = new Buffer(5); + key[0] = 0x48; // H + key.writeUInt32LE(height, 1, true); if (utils.isBrowser) key = key.toString('hex'); return key; }, n: function n(hash) { - var key = new BufferWriter(); - key.writeU8(0x6e); // n - key.writeHash(hash); - key = key.render(); + var key = new Buffer(33); + key[0] = 0x6e; // n + write(key, hash, 1); if (utils.isBrowser) key = key.toString('hex'); return key; }, b: function b(hash) { - var key = new BufferWriter(); - key.writeU8(0x62); // b - key.writeHash(hash); - key = key.render(); + var key = new Buffer(33); + key[0] = 0x62; // b + write(key, hash, 1); if (utils.isBrowser) key = key.toString('hex'); return key; }, t: function t(hash) { - var key = new BufferWriter(); - key.writeU8(0x74); // t - key.writeHash(hash); - key = key.render(); + var key = new Buffer(33); + key[0] = 0x74; // t + write(key, hash, 1); if (utils.isBrowser) key = key.toString('hex'); return key; }, c: function c(hash) { - var key = new BufferWriter(); - key.writeU8(0x63); // c - key.writeHash(hash); - key = key.render(); + var key = new Buffer(33); + key[0] = 0x63; // c + write(key, hash, 1); if (utils.isBrowser) key = key.toString('hex'); return key; }, u: function u(hash) { - var key = new BufferWriter(); - key.writeU8(0x75); // u - key.writeHash(hash); - key = key.render(); + var key = new Buffer(33); + key[0] = 0x75; // u + write(key, hash, 1); if (utils.isBrowser) key = key.toString('hex'); return key; }, q: function q(height) { - var key = new BufferWriter(); - key.writeU8(0x71); // q - key.writeU32(height); - key = key.render(); + var key = new Buffer(5); + key[0] = 0x71; // q + key.writeUInt32LE(height, 1, true); if (utils.isBrowser) key = key.toString('hex'); return key; }, T: function T(address, hash) { - var key = new BufferWriter(); - if (address.length === 32 || address.length === 64) - key.writeU8(0xab); // W + T - else - key.writeU8(0x54); // T - key.writeHash(address); - key.writeHash(hash); - key = key.render(); + var key; + if (address.length === 32 || address.length === 64) { + key = new Buffer(65); + key[0] = 0xab; // W + T + write(key, address, 1); + write(key, hash, 33); + } else { + key = new Buffer(53); + key[0] = 0x54; // T + write(key, address, 1); + write(key, hash, 21); + } if (utils.isBrowser) key = key.toString('hex'); return key; }, C: function C(address, hash, index) { - var key = new BufferWriter(); - if (address.length === 32 || address.length === 64) - key.writeU8(0x9a); // W + C - else - key.writeU8(0x43); // C - key.writeHash(address); - key.writeHash(hash); - key.writeU32(index); - key = key.render(); + var key; + if (address.length === 32 || address.length === 64) { + key = new Buffer(69); + key[0] = 0x9a; // W + C + write(key, address, 1); + write(key, hash, 33); + key.writeUInt32LE(index, 65, true); + } else { + key = new Buffer(57); + key[0] = 0x43; // C + write(key, address, 1); + write(key, hash, 21); + key.writeUInt32LE(index, 53, true); + } if (utils.isBrowser) key = key.toString('hex'); return key; @@ -1529,6 +1529,16 @@ NullCache.prototype.get = function get(key) {}; NullCache.prototype.has = function has(key) {}; NullCache.prototype.reset = function reset() {}; +/* + * Helpers + */ + +function write(data, str, off) { + if (Buffer.isBuffer(str)) + return str.copy(data, off); + data.write(str, off, 'hex'); +} + /* * Expose */