fcoin/lib/blockchain/layout-browser.js
2017-02-28 13:04:55 -08:00

105 lines
1.9 KiB
JavaScript

/*!
* layout-browser.js - chaindb layout for browser.
* Copyright (c) 2014-2017, Christopher Jeffrey (MIT License).
* https://github.com/bcoin-org/bcoin
*/
'use strict';
var util = require('../utils/util');
var pad8 = util.pad8;
var pad32 = util.pad32;
var layout = {
binary: false,
R: 'R',
O: 'O',
V: 'v',
e: function e(hash) {
return 'e' + hex(hash);
},
h: function h(hash) {
return 'h' + hex(hash);
},
H: function H(height) {
return 'H' + pad32(height);
},
n: function n(hash) {
return 'n' + hex(hash);
},
p: function p(hash) {
return 'p' + hex(hash);
},
b: function b(hash) {
return 'b' + hex(hash);
},
t: function t(hash) {
return 't' + hex(hash);
},
c: function c(hash) {
return 'c' + hex(hash);
},
u: function u(hash) {
return 'u' + hex(hash);
},
v: function v(bit, hash) {
return 'v' + pad8(bit) + hex(hash);
},
vv: function vv(key) {
return [+key.slice(1, 4), key.slice(4, 36)];
},
T: function T(address, hash) {
address = hex(address);
if (address.length === 64)
return 'W' + address + hex(hash);
return 'T' + address + hex(hash);
},
C: function C(address, hash, index) {
address = hex(address);
if (address.length === 64)
return 'X' + address + hex(hash) + pad32(index);
return 'C' + address + hex(hash) + pad32(index);
},
pp: function aa(key) {
return key.slice(1, 65);
},
Cc: function Cc(key) {
var hash, index;
if (key.length === 139) {
hash = key.slice(65, 129);
index = +key.slice(129);
} else {
hash = key.slice(41, 105);
index = +key.slice(105);
}
return [hash, index];
},
Tt: function Tt(key) {
return key.length === 129
? key.slice(64)
: key.slice(41);
}
};
/*
* Helpers
*/
function hex(hash) {
if (typeof hash !== 'string')
hash = hash.toString('hex');
return hash;
}
/*
* Expose
*/
module.exports = layout;