diff --git a/lib/bcoin/chaindb.js b/lib/bcoin/chaindb.js index 4acf4377..7b24fa7c 100644 --- a/lib/bcoin/chaindb.js +++ b/lib/bcoin/chaindb.js @@ -36,83 +36,43 @@ var Parser = bcoin.protocol.parser; var layout = { R: !utils.isBrowser - ? new Buffer([0x52]) // R + ? new Buffer([0x52]) : '52', e: function e(hash) { - var key = new Buffer(33); - key[0] = 0x65; // e - write(key, hash, 1); - if (utils.isBrowser) - key = key.toString('hex'); - return key; + return pair(0x65, hash); }, h: function h(hash) { - var key = new Buffer(33); - key[0] = 0x68; // h - write(key, hash, 1); - if (utils.isBrowser) - key = key.toString('hex'); - return key; + return pair(0x68, hash); }, H: function H(height) { - var key = new Buffer(5); - key[0] = 0x48; // H - key.writeUInt32LE(height, 1, true); - if (utils.isBrowser) - key = key.toString('hex'); - return key; + return ipair(0x48, height); }, n: function n(hash) { - var key = new Buffer(33); - key[0] = 0x6e; // n - write(key, hash, 1); - if (utils.isBrowser) - key = key.toString('hex'); - return key; + return pair(0x6e, hash); }, b: function b(hash) { - var key = new Buffer(33); - key[0] = 0x62; // b - write(key, hash, 1); - if (utils.isBrowser) - key = key.toString('hex'); - return key; + return pair(0x62, hash); }, t: function t(hash) { - var key = new Buffer(33); - key[0] = 0x74; // t - write(key, hash, 1); - if (utils.isBrowser) - key = key.toString('hex'); - return key; + return pair(0x74, hash); }, c: function c(hash) { - var key = new Buffer(33); - key[0] = 0x63; // c - write(key, hash, 1); - if (utils.isBrowser) - key = key.toString('hex'); - return key; + return pair(0x63, hash); }, u: function u(hash) { - var key = new Buffer(33); - key[0] = 0x75; // u - write(key, hash, 1); - if (utils.isBrowser) - key = key.toString('hex'); - return key; + return pair(0x75, hash); }, q: function q(height) { - var key = new Buffer(5); - key[0] = 0x71; // q - key.writeUInt32LE(height, 1, true); - if (utils.isBrowser) - key = key.toString('hex'); - return key; + return ipair(0x71, height); }, T: function T(address, hash) { + var len = address.length; var key; - if (address.length === 32 || address.length === 64) { + + if (typeof address === 'string') + len /= 2; + + if (len === 32) { key = new Buffer(65); key[0] = 0xab; // W + T write(key, address, 1); @@ -123,13 +83,20 @@ var layout = { write(key, address, 1); write(key, hash, 21); } + if (utils.isBrowser) key = key.toString('hex'); + return key; }, C: function C(address, hash, index) { + var len = address.length; var key; - if (address.length === 32 || address.length === 64) { + + if (typeof address === 'string') + len /= 2; + + if (len === 32) { key = new Buffer(69); key[0] = 0x9a; // W + C write(key, address, 1); @@ -142,8 +109,10 @@ var layout = { write(key, hash, 21); key.writeUInt32LE(index, 53, true); } + if (utils.isBrowser) key = key.toString('hex'); + return key; }, Cc: function Cc(key) { @@ -1539,6 +1508,24 @@ function write(data, str, off) { data.write(str, off, 'hex'); } +function pair(prefix, hash) { + var key = new Buffer(33); + key[0] = prefix; + write(key, hash, 1); + if (utils.isBrowser) + key = key.toString('hex'); + return key; +} + +function ipair(prefix, num) { + var key = new Buffer(5); + key[0] = prefix; + key.writeUInt32LE(num, 1, true); + if (utils.isBrowser) + key = key.toString('hex'); + return key; +} + /* * Expose */