UNPKG

@okxweb3/coin-bitcoin

Version:

@okxweb3/coin-bitcoin is a Bitcoin SDK for building Web3 wallets and applications. It supports BTC, BSV, DOGE, LTC, and TBTC, enabling private key management, transaction signing, address generation, and inscriptions like BRC-20, Runes, CAT, and Atomicals

79 lines 2.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.encodingLength = exports.decode = exports.encode = void 0; const 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(_number, buffer, offset) { checkUInt53(_number); if (!buffer) buffer = Buffer.allocUnsafe(encodingLength(_number)); if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance'); if (!offset) offset = 0; if (_number < 0xfd) { buffer.writeUInt8(_number, offset); Object.assign(encode, { bytes: 1 }); } else if (_number <= 0xffff) { buffer.writeUInt8(0xfd, offset); buffer.writeUInt16LE(_number, offset + 1); Object.assign(encode, { bytes: 3 }); } else if (_number <= 0xffffffff) { buffer.writeUInt8(0xfe, offset); buffer.writeUInt32LE(_number, offset + 1); Object.assign(encode, { bytes: 5 }); } else { buffer.writeUInt8(0xff, offset); buffer.writeUInt32LE(_number >>> 0, offset + 1); buffer.writeUInt32LE((_number / 0x100000000) | 0, offset + 5); Object.assign(encode, { bytes: 9 }); } return buffer; } exports.encode = encode; function decode(buffer, offset) { if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance'); if (!offset) offset = 0; const first = buffer.readUInt8(offset); if (first < 0xfd) { Object.assign(decode, { bytes: 1 }); return first; } else if (first === 0xfd) { Object.assign(decode, { bytes: 3 }); return buffer.readUInt16LE(offset + 1); } else if (first === 0xfe) { Object.assign(decode, { bytes: 5 }); return buffer.readUInt32LE(offset + 1); } else { Object.assign(decode, { bytes: 9 }); const lo = buffer.readUInt32LE(offset + 1); const hi = buffer.readUInt32LE(offset + 5); const _number = hi * 0x0100000000 + lo; checkUInt53(_number); return _number; } } exports.decode = decode; function encodingLength(_number) { checkUInt53(_number); return _number < 0xfd ? 1 : _number <= 0xffff ? 3 : _number <= 0xffffffff ? 5 : 9; } exports.encodingLength = encodingLength; //# sourceMappingURL=varint.js.map