@coolwallet/btc
Version:
Coolwallet Bitcoin sdk
81 lines (71 loc) • 9.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.encodingLength = encodingLength;
exports.encode = encode;
exports.decode = decode;
// 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 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
);
}
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;
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy92YXJ1aW50VXRpbC50cyJdLCJuYW1lcyI6WyJNQVhfU0FGRV9JTlRFR0VSIiwiY2hlY2tVSW50NTMiLCJuIiwiUmFuZ2VFcnJvciIsImVuY29kaW5nTGVuZ3RoIiwibnVtIiwiZW5jb2RlIiwiYnVmIiwib2ZmIiwiYnVmZmVyIiwib2Zmc2V0IiwiQnVmZmVyIiwiYWxsb2NVbnNhZmUiLCJpc0J1ZmZlciIsIlR5cGVFcnJvciIsIndyaXRlVUludDgiLCJ3cml0ZVVJbnQxNkxFIiwid3JpdGVVSW50MzJMRSIsImRlY29kZSIsImZpcnN0IiwicmVhZFVJbnQ4IiwicmVhZFVJbnQxNkxFIiwicmVhZFVJbnQzMkxFIiwibG8iLCJoaSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBLElBQU1BLGdCQUFnQixHQUFHLGdCQUF6Qjs7QUFFQSxTQUFTQyxXQUFULENBQXFCQyxDQUFyQixFQUFnQztBQUM5QixNQUFJQSxDQUFDLEdBQUcsQ0FBSixJQUFTQSxDQUFDLEdBQUdGLGdCQUFiLElBQWlDRSxDQUFDLEdBQUcsQ0FBSixLQUFVLENBQS9DLEVBQWtELE1BQU0sSUFBSUMsVUFBSixDQUFlLG9CQUFmLENBQU47QUFDbkQ7O0FBRU0sU0FBU0MsY0FBVCxDQUF3QkYsQ0FBeEIsRUFBMkM7QUFDaEQsTUFBTUcsR0FBRyxHQUFHSCxDQUFaO0FBQ0FELEVBQUFBLFdBQVcsQ0FBQ0ksR0FBRCxDQUFYO0FBRUEsU0FDRTtBQUNBQSxJQUFBQSxHQUFHLEdBQUcsSUFBTixHQUFhLENBQWIsR0FBaUJBLEdBQUcsSUFBSSxNQUFQLEdBQWdCLENBQWhCLEdBQW9CQSxHQUFHLElBQUksVUFBUCxHQUFvQixDQUFwQixHQUF3QjtBQUYvRDtBQUlEOztBQUVNLFNBQVNDLE1BQVQsQ0FBZ0JKLENBQWhCLEVBQTJCSyxHQUEzQixFQUF5Q0MsR0FBekMsRUFBK0Q7QUFDcEUsTUFBTUgsR0FBRyxHQUFHSCxDQUFaO0FBQ0EsTUFBSU8sTUFBTSxHQUFHRixH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QUFNTCxHQUFHLEdBQUdtQixFQUFFLEdBQUcsWUFBTCxHQUFvQkQsRUFBaEM7QUFDQXRCLElBQUFBLFdBQVcsQ0FBQ0ksR0FBRCxDQUFYO0FBRUEsV0FBT0EsR0FBUDtBQUNEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuY29uc3QgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbmZ1bmN0aW9uIGNoZWNrVUludDUzKG46IG51bWJlcikge1xuICBpZiAobiA8IDAgfHwgbiA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgbiAlIDEgIT09IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCd2YWx1ZSBvdXQgb2YgcmFuZ2UnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kaW5nTGVuZ3RoKG46IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IG51bSA9IG47XG4gIGNoZWNrVUludDUzKG51bSk7XG5cbiAgcmV0dXJuIChcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICBudW0gPCAweGZkID8gMSA6IG51bSA8PSAweGZmZmYgPyAzIDogbnVtIDw9IDB4ZmZmZmZmZmYgPyA1IDogOVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlKG46IG51bWJlciwgYnVmPzogQnVmZmVyLCBvZmY/OiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBudW0gPSBuO1xuICBsZXQgYnVmZmVyID0gYnVmO1xuICBsZXQgb2Zmc2V0ID0gb2ZmO1xuICBjaGVja1VJbnQ1MyhudW0pO1xuXG4gIGlmICghYnVmZmVyKSBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoZW5jb2RpbmdMZW5ndGgobnVtKSk7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2J1ZmZlciBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7XG4gIGlmICghb2Zmc2V0KSBvZmZzZXQgPSAwO1xuXG4gIC8vIDggYml0XG4gIGlmIChudW0gPCAweGZkKSB7XG4gICAgYnVmZmVyLndyaXRlVUludDgobnVtLCBvZmZzZXQpO1xuICAgIC8vIGVuY29kZS5ieXRlcyA9IDE7XG5cbiAgICAvLyAxNiBiaXRcbiAgfSBlbHNlIGlmIChudW0gPD0gMHhmZmZmKSB7XG4gICAgYnVmZmVyLndyaXRlVUludDgoMHhmZCwgb2Zmc2V0KTtcbiAgICBidWZmZXIud3JpdGVVSW50MTZMRShudW0sIG9mZnNldCArIDEpO1xuICAgIC8vIGVuY29kZS5ieXRlcyA9IDM7XG5cbiAgICAvLyAzMiBiaXRcbiAgfSBlbHNlIGlmIChudW0gPD0gMHhmZmZmZmZmZikge1xuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KDB4ZmUsIG9mZnNldCk7XG4gICAgYnVmZmVyLndyaXRlVUludDMyTEUobnVtLCBvZmZzZXQgKyAxKTtcbiAgICAvLyBlbmNvZGUuYnl0ZXMgPSA1O1xuXG4gICAgLy8gNjQgYml0XG4gIH0gZWxzZSB7XG4gICAgYnVmZmVyLndyaXRlVUludDgoMHhmZiwgb2Zmc2V0KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgIGJ1ZmZlci53cml0ZVVJbnQzMkxFKG51bSA+Pj4gMCwgb2Zmc2V0ICsgMSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICBidWZmZXIud3JpdGVVSW50MzJMRSgobnVtIC8gMHgxMDAwMDAwMDApIHwgMCwgb2Zmc2V0ICsgNSk7XG4gICAgLy8gZW5jb2RlLmJ5dGVzID0gOTtcbiAgfVxuXG4gIHJldHVybiBidWZmZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGUoYnVmOiBCdWZmZXIsIG9mZj86IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IGJ1ZmZlciA9IGJ1ZjtcbiAgbGV0IG9mZnNldCA9IG9mZjtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmZmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignYnVmZmVyIG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtcbiAgaWYgKCFvZmZzZXQpIG9mZnNldCA9IDA7XG5cbiAgY29uc3QgZmlyc3QgPSBidWZmZXIucmVhZFVJbnQ4KG9mZnNldCk7XG5cbiAgLy8gOCBiaXRcbiAgaWYgKGZpcnN0IDwgMHhmZCkge1xuICAgIC8vIGRlY29kZS5ieXRlcyA9IDE7XG4gICAgcmV0dXJuIGZpcnN0O1xuXG4gICAgLy8gMTYgYml0XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVsc2UtcmV0dXJuXG4gIH0gZWxzZSBpZiAoZmlyc3QgPT09IDB4ZmQpIHtcbiAgICAvLyBkZWNvZGUuYnl0ZXMgPSAzO1xuICAgIHJldHVybiBidWZmZXIucmVhZFVJbnQxNkxFKG9mZnNldCArIDEpO1xuXG4gICAgLy8gMzIgYml0XG4gIH0gZWxzZSBpZiAoZmlyc3QgPT09IDB4ZmUpIHtcbiAgICAvLyBkZWNvZGUuYnl0ZXMgPSA1O1xuICAgIHJldHVybiBidWZmZXIucmVhZFVJbnQzMkxFKG9mZnNldCArIDEpO1xuXG4gICAgLy8gNjQgYml0XG4gIH0gZWxzZSB7XG4gICAgLy8gZGVjb2RlLmJ5dGVzID0gOTtcbiAgICBjb25zdCBsbyA9IGJ1ZmZlci5yZWFkVUludDMyTEUob2Zmc2V0ICsgMSk7XG4gICAgY29uc3QgaGkgPSBidWZmZXIucmVhZFVJbnQzMkxFKG9mZnNldCArIDUpO1xuICAgIGNvbnN0IG51bSA9IGhpICogMHgwMTAwMDAwMDAwICsgbG87XG4gICAgY2hlY2tVSW50NTMobnVtKTtcblxuICAgIHJldHVybiBudW07XG4gIH1cbn1cbiJdfQ==