@coolwallet/ltc
Version:
Coolwallet LiteCoin sdk
81 lines (71 loc) • 9.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.encode = encode;
exports.decode = decode;
exports.encodingLength = encodingLength;
// Number.MAX_SAFE_INTEGER
var MAX_SAFE_INTEGER = 9007199254740991;
function checkUInt53(n) {
if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range');
}
function encode(n, buf, off) {
var num = n;
var buffer = buf;
var offset = off;
checkUInt53(num);
if (!buffer) buffer = Buffer.allocUnsafe(encodingLength(num));
if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance');
if (!offset) offset = 0; // 8 bit
if (num < 0xfd) {
buffer.writeUInt8(num, offset); // encode.bytes = 1;
// 16 bit
} else if (num <= 0xffff) {
buffer.writeUInt8(0xfd, offset);
buffer.writeUInt16LE(num, offset + 1); // encode.bytes = 3;
// 32 bit
} else if (num <= 0xffffffff) {
buffer.writeUInt8(0xfe, offset);
buffer.writeUInt32LE(num, offset + 1); // encode.bytes = 5;
// 64 bit
} else {
buffer.writeUInt8(0xff, offset); // eslint-disable-next-line no-bitwise
buffer.writeUInt32LE(num >>> 0, offset + 1); // eslint-disable-next-line no-bitwise
buffer.writeUInt32LE(num / 0x100000000 | 0, offset + 5); // encode.bytes = 9;
}
return buffer;
}
function decode(buf, off) {
var buffer = buf;
var offset = off;
if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance');
if (!offset) offset = 0;
var first = buffer.readUInt8(offset); // 8 bit
if (first < 0xfd) {
// decode.bytes = 1;
return first; // 16 bit
// eslint-disable-next-line no-else-return
} else if (first === 0xfd) {
// decode.bytes = 3;
return buffer.readUInt16LE(offset + 1); // 32 bit
} else if (first === 0xfe) {
// decode.bytes = 5;
return buffer.readUInt32LE(offset + 1); // 64 bit
} else {
// decode.bytes = 9;
var lo = buffer.readUInt32LE(offset + 1);
var hi = buffer.readUInt32LE(offset + 5);
var num = hi * 0x0100000000 + lo;
checkUInt53(num);
return num;
}
}
function encodingLength(n) {
var num = n;
checkUInt53(num);
return (// eslint-disable-next-line no-nested-ternary
num < 0xfd ? 1 : num <= 0xffff ? 3 : num <= 0xffffffff ? 5 : 9
);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy92YXJ1aW50LnRzIl0sIm5hbWVzIjpbIk1BWF9TQUZFX0lOVEVHRVIiLCJjaGVja1VJbnQ1MyIsIm4iLCJSYW5nZUVycm9yIiwiZW5jb2RlIiwiYnVmIiwib2ZmIiwibnVtIiwiYnVmZmVyIiwib2Zmc2V0IiwiQnVmZmVyIiwiYWxsb2NVbnNhZmUiLCJlbmNvZGluZ0xlbmd0aCIsImlzQnVmZmVyIiwiVHlwZUVycm9yIiwid3JpdGVVSW50OCIsIndyaXRlVUludDE2TEUiLCJ3cml0ZVVJbnQzMkxFIiwiZGVjb2RlIiwiZmlyc3QiLCJyZWFkVUludDgiLCJyZWFkVUludDE2TEUiLCJyZWFkVUludDMyTEUiLCJsbyIsImhpIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0EsSUFBTUEsZ0JBQWdCLEdBQUcsZ0JBQXpCOztBQUVBLFNBQVNDLFdBQVQsQ0FBcUJDLENBQXJCLEVBQWdDO0FBQy9CLE1BQUlBLENBQUMsR0FBRyxDQUFKLElBQVNBLENBQUMsR0FBR0YsZ0JBQWIsSUFBaUNFLENBQUMsR0FBRyxDQUFKLEtBQVUsQ0FBL0MsRUFBa0QsTUFBTSxJQUFJQyxVQUFKLENBQWUsb0JBQWYsQ0FBTjtBQUNsRDs7QUFFTSxTQUFTQyxNQUFULENBQWdCRixDQUFoQixFQUEyQkcsR0FBM0IsRUFBeUNDLEdBQXpDLEVBQStEO0FBQ3JFLE1BQU1DLEdBQUcsR0FBR0wsQ0FBWjtBQUNBLE1BQUlNLE1BQU0sR0FBR0gsR0FBYjtBQUNBLE1BQUlJLE1BQU0sR0FBR0gsR0FBYjtBQUNBTCxFQUFBQSxXQUFXLENBQUNNLEdBQUQsQ0FBWDtBQUVBLE1BQUksQ0FBQ0MsTUFBTCxFQUFhQSxNQUFNLEdBQUdFLE1BQU0sQ0FBQ0MsV0FBUCxDQUFtQkMsY0FBYyxDQUFDTCxHQUFELENBQWpDLENBQVQ7QUFDYixNQUFJLENBQUNHLE1BQU0sQ0FBQ0csUUFBUCxDQUFnQkwsTUFBaEIsQ0FBTCxFQUE4QixNQUFNLElBQUlNLFNBQUosQ0FBYyxrQ0FB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RyxJQUFOLEdBQWEsQ0FBYixHQUFpQkEsR0FBRyxJQUFJLE1BQVAsR0FBZ0IsQ0FBaEIsR0FBb0JBLEdBQUcsSUFBSSxVQUFQLEdBQW9CLENBQXBCLEdBQXdCO0FBRjlEO0FBSUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuY29uc3QgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbmZ1bmN0aW9uIGNoZWNrVUludDUzKG46IG51bWJlcikge1xuXHRpZiAobiA8IDAgfHwgbiA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgbiAlIDEgIT09IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCd2YWx1ZSBvdXQgb2YgcmFuZ2UnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZShuOiBudW1iZXIsIGJ1Zj86IEJ1ZmZlciwgb2ZmPzogbnVtYmVyKTogQnVmZmVyIHtcblx0Y29uc3QgbnVtID0gbjtcblx0bGV0IGJ1ZmZlciA9IGJ1Zjtcblx0bGV0IG9mZnNldCA9IG9mZjtcblx0Y2hlY2tVSW50NTMobnVtKTtcblxuXHRpZiAoIWJ1ZmZlcikgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGVuY29kaW5nTGVuZ3RoKG51bSkpO1xuXHRpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdidWZmZXIgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO1xuXHRpZiAoIW9mZnNldCkgb2Zmc2V0ID0gMDtcblxuXHQvLyA4IGJpdFxuXHRpZiAobnVtIDwgMHhmZCkge1xuXHRcdGJ1ZmZlci53cml0ZVVJbnQ4KG51bSwgb2Zmc2V0KTtcblx0XHQvLyBlbmNvZGUuYnl0ZXMgPSAxO1xuXG5cdC8vIDE2IGJpdFxuXHR9IGVsc2UgaWYgKG51bSA8PSAweGZmZmYpIHtcblx0XHRidWZmZXIud3JpdGVVSW50OCgweGZkLCBvZmZzZXQpO1xuXHRcdGJ1ZmZlci53cml0ZVVJbnQxNkxFKG51bSwgb2Zmc2V0ICsgMSk7XG5cdFx0Ly8gZW5jb2RlLmJ5dGVzID0gMztcblxuXHQvLyAzMiBiaXRcblx0fSBlbHNlIGlmIChudW0gPD0gMHhmZmZmZmZmZikge1xuXHRcdGJ1ZmZlci53cml0ZVVJbnQ4KDB4ZmUsIG9mZnNldCk7XG5cdFx0YnVmZmVyLndyaXRlVUludDMyTEUobnVtLCBvZmZzZXQgKyAxKTtcblx0XHQvLyBlbmNvZGUuYnl0ZXMgPSA1O1xuXG5cdC8vIDY0IGJpdFxuXHR9IGVsc2Uge1xuXHRcdGJ1ZmZlci53cml0ZVVJbnQ4KDB4ZmYsIG9mZnNldCk7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2Vcblx0XHRidWZmZXIud3JpdGVVSW50MzJMRShudW0gPj4+IDAsIG9mZnNldCArIDEpO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG5cdFx0YnVmZmVyLndyaXRlVUludDMyTEUoKG51bSAvIDB4MTAwMDAwMDAwKSB8IDAsIG9mZnNldCArIDUpO1xuXHRcdC8vIGVuY29kZS5ieXRlcyA9IDk7XG5cdH1cblxuXHRyZXR1cm4gYnVmZmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlKGJ1ZjogQnVmZmVyLCBvZmY/OiBudW1iZXIpOiBudW1iZXIge1xuXHRjb25zdCBidWZmZXIgPSBidWY7XG5cdGxldCBvZmZzZXQgPSBvZmY7XG5cdGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2J1ZmZlciBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7XG5cdGlmICghb2Zmc2V0KSBvZmZzZXQgPSAwO1xuXG5cdGNvbnN0IGZpcnN0ID0gYnVmZmVyLnJlYWRVSW50OChvZmZzZXQpO1xuXG5cdC8vIDggYml0XG5cdGlmIChmaXJzdCA8IDB4ZmQpIHtcblx0XHQvLyBkZWNvZGUuYnl0ZXMgPSAxO1xuXHRcdHJldHVybiBmaXJzdDtcblxuXHQvLyAxNiBiaXRcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVsc2UtcmV0dXJuXG5cdH0gZWxzZSBpZiAoZmlyc3QgPT09IDB4ZmQpIHtcblx0XHQvLyBkZWNvZGUuYnl0ZXMgPSAzO1xuXHRcdHJldHVybiBidWZmZXIucmVhZFVJbnQxNkxFKG9mZnNldCArIDEpO1xuXG5cdC8vIDMyIGJpdFxuXHR9IGVsc2UgaWYgKGZpcnN0ID09PSAweGZlKSB7XG5cdFx0Ly8gZGVjb2RlLmJ5dGVzID0gNTtcblx0XHRyZXR1cm4gYnVmZmVyLnJlYWRVSW50MzJMRShvZmZzZXQgKyAxKTtcblxuXHQvLyA2NCBiaXRcblx0fSBlbHNlIHtcblx0XHQvLyBkZWNvZGUuYnl0ZXMgPSA5O1xuXHRcdGNvbnN0IGxvID0gYnVmZmVyLnJlYWRVSW50MzJMRShvZmZzZXQgKyAxKTtcblx0XHRjb25zdCBoaSA9IGJ1ZmZlci5yZWFkVUludDMyTEUob2Zmc2V0ICsgNSk7XG5cdFx0Y29uc3QgbnVtID0gaGkgKiAweDAxMDAwMDAwMDAgKyBsbztcblx0XHRjaGVja1VJbnQ1MyhudW0pO1xuXG5cdFx0cmV0dXJuIG51bTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RpbmdMZW5ndGgobjogbnVtYmVyKTogbnVtYmVyIHtcblx0Y29uc3QgbnVtID0gbjtcblx0Y2hlY2tVSW50NTMobnVtKTtcblxuXHRyZXR1cm4gKFxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuXHRcdG51bSA8IDB4ZmQgPyAxIDogbnVtIDw9IDB4ZmZmZiA/IDMgOiBudW0gPD0gMHhmZmZmZmZmZiA/IDUgOiA5XG5cdCk7XG59XG4iXX0=