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

174 lines 5.87 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.BufferReader = exports.BufferWriter = exports.cloneBuffer = exports.reverseBuffer = exports.writeUInt64LE = exports.readUInt64LE = exports.varuint = void 0; const types = __importStar(require("./types")); const { typeforce } = types; const varuint = __importStar(require("./varuint")); exports.varuint = varuint; function verifuint(value, max) { if (typeof value !== 'number') throw new Error('cannot write a non-number as a number'); if (value < 0) throw new Error('specified a negative value for writing an unsigned value'); if (value > max) throw new Error('RangeError: value out of range'); if (Math.floor(value) !== value) throw new Error('value has a fractional component'); } function readUInt64LE(buffer, offset) { const a = buffer.readUInt32LE(offset); let b = buffer.readUInt32LE(offset + 4); b *= 0x100000000; verifuint(b + a, 0x001fffffffffffff); return b + a; } exports.readUInt64LE = readUInt64LE; function writeUInt64LE(buffer, value, offset) { verifuint(value, 0x001fffffffffffff); buffer.writeInt32LE(value & -1, offset); buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4); return offset + 8; } exports.writeUInt64LE = writeUInt64LE; function reverseBuffer(buffer) { if (buffer.length < 1) return buffer; let j = buffer.length - 1; let tmp = 0; for (let i = 0; i < buffer.length / 2; i++) { tmp = buffer[i]; buffer[i] = buffer[j]; buffer[j] = tmp; j--; } return buffer; } exports.reverseBuffer = reverseBuffer; function cloneBuffer(buffer) { const clone = Buffer.allocUnsafe(buffer.length); buffer.copy(clone); return clone; } exports.cloneBuffer = cloneBuffer; class BufferWriter { static withCapacity(size) { return new BufferWriter(Buffer.alloc(size)); } constructor(buffer, offset = 0) { this.buffer = buffer; this.offset = offset; typeforce(types.tuple(types.Buffer, types.UInt32), [buffer, offset]); } writeUInt8(i) { this.offset = this.buffer.writeUInt8(i, this.offset); } writeInt32(i) { this.offset = this.buffer.writeInt32LE(i, this.offset); } writeUInt32(i) { this.offset = this.buffer.writeUInt32LE(i, this.offset); } writeUInt64(i) { this.offset = writeUInt64LE(this.buffer, i, this.offset); } writeVarInt(i) { varuint.encode(i, this.buffer, this.offset); this.offset += varuint.encode.bytes; } writeSlice(slice) { if (this.buffer.length < this.offset + slice.length) { throw new Error('Cannot write slice out of bounds'); } this.offset += slice.copy(this.buffer, this.offset); } writeVarSlice(slice) { this.writeVarInt(slice.length); this.writeSlice(slice); } writeVector(vector) { this.writeVarInt(vector.length); vector.forEach((buf) => this.writeVarSlice(buf)); } end() { if (this.buffer.length === this.offset) { return this.buffer; } throw new Error(`buffer size ${this.buffer.length}, offset ${this.offset}`); } } exports.BufferWriter = BufferWriter; class BufferReader { constructor(buffer, offset = 0) { this.buffer = buffer; this.offset = offset; typeforce(types.tuple(types.Buffer, types.UInt32), [buffer, offset]); } readUInt8() { const result = this.buffer.readUInt8(this.offset); this.offset++; return result; } readInt32() { const result = this.buffer.readInt32LE(this.offset); this.offset += 4; return result; } readUInt32() { const result = this.buffer.readUInt32LE(this.offset); this.offset += 4; return result; } readUInt64() { const result = readUInt64LE(this.buffer, this.offset); this.offset += 8; return result; } readVarInt() { const vi = varuint.decode(this.buffer, this.offset); this.offset += varuint.decode.bytes; return vi; } readSlice(n) { if (this.buffer.length < this.offset + n) { throw new Error('Cannot read slice out of bounds'); } const result = this.buffer.slice(this.offset, this.offset + n); this.offset += n; return result; } readVarSlice() { return this.readSlice(this.readVarInt()); } readVector() { const count = this.readVarInt(); const vector = []; for (let i = 0; i < count; i++) vector.push(this.readVarSlice()); return vector; } } exports.BufferReader = BufferReader; //# sourceMappingURL=bufferutils.js.map