eth-compress 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/jit-compressor.ts"],
4
- "sourcesContent": ["import { LibZip } from 'solady';\nimport { MIN_BODY_SIZE } from './index';\n\nconst MAX_128_BIT = (1n << 128n) - 1n;\nconst MAX_256_BIT = (1n << 256n) - 1n;\n\nconst _normHex = (hex: string): string => hex.replace(/^0x/, '').toLowerCase();\n\nconst _hexToUint8Array = (hex: string): Uint8Array => {\n const normalized = _normHex(hex);\n const len = normalized.length;\n const bytes = new Uint8Array(len / 2);\n for (let i = 0; i < len; i += 2) {\n bytes[i / 2] = Number.parseInt(normalized.slice(i, i + 2), 16);\n }\n return bytes;\n};\n\nconst _uint8ArrayToHex = (bytes: Uint8Array): string => {\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += bytes[i].toString(16).padStart(2, '0');\n }\n return hex;\n};\n\nconst not = (a: bigint): bigint => ~a & MAX_256_BIT;\nconst and = (a: bigint, b: bigint): bigint => a & b & MAX_256_BIT;\nconst or = (a: bigint, b: bigint): bigint => (a | b) & MAX_256_BIT;\nconst xor = (a: bigint, b: bigint): bigint => (a ^ b) & MAX_256_BIT;\nconst shl = (shift: bigint, value: bigint): bigint => (value << shift) & MAX_256_BIT;\nconst shr = (shift: bigint, value: bigint): bigint => (value >> shift) & MAX_256_BIT;\nconst sub = (a: bigint, b: bigint): bigint => (a - b) & MAX_256_BIT;\nconst sigext = (byteSize: bigint, value: bigint): bigint => {\n const numBytes = Number(byteSize) + 1;\n const mask = (1n << BigInt(numBytes * 8)) - 1n;\n const signBit = 1n << BigInt(numBytes * 8 - 1);\n const maskedVal = value & mask;\n const extended = maskedVal & signBit ? maskedVal | (~mask & MAX_256_BIT) : maskedVal;\n return extended & MAX_256_BIT;\n};\n\n/**\n * Generates FastLZ (LZ77) decompressor bytecode. The generated code decompresses incoming calldata and forwards it to the target address.\n * @param address - Target contract address\n * @see {@link https://github.com/Vectorized/solady/blob/main/src/utils/LibZip.sol}\n * @pure\n */\n//! @__PURE__\nconst flzFwdBytecode = (address: string): string =>\n `0x365f73${_normHex(address)}815b838110602f575f80848134865af1503d5f803e3d5ff35b803590815f1a8060051c908115609857600190600783149285831a6007018118840218600201948383011a90601f1660081b0101808603906020811860208211021890815f5b80830151818a015201858110609257505050600201019201916018565b82906075565b6001929350829150019101925f5b82811060b3575001916018565b85851060c1575b60010160a6565b936001818192355f1a878501530194905060ba56`;\n\n/**\n * Generates RLE (run-length encoded) decompressor bytecode. The generated code decompresses incoming calldata and forwards it to the target address.\n * @param address - Target contract address\n * @see {@link https://github.com/Vectorized/solady/blob/main/src/utils/LibZip.sol}\n * @pure\n */\n//! @__PURE__\nconst rleFwdBytecode = (address: string): string =>\n `0x5f5f5b368110602d575f8083813473${_normHex(address)}5af1503d5f803e3d5ff35b600180820192909160031981019035185f1a8015604c57815301906002565b505f19815282820192607f9060031981019035185f1a818111156072575b160101906002565b838101368437606a56`;\n\nconst _jitDecompressor = function (calldata: string): string {\n const hex = _normHex(calldata);\n const originalBuf = _hexToUint8Array(hex);\n\n // Right\u2011align the 4\u2011byte selector in the first 32\u2011byte slot (offset 28),\n // so that everything after the selector is reconstructed on mostly\n // word\u2011aligned boundaries. This keeps the ABI words (and therefore most\n // calldata reconstruction) 32\u2011byte aligned in memory.\n // That way we avoid encoding offsets for writes (most of the time),\n const padding = 28;\n const buf = new Uint8Array(padding + originalBuf.length);\n buf.set(originalBuf, padding);\n\n const n = buf.length;\n\n let ops: number[] = [];\n let data: (number[] | null)[] = [];\n let stack: bigint[] = [];\n let trackedMemSize = 0;\n let mem = new Map<number, bigint>();\n let firstPass = true;\n const getStackIdx = (val: bigint): number => {\n let idx = stack.lastIndexOf(val);\n idx = idx === -1 ? -1 : stack.length - 1 - idx;\n return idx > 15 ? -1 : idx;\n };\n\n const opFreq = new Map<number, number>();\n const dataFreq = new Map<number[] | null, number>();\n const stackFreq = new Map<bigint, number>();\n const wordCache = new Map<string, number>();\n const wordCacheCost = new Map<string, number>();\n const roundUp32 = (x: number) => (x + 31) & ~31;\n\n let pushCounter = 0;\n const stackCnt = new Map<bigint, number>();\n const pop2 = (): [bigint, bigint] => [stack.pop()!, stack.pop()!];\n const ctr = <K>(m: Map<K, number>, k: K, delta: number) => m.set(k, (m.get(k) || 0) + delta);\n const inc = <K>(m: Map<K, number>, k: K) => ctr(m, k, 1);\n const pushOp = (op: number, d?: number[] | null) => {\n ops.push(op);\n inc(opFreq, op);\n const imm = d ?? null;\n data.push(imm);\n inc(dataFreq, imm);\n };\n const pushS = (v: bigint, freq: number = 1) => {\n stack.push(v);\n ctr(stackFreq, v, freq);\n ++pushCounter;\n stackCnt.set(v, pushCounter);\n };\n\n const trackMem = (offset: number, size: number) => {\n trackedMemSize = roundUp32(offset + size);\n };\n\n const addOp = (op: number, imm?: number[]) => {\n if (op === 0x36) {\n pushS(32n, 0);\n } else if (op === 0x59) {\n pushS(BigInt(trackedMemSize), 0);\n } else if (op === 0x0b) {\n // SIGNEXTEND\n const [byteSize, val] = pop2();\n pushS(sigext(byteSize, val), 1);\n } else if (op === 0x19) {\n // NOT\n const val = stack.pop()!;\n pushS(not(val), 0);\n } else if (op === 0x18) {\n // XOR\n const [a, b] = pop2();\n pushS(xor(a, b), 1);\n } else if (op === 0x16) {\n // AND\n const [a, b] = pop2();\n pushS(and(a, b), 1);\n } else if (op === 0x03) {\n // SUB\n const [a, b] = pop2();\n pushS(sub(a, b), 1);\n } else if (op === 0x1b) {\n // SHL\n let [shift, val] = pop2();\n pushS(shl(shift, val), 1);\n } else if (op === 0x1c) {\n // SHR\n let [shift, val] = pop2();\n pushS(shr(shift, val), 1);\n } else if (op === 0x17) {\n // OR\n let [a, b] = pop2();\n pushS(or(a, b), 1);\n } else if ((op >= 0x60 && op <= 0x7f) || op === 0x5f) {\n // PUSH\n let v = 0n;\n for (const b of imm || []) v = (v << 8n) | BigInt(b);\n if (v == 224n) {\n pushS(v, 0);\n pushOp(0x30); // ADDRESS\n return;\n }\n if (v == 32n) {\n pushS(v, 0);\n pushOp(0x36); // ADDRESS\n return;\n }\n if (v === BigInt(trackedMemSize)) {\n pushS(v, 0);\n pushOp(0x59); // MemSize\n return;\n }\n const idx = getStackIdx(v);\n if (idx !== -1 && op != 0x5f) {\n let pushCtr = firstPass ? 1 : -1;\n pushS(v, pushCtr);\n pushOp(128 + idx);\n return;\n }\n if (v == MAX_256_BIT) {\n pushS(v);\n pushOp(0x5f); // 0\n pushOp(0x19); // NOT\n return;\n }\n pushS(v);\n } else if (op === 0x51) {\n // MLOAD\n const k = Number(stack.pop()!);\n pushS(mem.has(k) ? mem.get(k)! : 0n);\n } else if (op === 0x52) {\n // MSTORE\n const [offset, value] = pop2();\n const k = Number(offset);\n mem.set(k, value & MAX_256_BIT);\n trackMem(k, 32);\n } else if (op === 0x53) {\n // MSTORE8\n const [offset, _] = pop2();\n trackMem(Number(offset), 1);\n } else if (op === 0xf3) {\n // RETURN\n pop2();\n }\n pushOp(op, imm || null);\n };\n const op = (opcode: number) => addOp(opcode);\n const pushN = (value: number | bigint) => {\n if (value > 0 && value === trackedMemSize) return addOp(0x59);\n if (value == 32n) return addOp(0x36);\n if (!value) return addOp(0x5f, undefined); // PUSH0\n let v = BigInt(value);\n let bytes: number[] = [];\n while (v) {\n bytes.unshift(Number(v & 0xffn));\n v >>= 8n;\n }\n return addOp(0x5f + bytes.length, bytes);\n };\n const pushB = (buf: Uint8Array) => addOp(0x5f + buf.length, Array.from(buf));\n const cntWords = (hex: string, wordHex: string) =>\n (hex.match(new RegExp(wordHex, 'g')) || []).length;\n\n // Rough cost model\n const estShlCost = (seg: Array<{ s: number; e: number }>) => {\n let cost = 0;\n let first = true;\n for (const { s, e } of seg) {\n cost += 1 + e - s + 1; // PUSH segLen bytes\n if (31 - e > 0) cost += 1 /* PUSH1 */ + 1 /* shift byte */ + 1 /* SHL */;\n if (!first) cost += 1; // OR\n first = false;\n }\n return cost;\n };\n\n type PlanStep =\n | { t: 'num'; v: number | bigint }\n | { t: 'bytes'; b: Uint8Array }\n | { t: 'op'; o: number };\n\n const plan: PlanStep[] = [];\n const emitPushN = (v: number | bigint) => (plan.push({ t: 'num', v }), pushN(v));\n const emitPushB = (b: Uint8Array) => (plan.push({ t: 'bytes', b }), pushB(b));\n const emitOp = (o: number) => (plan.push({ t: 'op', o }), op(o));\n pushN(1n);\n // First pass: decide how to build each 32-byte word without emitting bytecode\n const _stack = [1n, 32n, 224n];\n for (let base = 0; base < n; base += 32) {\n const word = new Uint8Array(32);\n word.set(buf.slice(base, Math.min(base + 32, n)), 0);\n\n const seg: Array<{ s: number; e: number }> = [];\n for (let i = 0; i < 32; ) {\n while (i < 32 && word[i] === 0) ++i;\n if (i >= 32) break;\n const s = i;\n while (i < 32 && word[i] !== 0) ++i;\n seg.push({ s, e: i - 1 });\n }\n\n if (!seg.length) continue;\n\n // Decide whether to build this word via SHL/OR or as a single literal word\n const literal = word.slice(seg[0].s);\n const literalCost = 1 + literal.length;\n let literalVal = 0n;\n for (const b of literal) literalVal = (literalVal << 8n) | BigInt(b);\n const baseBytes = Math.ceil(Math.log2(base + 1) / 8);\n const wordHex = _uint8ArrayToHex(word);\n const shlCost = estShlCost(seg);\n\n const inStack = _stack.includes(literalVal);\n if (inStack) {\n emitPushB(literal);\n emitPushN(base);\n emitOp(0x52); // MSTORE\n continue;\n }\n if (literalCost > 8) {\n if (wordCache.has(wordHex)) {\n if (literalCost > wordCacheCost.get(wordHex)! + baseBytes) {\n emitPushN(wordCache.get(wordHex)!);\n emitOp(0x51);\n emitPushN(base);\n emitOp(0x52); // MSTORE\n continue;\n }\n } else if (wordCacheCost.get(wordHex) != -1) {\n const reuseCost = baseBytes + 3;\n const freq = cntWords(hex, wordHex);\n wordCacheCost.set(wordHex, freq * 32 > freq * reuseCost ? reuseCost : -1);\n wordCache.set(wordHex, base);\n }\n }\n\n const byte8s = seg.every(({ s, e }) => s === e);\n const byte8sCost = seg.length * 3; // each: PUSH1 (value), PUSH1 (offset), MSTORE8\n if (inStack) {\n emitPushB(literal);\n } else {\n // Aggregate all costs\n let bestCost = literalCost;\n let bestEmit: (() => void) | null = () => {\n emitPushB(literal);\n };\n if (literalVal == MAX_256_BIT) {\n bestCost = 2;\n bestEmit = () => {\n emitPushN(notVal);\n emitOp(0x19);\n };\n }\n // Try NOT: PUSH<n> ~val, NOT\n const notVal = not(literalVal);\n let notBytes = 0;\n let tmp = notVal;\n while (tmp > 0n) {\n ++notBytes;\n tmp >>= 8n;\n }\n notBytes = 1 + notBytes;\n if (notBytes === 0) notBytes;\n const notCost = notBytes + 1; // PUSH<n> + NOT\n if (notCost < bestCost) {\n bestCost = notCost;\n bestEmit = () => {\n emitPushN(notVal);\n emitOp(0x19);\n };\n }\n\n // Try SUB: PUSH1 0, PUSH<n> val, SUB\n const subVal = sub(0n, literalVal);\n let subBytes = 0;\n tmp = subVal;\n while (tmp > 0n) {\n ++subBytes;\n tmp >>= 8n;\n }\n if (subBytes === 0) subBytes = 1;\n if (_stack.includes(subVal)) subBytes = 1;\n const subCost = 1 + (1 + subBytes) + 1; // PUSH0 + PUSH<n> + SUB\n if (subCost < bestCost) {\n bestCost = subCost;\n bestEmit = () => {\n emitPushN(0);\n emitPushN(subVal);\n emitOp(0x03);\n };\n }\n\n // Try SIGNEXTEND: PUSH<n> truncated, PUSH1 byteSize, SIGNEXTEND\n for (let numBytes = 1; numBytes < literal.length; numBytes++) {\n const mask = (1n << BigInt(numBytes * 8)) - 1n;\n const truncated = literalVal & mask;\n const extended = sigext(BigInt(numBytes - 1), truncated);\n if (extended === literalVal && (truncated & (1n << BigInt(numBytes * 8 - 1))) !== 0n) {\n let trueByteCost = 1 + numBytes;\n if (_stack.includes(BigInt(extended))) trueByteCost = 1;\n let signCost = trueByteCost + (1 + 1) + 1; // PUSH<n> + PUSH1 + SIGNEXTEND\n if (signCost < bestCost) {\n bestCost = signCost;\n bestEmit = () => {\n emitPushN(truncated);\n emitPushN(numBytes - 1);\n emitOp(0x0b);\n };\n }\n break;\n }\n }\n\n // Try SHIFT+NOT: PUSH<n> val, PUSH1 shift, SHL, NOT\n for (let shiftBits = 8; shiftBits <= 248; shiftBits += 8) {\n const shifted = shr(BigInt(shiftBits), literalVal);\n if (shifted === 0n) break;\n\n const notShifted = not(shifted);\n const reconstructed = shl(BigInt(shiftBits), notShifted);\n\n if (reconstructed === literalVal) {\n let shiftedBytes = 0;\n let tmpShifted = notShifted;\n while (tmpShifted > 0n) {\n ++shiftedBytes;\n tmpShifted >>= 8n;\n }\n if (shiftedBytes === 0) shiftedBytes = 1;\n const shiftNotCost = 1 + shiftedBytes + 2 + 1 + 1; // PUSH<n> + PUSH1 + SHL + NOT\n if (shiftNotCost < bestCost) {\n bestCost = shiftNotCost;\n bestEmit = () => {\n emitPushN(notShifted);\n emitPushN(shiftBits);\n emitOp(0x1b); // SHL\n emitOp(0x19); // NOT\n };\n }\n }\n }\n\n if (byte8s && byte8sCost < bestCost && byte8sCost <= shlCost) {\n for (const { s } of seg) {\n emitPushN(word[s]);\n emitPushN(base + s);\n emitOp(0x53); // MSTORE8\n }\n continue; // Skip the single MSTORE at the end\n } else if (shlCost < bestCost) {\n // Use SHL/OR\n let first = true;\n for (const { s, e } of seg) {\n const suffix0s = 31 - e;\n emitPushB(word.slice(s, e + 1));\n if (suffix0s > 0) {\n emitPushN(suffix0s * 8);\n emitOp(0x1b); // SHL\n }\n if (!first) emitOp(0x17); // OR\n first = false;\n }\n } else {\n bestEmit!();\n }\n }\n emitPushN(base);\n emitOp(0x52); // MSTORE\n }\n\n ops = [];\n data = [];\n stack = [];\n trackedMemSize = 0;\n mem = new Map();\n // Pre 2nd pass. Push most frequent literals into stack.\n Array.from(stackFreq.entries())\n .filter(([val, freq]) => freq > 1 && val > 1n && val !== 32n && val !== 224n)\n .sort((a, b) => stackCnt.get(b[0])! - stackCnt.get(a[0])!)\n .filter(([val, _]) => {\n return typeof val === 'number' ? BigInt(val) : val <= MAX_128_BIT;\n })\n .slice(0, 15)\n .forEach(([val, _]) => {\n pushN(val);\n });\n pushN(1n);\n // Second pass: emit ops and track mem/stack\n for (const step of plan) {\n if (step.t === 'num') pushN(step.v);\n else if (step.t === 'bytes') pushB(step.b);\n else if (step.t === 'op') op(step.o);\n }\n\n // CALL stack layout (top to bottom): gas, address, value, argsOffset, argsSize, retOffset, retSize\n //\n // Opcodes breakdown:\n // - 0x5f5f: PUSH0 PUSH0 (retSize=0, retOffset=0)\n // - pushN(originalBuf.length): argsSize = actual data length\n // - pushN(padding): argsOffset (skip leading alignment bytes)\n // - 0x34: CALLVALUE (value)\n // - 0x5f35: PUSH0 CALLDATALOAD (address from calldata[0])\n // - 0x5a: GAS (remaining gas)\n // - 0xf1: CALL\n //\n // RETURNDATACOPY(destOffset=0, offset=0, length=RETURNDATASIZE):\n // - 0x3d5f5f3e: RETURNDATASIZE PUSH0 PUSH0 RETURNDATACOPY\n //\n // RETURN(offset=0, size=RETURNDATASIZE):\n // - 0x3d5ff3: RETURNDATASIZE PUSH0 RETURN\n\n op(0x5f); // PUSH0 (retSize)\n op(0x5f); // PUSH0 (retOffset)\n pushN(originalBuf.length); // argsSize = actual data length\n pushN(padding); // argsOffset = padding\n\n const out: number[] = [];\n for (let i = 0; i < ops.length; ++i) {\n out.push(ops[i]);\n if (ops[i] >= 0x60 && ops[i] <= 0x7f && data[i]) out.push(...data[i]!);\n }\n\n // - CALLVALUE, load target address from calldata[0], GAS, CALL\n // - RETURNDATACOPY(0, 0, RETURNDATASIZE)\n // - RETURN(0, RETURNDATASIZE)\n return '0x' + _uint8ArrayToHex(new Uint8Array(out)) + '345f355af13d5f5f3e3d5ff3';\n};\n\nconst DECOMPRESSOR_ADDRESS = '0x00000000000000000000000000000000000000e0';\n\n/**\n * Compresses eth_call payload using JIT, FastLZ (FLZ), or calldata RLE (CD) compression.\n * Auto-selects best algorithm if not specified. Only compresses if >800 bytes and beneficial.\n *\n * Only applies compression to calls that:\n * - target the latest block ID\n * - have no state overrides\n * - have a target address and calldata\n * - have no other properties (nonce, gas, etc.)\n *\n * @param payload - eth_call RPC payload\n * @param alg - 'jit' | 'flz' | 'cd' | undefined (auto)\n * @returns (un)compressed eth_call payload\n * @pure\n */\n//! @__PURE__\nexport const compress_call = function (payload: any, alg?: string): any {\n const { method, params } = payload;\n if (method && method !== 'eth_call') return payload;\n const txObj = params?.[0] || payload;\n const blockParam = params?.[1];\n const overrides = params?.[2];\n\n // Validation\n if (\n (blockParam && blockParam !== 'latest') ||\n (overrides && Object.keys(overrides).length > 0) ||\n !txObj?.to ||\n !txObj?.data ||\n Object.keys(txObj).some((k) => !['to', 'data', 'from'].includes(k))\n ) {\n return payload;\n }\n\n const originalSize = txObj.data.length;\n if (originalSize < MIN_BODY_SIZE) return payload;\n\n const inputData = '0x' + _normHex(txObj.data);\n const to = txObj.to;\n\n // Determine compression method and generate bytecode/calldata\n let bytecode: string;\n let calldata: string;\n\n if (alg === 'jit' || (!alg && (originalSize < 3000 || originalSize >= 8000))) {\n bytecode = _jitDecompressor(inputData);\n calldata = '0x' + _normHex(to).padStart(64, '0');\n } else {\n // Need FLZ and/or CD compression\n const flzData = alg === 'flz' || !alg ? LibZip.flzCompress(inputData) : null;\n const cdData = alg === 'cd' || (!alg && flzData) ? LibZip.cdCompress(inputData) : null;\n\n // Pick the best or requested one\n const useFlz =\n alg === 'flz' || (!alg && flzData && (!cdData || flzData.length < cdData.length));\n\n if (useFlz) {\n calldata = flzData!;\n bytecode = flzFwdBytecode(to);\n } else {\n calldata = cdData!;\n bytecode = rleFwdBytecode(to);\n }\n }\n\n // Skip if not beneficial\n if (bytecode.length + calldata.length >= originalSize) return payload;\n\n return {\n ...payload,\n params: [\n { ...txObj, to: DECOMPRESSOR_ADDRESS, data: calldata },\n blockParam || 'latest',\n { ...overrides, [DECOMPRESSOR_ADDRESS]: { code: bytecode } },\n ],\n };\n};\n"],
5
- "mappings": "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",
6
- "names": ["jit_compressor_exports", "__export", "compress_call", "__toCommonJS", "import_solady", "import_index", "MAX_128_BIT", "MAX_256_BIT", "_normHex", "hex", "_hexToUint8Array", "normalized", "len", "bytes", "i", "_uint8ArrayToHex", "not", "a", "and", "b", "or", "xor", "shl", "shift", "value", "shr", "sub", "sigext", "byteSize", "numBytes", "mask", "signBit", "maskedVal", "flzFwdBytecode", "address", "rleFwdBytecode", "_jitDecompressor", "calldata", "originalBuf", "padding", "buf", "n", "ops", "data", "stack", "trackedMemSize", "mem", "firstPass", "getStackIdx", "val", "idx", "opFreq", "dataFreq", "stackFreq", "wordCache", "wordCacheCost", "roundUp32", "x", "pushCounter", "stackCnt", "pop2", "ctr", "m", "k", "delta", "inc", "pushOp", "op", "d", "imm", "pushS", "v", "freq", "trackMem", "offset", "size", "addOp", "_", "opcode", "pushN", "pushB", "cntWords", "wordHex", "estShlCost", "seg", "cost", "first", "s", "e", "plan", "emitPushN", "emitPushB", "emitOp", "o", "_stack", "base", "word", "literal", "literalCost", "literalVal", "baseBytes", "shlCost", "inStack", "reuseCost", "byte8s", "byte8sCost", "bestCost", "bestEmit", "notVal", "notBytes", "tmp", "notCost", "subVal", "subBytes", "subCost", "truncated", "extended", "trueByteCost", "signCost", "shiftBits", "shifted", "notShifted", "shiftedBytes", "tmpShifted", "shiftNotCost", "suffix0s", "step", "out", "DECOMPRESSOR_ADDRESS", "payload", "alg", "method", "params", "txObj", "blockParam", "overrides", "originalSize", "inputData", "to", "bytecode", "flzData", "cdData"]
3
+ "sources": ["../../src/jit-compressor.ts", "../../src/compiler/constants.ts", "../../src/compiler/opcodes.ts", "../../src/compiler/utils.ts", "../../src/compiler/jit.ts", "../../src/contracts.ts"],
4
+ "sourcesContent": ["import { LibZip } from 'solady';\nimport { _jitDecompressor } from './compiler';\nimport { _normHex } from './compiler/utils';\nimport { flzFwdBytecode, rleFwdBytecode } from './contracts';\nimport { MIN_BODY_SIZE } from './index';\n/**\n * Compresses eth_call payload using JIT, FastLZ (FLZ), or calldata RLE (CD) compression.\n * Auto-selects best algorithm if not specified. Only compresses if >800 bytes and beneficial.\n *\n * Only applies compression to calls that:\n * - have no state overrides\n * - have a target address and calldata\n * - have no other properties (nonce, gas, etc.)\n *\n * @param payload - eth_call RPC payload\n * @param alg - 'jit' | 'flz' | 'cd' | undefined (auto)\n * @returns (un)compressed eth_call payload\n * @pure\n */\n//! @__PURE__\nexport const compress_call = function (payload: any, alg?: string): any {\n const { method, params } = payload;\n if (method && method !== 'eth_call') return payload;\n const txObj = params?.[0] || payload;\n const blockParam = params?.[1];\n const overrides = params?.[2];\n\n // Validation\n if (\n (overrides && Object.keys(overrides).length > 0) ||\n !txObj?.to ||\n !txObj?.data ||\n Object.keys(txObj).some((k) => !['to', 'data', 'from'].includes(k))\n ) {\n return payload;\n }\n\n const originalSize = txObj.data.length;\n if (originalSize < MIN_BODY_SIZE) return payload;\n\n const inputData = '0x' + _normHex(txObj.data);\n const to = txObj.to;\n const from = txObj.from;\n\n let bytecode: string;\n let calldata: string;\n let decompressorAddress: string;\n let fromAddr: string | undefined;\n let balanceHex: string;\n\n if (alg === 'jit' || (!alg && (originalSize < 3000 || originalSize >= 8000))) {\n const result = _jitDecompressor(inputData, to, from);\n bytecode = result.bytecode;\n calldata = result.calldata;\n decompressorAddress = result.to;\n fromAddr = result.from;\n balanceHex = result.balance;\n } else {\n const jit = !alg ? _jitDecompressor(inputData, to, from) : null;\n const flzData = alg === 'flz' || !alg ? LibZip.flzCompress(inputData) : null;\n const cdData = alg === 'cd' || (!alg && flzData) ? LibZip.cdCompress(inputData) : null;\n const useFlz =\n alg === 'flz' || (!alg && flzData && (!cdData || flzData.length < cdData.length));\n\n if (useFlz) {\n calldata = flzData!;\n bytecode = flzFwdBytecode(to);\n } else {\n calldata = cdData!;\n bytecode = rleFwdBytecode(to);\n }\n\n decompressorAddress = '0x' + 224n.toString(16).padStart(40, '0');\n fromAddr = from ? _normHex(from).padStart(16, '0') : undefined;\n balanceHex = '0';\n if (\n !alg &&\n jit &&\n jit.bytecode.length + jit.calldata.length < bytecode.length + calldata.length\n ) {\n bytecode = jit.bytecode;\n calldata = jit.calldata;\n decompressorAddress = jit.to;\n fromAddr = jit.from;\n balanceHex = jit.balance;\n }\n }\n\n // Skip if not beneficial\n if (bytecode.length + calldata.length >= originalSize) return payload;\n\n const stateOverride: any = {\n code: bytecode,\n balance: '0x' + balanceHex,\n };\n const compressedTxObj: any = { to: decompressorAddress, data: calldata };\n if (fromAddr) {\n compressedTxObj.from = '0x' + fromAddr;\n }\n\n return {\n ...payload,\n params: [compressedTxObj, blockParam, { ...overrides, [decompressorAddress]: stateOverride }],\n };\n};\n", "export const MAX_128_BIT = (1n << 128n) - 1n;\nexport const MAX_256_BIT = (1n << 256n) - 1n;\n", "import { MAX_256_BIT } from './constants';\n\nexport const not = (a: bigint): bigint => ~a & MAX_256_BIT;\nexport const eq = (a: bigint, b: bigint): bigint => (a === b ? 1n : 0n);\nexport const and = (a: bigint, b: bigint): bigint => a & b & MAX_256_BIT;\nexport const or = (a: bigint, b: bigint): bigint => (a | b) & MAX_256_BIT;\nexport const xor = (a: bigint, b: bigint): bigint => (a ^ b) & MAX_256_BIT;\n\nexport const add = (a: bigint, b: bigint): bigint => (a + b) & MAX_256_BIT;\nexport const sub = (a: bigint, b: bigint): bigint => (a - b) & MAX_256_BIT;\n\nexport const shl = (shift: bigint, value: bigint): bigint => (value << shift) & MAX_256_BIT;\nexport const shr = (shift: bigint, value: bigint): bigint => (value >> shift) & MAX_256_BIT;\n\nexport const sigext = (byteSize: bigint, value: bigint): bigint => {\n const numBytes = Number(byteSize) + 1;\n const mask = (1n << BigInt(numBytes * 8)) - 1n;\n const signBit = 1n << BigInt(numBytes * 8 - 1);\n const maskedVal = value & mask;\n const extended = (maskedVal & signBit) !== 0n ? maskedVal | (~mask & MAX_256_BIT) : maskedVal;\n return extended & MAX_256_BIT;\n};\n\nexport const clz = (value: bigint): bigint => {\n if (value === 0n) return 256n;\n let count = 0n;\n let mask = 1n << 255n;\n while ((value & mask) === 0n && count < 256n) {\n count++;\n mask >>= 1n;\n }\n return count;\n};\n\nexport const ctz = (value: bigint): bigint => {\n if (value === 0n) return 256n;\n let count = 0n;\n while (count < 256n && (value & (1n << count)) === 0n) {\n count++;\n }\n return count;\n};\n", "export const _normHex = (hex: string): string => hex.replace(/^0x/, '').toLowerCase();\n\nexport const _hexToUint8Array = (hex: string): Uint8Array => {\n const normalized = _normHex(hex);\n const len = normalized.length;\n const bytes = new Uint8Array(len / 2);\n for (let i = 0; i < len; i += 2) {\n bytes[i / 2] = Number.parseInt(normalized.slice(i, i + 2), 16);\n }\n return bytes;\n};\n\nexport const _uint8ArrayToHex = (bytes: Uint8Array): string => {\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += bytes[i].toString(16).padStart(2, '0');\n }\n return hex;\n};\n\nexport type MemorySegment = { s: number; e: number };\n\nexport interface WordStats {\n /** Total number of times this 32-byte word appears in the view. */\n freq: number;\n normFreq: number;\n /** First 32-byte word index at which this word appears. */\n firstWordIndex: number;\n /** Last 32-byte word index at which this word appears. */\n lastWordIndex: number;\n /** Starting byte offset in memory of the first occurrence (same as MLOAD offset). */\n firstOffset: number;\n /** Starting byte offset in memory of the last occurrence (same as MLOAD offset). */\n lastOffset: number;\n reuseCost: number;\n}\n\nexport interface MemoryView {\n /** Normalized hex string (without 0x) of the original payload. */\n readonly hex: string;\n /** Backing buffer containing `padding` zero bytes followed by the payload. */\n readonly buffer: Uint8Array;\n /** Total length of the backing buffer (padding + payload length), rounded up to full words. */\n readonly roundedLength: number;\n /** Number of zero bytes prefixed before the payload. */\n readonly padding: number;\n /** Length of the original (unpadded) payload in bytes. */\n readonly dataLength: number;\n /** Number of 32-byte words in this view. */\n readonly wordCount: number;\n /** Frequency of each 32-byte word (by hex representation) across the memory view. */\n readonly wordFreq: ReadonlyMap<string, number>;\n readonly wordStats: ReadonlyMap<string, WordStats>;\n /** Return the nth 32-byte word (zero-padded on the right if incomplete). */\n getWord(wordIndex: number): Uint8Array;\n /**\n * Return all non-zero byte segments within the nth 32-byte word.\n * Each segment is an inclusive [s, e] range in the word.\n */\n getSegments(wordIndex: number): MemorySegment[];\n mload(offset: number): Uint8Array;\n /**\n * Read an arbitrary slice starting at `offset` for `size` bytes,\n * padding with zeros when reading past `length`.\n */\n slice(offset: number, size: number): Uint8Array;\n}\n\nexport const initMemoryView = (calldata: string, padding: number): MemoryView => {\n const hex = _normHex(calldata);\n const originalBuf = _hexToUint8Array(hex);\n const buffer = new Uint8Array(padding + originalBuf.length);\n buffer.set(originalBuf, padding);\n const rawLength = buffer.length;\n const wordCount = Math.ceil(rawLength / 32);\n const roundedLength = wordCount * 32;\n\n const words: Uint8Array[] = new Array(wordCount);\n const segments: MemorySegment[][] = new Array(wordCount);\n const wordFreq = new Map<string, number>();\n const wordStats = new Map<string, WordStats>();\n\n let prevWordHex: string | null = null;\n\n for (let wordIndex = 0; wordIndex < wordCount; wordIndex++) {\n const base = wordIndex * 32;\n const word = new Uint8Array(32);\n if (base < rawLength) {\n const end = Math.min(base + 32, rawLength);\n word.set(buffer.subarray(base, end), 0);\n }\n words[wordIndex] = word;\n\n const wordHex = _uint8ArrayToHex(word);\n const existing = wordStats.get(wordHex);\n const isRunContinuation = prevWordHex === wordHex;\n if (!existing) {\n const stats: WordStats = {\n freq: 1,\n normFreq: 1,\n firstWordIndex: wordIndex,\n lastWordIndex: wordIndex,\n firstOffset: base,\n lastOffset: base,\n reuseCost: -1,\n };\n wordStats.set(wordHex, stats);\n wordFreq.set(wordHex, 1);\n } else {\n existing.freq += 1;\n if (!isRunContinuation) {\n existing.normFreq += 1;\n }\n existing.lastWordIndex = wordIndex;\n existing.lastOffset = base;\n wordFreq.set(wordHex, existing.freq);\n }\n prevWordHex = wordHex;\n\n const seg: MemorySegment[] = [];\n for (let i = 0; i < 32; ) {\n while (i < 32 && word[i] === 0) ++i;\n if (i >= 32) break;\n const s = i;\n while (i < 32 && word[i] !== 0) ++i;\n seg.push({ s, e: i - 1 });\n }\n segments[wordIndex] = seg;\n }\n\n for (const stats of wordStats.values()) {\n const baseBytes = stats.firstOffset === 0 ? 0 : Math.ceil(Math.log2(stats.firstOffset + 1) / 8);\n const reuseCost = baseBytes + 3;\n const totalLiteralBytes = stats.normFreq * 32;\n const totalReuseBytes = stats.normFreq * reuseCost;\n stats.reuseCost = totalLiteralBytes > totalReuseBytes ? reuseCost : -1;\n }\n\n const zeroWord = new Uint8Array(32);\n\n const getWord = (wordIndex: number): Uint8Array => {\n if (wordIndex < 0 || wordIndex >= wordCount) return zeroWord;\n return words[wordIndex];\n };\n\n const getSegments = (wordIndex: number): MemorySegment[] => {\n if (wordIndex < 0 || wordIndex >= wordCount) return [];\n return segments[wordIndex];\n };\n\n const mload = (offset: number): Uint8Array => {\n const out = new Uint8Array(32);\n if (offset < 0 || offset >= rawLength) return out;\n const end = Math.min(offset + 32, rawLength);\n out.set(buffer.slice(offset, end), 0);\n return out;\n };\n\n const slice = (offset: number, size: number): Uint8Array => {\n if (size <= 0) return new Uint8Array(0);\n const out = new Uint8Array(size);\n if (offset < 0 || offset >= rawLength) return out;\n const end = Math.min(offset + size, rawLength);\n out.set(buffer.slice(offset, end), 0);\n return out;\n };\n\n return {\n hex,\n buffer,\n roundedLength,\n padding,\n dataLength: originalBuf.length,\n wordCount,\n wordFreq,\n wordStats,\n getWord,\n getSegments,\n mload,\n slice,\n };\n};\n", "import { MAX_128_BIT, MAX_256_BIT } from './constants';\nimport { add, and, not, or, shl, shr, sigext, sub, xor } from './opcodes';\nimport { _normHex, _uint8ArrayToHex, initMemoryView, MemorySegment } from './utils';\n\nexport const _jitDecompressor = function (\n calldata: string,\n to: string,\n from?: string,\n): { bytecode: string; calldata: string; to: string; from?: string; balance: string } {\n let padding = 28;\n const view = initMemoryView(calldata, padding);\n let decAddr = 224n;\n let originalTo = _normHex(to).padStart(16, '0');\n let fromAddr = from ? BigInt('0x' + _normHex(from)) : 96n;\n const excluded = new Set([0n, 32n, decAddr, fromAddr, BigInt('0x' + originalTo)]);\n let selfbalance = 2n;\n const filtered = Array.from(view.wordFreq.entries())\n .map(([word, freq]) => [BigInt('0x' + word), freq] as [bigint, number])\n .filter(([val]) => !excluded.has(val));\n if (filtered.length > 0) {\n selfbalance = filtered.reduce((max, curr) => (curr[1] > max[1] ? curr : max))[0];\n }\n const { wordCount } = view;\n let ops: number[] = [];\n let data: (number[] | null)[] = [];\n let stack: bigint[] = [];\n let trackedMemSize = 0;\n let mem = new Map<number, bigint>();\n let firstPass = true;\n\n const roundUp32 = (x: number) => (x + 31) & ~31;\n const getStackIdx = (val: bigint): number => {\n let idx = stack.lastIndexOf(val);\n idx = idx === -1 ? -1 : stack.length - 1 - idx;\n return idx > 15 ? -1 : idx;\n };\n const stackFreq = new Map<bigint, number>();\n const stackLastUse = new Map<bigint, number>();\n let pushCounter = 0;\n const ctr = <K>(m: Map<K, number>, k: K, delta: number) => m.set(k, (m.get(k) || 0) + delta);\n const pushOp = (op: number, d?: number[] | null) => {\n ops.push(op);\n data.push(d ?? null);\n };\n const pushS = (v: bigint, freqDelta: number = 1) => {\n stack.push(v);\n if (freqDelta !== 0) ctr(stackFreq, v, freqDelta);\n ++pushCounter;\n stackLastUse.set(v, pushCounter);\n };\n const pop2 = (): [bigint, bigint] => [stack.pop()!, stack.pop()!];\n const trackMem = (offset: number, size: number) => {\n trackedMemSize = roundUp32(offset + size);\n };\n\n const addOp = (op: number, imm?: number[]) => {\n if (op == 0x80) {\n // DUP1\n const val = stack[stack.length - 1]!;\n pushS(val, firstPass ? 0 : 1);\n }\n if (op == 0x50) stack.pop();\n if (op == 0x47) pushS(selfbalance, 0);\n if (op == 0x30) pushS(decAddr, 0);\n if (op == 0x33) pushS(fromAddr, 0);\n if (op == 0x36) pushS(32n, 0);\n if (op == 0x59) pushS(BigInt(trackedMemSize), 0);\n if (op === 0x0b) {\n // SIGNEXTEND\n const [byteSize, val] = pop2();\n pushS(sigext(byteSize, val), 1);\n }\n if (op == 0x19) {\n // NOT\n const val = stack.pop()!;\n pushS(not(val), 0);\n }\n if (op === 0x18) {\n // XOR\n const [a, b] = pop2();\n pushS(xor(a, b), 1);\n }\n if (op == 0x16) {\n // AND\n const [a, b] = pop2();\n pushS(and(a, b), 1);\n }\n if (op == 0x17) {\n // OR\n const [a, b] = pop2();\n pushS(or(a, b), 1);\n }\n if (op == 0x01) {\n // ADD\n const [a, b] = pop2();\n pushS(add(a, b), 1);\n }\n if (op === 0x03) {\n // SUB\n const [a, b] = pop2();\n pushS(sub(b, a), 1);\n }\n if (op == 0x1b) {\n // SHL\n const [shift, val] = pop2();\n pushS(shl(shift, val), 1);\n }\n if (op == 0x1c) {\n // SHR\n const [shift, val] = pop2();\n pushS(shr(shift, val), 1);\n }\n if ((op >= 0x60 && op <= 0x7f) || op === 0x5f) {\n let v = 0n; // PUSH* and PUSH0\n for (const b of imm || []) v = (v << 8n) | BigInt(b);\n if (v == selfbalance) {\n pushS(v, 0);\n pushOp(0x47);\n return;\n }\n if (v == decAddr) {\n pushS(v, 0);\n pushOp(0x30);\n return;\n }\n if (v == fromAddr) {\n pushS(v, 0);\n pushOp(0x33); // FROM ADDRESS\n return;\n }\n if (v == 32n) {\n pushS(v, 0);\n pushOp(0x36); // CALLDATASIZE\n return;\n }\n if (v === BigInt(trackedMemSize) && v !== 0n) {\n pushS(v, 0);\n pushOp(0x59);\n return;\n }\n const idx = getStackIdx(v);\n if (idx !== -1 && op !== 0x5f) {\n const freqDelta = firstPass ? 1 : 0;\n pushS(v, freqDelta);\n pushOp(0x80 + idx);\n return;\n }\n if (v === MAX_256_BIT) {\n pushS(v, 0);\n pushOp(0x5f); // PUSH0\n pushOp(0x19); // NOT\n return;\n }\n pushS(v, 1);\n pushOp(op, imm || null);\n return;\n }\n if (op === 0x51) {\n // MLOAD\n const k = Number(stack.pop()!);\n pushS(mem.has(k) ? mem.get(k)! : 0n, 0);\n }\n if (op === 0x52) {\n // MSTORE\n const [offset, value] = pop2();\n const k = Number(offset);\n mem.set(k, value & MAX_256_BIT);\n trackMem(k, 32);\n }\n if (op === 0x53) {\n // MSTORE8\n const [offset, _] = pop2();\n trackMem(Number(offset), 1);\n }\n pushOp(op, imm || null);\n };\n\n const op = (opcode: number) => addOp(opcode);\n\n const bytesLen = (v: bigint): number => {\n if (v === 0n) return 0;\n let n = 0;\n let t = v < 0n ? -v : v;\n while (t > 0n) {\n ++n;\n t >>= 8n;\n }\n return n;\n };\n\n const pushCost = (v: bigint): number => (v === 0n ? 1 : 1 + bytesLen(v));\n\n const pushN = (value: number | bigint) => {\n const v = typeof value === 'bigint' ? value : BigInt(value);\n if (v > 0n && v === BigInt(trackedMemSize)) return addOp(0x59);\n if (v === 32n) return addOp(0x36);\n if (v === 0n) return addOp(0x5f);\n\n let tmp = v;\n const bytes: number[] = [];\n while (tmp !== 0n) {\n bytes.unshift(Number(tmp & 0xffn));\n tmp >>= 8n;\n }\n return addOp(0x5f + bytes.length, bytes);\n };\n\n const pushB = (buf: Uint8Array) => addOp(0x5f + buf.length, Array.from(buf));\n\n type PlanStep =\n | { t: 'num'; v: number | bigint }\n | { t: 'bytes'; b: Uint8Array }\n | { t: 'op'; o: number };\n\n const plan: PlanStep[] = [];\n\n const emitPushN = (v: number | bigint) => {\n plan.push({ t: 'num', v });\n pushN(v);\n };\n const emitPushB = (b: Uint8Array) => {\n plan.push({ t: 'bytes', b });\n pushB(b);\n };\n const emitOp = (o: number) => {\n plan.push({ t: 'op', o });\n op(o);\n };\n\n const estShlCost = (seg: MemorySegment[]) => {\n let cost = 0;\n let first = true;\n for (const { s, e } of seg) {\n cost += 1 + (e - s + 1); // PUSH<n> immediate bytes\n if (31 - e > 0) cost += 1 + 1 + 1; // PUSH1 shift + SHL\n if (!first) cost += 1; // OR\n first = false;\n }\n return cost;\n };\n\n const emitBestValueForWord = (word: Uint8Array, seg: MemorySegment[]) => {\n const literal = word.slice(seg[0].s);\n let literalVal = 0n;\n for (const b of literal) literalVal = (literalVal << 8n) | BigInt(b);\n const literalCost = 1 + literal.length;\n const shlCost = estShlCost(seg);\n let bestCost = literalCost;\n let bestEmit: () => void = () => emitPushB(literal);\n // Try NOT: PUSH(~x) NOT\n const notVal = not(literalVal);\n const notCost = pushCost(notVal) + 1;\n if (notCost < bestCost) {\n bestCost = notCost;\n bestEmit = () => {\n emitPushN(notVal);\n emitOp(0x19);\n };\n }\n // Try SUB: PUSH0, PUSH(x), SUB\n const subVal = sub(0n, literalVal);\n const subCost = 1 + pushCost(subVal) + 1;\n if (subCost < bestCost) {\n bestCost = subCost;\n bestEmit = () => {\n emitPushN(0);\n emitPushN(subVal);\n emitOp(0x03);\n };\n }\n // Try SIGNEXTEND\n for (let numBytes = 1; numBytes < literal.length; numBytes++) {\n const mask = (1n << BigInt(numBytes * 8)) - 1n;\n const truncated = literalVal & mask;\n const extended = sigext(BigInt(numBytes - 1), truncated);\n if (\n extended === literalVal &&\n (truncated & (1n << BigInt(numBytes * 8 - 1))) !== 0n // must be negative in that width\n ) {\n const signCost = pushCost(truncated) + 2 + 1; // PUSH + PUSH1 + SIGNEXTEND\n if (signCost < bestCost) {\n bestCost = signCost;\n bestEmit = () => {\n emitPushN(truncated);\n emitPushN(numBytes - 1);\n emitOp(0x0b);\n };\n }\n break;\n }\n }\n // Try SHIFT+NOT\n for (let shiftBits = 8; shiftBits <= 248; shiftBits += 8) {\n const shifted = shr(BigInt(shiftBits), literalVal);\n if (shifted === 0n) break;\n\n const notShifted = not(shifted);\n const reconstructed = shl(BigInt(shiftBits), notShifted);\n if (reconstructed === literalVal) {\n const shiftNotCost = pushCost(notShifted) + pushCost(BigInt(shiftBits)) + 2; // PUSH + PUSH + SHL + NOT\n if (shiftNotCost < bestCost) {\n bestCost = shiftNotCost;\n bestEmit = () => {\n emitPushN(notShifted);\n emitPushN(shiftBits);\n emitOp(0x1b);\n emitOp(0x19);\n };\n }\n }\n }\n // Try SHL/OR\n if (shlCost < bestCost) {\n bestCost = shlCost;\n bestEmit = () => {\n let first = true;\n for (const { s, e } of seg) {\n const suffix0s = 31 - e;\n emitPushB(word.slice(s, e + 1));\n if (suffix0s > 0) {\n emitPushN(suffix0s * 8);\n emitOp(0x1b); // SHL\n }\n if (!first) emitOp(0x17); // OR\n first = false;\n }\n };\n }\n return { literal, literalVal, bestCost, bestEmit, literalCost, shlCost };\n };\n\n let wordIndex = 0;\n while (wordIndex < wordCount) {\n const base = wordIndex * 32;\n const word = view.getWord(wordIndex);\n const seg = view.getSegments(wordIndex);\n if (!seg.length) {\n ++wordIndex;\n continue;\n }\n\n const wordHex = _uint8ArrayToHex(word);\n // Encode Run?\n let runLen = 1;\n while (wordIndex + runLen < wordCount) {\n const w2 = view.getWord(wordIndex + runLen);\n const s2 = view.getSegments(wordIndex + runLen);\n if (!s2.length) break;\n if (_uint8ArrayToHex(w2) !== wordHex) break;\n ++runLen;\n }\n\n if (runLen >= 2) {\n const { bestEmit } = emitBestValueForWord(word, seg);\n // First store: keep word value on stack.\n bestEmit(); // push value\n emitOp(0x80); // DUP1 (keep value)\n emitPushN(base); // offset (MSIZE if aligned)\n emitOp(0x52); // MSTORE\n\n for (let j = 1; j < runLen; j++) {\n emitOp(0x80); // DUP1\n emitOp(0x59); // MSIZE\n emitOp(0x52); // MSTORE\n }\n const stats = view.wordStats.get(wordHex);\n if (stats && stats.lastWordIndex <= wordIndex + runLen - 1) {\n emitOp(0x50); // POP\n }\n wordIndex += runLen;\n continue;\n }\n\n const { literalCost, shlCost, bestCost, bestEmit } = emitBestValueForWord(word, seg);\n // Try MLOAD/MSTORE reuse\n if (literalCost > 8) {\n const stats = view.wordStats.get(wordHex);\n if (stats && stats.reuseCost !== -1 && wordIndex > stats.firstWordIndex) {\n const baseBytes =\n stats.firstOffset === 0 ? 0 : Math.ceil(Math.log2(stats.firstOffset + 1) / 8);\n if (literalCost > stats.reuseCost + baseBytes) {\n emitPushN(stats.firstOffset);\n emitOp(0x51); // MLOAD\n emitPushN(base);\n emitOp(0x52); // MSTORE\n ++wordIndex;\n continue;\n }\n }\n }\n const byte8s = seg.every(({ s, e }) => s === e);\n const byte8sCost = seg.length * 3; // PUSH1(value), PUSH1(offset), MSTORE8\n if (byte8s && byte8sCost < bestCost && byte8sCost <= shlCost) {\n for (const { s } of seg) {\n emitPushN(word[s]);\n emitPushN(base + s);\n emitOp(0x53); // MSTORE8\n }\n ++wordIndex;\n continue;\n }\n // Default\n bestEmit();\n emitPushN(base);\n emitOp(0x52); // MSTORE\n ++wordIndex;\n }\n\n //2nd pass: preseed dictionary + emit final ops\n const planOut = plan.slice();\n ops = [];\n data = [];\n stack = [];\n trackedMemSize = 0;\n mem = new Map();\n firstPass = false;\n\n const reserved = new Set<bigint>([0n, 32n, selfbalance, decAddr, fromAddr]);\n Array.from(stackFreq.entries())\n .filter(([val, uses]) => uses > 1 && !reserved.has(val))\n .map(([val, uses]) => {\n const p = pushCost(val);\n const net = uses * (p - 1) - p;\n return { val, uses, net, p };\n })\n .sort((a, b) => {\n if (b.net !== a.net) return b.net - a.net;\n if (b.uses !== a.uses) return b.uses - a.uses;\n return a.p - b.p;\n })\n .filter((x) => x.net > 0 && x.val <= MAX_128_BIT)\n .slice(0, 15)\n .forEach(({ val }) => {\n pushN(val);\n });\n\n for (const step of planOut) {\n if (step.t === 'num') pushN(step.v);\n else if (step.t === 'bytes') pushB(step.b);\n else if (step.t === 'op') op(step.o);\n }\n\n // CALL stack layout (top to bottom): gas, address, value, argsOffset, argsSize, retOffset, retSize\n //\n // - 0x5f5f: PUSH0 PUSH0 (retSize=0, retOffset=0)\n // - pushN(view.dataLength): argsSize\n // - pushN(padding): argsOffset (skip leading alignment bytes)\n // - 0x34: CALLVALUE (value)\n // - 0x5f35: PUSH0 CALLDATALOAD (address from calldata[0])\n // - 0x5a: GAS (remaining gas)\n // - 0xf1: CALL\n //\n // RETURNDATACOPY(destOffset=0, offset=0, length=RETURNDATASIZE):\n // - 0x3d5f5f3e: RETURNDATASIZE PUSH0 PUSH0 RETURNDATACOPY\n //\n // RETURN(offset=0, size=RETURNDATASIZE):\n // - 0x3d5ff3: RETURNDATASIZE PUSH0 RETURN\n\n op(0x5f); // PUSH0 (retSize)\n op(0x5f); // PUSH0 (retOffset)\n pushN(view.dataLength); // argsSize = actual data length\n pushN(padding); // argsOffset = padding\n\n const out: number[] = [];\n for (let i = 0; i < ops.length; ++i) {\n out.push(ops[i]);\n if (ops[i] >= 0x60 && ops[i] <= 0x7f && data[i]) out.push(...data[i]!);\n }\n\n // - CALLVALUE, load target address from calldata[0], GAS, CALL\n // - RETURNDATACOPY(0, 0, RETURNDATASIZE)\n // - RETURN(0, RETURNDATASIZE)\n const bytecode = '0x' + _uint8ArrayToHex(new Uint8Array(out)) + '345f355af13d5f5f3e3d5ff3';\n const calldataOut = '0x' + _normHex(originalTo).padStart(64, '0');\n\n return {\n bytecode,\n calldata: calldataOut,\n to: '0x' + decAddr.toString(16).padStart(40, '0'),\n from: _normHex(fromAddr.toString(16)).padStart(40, '0'),\n balance: selfbalance.toString(16),\n };\n};\n", "import { _normHex } from './compiler/utils';\n\n/**\n * Generates FastLZ (LZ77) decompressor bytecode. The generated code decompresses incoming calldata and forwards it to the target address.\n * @param address - Target contract address\n * @see {@link https://github.com/Vectorized/solady/blob/main/src/utils/LibZip.sol}\n * @pure\n */\n//! @__PURE__\nexport const flzFwdBytecode = (address: string): string =>\n `0x365f73${_normHex(address)}815b838110602f575f80848134865af1503d5f803e3d5ff35b803590815f1a8060051c908115609857600190600783149285831a6007018118840218600201948383011a90601f1660081b0101808603906020811860208211021890815f5b80830151818a015201858110609257505050600201019201916018565b82906075565b6001929350829150019101925f5b82811060b3575001916018565b85851060c1575b60010160a6565b936001818192355f1a878501530194905060ba56`;\n\n/**\n * Generates RLE (run-length encoded) decompressor bytecode. The generated code decompresses incoming calldata and forwards it to the target address.\n * @param address - Target contract address\n * @see {@link https://github.com/Vectorized/solady/blob/main/src/utils/LibZip.sol}\n * @pure\n */\n//! @__PURE__\nexport const rleFwdBytecode = (address: string): string =>\n `0x5f5f5b368110602d575f8083813473${_normHex(address)}5af1503d5f803e3d5ff35b600180820192909160031981019035185f1a8015604c57815301906002565b505f19815282820192607f9060031981019035185f1a818111156072575b160101906002565b838101368437606a56`;\n"],
5
+ "mappings": "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",
6
+ "names": ["jit_compressor_exports", "__export", "compress_call", "__toCommonJS", "import_solady", "MAX_128_BIT", "MAX_256_BIT", "not", "a", "MAX_256_BIT", "and", "a", "b", "MAX_256_BIT", "or", "xor", "add", "sub", "shl", "shift", "value", "shr", "sigext", "byteSize", "numBytes", "mask", "signBit", "maskedVal", "_normHex", "hex", "_hexToUint8Array", "normalized", "len", "bytes", "i", "_uint8ArrayToHex", "initMemoryView", "calldata", "padding", "originalBuf", "buffer", "rawLength", "wordCount", "roundedLength", "words", "segments", "wordFreq", "wordStats", "prevWordHex", "wordIndex", "base", "word", "end", "wordHex", "existing", "isRunContinuation", "stats", "seg", "s", "reuseCost", "totalLiteralBytes", "totalReuseBytes", "zeroWord", "getWord", "getSegments", "mload", "offset", "out", "slice", "size", "_jitDecompressor", "calldata", "to", "from", "padding", "view", "initMemoryView", "decAddr", "originalTo", "_normHex", "fromAddr", "excluded", "selfbalance", "filtered", "word", "freq", "val", "max", "curr", "wordCount", "ops", "data", "stack", "trackedMemSize", "mem", "firstPass", "roundUp32", "x", "getStackIdx", "idx", "stackFreq", "stackLastUse", "pushCounter", "ctr", "m", "k", "delta", "pushOp", "op", "d", "pushS", "v", "freqDelta", "pop2", "trackMem", "offset", "size", "addOp", "imm", "byteSize", "sigext", "not", "a", "b", "xor", "and", "or", "add", "sub", "shift", "shl", "shr", "MAX_256_BIT", "value", "_", "opcode", "bytesLen", "n", "t", "pushCost", "pushN", "tmp", "bytes", "pushB", "buf", "plan", "emitPushN", "emitPushB", "emitOp", "o", "estShlCost", "seg", "cost", "first", "s", "e", "emitBestValueForWord", "literal", "literalVal", "literalCost", "shlCost", "bestCost", "bestEmit", "notVal", "notCost", "subVal", "subCost", "numBytes", "mask", "truncated", "signCost", "shiftBits", "shifted", "notShifted", "shiftNotCost", "suffix0s", "wordIndex", "base", "wordHex", "_uint8ArrayToHex", "runLen", "w2", "j", "stats", "baseBytes", "byte8s", "byte8sCost", "planOut", "reserved", "uses", "p", "net", "MAX_128_BIT", "step", "out", "i", "bytecode", "calldataOut", "flzFwdBytecode", "address", "_normHex", "rleFwdBytecode", "compress_call", "payload", "alg", "method", "params", "txObj", "blockParam", "overrides", "k", "originalSize", "inputData", "_normHex", "to", "from", "bytecode", "calldata", "decompressorAddress", "fromAddr", "balanceHex", "result", "_jitDecompressor", "jit", "flzData", "cdData", "flzFwdBytecode", "rleFwdBytecode", "stateOverride", "compressedTxObj"]
7
7
  }
package/_esm/index.js CHANGED
@@ -1,3 +1,2 @@
1
- var kt=Object.defineProperty;var gt=(s,e)=>()=>(s&&(e=s(s=0)),e);var At=(s,e)=>{for(var f in e)kt(s,f,{get:e[f],enumerable:!0})};var Bt={};At(Bt,{compress_call:()=>Tt});import{LibZip as mt}from"solady";var Ut,B,O,Nt,dt,G,Pt,qt,zt,ht,pt,xt,yt,Et,Dt,Ot,wt,Tt,It=gt(()=>{Ut=(1n<<128n)-1n,B=(1n<<256n)-1n,O=s=>s.replace(/^0x/,"").toLowerCase(),Nt=s=>{let e=O(s),f=e.length,l=new Uint8Array(f/2);for(let i=0;i<f;i+=2)l[i/2]=Number.parseInt(e.slice(i,i+2),16);return l},dt=s=>{let e="";for(let f=0;f<s.length;f++)e+=s[f].toString(16).padStart(2,"0");return e},G=s=>~s&B,Pt=(s,e)=>s&e&B,qt=(s,e)=>(s|e)&B,zt=(s,e)=>(s^e)&B,ht=(s,e)=>e<<s&B,pt=(s,e)=>e>>s&B,xt=(s,e)=>s-e&B,yt=(s,e)=>{let f=Number(s)+1,l=(1n<<BigInt(f*8))-1n,i=1n<<BigInt(f*8-1),m=e&l;return(m&i?m|~l&B:m)&B};Et=s=>`0x365f73${O(s)}815b838110602f575f80848134865af1503d5f803e3d5ff35b803590815f1a8060051c908115609857600190600783149285831a6007018118840218600201948383011a90601f1660081b0101808603906020811860208211021890815f5b80830151818a015201858110609257505050600201019201916018565b82906075565b6001929350829150019101925f5b82811060b3575001916018565b85851060c1575b60010160a6565b936001818192355f1a878501530194905060ba56`;Dt=s=>`0x5f5f5b368110602d575f8083813473${O(s)}5af1503d5f803e3d5ff35b600180820192909160031981019035185f1a8015604c57815301906002565b505f19815282820192607f9060031981019035185f1a818111156072575b160101906002565b838101368437606a56`,Ot=function(s){let e=O(s),f=Nt(e),l=28,i=new Uint8Array(l+f.length);i.set(f,l);let m=i.length,d=[],y=[],u=[],h=0,I=new Map,k=!0,R=t=>{let o=u.lastIndexOf(t);return o=o===-1?-1:u.length-1-o,o>15?-1:o},T=new Map,Q=new Map,tt=new Map,J=new Map,Y=new Map,Ct=t=>t+31&-32,nt=0,W=new Map,S=()=>[u.pop(),u.pop()],et=(t,o,n)=>t.set(o,(t.get(o)||0)+n),st=(t,o)=>et(t,o,1),A=(t,o)=>{d.push(t),st(T,t);let n=o??null;y.push(n),st(Q,n)},a=(t,o=1)=>{u.push(t),et(tt,t,o),++nt,W.set(t,nt)},ot=(t,o)=>{h=Ct(t+o)},q=(t,o)=>{if(t===54)a(32n,0);else if(t===89)a(BigInt(h),0);else if(t===11){let[n,c]=S();a(yt(n,c),1)}else if(t===25){let n=u.pop();a(G(n),0)}else if(t===24){let[n,c]=S();a(zt(n,c),1)}else if(t===22){let[n,c]=S();a(Pt(n,c),1)}else if(t===3){let[n,c]=S();a(xt(n,c),1)}else if(t===27){let[n,c]=S();a(ht(n,c),1)}else if(t===28){let[n,c]=S();a(pt(n,c),1)}else if(t===23){let[n,c]=S();a(qt(n,c),1)}else if(t>=96&&t<=127||t===95){let n=0n;for(let w of o||[])n=n<<8n|BigInt(w);if(n==224n){a(n,0),A(48);return}if(n==32n){a(n,0),A(54);return}if(n===BigInt(h)){a(n,0),A(89);return}let c=R(n);if(c!==-1&&t!=95){a(n,k?1:-1),A(128+c);return}if(n==B){a(n),A(95),A(25);return}a(n)}else if(t===81){let n=Number(u.pop());a(I.has(n)?I.get(n):0n)}else if(t===82){let[n,c]=S(),w=Number(n);I.set(w,c&B),ot(w,32)}else if(t===83){let[n,c]=S();ot(Number(n),1)}else t===243&&S();A(t,o||null)},V=t=>q(t),U=t=>{if(t>0&&t===h)return q(89);if(t==32n)return q(54);if(!t)return q(95,void 0);let o=BigInt(t),n=[];for(;o;)n.unshift(Number(o&0xffn)),o>>=8n;return q(95+n.length,n)},rt=t=>q(95+t.length,Array.from(t)),Mt=(t,o)=>(t.match(new RegExp(o,"g"))||[]).length,_t=t=>{let o=0,n=!0;for(let{s:c,e:w}of t)o+=1+w-c+1,31-w>0&&(o+=3),n||(o+=1),n=!1;return o},Z=[],g=t=>(Z.push({t:"num",v:t}),U(t)),H=t=>(Z.push({t:"bytes",b:t}),rt(t)),p=t=>(Z.push({t:"op",o:t}),V(t));U(1n);let X=[1n,32n,224n];for(let t=0;t<m;t+=32){let o=new Uint8Array(32);o.set(i.slice(t,Math.min(t+32,m)),0);let n=[];for(let r=0;r<32;){for(;r<32&&o[r]===0;)++r;if(r>=32)break;let x=r;for(;r<32&&o[r]!==0;)++r;n.push({s:x,e:r-1})}if(!n.length)continue;let c=o.slice(n[0].s),w=1+c.length,C=0n;for(let r of c)C=C<<8n|BigInt(r);let it=Math.ceil(Math.log2(t+1)/8),N=dt(o),ct=_t(n),ft=X.includes(C);if(ft){H(c),g(t),p(82);continue}if(w>8){if(J.has(N)){if(w>Y.get(N)+it){g(J.get(N)),p(81),g(t),p(82);continue}}else if(Y.get(N)!=-1){let r=it+3,x=Mt(e,N);Y.set(N,x*32>x*r?r:-1),J.set(N,t)}}let Rt=n.every(({s:r,e:x})=>r===x),lt=n.length*3;if(ft)H(c);else{let r=w,x=()=>{H(c)};C==B&&(r=2,x=()=>{g(j),p(25)});let j=G(C),z=0,F=j;for(;F>0n;)++z,F>>=8n;z=1+z;let ut=z+1;ut<r&&(r=ut,x=()=>{g(j),p(25)});let v=xt(0n,C),L=0;for(F=v;F>0n;)++L,F>>=8n;L===0&&(L=1),X.includes(v)&&(L=1);let bt=1+(1+L)+1;bt<r&&(r=bt,x=()=>{g(0),g(v),p(3)});for(let b=1;b<c.length;b++){let E=(1n<<BigInt(b*8))-1n,M=C&E,D=yt(BigInt(b-1),M);if(D===C&&(M&1n<<BigInt(b*8-1))!==0n){let P=1+b;X.includes(BigInt(D))&&(P=1);let K=P+2+1;K<r&&(r=K,x=()=>{g(M),g(b-1),p(11)});break}}for(let b=8;b<=248;b+=8){let E=pt(BigInt(b),C);if(E===0n)break;let M=G(E);if(ht(BigInt(b),M)===C){let P=0,K=M;for(;K>0n;)++P,K>>=8n;P===0&&(P=1);let at=1+P+2+1+1;at<r&&(r=at,x=()=>{g(M),g(b),p(27),p(25)})}}if(Rt&&lt<r&&lt<=ct){for(let{s:b}of n)g(o[b]),g(t+b),p(83);continue}else if(ct<r){let b=!0;for(let{s:E,e:M}of n){let D=31-M;H(o.slice(E,M+1)),D>0&&(g(D*8),p(27)),b||p(23),b=!1}}else x()}g(t),p(82)}d=[],y=[],u=[],h=0,I=new Map,Array.from(tt.entries()).filter(([t,o])=>o>1&&t>1n&&t!==32n&&t!==224n).sort((t,o)=>W.get(o[0])-W.get(t[0])).filter(([t,o])=>typeof t=="number"?BigInt(t):t<=Ut).slice(0,15).forEach(([t,o])=>{U(t)}),U(1n);for(let t of Z)t.t==="num"?U(t.v):t.t==="bytes"?rt(t.b):t.t==="op"&&V(t.o);V(95),V(95),U(f.length),U(l);let $=[];for(let t=0;t<d.length;++t)$.push(d[t]),d[t]>=96&&d[t]<=127&&y[t]&&$.push(...y[t]);return"0x"+dt(new Uint8Array($))+"345f355af13d5f5f3e3d5ff3"},wt="0x00000000000000000000000000000000000000e0";Tt=function(s,e){let{method:f,params:l}=s;if(f&&f!=="eth_call")return s;let i=(l==null?void 0:l[0])||s,m=l==null?void 0:l[1],d=l==null?void 0:l[2];if(m&&m!=="latest"||d&&Object.keys(d).length>0||!(i!=null&&i.to)||!(i!=null&&i.data)||Object.keys(i).some(R=>!["to","data","from"].includes(R)))return s;let y=i.data.length;if(y<1150)return s;let u="0x"+O(i.data),h=i.to,I,k;if(e==="jit"||!e&&(y<3e3||y>=8e3))I=Ot(u),k="0x"+O(h).padStart(64,"0");else{let R=e==="flz"||!e?mt.flzCompress(u):null,T=e==="cd"||!e&&R?mt.cdCompress(u):null;e==="flz"||!e&&R&&(!T||R.length<T.length)?(k=R,I=Et(h)):(k=T,I=Dt(h))}return I.length+k.length>=y?s:{...s,params:[{...i,to:wt,data:k},m||"latest",{...d,[wt]:{code:I}}]}}});async function Kt(s,e,f){var y;let l=typeof s=="string"?s:s instanceof URL?s.toString():s.url,i=St.get(l);if(_=_===-1||i===-1?-1:(i==null?void 0:i[0])??null,f&&(e!=null&&e.body)&&typeof e.body=="string"&&(_===-1||_===null))try{let u=JSON.parse(e.body),h=f(u);h!==void 0&&(e={...e,body:JSON.stringify(h)})}catch{}let m=typeof(e==null?void 0:e.body)=="string"?e.body:null;if(_&&_!==-1&&m&&m.length>=1150){let u=await new Response(new Blob([m]).stream().pipeThrough(new CompressionStream(_))).blob();e={...e,body:u,headers:{...e&&e.headers,"Content-Encoding":_}}}let d=await fetch(l,e);if(_===null){let u=(y=d.headers.get("Accept-Encoding"))==null?void 0:y.split(",").filter(h=>Lt.includes(h));St.set(l,u!=null&&u.length?u:-1)}return d}var Ft,St,Lt,_,Jt,Vt=gt(()=>{Ft=1150,St=new Map,Lt=["deflate-raw","deflate","gzip"],_=typeof CompressionStream>"u"?-1:null;Jt=(s,e)=>Promise.resolve().then(()=>(It(),Bt)).then(({compress_call:f})=>Kt(s,e,f))});Vt();export{Ft as MIN_BODY_SIZE,Kt as compressModule,Jt as compressModuleWithJIT};
2
- //! @__PURE__
1
+ var b=1150,h=new Map,m=["gzip","deflate"];async function w(o,e,s){let p=o instanceof Request?o:null,a=typeof o=="string"?o:o instanceof Request?o.url:o.toString(),t=typeof(e==null?void 0:e.body)=="string"?e.body:null;if(typeof s=="function"){if(p&&!e)return fetch(p);let n=e==null?void 0:e.body;if(t)try{let c=s(JSON.parse(t));c!==void 0&&(n=JSON.stringify(c))}catch{}return fetch(p??a,{...e,body:n})}let r=h.get(a),S=typeof CompressionStream<"u",u=s==="gzip"||s==="deflate",d=S?u?s:s==="proactive"?r===-1?null:r??"gzip":typeof r=="string"?r:null:null,g=!!d&&!!t&&t.length>=1150,f={...e,priority:"high"},y=new Headers(f.headers);g&&(f.body=await new Response(new Blob([t]).stream().pipeThrough(new CompressionStream(d))).blob(),y.set("Content-Encoding",d)),f.headers=y;let i=await fetch(p??a,f);if(!u&&r===void 0){let n=i.headers.get("Accept-Encoding"),c=(n==null?void 0:n.split(",").map(l=>l.trim()).find(l=>m.includes(l)))??-1;h.set(a,s==="proactive"&&g&&i.ok?d:c)}return i}export{b as MIN_BODY_SIZE,w as compressModule};
3
2
  //# sourceMappingURL=index.js.map
package/_esm/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/jit-compressor.ts", "../../src/index.ts"],
4
- "sourcesContent": ["import { LibZip } from 'solady';\nimport { MIN_BODY_SIZE } from './index';\n\nconst MAX_128_BIT = (1n << 128n) - 1n;\nconst MAX_256_BIT = (1n << 256n) - 1n;\n\nconst _normHex = (hex: string): string => hex.replace(/^0x/, '').toLowerCase();\n\nconst _hexToUint8Array = (hex: string): Uint8Array => {\n const normalized = _normHex(hex);\n const len = normalized.length;\n const bytes = new Uint8Array(len / 2);\n for (let i = 0; i < len; i += 2) {\n bytes[i / 2] = Number.parseInt(normalized.slice(i, i + 2), 16);\n }\n return bytes;\n};\n\nconst _uint8ArrayToHex = (bytes: Uint8Array): string => {\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += bytes[i].toString(16).padStart(2, '0');\n }\n return hex;\n};\n\nconst not = (a: bigint): bigint => ~a & MAX_256_BIT;\nconst and = (a: bigint, b: bigint): bigint => a & b & MAX_256_BIT;\nconst or = (a: bigint, b: bigint): bigint => (a | b) & MAX_256_BIT;\nconst xor = (a: bigint, b: bigint): bigint => (a ^ b) & MAX_256_BIT;\nconst shl = (shift: bigint, value: bigint): bigint => (value << shift) & MAX_256_BIT;\nconst shr = (shift: bigint, value: bigint): bigint => (value >> shift) & MAX_256_BIT;\nconst sub = (a: bigint, b: bigint): bigint => (a - b) & MAX_256_BIT;\nconst sigext = (byteSize: bigint, value: bigint): bigint => {\n const numBytes = Number(byteSize) + 1;\n const mask = (1n << BigInt(numBytes * 8)) - 1n;\n const signBit = 1n << BigInt(numBytes * 8 - 1);\n const maskedVal = value & mask;\n const extended = maskedVal & signBit ? maskedVal | (~mask & MAX_256_BIT) : maskedVal;\n return extended & MAX_256_BIT;\n};\n\n/**\n * Generates FastLZ (LZ77) decompressor bytecode. The generated code decompresses incoming calldata and forwards it to the target address.\n * @param address - Target contract address\n * @see {@link https://github.com/Vectorized/solady/blob/main/src/utils/LibZip.sol}\n * @pure\n */\n//! @__PURE__\nconst flzFwdBytecode = (address: string): string =>\n `0x365f73${_normHex(address)}815b838110602f575f80848134865af1503d5f803e3d5ff35b803590815f1a8060051c908115609857600190600783149285831a6007018118840218600201948383011a90601f1660081b0101808603906020811860208211021890815f5b80830151818a015201858110609257505050600201019201916018565b82906075565b6001929350829150019101925f5b82811060b3575001916018565b85851060c1575b60010160a6565b936001818192355f1a878501530194905060ba56`;\n\n/**\n * Generates RLE (run-length encoded) decompressor bytecode. The generated code decompresses incoming calldata and forwards it to the target address.\n * @param address - Target contract address\n * @see {@link https://github.com/Vectorized/solady/blob/main/src/utils/LibZip.sol}\n * @pure\n */\n//! @__PURE__\nconst rleFwdBytecode = (address: string): string =>\n `0x5f5f5b368110602d575f8083813473${_normHex(address)}5af1503d5f803e3d5ff35b600180820192909160031981019035185f1a8015604c57815301906002565b505f19815282820192607f9060031981019035185f1a818111156072575b160101906002565b838101368437606a56`;\n\nconst _jitDecompressor = function (calldata: string): string {\n const hex = _normHex(calldata);\n const originalBuf = _hexToUint8Array(hex);\n\n // Right\u2011align the 4\u2011byte selector in the first 32\u2011byte slot (offset 28),\n // so that everything after the selector is reconstructed on mostly\n // word\u2011aligned boundaries. This keeps the ABI words (and therefore most\n // calldata reconstruction) 32\u2011byte aligned in memory.\n // That way we avoid encoding offsets for writes (most of the time),\n const padding = 28;\n const buf = new Uint8Array(padding + originalBuf.length);\n buf.set(originalBuf, padding);\n\n const n = buf.length;\n\n let ops: number[] = [];\n let data: (number[] | null)[] = [];\n let stack: bigint[] = [];\n let trackedMemSize = 0;\n let mem = new Map<number, bigint>();\n let firstPass = true;\n const getStackIdx = (val: bigint): number => {\n let idx = stack.lastIndexOf(val);\n idx = idx === -1 ? -1 : stack.length - 1 - idx;\n return idx > 15 ? -1 : idx;\n };\n\n const opFreq = new Map<number, number>();\n const dataFreq = new Map<number[] | null, number>();\n const stackFreq = new Map<bigint, number>();\n const wordCache = new Map<string, number>();\n const wordCacheCost = new Map<string, number>();\n const roundUp32 = (x: number) => (x + 31) & ~31;\n\n let pushCounter = 0;\n const stackCnt = new Map<bigint, number>();\n const pop2 = (): [bigint, bigint] => [stack.pop()!, stack.pop()!];\n const ctr = <K>(m: Map<K, number>, k: K, delta: number) => m.set(k, (m.get(k) || 0) + delta);\n const inc = <K>(m: Map<K, number>, k: K) => ctr(m, k, 1);\n const pushOp = (op: number, d?: number[] | null) => {\n ops.push(op);\n inc(opFreq, op);\n const imm = d ?? null;\n data.push(imm);\n inc(dataFreq, imm);\n };\n const pushS = (v: bigint, freq: number = 1) => {\n stack.push(v);\n ctr(stackFreq, v, freq);\n ++pushCounter;\n stackCnt.set(v, pushCounter);\n };\n\n const trackMem = (offset: number, size: number) => {\n trackedMemSize = roundUp32(offset + size);\n };\n\n const addOp = (op: number, imm?: number[]) => {\n if (op === 0x36) {\n pushS(32n, 0);\n } else if (op === 0x59) {\n pushS(BigInt(trackedMemSize), 0);\n } else if (op === 0x0b) {\n // SIGNEXTEND\n const [byteSize, val] = pop2();\n pushS(sigext(byteSize, val), 1);\n } else if (op === 0x19) {\n // NOT\n const val = stack.pop()!;\n pushS(not(val), 0);\n } else if (op === 0x18) {\n // XOR\n const [a, b] = pop2();\n pushS(xor(a, b), 1);\n } else if (op === 0x16) {\n // AND\n const [a, b] = pop2();\n pushS(and(a, b), 1);\n } else if (op === 0x03) {\n // SUB\n const [a, b] = pop2();\n pushS(sub(a, b), 1);\n } else if (op === 0x1b) {\n // SHL\n let [shift, val] = pop2();\n pushS(shl(shift, val), 1);\n } else if (op === 0x1c) {\n // SHR\n let [shift, val] = pop2();\n pushS(shr(shift, val), 1);\n } else if (op === 0x17) {\n // OR\n let [a, b] = pop2();\n pushS(or(a, b), 1);\n } else if ((op >= 0x60 && op <= 0x7f) || op === 0x5f) {\n // PUSH\n let v = 0n;\n for (const b of imm || []) v = (v << 8n) | BigInt(b);\n if (v == 224n) {\n pushS(v, 0);\n pushOp(0x30); // ADDRESS\n return;\n }\n if (v == 32n) {\n pushS(v, 0);\n pushOp(0x36); // ADDRESS\n return;\n }\n if (v === BigInt(trackedMemSize)) {\n pushS(v, 0);\n pushOp(0x59); // MemSize\n return;\n }\n const idx = getStackIdx(v);\n if (idx !== -1 && op != 0x5f) {\n let pushCtr = firstPass ? 1 : -1;\n pushS(v, pushCtr);\n pushOp(128 + idx);\n return;\n }\n if (v == MAX_256_BIT) {\n pushS(v);\n pushOp(0x5f); // 0\n pushOp(0x19); // NOT\n return;\n }\n pushS(v);\n } else if (op === 0x51) {\n // MLOAD\n const k = Number(stack.pop()!);\n pushS(mem.has(k) ? mem.get(k)! : 0n);\n } else if (op === 0x52) {\n // MSTORE\n const [offset, value] = pop2();\n const k = Number(offset);\n mem.set(k, value & MAX_256_BIT);\n trackMem(k, 32);\n } else if (op === 0x53) {\n // MSTORE8\n const [offset, _] = pop2();\n trackMem(Number(offset), 1);\n } else if (op === 0xf3) {\n // RETURN\n pop2();\n }\n pushOp(op, imm || null);\n };\n const op = (opcode: number) => addOp(opcode);\n const pushN = (value: number | bigint) => {\n if (value > 0 && value === trackedMemSize) return addOp(0x59);\n if (value == 32n) return addOp(0x36);\n if (!value) return addOp(0x5f, undefined); // PUSH0\n let v = BigInt(value);\n let bytes: number[] = [];\n while (v) {\n bytes.unshift(Number(v & 0xffn));\n v >>= 8n;\n }\n return addOp(0x5f + bytes.length, bytes);\n };\n const pushB = (buf: Uint8Array) => addOp(0x5f + buf.length, Array.from(buf));\n const cntWords = (hex: string, wordHex: string) =>\n (hex.match(new RegExp(wordHex, 'g')) || []).length;\n\n // Rough cost model\n const estShlCost = (seg: Array<{ s: number; e: number }>) => {\n let cost = 0;\n let first = true;\n for (const { s, e } of seg) {\n cost += 1 + e - s + 1; // PUSH segLen bytes\n if (31 - e > 0) cost += 1 /* PUSH1 */ + 1 /* shift byte */ + 1 /* SHL */;\n if (!first) cost += 1; // OR\n first = false;\n }\n return cost;\n };\n\n type PlanStep =\n | { t: 'num'; v: number | bigint }\n | { t: 'bytes'; b: Uint8Array }\n | { t: 'op'; o: number };\n\n const plan: PlanStep[] = [];\n const emitPushN = (v: number | bigint) => (plan.push({ t: 'num', v }), pushN(v));\n const emitPushB = (b: Uint8Array) => (plan.push({ t: 'bytes', b }), pushB(b));\n const emitOp = (o: number) => (plan.push({ t: 'op', o }), op(o));\n pushN(1n);\n // First pass: decide how to build each 32-byte word without emitting bytecode\n const _stack = [1n, 32n, 224n];\n for (let base = 0; base < n; base += 32) {\n const word = new Uint8Array(32);\n word.set(buf.slice(base, Math.min(base + 32, n)), 0);\n\n const seg: Array<{ s: number; e: number }> = [];\n for (let i = 0; i < 32; ) {\n while (i < 32 && word[i] === 0) ++i;\n if (i >= 32) break;\n const s = i;\n while (i < 32 && word[i] !== 0) ++i;\n seg.push({ s, e: i - 1 });\n }\n\n if (!seg.length) continue;\n\n // Decide whether to build this word via SHL/OR or as a single literal word\n const literal = word.slice(seg[0].s);\n const literalCost = 1 + literal.length;\n let literalVal = 0n;\n for (const b of literal) literalVal = (literalVal << 8n) | BigInt(b);\n const baseBytes = Math.ceil(Math.log2(base + 1) / 8);\n const wordHex = _uint8ArrayToHex(word);\n const shlCost = estShlCost(seg);\n\n const inStack = _stack.includes(literalVal);\n if (inStack) {\n emitPushB(literal);\n emitPushN(base);\n emitOp(0x52); // MSTORE\n continue;\n }\n if (literalCost > 8) {\n if (wordCache.has(wordHex)) {\n if (literalCost > wordCacheCost.get(wordHex)! + baseBytes) {\n emitPushN(wordCache.get(wordHex)!);\n emitOp(0x51);\n emitPushN(base);\n emitOp(0x52); // MSTORE\n continue;\n }\n } else if (wordCacheCost.get(wordHex) != -1) {\n const reuseCost = baseBytes + 3;\n const freq = cntWords(hex, wordHex);\n wordCacheCost.set(wordHex, freq * 32 > freq * reuseCost ? reuseCost : -1);\n wordCache.set(wordHex, base);\n }\n }\n\n const byte8s = seg.every(({ s, e }) => s === e);\n const byte8sCost = seg.length * 3; // each: PUSH1 (value), PUSH1 (offset), MSTORE8\n if (inStack) {\n emitPushB(literal);\n } else {\n // Aggregate all costs\n let bestCost = literalCost;\n let bestEmit: (() => void) | null = () => {\n emitPushB(literal);\n };\n if (literalVal == MAX_256_BIT) {\n bestCost = 2;\n bestEmit = () => {\n emitPushN(notVal);\n emitOp(0x19);\n };\n }\n // Try NOT: PUSH<n> ~val, NOT\n const notVal = not(literalVal);\n let notBytes = 0;\n let tmp = notVal;\n while (tmp > 0n) {\n ++notBytes;\n tmp >>= 8n;\n }\n notBytes = 1 + notBytes;\n if (notBytes === 0) notBytes;\n const notCost = notBytes + 1; // PUSH<n> + NOT\n if (notCost < bestCost) {\n bestCost = notCost;\n bestEmit = () => {\n emitPushN(notVal);\n emitOp(0x19);\n };\n }\n\n // Try SUB: PUSH1 0, PUSH<n> val, SUB\n const subVal = sub(0n, literalVal);\n let subBytes = 0;\n tmp = subVal;\n while (tmp > 0n) {\n ++subBytes;\n tmp >>= 8n;\n }\n if (subBytes === 0) subBytes = 1;\n if (_stack.includes(subVal)) subBytes = 1;\n const subCost = 1 + (1 + subBytes) + 1; // PUSH0 + PUSH<n> + SUB\n if (subCost < bestCost) {\n bestCost = subCost;\n bestEmit = () => {\n emitPushN(0);\n emitPushN(subVal);\n emitOp(0x03);\n };\n }\n\n // Try SIGNEXTEND: PUSH<n> truncated, PUSH1 byteSize, SIGNEXTEND\n for (let numBytes = 1; numBytes < literal.length; numBytes++) {\n const mask = (1n << BigInt(numBytes * 8)) - 1n;\n const truncated = literalVal & mask;\n const extended = sigext(BigInt(numBytes - 1), truncated);\n if (extended === literalVal && (truncated & (1n << BigInt(numBytes * 8 - 1))) !== 0n) {\n let trueByteCost = 1 + numBytes;\n if (_stack.includes(BigInt(extended))) trueByteCost = 1;\n let signCost = trueByteCost + (1 + 1) + 1; // PUSH<n> + PUSH1 + SIGNEXTEND\n if (signCost < bestCost) {\n bestCost = signCost;\n bestEmit = () => {\n emitPushN(truncated);\n emitPushN(numBytes - 1);\n emitOp(0x0b);\n };\n }\n break;\n }\n }\n\n // Try SHIFT+NOT: PUSH<n> val, PUSH1 shift, SHL, NOT\n for (let shiftBits = 8; shiftBits <= 248; shiftBits += 8) {\n const shifted = shr(BigInt(shiftBits), literalVal);\n if (shifted === 0n) break;\n\n const notShifted = not(shifted);\n const reconstructed = shl(BigInt(shiftBits), notShifted);\n\n if (reconstructed === literalVal) {\n let shiftedBytes = 0;\n let tmpShifted = notShifted;\n while (tmpShifted > 0n) {\n ++shiftedBytes;\n tmpShifted >>= 8n;\n }\n if (shiftedBytes === 0) shiftedBytes = 1;\n const shiftNotCost = 1 + shiftedBytes + 2 + 1 + 1; // PUSH<n> + PUSH1 + SHL + NOT\n if (shiftNotCost < bestCost) {\n bestCost = shiftNotCost;\n bestEmit = () => {\n emitPushN(notShifted);\n emitPushN(shiftBits);\n emitOp(0x1b); // SHL\n emitOp(0x19); // NOT\n };\n }\n }\n }\n\n if (byte8s && byte8sCost < bestCost && byte8sCost <= shlCost) {\n for (const { s } of seg) {\n emitPushN(word[s]);\n emitPushN(base + s);\n emitOp(0x53); // MSTORE8\n }\n continue; // Skip the single MSTORE at the end\n } else if (shlCost < bestCost) {\n // Use SHL/OR\n let first = true;\n for (const { s, e } of seg) {\n const suffix0s = 31 - e;\n emitPushB(word.slice(s, e + 1));\n if (suffix0s > 0) {\n emitPushN(suffix0s * 8);\n emitOp(0x1b); // SHL\n }\n if (!first) emitOp(0x17); // OR\n first = false;\n }\n } else {\n bestEmit!();\n }\n }\n emitPushN(base);\n emitOp(0x52); // MSTORE\n }\n\n ops = [];\n data = [];\n stack = [];\n trackedMemSize = 0;\n mem = new Map();\n // Pre 2nd pass. Push most frequent literals into stack.\n Array.from(stackFreq.entries())\n .filter(([val, freq]) => freq > 1 && val > 1n && val !== 32n && val !== 224n)\n .sort((a, b) => stackCnt.get(b[0])! - stackCnt.get(a[0])!)\n .filter(([val, _]) => {\n return typeof val === 'number' ? BigInt(val) : val <= MAX_128_BIT;\n })\n .slice(0, 15)\n .forEach(([val, _]) => {\n pushN(val);\n });\n pushN(1n);\n // Second pass: emit ops and track mem/stack\n for (const step of plan) {\n if (step.t === 'num') pushN(step.v);\n else if (step.t === 'bytes') pushB(step.b);\n else if (step.t === 'op') op(step.o);\n }\n\n // CALL stack layout (top to bottom): gas, address, value, argsOffset, argsSize, retOffset, retSize\n //\n // Opcodes breakdown:\n // - 0x5f5f: PUSH0 PUSH0 (retSize=0, retOffset=0)\n // - pushN(originalBuf.length): argsSize = actual data length\n // - pushN(padding): argsOffset (skip leading alignment bytes)\n // - 0x34: CALLVALUE (value)\n // - 0x5f35: PUSH0 CALLDATALOAD (address from calldata[0])\n // - 0x5a: GAS (remaining gas)\n // - 0xf1: CALL\n //\n // RETURNDATACOPY(destOffset=0, offset=0, length=RETURNDATASIZE):\n // - 0x3d5f5f3e: RETURNDATASIZE PUSH0 PUSH0 RETURNDATACOPY\n //\n // RETURN(offset=0, size=RETURNDATASIZE):\n // - 0x3d5ff3: RETURNDATASIZE PUSH0 RETURN\n\n op(0x5f); // PUSH0 (retSize)\n op(0x5f); // PUSH0 (retOffset)\n pushN(originalBuf.length); // argsSize = actual data length\n pushN(padding); // argsOffset = padding\n\n const out: number[] = [];\n for (let i = 0; i < ops.length; ++i) {\n out.push(ops[i]);\n if (ops[i] >= 0x60 && ops[i] <= 0x7f && data[i]) out.push(...data[i]!);\n }\n\n // - CALLVALUE, load target address from calldata[0], GAS, CALL\n // - RETURNDATACOPY(0, 0, RETURNDATASIZE)\n // - RETURN(0, RETURNDATASIZE)\n return '0x' + _uint8ArrayToHex(new Uint8Array(out)) + '345f355af13d5f5f3e3d5ff3';\n};\n\nconst DECOMPRESSOR_ADDRESS = '0x00000000000000000000000000000000000000e0';\n\n/**\n * Compresses eth_call payload using JIT, FastLZ (FLZ), or calldata RLE (CD) compression.\n * Auto-selects best algorithm if not specified. Only compresses if >800 bytes and beneficial.\n *\n * Only applies compression to calls that:\n * - target the latest block ID\n * - have no state overrides\n * - have a target address and calldata\n * - have no other properties (nonce, gas, etc.)\n *\n * @param payload - eth_call RPC payload\n * @param alg - 'jit' | 'flz' | 'cd' | undefined (auto)\n * @returns (un)compressed eth_call payload\n * @pure\n */\n//! @__PURE__\nexport const compress_call = function (payload: any, alg?: string): any {\n const { method, params } = payload;\n if (method && method !== 'eth_call') return payload;\n const txObj = params?.[0] || payload;\n const blockParam = params?.[1];\n const overrides = params?.[2];\n\n // Validation\n if (\n (blockParam && blockParam !== 'latest') ||\n (overrides && Object.keys(overrides).length > 0) ||\n !txObj?.to ||\n !txObj?.data ||\n Object.keys(txObj).some((k) => !['to', 'data', 'from'].includes(k))\n ) {\n return payload;\n }\n\n const originalSize = txObj.data.length;\n if (originalSize < MIN_BODY_SIZE) return payload;\n\n const inputData = '0x' + _normHex(txObj.data);\n const to = txObj.to;\n\n // Determine compression method and generate bytecode/calldata\n let bytecode: string;\n let calldata: string;\n\n if (alg === 'jit' || (!alg && (originalSize < 3000 || originalSize >= 8000))) {\n bytecode = _jitDecompressor(inputData);\n calldata = '0x' + _normHex(to).padStart(64, '0');\n } else {\n // Need FLZ and/or CD compression\n const flzData = alg === 'flz' || !alg ? LibZip.flzCompress(inputData) : null;\n const cdData = alg === 'cd' || (!alg && flzData) ? LibZip.cdCompress(inputData) : null;\n\n // Pick the best or requested one\n const useFlz =\n alg === 'flz' || (!alg && flzData && (!cdData || flzData.length < cdData.length));\n\n if (useFlz) {\n calldata = flzData!;\n bytecode = flzFwdBytecode(to);\n } else {\n calldata = cdData!;\n bytecode = rleFwdBytecode(to);\n }\n }\n\n // Skip if not beneficial\n if (bytecode.length + calldata.length >= originalSize) return payload;\n\n return {\n ...payload,\n params: [\n { ...txObj, to: DECOMPRESSOR_ADDRESS, data: calldata },\n blockParam || 'latest',\n { ...overrides, [DECOMPRESSOR_ADDRESS]: { code: bytecode } },\n ],\n };\n};\n", "export const MIN_BODY_SIZE = 1150;\n\nconst _sup_enc = new Map<string, string[] | -1>();\nconst _enc = ['deflate-raw', 'deflate', 'gzip'];\nlet supported: string | -1 | null = typeof CompressionStream === 'undefined' ? -1 : null;\n\nexport type PayloadTransform = (payload: unknown) => unknown;\n\n/**\n * Fetch-compatible function that applies HTTP compression (gzip/deflate) to requests.\n * Optionally transforms request payloads before sending.\n *\n * @param input - The resource URL, Request object, or URL string\n * @param init - Optional request initialization options\n * @param transformPayload - Optional function to transform the request payload\n * @returns A Promise that resolves to the Response\n */\n//! @__PURE__\nexport async function compressModule(\n input: string | URL | Request,\n init?: RequestInit,\n): Promise<Response>;\n\n//! @__PURE__\nexport async function compressModule(\n input: string | URL | Request,\n init: RequestInit | undefined,\n transformPayload?: PayloadTransform,\n): Promise<Response>;\n\n//! @__PURE__\nexport async function compressModule(\n input: string | URL | Request,\n init?: RequestInit,\n transformPayload?: PayloadTransform,\n): Promise<Response> {\n const url =\n typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;\n\n const cached = _sup_enc.get(url);\n supported = supported === -1 ? -1 : cached === -1 ? -1 : (cached?.[0] ?? null);\n\n // Only apply the optional payload transform\n // when native HTTP compression is not available for this URL.\n if (transformPayload && init?.body && typeof init.body === 'string') {\n if (supported === -1 || supported === null) {\n try {\n const parsed = JSON.parse(init.body as string);\n const next = transformPayload(parsed);\n if (next !== undefined) {\n init = {\n ...init,\n body: JSON.stringify(next),\n };\n }\n } catch {\n // Non-JSON bodies are left untouched.\n }\n }\n }\n\n const bodyStr = typeof init?.body === 'string' ? (init.body as string) : null;\n\n if (supported && supported !== -1 && bodyStr && bodyStr.length >= MIN_BODY_SIZE) {\n const compressed = await new Response(\n new Blob([bodyStr])\n .stream()\n .pipeThrough(new CompressionStream(supported as CompressionFormat)),\n ).blob();\n init = {\n ...init,\n body: compressed,\n headers: { ...(init && init.headers), 'Content-Encoding': supported },\n };\n }\n const response = await fetch(url, init);\n\n if (supported === null) {\n const encodings = response.headers\n .get('Accept-Encoding')\n ?.split(',')\n .filter((e) => _enc.includes(e));\n _sup_enc.set(url, encodings?.length ? encodings : -1);\n }\n\n return response;\n}\n\n/**\n * Combines HTTP compression with EVM JIT compression.\n * Just pass this as `fetchFn` to viem's http transport.\n *\n * @param input - The resource URL or Request object\n * @param init - Optional request initialization options\n * @returns A Promise that resolves to the Response\n *\n * @example\n * ```ts\n * const client = createPublicClient({\n * transport: http(rpcUrl, { fetchFn: compressModuleWithJIT })\n * })\n * ```\n *\n * If the target RPC endpoint and runtime support native HTTP compression,\n * this helper prefers that path and will not apply JIT calldata compression;\n * the JIT-based transform is used as a legacy/fallback path when HTTP\n * content-encoding is unavailable.\n * @pure\n */\n//! @__PURE__\nexport const compressModuleWithJIT = (\n input: RequestInfo | URL,\n init?: RequestInit,\n): Promise<Response> => {\n return import('./jit-compressor').then(({ compress_call }) =>\n compressModule(input, init, compress_call),\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["jit_compressor_exports", "__export", "compress_call", "LibZip", "MAX_128_BIT", "MAX_256_BIT", "_normHex", "_hexToUint8Array", "_uint8ArrayToHex", "not", "and", "or", "xor", "shl", "shr", "sub", "sigext", "flzFwdBytecode", "rleFwdBytecode", "_jitDecompressor", "DECOMPRESSOR_ADDRESS", "init_jit_compressor", "__esmMin", "hex", "normalized", "len", "bytes", "i", "a", "b", "shift", "value", "byteSize", "numBytes", "mask", "signBit", "maskedVal", "address", "calldata", "originalBuf", "padding", "buf", "n", "ops", "data", "stack", "trackedMemSize", "mem", "firstPass", "getStackIdx", "val", "idx", "opFreq", "dataFreq", "stackFreq", "wordCache", "wordCacheCost", "roundUp32", "x", "pushCounter", "stackCnt", "pop2", "ctr", "m", "k", "delta", "inc", "pushOp", "op", "d", "imm", "pushS", "v", "freq", "trackMem", "offset", "size", "addOp", "_", "opcode", "pushN", "pushB", "cntWords", "wordHex", "estShlCost", "seg", "cost", "first", "s", "e", "plan", "emitPushN", "emitPushB", "emitOp", "o", "_stack", "base", "word", "literal", "literalCost", "literalVal", "baseBytes", "shlCost", "inStack", "reuseCost", "byte8s", "byte8sCost", "bestCost", "bestEmit", "notVal", "notBytes", "tmp", "notCost", "subVal", "subBytes", "subCost", "truncated", "extended", "trueByteCost", "signCost", "shiftBits", "shifted", "notShifted", "shiftedBytes", "tmpShifted", "shiftNotCost", "suffix0s", "step", "out", "payload", "alg", "method", "params", "txObj", "blockParam", "overrides", "originalSize", "inputData", "to", "bytecode", "flzData", "cdData", "compressModule", "input", "init", "transformPayload", "_a", "url", "cached", "_sup_enc", "supported", "parsed", "next", "bodyStr", "compressed", "response", "encodings", "e", "_enc", "MIN_BODY_SIZE", "compressModuleWithJIT", "init_index", "__esmMin", "compress_call"]
3
+ "sources": ["../../src/index.ts"],
4
+ "sourcesContent": ["export const MIN_BODY_SIZE = 1150;\n\nconst _cache = new Map<string, string | -1>();\nconst _enc = ['gzip', 'deflate'] as const;\ntype SupportedEncoding = (typeof _enc)[number];\n\nexport type PayloadTransform = (payload: unknown) => unknown;\nexport type CompressionMode = 'passive' | 'proactive' | 'gzip' | 'deflate' | PayloadTransform;\n\n/**\n * @param input - URL or Request\n * @param init - Request options\n * @param mode - Compression mode:\n * - 'passive' (default): discover support via Accept-Encoding header first\n * - 'proactive': compress with gzip first, adjust if server rejects\n * - 'gzip' | 'deflate': use specified encoding directly (known support)\n * - PayloadTransform function: transform payload, skip HTTP compression\n */\nexport async function compressModule(\n input: string | URL | Request,\n init?: RequestInit,\n mode?: CompressionMode,\n): Promise<Response> {\n const req = input instanceof Request ? input : null;\n const url =\n typeof input === 'string' ? input : input instanceof Request ? input.url : input.toString();\n const bodyStr = typeof init?.body === 'string' ? init.body : null;\n\n // Custom transform: apply and skip HTTP compression\n if (typeof mode === 'function') {\n if (req && !init) return fetch(req);\n let body = init?.body;\n if (bodyStr)\n try {\n const next = mode(JSON.parse(bodyStr));\n if (next !== undefined) body = JSON.stringify(next);\n } catch {}\n return fetch(req ?? url, { ...init, body });\n }\n\n const cached = _cache.get(url);\n const hasCS = typeof CompressionStream !== 'undefined';\n const known = mode === 'gzip' || mode === 'deflate';\n const encoding = !hasCS\n ? null\n : known\n ? (mode as SupportedEncoding)\n : mode === 'proactive'\n ? cached === -1\n ? null\n : (cached ?? 'gzip')\n : typeof cached === 'string'\n ? cached\n : null;\n\n const shouldCompress = !!encoding && !!bodyStr && bodyStr.length >= MIN_BODY_SIZE;\n const opts: RequestInit = { ...init, priority: 'high' as RequestPriority };\n const headers = new Headers(opts.headers);\n if (shouldCompress) {\n opts.body = await new Response(\n new Blob([bodyStr!])\n .stream()\n .pipeThrough(new CompressionStream(encoding as CompressionFormat)),\n ).blob();\n headers.set('Content-Encoding', encoding);\n }\n opts.headers = headers;\n\n const response = await fetch(req ?? url, opts);\n\n // Cache discovery for passive/proactive (not known modes)\n if (!known && cached === undefined) {\n const header = response.headers.get('Accept-Encoding');\n const discovered =\n header\n ?.split(',')\n .map((e) => e.trim())\n .find((e): e is SupportedEncoding => _enc.includes(e as SupportedEncoding)) ?? -1;\n _cache.set(\n url,\n mode === 'proactive' && shouldCompress ? (response.ok ? encoding! : discovered) : discovered,\n );\n }\n\n return response;\n}\n"],
5
+ "mappings": "AAAO,IAAMA,EAAgB,KAEvBC,EAAS,IAAI,IACbC,EAAO,CAAC,OAAQ,SAAS,EAe/B,eAAsBC,EACpBC,EACAC,EACAC,EACmB,CACnB,IAAMC,EAAMH,aAAiB,QAAUA,EAAQ,KACzCI,EACJ,OAAOJ,GAAU,SAAWA,EAAQA,aAAiB,QAAUA,EAAM,IAAMA,EAAM,SAAS,EACtFK,EAAU,OAAOJ,GAAA,YAAAA,EAAM,OAAS,SAAWA,EAAK,KAAO,KAG7D,GAAI,OAAOC,GAAS,WAAY,CAC9B,GAAIC,GAAO,CAACF,EAAM,OAAO,MAAME,CAAG,EAClC,IAAIG,EAAOL,GAAA,YAAAA,EAAM,KACjB,GAAII,EACF,GAAI,CACF,IAAME,EAAOL,EAAK,KAAK,MAAMG,CAAO,CAAC,EACjCE,IAAS,SAAWD,EAAO,KAAK,UAAUC,CAAI,EACpD,MAAQ,CAAC,CACX,OAAO,MAAMJ,GAAOC,EAAK,CAAE,GAAGH,EAAM,KAAAK,CAAK,CAAC,CAC5C,CAEA,IAAME,EAASX,EAAO,IAAIO,CAAG,EACvBK,EAAQ,OAAO,kBAAsB,IACrCC,EAAQR,IAAS,QAAUA,IAAS,UACpCS,EAAYF,EAEdC,EACGR,EACDA,IAAS,YACPM,IAAW,GACT,KACCA,GAAU,OACb,OAAOA,GAAW,SAChBA,EACA,KATN,KAWEI,EAAiB,CAAC,CAACD,GAAY,CAAC,CAACN,GAAWA,EAAQ,QAAU,KAC9DQ,EAAoB,CAAE,GAAGZ,EAAM,SAAU,MAA0B,EACnEa,EAAU,IAAI,QAAQD,EAAK,OAAO,EACpCD,IACFC,EAAK,KAAO,MAAM,IAAI,SACpB,IAAI,KAAK,CAACR,CAAQ,CAAC,EAChB,OAAO,EACP,YAAY,IAAI,kBAAkBM,CAA6B,CAAC,CACrE,EAAE,KAAK,EACPG,EAAQ,IAAI,mBAAoBH,CAAQ,GAE1CE,EAAK,QAAUC,EAEf,IAAMC,EAAW,MAAM,MAAMZ,GAAOC,EAAKS,CAAI,EAG7C,GAAI,CAACH,GAASF,IAAW,OAAW,CAClC,IAAMQ,EAASD,EAAS,QAAQ,IAAI,iBAAiB,EAC/CE,GACJD,GAAA,YAAAA,EACI,MAAM,KACP,IAAKE,GAAMA,EAAE,KAAK,GAClB,KAAMA,GAA8BpB,EAAK,SAASoB,CAAsB,KAAM,GACnFrB,EAAO,IACLO,EACAF,IAAS,aAAeU,GAAkBG,EAAS,GAAKJ,EAA0BM,CACpF,CACF,CAEA,OAAOF,CACT",
6
+ "names": ["MIN_BODY_SIZE", "_cache", "_enc", "compressModule", "input", "init", "mode", "req", "url", "bodyStr", "body", "next", "cached", "hasCS", "known", "encoding", "shouldCompress", "opts", "headers", "response", "header", "discovered", "e"]
7
7
  }
@@ -1,3 +1,2 @@
1
- var Dt=Object.defineProperty;var mt=(s,e)=>()=>(s&&(e=s(s=0)),e);var Pt=(s,e)=>{for(var i in e)Dt(s,i,{get:e[i],enumerable:!0})};var St={};Pt(St,{compress_call:()=>jt});import{LibZip as dt}from"solady";var Ut,w,E,Ot,pt,Q,Nt,qt,Tt,ht,xt,yt,wt,Et,Ft,Lt,Bt,jt,It=mt(()=>{Ut=(1n<<128n)-1n,w=(1n<<256n)-1n,E=s=>s.replace(/^0x/,"").toLowerCase(),Ot=s=>{let e=E(s),i=e.length,f=new Uint8Array(i/2);for(let l=0;l<i;l+=2)f[l/2]=Number.parseInt(e.slice(l,l+2),16);return f},pt=s=>{let e="";for(let i=0;i<s.length;i++)e+=s[i].toString(16).padStart(2,"0");return e},Q=s=>~s&w,Nt=(s,e)=>s&e&w,qt=(s,e)=>(s|e)&w,Tt=(s,e)=>(s^e)&w,ht=(s,e)=>e<<s&w,xt=(s,e)=>e>>s&w,yt=(s,e)=>s-e&w,wt=(s,e)=>{let i=Number(s)+1,f=(1n<<BigInt(i*8))-1n,l=1n<<BigInt(i*8-1),d=e&f;return(d&l?d|~f&w:d)&w};Et=s=>`0x365f73${E(s)}815b838110602f575f80848134865af1503d5f803e3d5ff35b803590815f1a8060051c908115609857600190600783149285831a6007018118840218600201948383011a90601f1660081b0101808603906020811860208211021890815f5b80830151818a015201858110609257505050600201019201916018565b82906075565b6001929350829150019101925f5b82811060b3575001916018565b85851060c1575b60010160a6565b936001818192355f1a878501530194905060ba56`;Ft=s=>`0x5f5f5b368110602d575f8083813473${E(s)}5af1503d5f803e3d5ff35b600180820192909160031981019035185f1a8015604c57815301906002565b505f19815282820192607f9060031981019035185f1a818111156072575b160101906002565b838101368437606a56`,Lt=function(s){let e=E(s),i=Ot(e),f=28,l=new Uint8Array(f+i.length);l.set(i,f);let d=l.length,p=[],g=[],u=[],M=0,B=new Map,A=!0,_=t=>{let r=u.lastIndexOf(t);return r=r===-1?-1:u.length-1-r,r>15?-1:r},F=new Map,tt=new Map,et=new Map,H=new Map,J=new Map,_t=t=>t+31&-32,nt=0,W=new Map,S=()=>[u.pop(),u.pop()],st=(t,r,n)=>t.set(r,(t.get(r)||0)+n),rt=(t,r)=>st(t,r,1),z=(t,r)=>{p.push(t),rt(F,t);let n=r??null;g.push(n),rt(tt,n)},b=(t,r=1)=>{u.push(t),st(et,t,r),++nt,W.set(t,nt)},it=(t,r)=>{M=_t(t+r)},O=(t,r)=>{if(t===54)b(32n,0);else if(t===89)b(BigInt(M),0);else if(t===11){let[n,c]=S();b(wt(n,c),1)}else if(t===25){let n=u.pop();b(Q(n),0)}else if(t===24){let[n,c]=S();b(Tt(n,c),1)}else if(t===22){let[n,c]=S();b(Nt(n,c),1)}else if(t===3){let[n,c]=S();b(yt(n,c),1)}else if(t===27){let[n,c]=S();b(ht(n,c),1)}else if(t===28){let[n,c]=S();b(xt(n,c),1)}else if(t===23){let[n,c]=S();b(qt(n,c),1)}else if(t>=96&&t<=127||t===95){let n=0n;for(let y of r||[])n=n<<8n|BigInt(y);if(n==224n){b(n,0),z(48);return}if(n==32n){b(n,0),z(54);return}if(n===BigInt(M)){b(n,0),z(89);return}let c=_(n);if(c!==-1&&t!=95){b(n,A?1:-1),z(128+c);return}if(n==w){b(n),z(95),z(25);return}b(n)}else if(t===81){let n=Number(u.pop());b(B.has(n)?B.get(n):0n)}else if(t===82){let[n,c]=S(),y=Number(n);B.set(y,c&w),it(y,32)}else if(t===83){let[n,c]=S();it(Number(n),1)}else t===243&&S();z(t,r||null)},V=t=>O(t),D=t=>{if(t>0&&t===M)return O(89);if(t==32n)return O(54);if(!t)return O(95,void 0);let r=BigInt(t),n=[];for(;r;)n.unshift(Number(r&0xffn)),r>>=8n;return O(95+n.length,n)},ot=t=>O(95+t.length,Array.from(t)),kt=(t,r)=>(t.match(new RegExp(r,"g"))||[]).length,At=t=>{let r=0,n=!0;for(let{s:c,e:y}of t)r+=1+y-c+1,31-y>0&&(r+=3),n||(r+=1),n=!1;return r},Z=[],m=t=>(Z.push({t:"num",v:t}),D(t)),v=t=>(Z.push({t:"bytes",b:t}),ot(t)),h=t=>(Z.push({t:"op",o:t}),V(t));D(1n);let Y=[1n,32n,224n];for(let t=0;t<d;t+=32){let r=new Uint8Array(32);r.set(l.slice(t,Math.min(t+32,d)),0);let n=[];for(let o=0;o<32;){for(;o<32&&r[o]===0;)++o;if(o>=32)break;let x=o;for(;o<32&&r[o]!==0;)++o;n.push({s:x,e:o-1})}if(!n.length)continue;let c=r.slice(n[0].s),y=1+c.length,I=0n;for(let o of c)I=I<<8n|BigInt(o);let ct=Math.ceil(Math.log2(t+1)/8),P=pt(r),lt=At(n),ft=Y.includes(I);if(ft){v(c),m(t),h(82);continue}if(y>8){if(H.has(P)){if(y>J.get(P)+ct){m(H.get(P)),h(81),m(t),h(82);continue}}else if(J.get(P)!=-1){let o=ct+3,x=kt(e,P);J.set(P,x*32>x*o?o:-1),H.set(P,t)}}let zt=n.every(({s:o,e:x})=>o===x),at=n.length*3;if(ft)v(c);else{let o=y,x=()=>{v(c)};I==w&&(o=2,x=()=>{m(X),h(25)});let X=Q(I),N=0,L=X;for(;L>0n;)++N,L>>=8n;N=1+N;let ut=N+1;ut<o&&(o=ut,x=()=>{m(X),h(25)});let $=yt(0n,I),j=0;for(L=$;L>0n;)++j,L>>=8n;j===0&&(j=1),Y.includes($)&&(j=1);let bt=1+(1+j)+1;bt<o&&(o=bt,x=()=>{m(0),m($),h(3)});for(let a=1;a<c.length;a++){let q=(1n<<BigInt(a*8))-1n,C=I&q,T=wt(BigInt(a-1),C);if(T===I&&(C&1n<<BigInt(a*8-1))!==0n){let U=1+a;Y.includes(BigInt(T))&&(U=1);let K=U+2+1;K<o&&(o=K,x=()=>{m(C),m(a-1),h(11)});break}}for(let a=8;a<=248;a+=8){let q=xt(BigInt(a),I);if(q===0n)break;let C=Q(q);if(ht(BigInt(a),C)===I){let U=0,K=C;for(;K>0n;)++U,K>>=8n;U===0&&(U=1);let gt=1+U+2+1+1;gt<o&&(o=gt,x=()=>{m(C),m(a),h(27),h(25)})}}if(zt&&at<o&&at<=lt){for(let{s:a}of n)m(r[a]),m(t+a),h(83);continue}else if(lt<o){let a=!0;for(let{s:q,e:C}of n){let T=31-C;v(r.slice(q,C+1)),T>0&&(m(T*8),h(27)),a||h(23),a=!1}}else x()}m(t),h(82)}p=[],g=[],u=[],M=0,B=new Map,Array.from(et.entries()).filter(([t,r])=>r>1&&t>1n&&t!==32n&&t!==224n).sort((t,r)=>W.get(r[0])-W.get(t[0])).filter(([t,r])=>typeof t=="number"?BigInt(t):t<=Ut).slice(0,15).forEach(([t,r])=>{D(t)}),D(1n);for(let t of Z)t.t==="num"?D(t.v):t.t==="bytes"?ot(t.b):t.t==="op"&&V(t.o);V(95),V(95),D(i.length),D(f);let G=[];for(let t=0;t<p.length;++t)G.push(p[t]),p[t]>=96&&p[t]<=127&&g[t]&&G.push(...g[t]);return"0x"+pt(new Uint8Array(G))+"345f355af13d5f5f3e3d5ff3"},Bt="0x00000000000000000000000000000000000000e0";jt=function(s,e){let{method:i,params:f}=s;if(i&&i!=="eth_call")return s;let l=f?.[0]||s,d=f?.[1],p=f?.[2];if(d&&d!=="latest"||p&&Object.keys(p).length>0||!l?.to||!l?.data||Object.keys(l).some(_=>!["to","data","from"].includes(_)))return s;let g=l.data.length;if(g<1150)return s;let u="0x"+E(l.data),M=l.to,B,A;if(e==="jit"||!e&&(g<3e3||g>=8e3))B=Lt(u),A="0x"+E(M).padStart(64,"0");else{let _=e==="flz"||!e?dt.flzCompress(u):null,F=e==="cd"||!e&&_?dt.cdCompress(u):null;e==="flz"||!e&&_&&(!F||_.length<F.length)?(A=_,B=Et(M)):(A=F,B=Ft(M))}return B.length+A.length>=g?s:{...s,params:[{...l,to:Bt,data:A},d||"latest",{...p,[Bt]:{code:B}}]}}});async function Zt(s,e,i){let f=typeof s=="string"?s:s instanceof URL?s.toString():s.url,l=Ct.get(f);if(R=R===-1||l===-1?-1:l?.[0]??null,i&&e?.body&&typeof e.body=="string"&&(R===-1||R===null))try{let g=JSON.parse(e.body),u=i(g);u!==void 0&&(e={...e,body:JSON.stringify(u)})}catch{}let d=typeof e?.body=="string"?e.body:null;if(R&&R!==-1&&d&&d.length>=1150){let g=await new Response(new Blob([d]).stream().pipeThrough(new CompressionStream(R))).blob();e={...e,body:g,headers:{...e&&e.headers,"Content-Encoding":R}}}let p=await fetch(f,e);if(R===null){let g=p.headers.get("Accept-Encoding")?.split(",").filter(u=>Vt.includes(u));Ct.set(f,g?.length?g:-1)}return p}var Kt,Ct,Vt,R,Jt,Mt=mt(()=>{Kt=1150,Ct=new Map,Vt=["deflate-raw","deflate","gzip"],R=typeof CompressionStream>"u"?-1:null;Jt=(s,e)=>Promise.resolve().then(()=>(It(),St)).then(({compress_call:i})=>Zt(s,e,i))});Mt();import k from"node:zlib";var Rt=(s,e)=>Object.assign(s,{writable:new WritableStream({write(i){return e.write(i),Promise.resolve()},close(){return e.end(),Promise.resolve()}}),readable:new ReadableStream({type:"bytes",start(i){e.on("data",f=>i.enqueue(f)),e.once("end",()=>i.close())}})});globalThis.CompressionStream||(globalThis.CompressionStream=class{constructor(e){let i;e==="deflate"?i=k.createDeflate():e==="gzip"?i=k.createGzip():e==="br"?i=k.createBrotliCompress():i=k.createDeflateRaw(),Rt(this,i)}});globalThis.DecompressionStream||(globalThis.DecompressionStream=class{constructor(e){let i;e==="deflate"?i=k.createInflate():e==="gzip"?i=k.createGunzip():e==="br"?i=k.createBrotliDecompress():i=k.createInflateRaw(),Rt(this,i)}});export{Kt as MIN_BODY_SIZE,Zt as compressModule,Jt as compressModuleWithJIT};
2
- //! @__PURE__
1
+ import o from"node:zlib";var C=1150,h=new Map,w=["gzip","deflate"];async function R(t,s,e){let n=t instanceof Request?t:null,c=typeof t=="string"?t:t instanceof Request?t.url:t.toString(),r=typeof s?.body=="string"?s.body:null;if(typeof e=="function"){if(n&&!s)return fetch(n);let f=s?.body;if(r)try{let i=e(JSON.parse(r));i!==void 0&&(f=JSON.stringify(i))}catch{}return fetch(n??c,{...s,body:f})}let a=h.get(c),S=typeof CompressionStream<"u",u=e==="gzip"||e==="deflate",l=S?u?e:e==="proactive"?a===-1?null:a??"gzip":typeof a=="string"?a:null:null,y=!!l&&!!r&&r.length>=1150,p={...s,priority:"high"},m=new Headers(p.headers);y&&(p.body=await new Response(new Blob([r]).stream().pipeThrough(new CompressionStream(l))).blob(),m.set("Content-Encoding",l)),p.headers=m;let d=await fetch(n??c,p);if(!u&&a===void 0){let i=d.headers.get("Accept-Encoding")?.split(",").map(g=>g.trim()).find(g=>w.includes(g))??-1;h.set(c,e==="proactive"&&y&&d.ok?l:i)}return d}var b=(t,s)=>Object.assign(t,{writable:new WritableStream({write(e){return s.write(e),Promise.resolve()},close(){return s.end(),Promise.resolve()}}),readable:new ReadableStream({type:"bytes",start(e){s.on("data",n=>e.enqueue(n)),s.once("end",()=>e.close())}})});globalThis.CompressionStream||(globalThis.CompressionStream=class{constructor(s){let e;s==="deflate"?e=o.createDeflate():s==="gzip"?e=o.createGzip():s==="br"?e=o.createBrotliCompress():e=o.createDeflateRaw(),b(this,e)}});globalThis.DecompressionStream||(globalThis.DecompressionStream=class{constructor(s){let e;s==="deflate"?e=o.createInflate():s==="gzip"?e=o.createGunzip():s==="br"?e=o.createBrotliDecompress():e=o.createInflateRaw(),b(this,e)}});export{C as MIN_BODY_SIZE,R as compressModule};
3
2
  //# sourceMappingURL=index.node.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/jit-compressor.ts", "../../src/index.ts", "../../src/index.node.ts"],
4
- "sourcesContent": ["import { LibZip } from 'solady';\nimport { MIN_BODY_SIZE } from './index';\n\nconst MAX_128_BIT = (1n << 128n) - 1n;\nconst MAX_256_BIT = (1n << 256n) - 1n;\n\nconst _normHex = (hex: string): string => hex.replace(/^0x/, '').toLowerCase();\n\nconst _hexToUint8Array = (hex: string): Uint8Array => {\n const normalized = _normHex(hex);\n const len = normalized.length;\n const bytes = new Uint8Array(len / 2);\n for (let i = 0; i < len; i += 2) {\n bytes[i / 2] = Number.parseInt(normalized.slice(i, i + 2), 16);\n }\n return bytes;\n};\n\nconst _uint8ArrayToHex = (bytes: Uint8Array): string => {\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += bytes[i].toString(16).padStart(2, '0');\n }\n return hex;\n};\n\nconst not = (a: bigint): bigint => ~a & MAX_256_BIT;\nconst and = (a: bigint, b: bigint): bigint => a & b & MAX_256_BIT;\nconst or = (a: bigint, b: bigint): bigint => (a | b) & MAX_256_BIT;\nconst xor = (a: bigint, b: bigint): bigint => (a ^ b) & MAX_256_BIT;\nconst shl = (shift: bigint, value: bigint): bigint => (value << shift) & MAX_256_BIT;\nconst shr = (shift: bigint, value: bigint): bigint => (value >> shift) & MAX_256_BIT;\nconst sub = (a: bigint, b: bigint): bigint => (a - b) & MAX_256_BIT;\nconst sigext = (byteSize: bigint, value: bigint): bigint => {\n const numBytes = Number(byteSize) + 1;\n const mask = (1n << BigInt(numBytes * 8)) - 1n;\n const signBit = 1n << BigInt(numBytes * 8 - 1);\n const maskedVal = value & mask;\n const extended = maskedVal & signBit ? maskedVal | (~mask & MAX_256_BIT) : maskedVal;\n return extended & MAX_256_BIT;\n};\n\n/**\n * Generates FastLZ (LZ77) decompressor bytecode. The generated code decompresses incoming calldata and forwards it to the target address.\n * @param address - Target contract address\n * @see {@link https://github.com/Vectorized/solady/blob/main/src/utils/LibZip.sol}\n * @pure\n */\n//! @__PURE__\nconst flzFwdBytecode = (address: string): string =>\n `0x365f73${_normHex(address)}815b838110602f575f80848134865af1503d5f803e3d5ff35b803590815f1a8060051c908115609857600190600783149285831a6007018118840218600201948383011a90601f1660081b0101808603906020811860208211021890815f5b80830151818a015201858110609257505050600201019201916018565b82906075565b6001929350829150019101925f5b82811060b3575001916018565b85851060c1575b60010160a6565b936001818192355f1a878501530194905060ba56`;\n\n/**\n * Generates RLE (run-length encoded) decompressor bytecode. The generated code decompresses incoming calldata and forwards it to the target address.\n * @param address - Target contract address\n * @see {@link https://github.com/Vectorized/solady/blob/main/src/utils/LibZip.sol}\n * @pure\n */\n//! @__PURE__\nconst rleFwdBytecode = (address: string): string =>\n `0x5f5f5b368110602d575f8083813473${_normHex(address)}5af1503d5f803e3d5ff35b600180820192909160031981019035185f1a8015604c57815301906002565b505f19815282820192607f9060031981019035185f1a818111156072575b160101906002565b838101368437606a56`;\n\nconst _jitDecompressor = function (calldata: string): string {\n const hex = _normHex(calldata);\n const originalBuf = _hexToUint8Array(hex);\n\n // Right\u2011align the 4\u2011byte selector in the first 32\u2011byte slot (offset 28),\n // so that everything after the selector is reconstructed on mostly\n // word\u2011aligned boundaries. This keeps the ABI words (and therefore most\n // calldata reconstruction) 32\u2011byte aligned in memory.\n // That way we avoid encoding offsets for writes (most of the time),\n const padding = 28;\n const buf = new Uint8Array(padding + originalBuf.length);\n buf.set(originalBuf, padding);\n\n const n = buf.length;\n\n let ops: number[] = [];\n let data: (number[] | null)[] = [];\n let stack: bigint[] = [];\n let trackedMemSize = 0;\n let mem = new Map<number, bigint>();\n let firstPass = true;\n const getStackIdx = (val: bigint): number => {\n let idx = stack.lastIndexOf(val);\n idx = idx === -1 ? -1 : stack.length - 1 - idx;\n return idx > 15 ? -1 : idx;\n };\n\n const opFreq = new Map<number, number>();\n const dataFreq = new Map<number[] | null, number>();\n const stackFreq = new Map<bigint, number>();\n const wordCache = new Map<string, number>();\n const wordCacheCost = new Map<string, number>();\n const roundUp32 = (x: number) => (x + 31) & ~31;\n\n let pushCounter = 0;\n const stackCnt = new Map<bigint, number>();\n const pop2 = (): [bigint, bigint] => [stack.pop()!, stack.pop()!];\n const ctr = <K>(m: Map<K, number>, k: K, delta: number) => m.set(k, (m.get(k) || 0) + delta);\n const inc = <K>(m: Map<K, number>, k: K) => ctr(m, k, 1);\n const pushOp = (op: number, d?: number[] | null) => {\n ops.push(op);\n inc(opFreq, op);\n const imm = d ?? null;\n data.push(imm);\n inc(dataFreq, imm);\n };\n const pushS = (v: bigint, freq: number = 1) => {\n stack.push(v);\n ctr(stackFreq, v, freq);\n ++pushCounter;\n stackCnt.set(v, pushCounter);\n };\n\n const trackMem = (offset: number, size: number) => {\n trackedMemSize = roundUp32(offset + size);\n };\n\n const addOp = (op: number, imm?: number[]) => {\n if (op === 0x36) {\n pushS(32n, 0);\n } else if (op === 0x59) {\n pushS(BigInt(trackedMemSize), 0);\n } else if (op === 0x0b) {\n // SIGNEXTEND\n const [byteSize, val] = pop2();\n pushS(sigext(byteSize, val), 1);\n } else if (op === 0x19) {\n // NOT\n const val = stack.pop()!;\n pushS(not(val), 0);\n } else if (op === 0x18) {\n // XOR\n const [a, b] = pop2();\n pushS(xor(a, b), 1);\n } else if (op === 0x16) {\n // AND\n const [a, b] = pop2();\n pushS(and(a, b), 1);\n } else if (op === 0x03) {\n // SUB\n const [a, b] = pop2();\n pushS(sub(a, b), 1);\n } else if (op === 0x1b) {\n // SHL\n let [shift, val] = pop2();\n pushS(shl(shift, val), 1);\n } else if (op === 0x1c) {\n // SHR\n let [shift, val] = pop2();\n pushS(shr(shift, val), 1);\n } else if (op === 0x17) {\n // OR\n let [a, b] = pop2();\n pushS(or(a, b), 1);\n } else if ((op >= 0x60 && op <= 0x7f) || op === 0x5f) {\n // PUSH\n let v = 0n;\n for (const b of imm || []) v = (v << 8n) | BigInt(b);\n if (v == 224n) {\n pushS(v, 0);\n pushOp(0x30); // ADDRESS\n return;\n }\n if (v == 32n) {\n pushS(v, 0);\n pushOp(0x36); // ADDRESS\n return;\n }\n if (v === BigInt(trackedMemSize)) {\n pushS(v, 0);\n pushOp(0x59); // MemSize\n return;\n }\n const idx = getStackIdx(v);\n if (idx !== -1 && op != 0x5f) {\n let pushCtr = firstPass ? 1 : -1;\n pushS(v, pushCtr);\n pushOp(128 + idx);\n return;\n }\n if (v == MAX_256_BIT) {\n pushS(v);\n pushOp(0x5f); // 0\n pushOp(0x19); // NOT\n return;\n }\n pushS(v);\n } else if (op === 0x51) {\n // MLOAD\n const k = Number(stack.pop()!);\n pushS(mem.has(k) ? mem.get(k)! : 0n);\n } else if (op === 0x52) {\n // MSTORE\n const [offset, value] = pop2();\n const k = Number(offset);\n mem.set(k, value & MAX_256_BIT);\n trackMem(k, 32);\n } else if (op === 0x53) {\n // MSTORE8\n const [offset, _] = pop2();\n trackMem(Number(offset), 1);\n } else if (op === 0xf3) {\n // RETURN\n pop2();\n }\n pushOp(op, imm || null);\n };\n const op = (opcode: number) => addOp(opcode);\n const pushN = (value: number | bigint) => {\n if (value > 0 && value === trackedMemSize) return addOp(0x59);\n if (value == 32n) return addOp(0x36);\n if (!value) return addOp(0x5f, undefined); // PUSH0\n let v = BigInt(value);\n let bytes: number[] = [];\n while (v) {\n bytes.unshift(Number(v & 0xffn));\n v >>= 8n;\n }\n return addOp(0x5f + bytes.length, bytes);\n };\n const pushB = (buf: Uint8Array) => addOp(0x5f + buf.length, Array.from(buf));\n const cntWords = (hex: string, wordHex: string) =>\n (hex.match(new RegExp(wordHex, 'g')) || []).length;\n\n // Rough cost model\n const estShlCost = (seg: Array<{ s: number; e: number }>) => {\n let cost = 0;\n let first = true;\n for (const { s, e } of seg) {\n cost += 1 + e - s + 1; // PUSH segLen bytes\n if (31 - e > 0) cost += 1 /* PUSH1 */ + 1 /* shift byte */ + 1 /* SHL */;\n if (!first) cost += 1; // OR\n first = false;\n }\n return cost;\n };\n\n type PlanStep =\n | { t: 'num'; v: number | bigint }\n | { t: 'bytes'; b: Uint8Array }\n | { t: 'op'; o: number };\n\n const plan: PlanStep[] = [];\n const emitPushN = (v: number | bigint) => (plan.push({ t: 'num', v }), pushN(v));\n const emitPushB = (b: Uint8Array) => (plan.push({ t: 'bytes', b }), pushB(b));\n const emitOp = (o: number) => (plan.push({ t: 'op', o }), op(o));\n pushN(1n);\n // First pass: decide how to build each 32-byte word without emitting bytecode\n const _stack = [1n, 32n, 224n];\n for (let base = 0; base < n; base += 32) {\n const word = new Uint8Array(32);\n word.set(buf.slice(base, Math.min(base + 32, n)), 0);\n\n const seg: Array<{ s: number; e: number }> = [];\n for (let i = 0; i < 32; ) {\n while (i < 32 && word[i] === 0) ++i;\n if (i >= 32) break;\n const s = i;\n while (i < 32 && word[i] !== 0) ++i;\n seg.push({ s, e: i - 1 });\n }\n\n if (!seg.length) continue;\n\n // Decide whether to build this word via SHL/OR or as a single literal word\n const literal = word.slice(seg[0].s);\n const literalCost = 1 + literal.length;\n let literalVal = 0n;\n for (const b of literal) literalVal = (literalVal << 8n) | BigInt(b);\n const baseBytes = Math.ceil(Math.log2(base + 1) / 8);\n const wordHex = _uint8ArrayToHex(word);\n const shlCost = estShlCost(seg);\n\n const inStack = _stack.includes(literalVal);\n if (inStack) {\n emitPushB(literal);\n emitPushN(base);\n emitOp(0x52); // MSTORE\n continue;\n }\n if (literalCost > 8) {\n if (wordCache.has(wordHex)) {\n if (literalCost > wordCacheCost.get(wordHex)! + baseBytes) {\n emitPushN(wordCache.get(wordHex)!);\n emitOp(0x51);\n emitPushN(base);\n emitOp(0x52); // MSTORE\n continue;\n }\n } else if (wordCacheCost.get(wordHex) != -1) {\n const reuseCost = baseBytes + 3;\n const freq = cntWords(hex, wordHex);\n wordCacheCost.set(wordHex, freq * 32 > freq * reuseCost ? reuseCost : -1);\n wordCache.set(wordHex, base);\n }\n }\n\n const byte8s = seg.every(({ s, e }) => s === e);\n const byte8sCost = seg.length * 3; // each: PUSH1 (value), PUSH1 (offset), MSTORE8\n if (inStack) {\n emitPushB(literal);\n } else {\n // Aggregate all costs\n let bestCost = literalCost;\n let bestEmit: (() => void) | null = () => {\n emitPushB(literal);\n };\n if (literalVal == MAX_256_BIT) {\n bestCost = 2;\n bestEmit = () => {\n emitPushN(notVal);\n emitOp(0x19);\n };\n }\n // Try NOT: PUSH<n> ~val, NOT\n const notVal = not(literalVal);\n let notBytes = 0;\n let tmp = notVal;\n while (tmp > 0n) {\n ++notBytes;\n tmp >>= 8n;\n }\n notBytes = 1 + notBytes;\n if (notBytes === 0) notBytes;\n const notCost = notBytes + 1; // PUSH<n> + NOT\n if (notCost < bestCost) {\n bestCost = notCost;\n bestEmit = () => {\n emitPushN(notVal);\n emitOp(0x19);\n };\n }\n\n // Try SUB: PUSH1 0, PUSH<n> val, SUB\n const subVal = sub(0n, literalVal);\n let subBytes = 0;\n tmp = subVal;\n while (tmp > 0n) {\n ++subBytes;\n tmp >>= 8n;\n }\n if (subBytes === 0) subBytes = 1;\n if (_stack.includes(subVal)) subBytes = 1;\n const subCost = 1 + (1 + subBytes) + 1; // PUSH0 + PUSH<n> + SUB\n if (subCost < bestCost) {\n bestCost = subCost;\n bestEmit = () => {\n emitPushN(0);\n emitPushN(subVal);\n emitOp(0x03);\n };\n }\n\n // Try SIGNEXTEND: PUSH<n> truncated, PUSH1 byteSize, SIGNEXTEND\n for (let numBytes = 1; numBytes < literal.length; numBytes++) {\n const mask = (1n << BigInt(numBytes * 8)) - 1n;\n const truncated = literalVal & mask;\n const extended = sigext(BigInt(numBytes - 1), truncated);\n if (extended === literalVal && (truncated & (1n << BigInt(numBytes * 8 - 1))) !== 0n) {\n let trueByteCost = 1 + numBytes;\n if (_stack.includes(BigInt(extended))) trueByteCost = 1;\n let signCost = trueByteCost + (1 + 1) + 1; // PUSH<n> + PUSH1 + SIGNEXTEND\n if (signCost < bestCost) {\n bestCost = signCost;\n bestEmit = () => {\n emitPushN(truncated);\n emitPushN(numBytes - 1);\n emitOp(0x0b);\n };\n }\n break;\n }\n }\n\n // Try SHIFT+NOT: PUSH<n> val, PUSH1 shift, SHL, NOT\n for (let shiftBits = 8; shiftBits <= 248; shiftBits += 8) {\n const shifted = shr(BigInt(shiftBits), literalVal);\n if (shifted === 0n) break;\n\n const notShifted = not(shifted);\n const reconstructed = shl(BigInt(shiftBits), notShifted);\n\n if (reconstructed === literalVal) {\n let shiftedBytes = 0;\n let tmpShifted = notShifted;\n while (tmpShifted > 0n) {\n ++shiftedBytes;\n tmpShifted >>= 8n;\n }\n if (shiftedBytes === 0) shiftedBytes = 1;\n const shiftNotCost = 1 + shiftedBytes + 2 + 1 + 1; // PUSH<n> + PUSH1 + SHL + NOT\n if (shiftNotCost < bestCost) {\n bestCost = shiftNotCost;\n bestEmit = () => {\n emitPushN(notShifted);\n emitPushN(shiftBits);\n emitOp(0x1b); // SHL\n emitOp(0x19); // NOT\n };\n }\n }\n }\n\n if (byte8s && byte8sCost < bestCost && byte8sCost <= shlCost) {\n for (const { s } of seg) {\n emitPushN(word[s]);\n emitPushN(base + s);\n emitOp(0x53); // MSTORE8\n }\n continue; // Skip the single MSTORE at the end\n } else if (shlCost < bestCost) {\n // Use SHL/OR\n let first = true;\n for (const { s, e } of seg) {\n const suffix0s = 31 - e;\n emitPushB(word.slice(s, e + 1));\n if (suffix0s > 0) {\n emitPushN(suffix0s * 8);\n emitOp(0x1b); // SHL\n }\n if (!first) emitOp(0x17); // OR\n first = false;\n }\n } else {\n bestEmit!();\n }\n }\n emitPushN(base);\n emitOp(0x52); // MSTORE\n }\n\n ops = [];\n data = [];\n stack = [];\n trackedMemSize = 0;\n mem = new Map();\n // Pre 2nd pass. Push most frequent literals into stack.\n Array.from(stackFreq.entries())\n .filter(([val, freq]) => freq > 1 && val > 1n && val !== 32n && val !== 224n)\n .sort((a, b) => stackCnt.get(b[0])! - stackCnt.get(a[0])!)\n .filter(([val, _]) => {\n return typeof val === 'number' ? BigInt(val) : val <= MAX_128_BIT;\n })\n .slice(0, 15)\n .forEach(([val, _]) => {\n pushN(val);\n });\n pushN(1n);\n // Second pass: emit ops and track mem/stack\n for (const step of plan) {\n if (step.t === 'num') pushN(step.v);\n else if (step.t === 'bytes') pushB(step.b);\n else if (step.t === 'op') op(step.o);\n }\n\n // CALL stack layout (top to bottom): gas, address, value, argsOffset, argsSize, retOffset, retSize\n //\n // Opcodes breakdown:\n // - 0x5f5f: PUSH0 PUSH0 (retSize=0, retOffset=0)\n // - pushN(originalBuf.length): argsSize = actual data length\n // - pushN(padding): argsOffset (skip leading alignment bytes)\n // - 0x34: CALLVALUE (value)\n // - 0x5f35: PUSH0 CALLDATALOAD (address from calldata[0])\n // - 0x5a: GAS (remaining gas)\n // - 0xf1: CALL\n //\n // RETURNDATACOPY(destOffset=0, offset=0, length=RETURNDATASIZE):\n // - 0x3d5f5f3e: RETURNDATASIZE PUSH0 PUSH0 RETURNDATACOPY\n //\n // RETURN(offset=0, size=RETURNDATASIZE):\n // - 0x3d5ff3: RETURNDATASIZE PUSH0 RETURN\n\n op(0x5f); // PUSH0 (retSize)\n op(0x5f); // PUSH0 (retOffset)\n pushN(originalBuf.length); // argsSize = actual data length\n pushN(padding); // argsOffset = padding\n\n const out: number[] = [];\n for (let i = 0; i < ops.length; ++i) {\n out.push(ops[i]);\n if (ops[i] >= 0x60 && ops[i] <= 0x7f && data[i]) out.push(...data[i]!);\n }\n\n // - CALLVALUE, load target address from calldata[0], GAS, CALL\n // - RETURNDATACOPY(0, 0, RETURNDATASIZE)\n // - RETURN(0, RETURNDATASIZE)\n return '0x' + _uint8ArrayToHex(new Uint8Array(out)) + '345f355af13d5f5f3e3d5ff3';\n};\n\nconst DECOMPRESSOR_ADDRESS = '0x00000000000000000000000000000000000000e0';\n\n/**\n * Compresses eth_call payload using JIT, FastLZ (FLZ), or calldata RLE (CD) compression.\n * Auto-selects best algorithm if not specified. Only compresses if >800 bytes and beneficial.\n *\n * Only applies compression to calls that:\n * - target the latest block ID\n * - have no state overrides\n * - have a target address and calldata\n * - have no other properties (nonce, gas, etc.)\n *\n * @param payload - eth_call RPC payload\n * @param alg - 'jit' | 'flz' | 'cd' | undefined (auto)\n * @returns (un)compressed eth_call payload\n * @pure\n */\n//! @__PURE__\nexport const compress_call = function (payload: any, alg?: string): any {\n const { method, params } = payload;\n if (method && method !== 'eth_call') return payload;\n const txObj = params?.[0] || payload;\n const blockParam = params?.[1];\n const overrides = params?.[2];\n\n // Validation\n if (\n (blockParam && blockParam !== 'latest') ||\n (overrides && Object.keys(overrides).length > 0) ||\n !txObj?.to ||\n !txObj?.data ||\n Object.keys(txObj).some((k) => !['to', 'data', 'from'].includes(k))\n ) {\n return payload;\n }\n\n const originalSize = txObj.data.length;\n if (originalSize < MIN_BODY_SIZE) return payload;\n\n const inputData = '0x' + _normHex(txObj.data);\n const to = txObj.to;\n\n // Determine compression method and generate bytecode/calldata\n let bytecode: string;\n let calldata: string;\n\n if (alg === 'jit' || (!alg && (originalSize < 3000 || originalSize >= 8000))) {\n bytecode = _jitDecompressor(inputData);\n calldata = '0x' + _normHex(to).padStart(64, '0');\n } else {\n // Need FLZ and/or CD compression\n const flzData = alg === 'flz' || !alg ? LibZip.flzCompress(inputData) : null;\n const cdData = alg === 'cd' || (!alg && flzData) ? LibZip.cdCompress(inputData) : null;\n\n // Pick the best or requested one\n const useFlz =\n alg === 'flz' || (!alg && flzData && (!cdData || flzData.length < cdData.length));\n\n if (useFlz) {\n calldata = flzData!;\n bytecode = flzFwdBytecode(to);\n } else {\n calldata = cdData!;\n bytecode = rleFwdBytecode(to);\n }\n }\n\n // Skip if not beneficial\n if (bytecode.length + calldata.length >= originalSize) return payload;\n\n return {\n ...payload,\n params: [\n { ...txObj, to: DECOMPRESSOR_ADDRESS, data: calldata },\n blockParam || 'latest',\n { ...overrides, [DECOMPRESSOR_ADDRESS]: { code: bytecode } },\n ],\n };\n};\n", "export const MIN_BODY_SIZE = 1150;\n\nconst _sup_enc = new Map<string, string[] | -1>();\nconst _enc = ['deflate-raw', 'deflate', 'gzip'];\nlet supported: string | -1 | null = typeof CompressionStream === 'undefined' ? -1 : null;\n\nexport type PayloadTransform = (payload: unknown) => unknown;\n\n/**\n * Fetch-compatible function that applies HTTP compression (gzip/deflate) to requests.\n * Optionally transforms request payloads before sending.\n *\n * @param input - The resource URL, Request object, or URL string\n * @param init - Optional request initialization options\n * @param transformPayload - Optional function to transform the request payload\n * @returns A Promise that resolves to the Response\n */\n//! @__PURE__\nexport async function compressModule(\n input: string | URL | Request,\n init?: RequestInit,\n): Promise<Response>;\n\n//! @__PURE__\nexport async function compressModule(\n input: string | URL | Request,\n init: RequestInit | undefined,\n transformPayload?: PayloadTransform,\n): Promise<Response>;\n\n//! @__PURE__\nexport async function compressModule(\n input: string | URL | Request,\n init?: RequestInit,\n transformPayload?: PayloadTransform,\n): Promise<Response> {\n const url =\n typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;\n\n const cached = _sup_enc.get(url);\n supported = supported === -1 ? -1 : cached === -1 ? -1 : (cached?.[0] ?? null);\n\n // Only apply the optional payload transform\n // when native HTTP compression is not available for this URL.\n if (transformPayload && init?.body && typeof init.body === 'string') {\n if (supported === -1 || supported === null) {\n try {\n const parsed = JSON.parse(init.body as string);\n const next = transformPayload(parsed);\n if (next !== undefined) {\n init = {\n ...init,\n body: JSON.stringify(next),\n };\n }\n } catch {\n // Non-JSON bodies are left untouched.\n }\n }\n }\n\n const bodyStr = typeof init?.body === 'string' ? (init.body as string) : null;\n\n if (supported && supported !== -1 && bodyStr && bodyStr.length >= MIN_BODY_SIZE) {\n const compressed = await new Response(\n new Blob([bodyStr])\n .stream()\n .pipeThrough(new CompressionStream(supported as CompressionFormat)),\n ).blob();\n init = {\n ...init,\n body: compressed,\n headers: { ...(init && init.headers), 'Content-Encoding': supported },\n };\n }\n const response = await fetch(url, init);\n\n if (supported === null) {\n const encodings = response.headers\n .get('Accept-Encoding')\n ?.split(',')\n .filter((e) => _enc.includes(e));\n _sup_enc.set(url, encodings?.length ? encodings : -1);\n }\n\n return response;\n}\n\n/**\n * Combines HTTP compression with EVM JIT compression.\n * Just pass this as `fetchFn` to viem's http transport.\n *\n * @param input - The resource URL or Request object\n * @param init - Optional request initialization options\n * @returns A Promise that resolves to the Response\n *\n * @example\n * ```ts\n * const client = createPublicClient({\n * transport: http(rpcUrl, { fetchFn: compressModuleWithJIT })\n * })\n * ```\n *\n * If the target RPC endpoint and runtime support native HTTP compression,\n * this helper prefers that path and will not apply JIT calldata compression;\n * the JIT-based transform is used as a legacy/fallback path when HTTP\n * content-encoding is unavailable.\n * @pure\n */\n//! @__PURE__\nexport const compressModuleWithJIT = (\n input: RequestInfo | URL,\n init?: RequestInit,\n): Promise<Response> => {\n return import('./jit-compressor').then(({ compress_call }) =>\n compressModule(input, init, compress_call),\n );\n};\n", "import zlib from 'node:zlib';\n\n// Polyfill for CompressionStream/DecompressionStream in older versions of Node.js & Bun\nconst make = (ctx: any, handle: any) =>\n Object.assign(ctx, {\n writable: new WritableStream({\n write(chunk) {\n handle.write(chunk);\n return Promise.resolve();\n },\n close() {\n handle.end();\n return Promise.resolve();\n },\n }),\n readable: new ReadableStream({\n type: 'bytes',\n start(ctrl) {\n handle.on('data', (chunk: any) => ctrl.enqueue(chunk));\n handle.once('end', () => ctrl.close());\n },\n }),\n });\n\nif (!globalThis.CompressionStream) {\n globalThis.CompressionStream = class CompressionStream {\n constructor(format: string) {\n let handle;\n if (format === 'deflate') {\n handle = zlib.createDeflate();\n } else if (format === 'gzip') {\n handle = zlib.createGzip();\n } else if (format === 'br') {\n handle = zlib.createBrotliCompress();\n } else {\n handle = zlib.createDeflateRaw();\n }\n make(this, handle);\n }\n } as any;\n}\n\nif (!globalThis.DecompressionStream) {\n globalThis.DecompressionStream = class DecompressionStream {\n constructor(format: string) {\n let handle;\n if (format === 'deflate') {\n handle = zlib.createInflate();\n } else if (format === 'gzip') {\n handle = zlib.createGunzip();\n } else if (format === 'br') {\n handle = zlib.createBrotliDecompress();\n } else {\n handle = zlib.createInflateRaw();\n }\n make(this, handle);\n }\n } as any;\n}\n\nexport * from './index';\n"],
5
- "mappings": "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",
6
- "names": ["jit_compressor_exports", "__export", "compress_call", "LibZip", "MAX_128_BIT", "MAX_256_BIT", "_normHex", "_hexToUint8Array", "_uint8ArrayToHex", "not", "and", "or", "xor", "shl", "shr", "sub", "sigext", "flzFwdBytecode", "rleFwdBytecode", "_jitDecompressor", "DECOMPRESSOR_ADDRESS", "init_jit_compressor", "__esmMin", "hex", "normalized", "len", "bytes", "i", "a", "b", "shift", "value", "byteSize", "numBytes", "mask", "signBit", "maskedVal", "address", "calldata", "originalBuf", "padding", "buf", "n", "ops", "data", "stack", "trackedMemSize", "mem", "firstPass", "getStackIdx", "val", "idx", "opFreq", "dataFreq", "stackFreq", "wordCache", "wordCacheCost", "roundUp32", "x", "pushCounter", "stackCnt", "pop2", "ctr", "m", "k", "delta", "inc", "pushOp", "op", "d", "imm", "pushS", "v", "freq", "trackMem", "offset", "size", "addOp", "_", "opcode", "pushN", "pushB", "cntWords", "wordHex", "estShlCost", "seg", "cost", "first", "s", "e", "plan", "emitPushN", "emitPushB", "emitOp", "o", "_stack", "base", "word", "literal", "literalCost", "literalVal", "baseBytes", "shlCost", "inStack", "reuseCost", "byte8s", "byte8sCost", "bestCost", "bestEmit", "notVal", "notBytes", "tmp", "notCost", "subVal", "subBytes", "subCost", "truncated", "extended", "trueByteCost", "signCost", "shiftBits", "shifted", "notShifted", "shiftedBytes", "tmpShifted", "shiftNotCost", "suffix0s", "step", "out", "payload", "alg", "method", "params", "txObj", "blockParam", "overrides", "originalSize", "inputData", "to", "bytecode", "flzData", "cdData", "compressModule", "input", "init", "transformPayload", "url", "cached", "_sup_enc", "supported", "parsed", "next", "bodyStr", "compressed", "response", "encodings", "e", "_enc", "MIN_BODY_SIZE", "compressModuleWithJIT", "init_index", "__esmMin", "compress_call", "init_index", "zlib", "make", "ctx", "handle", "chunk", "ctrl", "format"]
3
+ "sources": ["../../src/index.node.ts", "../../src/index.ts"],
4
+ "sourcesContent": ["import zlib from 'node:zlib';\n\n// Polyfill for CompressionStream/DecompressionStream in older versions of Node.js & Bun\nconst make = (ctx: any, handle: any) =>\n Object.assign(ctx, {\n writable: new WritableStream({\n write(chunk) {\n handle.write(chunk);\n return Promise.resolve();\n },\n close() {\n handle.end();\n return Promise.resolve();\n },\n }),\n readable: new ReadableStream({\n type: 'bytes',\n start(ctrl) {\n handle.on('data', (chunk: any) => ctrl.enqueue(chunk));\n handle.once('end', () => ctrl.close());\n },\n }),\n });\n\nif (!globalThis.CompressionStream) {\n globalThis.CompressionStream = class CompressionStream {\n constructor(format: string) {\n let handle;\n if (format === 'deflate') {\n handle = zlib.createDeflate();\n } else if (format === 'gzip') {\n handle = zlib.createGzip();\n } else if (format === 'br') {\n handle = zlib.createBrotliCompress();\n } else {\n handle = zlib.createDeflateRaw();\n }\n make(this, handle);\n }\n } as any;\n}\n\nif (!globalThis.DecompressionStream) {\n globalThis.DecompressionStream = class DecompressionStream {\n constructor(format: string) {\n let handle;\n if (format === 'deflate') {\n handle = zlib.createInflate();\n } else if (format === 'gzip') {\n handle = zlib.createGunzip();\n } else if (format === 'br') {\n handle = zlib.createBrotliDecompress();\n } else {\n handle = zlib.createInflateRaw();\n }\n make(this, handle);\n }\n } as any;\n}\n\nexport * from './index';\n", "export const MIN_BODY_SIZE = 1150;\n\nconst _cache = new Map<string, string | -1>();\nconst _enc = ['gzip', 'deflate'] as const;\ntype SupportedEncoding = (typeof _enc)[number];\n\nexport type PayloadTransform = (payload: unknown) => unknown;\nexport type CompressionMode = 'passive' | 'proactive' | 'gzip' | 'deflate' | PayloadTransform;\n\n/**\n * @param input - URL or Request\n * @param init - Request options\n * @param mode - Compression mode:\n * - 'passive' (default): discover support via Accept-Encoding header first\n * - 'proactive': compress with gzip first, adjust if server rejects\n * - 'gzip' | 'deflate': use specified encoding directly (known support)\n * - PayloadTransform function: transform payload, skip HTTP compression\n */\nexport async function compressModule(\n input: string | URL | Request,\n init?: RequestInit,\n mode?: CompressionMode,\n): Promise<Response> {\n const req = input instanceof Request ? input : null;\n const url =\n typeof input === 'string' ? input : input instanceof Request ? input.url : input.toString();\n const bodyStr = typeof init?.body === 'string' ? init.body : null;\n\n // Custom transform: apply and skip HTTP compression\n if (typeof mode === 'function') {\n if (req && !init) return fetch(req);\n let body = init?.body;\n if (bodyStr)\n try {\n const next = mode(JSON.parse(bodyStr));\n if (next !== undefined) body = JSON.stringify(next);\n } catch {}\n return fetch(req ?? url, { ...init, body });\n }\n\n const cached = _cache.get(url);\n const hasCS = typeof CompressionStream !== 'undefined';\n const known = mode === 'gzip' || mode === 'deflate';\n const encoding = !hasCS\n ? null\n : known\n ? (mode as SupportedEncoding)\n : mode === 'proactive'\n ? cached === -1\n ? null\n : (cached ?? 'gzip')\n : typeof cached === 'string'\n ? cached\n : null;\n\n const shouldCompress = !!encoding && !!bodyStr && bodyStr.length >= MIN_BODY_SIZE;\n const opts: RequestInit = { ...init, priority: 'high' as RequestPriority };\n const headers = new Headers(opts.headers);\n if (shouldCompress) {\n opts.body = await new Response(\n new Blob([bodyStr!])\n .stream()\n .pipeThrough(new CompressionStream(encoding as CompressionFormat)),\n ).blob();\n headers.set('Content-Encoding', encoding);\n }\n opts.headers = headers;\n\n const response = await fetch(req ?? url, opts);\n\n // Cache discovery for passive/proactive (not known modes)\n if (!known && cached === undefined) {\n const header = response.headers.get('Accept-Encoding');\n const discovered =\n header\n ?.split(',')\n .map((e) => e.trim())\n .find((e): e is SupportedEncoding => _enc.includes(e as SupportedEncoding)) ?? -1;\n _cache.set(\n url,\n mode === 'proactive' && shouldCompress ? (response.ok ? encoding! : discovered) : discovered,\n );\n }\n\n return response;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["zlib", "MIN_BODY_SIZE", "_cache", "_enc", "compressModule", "input", "init", "mode", "req", "url", "bodyStr", "body", "next", "cached", "hasCS", "known", "encoding", "shouldCompress", "opts", "headers", "response", "discovered", "e", "make", "ctx", "handle", "chunk", "ctrl", "format", "zlib"]
7
7
  }
@@ -1,5 +1,3 @@
1
- import{LibZip as at}from"solady";import{MIN_BODY_SIZE as It}from"./index";const Mt=(1n<<128n)-1n,d=(1n<<256n)-1n,P=s=>s.replace(/^0x/,"").toLowerCase(),St=s=>{const i=P(s),b=i.length,a=new Uint8Array(b/2);for(let c=0;c<b;c+=2)a[c/2]=Number.parseInt(i.slice(c,c+2),16);return a},gt=s=>{let i="";for(let b=0;b<s.length;b++)i+=s[b].toString(16).padStart(2,"0");return i},G=s=>~s&d,kt=(s,i)=>s&i&d,At=(s,i)=>(s|i)&d,_t=(s,i)=>(s^i)&d,mt=(s,i)=>i<<s&d,xt=(s,i)=>i>>s&d,ht=(s,i)=>s-i&d,dt=(s,i)=>{const b=Number(s)+1,a=(1n<<BigInt(b*8))-1n,c=1n<<BigInt(b*8-1),y=i&a;return(y&c?y|~a&d:y)&d};//! @__PURE__
2
- const zt=s=>`0x365f73${P(s)}815b838110602f575f80848134865af1503d5f803e3d5ff35b803590815f1a8060051c908115609857600190600783149285831a6007018118840218600201948383011a90601f1660081b0101808603906020811860208211021890815f5b80830151818a015201858110609257505050600201019201916018565b82906075565b6001929350829150019101925f5b82811060b3575001916018565b85851060c1575b60010160a6565b936001818192355f1a878501530194905060ba56`;//! @__PURE__
3
- const Ut=s=>`0x5f5f5b368110602d575f8083813473${P(s)}5af1503d5f803e3d5ff35b600180820192909160031981019035185f1a8015604c57815301906002565b505f19815282820192607f9060031981019035185f1a818111156072575b160101906002565b838101368437606a56`,Nt=function(s){const i=P(s),b=St(i),a=28,c=new Uint8Array(a+b.length);c.set(b,a);const y=c.length;let p=[],M=[],x=[],S=0,B=new Map,A=!0;const k=t=>{let e=x.lastIndexOf(t);return e=e===-1?-1:x.length-1-e,e>15?-1:e},K=new Map,J=new Map,Q=new Map,L=new Map,X=new Map,yt=t=>t+31&-32;let tt=0;const Z=new Map,w=()=>[x.pop(),x.pop()],nt=(t,e,n)=>t.set(e,(t.get(e)||0)+n),et=(t,e)=>nt(t,e,1),_=(t,e)=>{p.push(t),et(K,t);const n=e??null;M.push(n),et(J,n)},l=(t,e=1)=>{x.push(t),nt(Q,t,e),++tt,Z.set(t,tt)},st=(t,e)=>{S=yt(t+e)},O=(t,e)=>{if(t===54)l(32n,0);else if(t===89)l(BigInt(S),0);else if(t===11){const[n,o]=w();l(dt(n,o),1)}else if(t===25){const n=x.pop();l(G(n),0)}else if(t===24){const[n,o]=w();l(_t(n,o),1)}else if(t===22){const[n,o]=w();l(kt(n,o),1)}else if(t===3){const[n,o]=w();l(ht(n,o),1)}else if(t===27){let[n,o]=w();l(mt(n,o),1)}else if(t===28){let[n,o]=w();l(xt(n,o),1)}else if(t===23){let[n,o]=w();l(At(n,o),1)}else if(t>=96&&t<=127||t===95){let n=0n;for(const h of e||[])n=n<<8n|BigInt(h);if(n==224n){l(n,0),_(48);return}if(n==32n){l(n,0),_(54);return}if(n===BigInt(S)){l(n,0),_(89);return}const o=k(n);if(o!==-1&&t!=95){l(n,A?1:-1),_(128+o);return}if(n==d){l(n),_(95),_(25);return}l(n)}else if(t===81){const n=Number(x.pop());l(B.has(n)?B.get(n):0n)}else if(t===82){const[n,o]=w(),h=Number(n);B.set(h,o&d),st(h,32)}else if(t===83){const[n,o]=w();st(Number(n),1)}else t===243&&w();_(t,e||null)},T=t=>O(t),z=t=>{if(t>0&&t===S)return O(89);if(t==32n)return O(54);if(!t)return O(95,void 0);let e=BigInt(t),n=[];for(;e;)n.unshift(Number(e&0xffn)),e>>=8n;return O(95+n.length,n)},it=t=>O(95+t.length,Array.from(t)),Bt=(t,e)=>(t.match(new RegExp(e,"g"))||[]).length,wt=t=>{let e=0,n=!0;for(const{s:o,e:h}of t)e+=1+h-o+1,31-h>0&&(e+=3),n||(e+=1),n=!1;return e},V=[],u=t=>(V.push({t:"num",v:t}),z(t)),H=t=>(V.push({t:"bytes",b:t}),it(t)),g=t=>(V.push({t:"op",o:t}),T(t));z(1n);const $=[1n,32n,224n];for(let t=0;t<y;t+=32){const e=new Uint8Array(32);e.set(c.slice(t,Math.min(t+32,y)),0);const n=[];for(let r=0;r<32;){for(;r<32&&e[r]===0;)++r;if(r>=32)break;const m=r;for(;r<32&&e[r]!==0;)++r;n.push({s:m,e:r-1})}if(!n.length)continue;const o=e.slice(n[0].s),h=1+o.length;let C=0n;for(const r of o)C=C<<8n|BigInt(r);const rt=Math.ceil(Math.log2(t+1)/8),U=gt(e),ot=wt(n),ct=$.includes(C);if(ct){H(o),u(t),g(82);continue}if(h>8){if(L.has(U)){if(h>X.get(U)+rt){u(L.get(U)),g(81),u(t),g(82);continue}}else if(X.get(U)!=-1){const r=rt+3,m=Bt(i,U);X.set(U,m*32>m*r?r:-1),L.set(U,t)}}const Ct=n.every(({s:r,e:m})=>r===m),ft=n.length*3;if(ct)H(o);else{let r=h,m=()=>{H(o)};C==d&&(r=2,m=()=>{u(W),g(25)});const W=G(C);let D=0,j=W;for(;j>0n;)++D,j>>=8n;D=1+D;const lt=D+1;lt<r&&(r=lt,m=()=>{u(W),g(25)});const Y=ht(0n,C);let q=0;for(j=Y;j>0n;)++q,j>>=8n;q===0&&(q=1),$.includes(Y)&&(q=1);const bt=1+(1+q)+1;bt<r&&(r=bt,m=()=>{u(0),u(Y),g(3)});for(let f=1;f<o.length;f++){const E=(1n<<BigInt(f*8))-1n,I=C&E,F=dt(BigInt(f-1),I);if(F===C&&(I&1n<<BigInt(f*8-1))!==0n){let N=1+f;$.includes(BigInt(F))&&(N=1);let R=N+2+1;R<r&&(r=R,m=()=>{u(I),u(f-1),g(11)});break}}for(let f=8;f<=248;f+=8){const E=xt(BigInt(f),C);if(E===0n)break;const I=G(E);if(mt(BigInt(f),I)===C){let N=0,R=I;for(;R>0n;)++N,R>>=8n;N===0&&(N=1);const ut=1+N+2+1+1;ut<r&&(r=ut,m=()=>{u(I),u(f),g(27),g(25)})}}if(Ct&&ft<r&&ft<=ot){for(const{s:f}of n)u(e[f]),u(t+f),g(83);continue}else if(ot<r){let f=!0;for(const{s:E,e:I}of n){const F=31-I;H(e.slice(E,I+1)),F>0&&(u(F*8),g(27)),f||g(23),f=!1}}else m()}u(t),g(82)}p=[],M=[],x=[],S=0,B=new Map,Array.from(Q.entries()).filter(([t,e])=>e>1&&t>1n&&t!==32n&&t!==224n).sort((t,e)=>Z.get(e[0])-Z.get(t[0])).filter(([t,e])=>typeof t=="number"?BigInt(t):t<=Mt).slice(0,15).forEach(([t,e])=>{z(t)}),z(1n);for(const t of V)t.t==="num"?z(t.v):t.t==="bytes"?it(t.b):t.t==="op"&&T(t.o);T(95),T(95),z(b.length),z(a);const v=[];for(let t=0;t<p.length;++t)v.push(p[t]),p[t]>=96&&p[t]<=127&&M[t]&&v.push(...M[t]);return"0x"+gt(new Uint8Array(v))+"345f355af13d5f5f3e3d5ff3"},pt="0x00000000000000000000000000000000000000e0";//! @__PURE__
4
- const Et=function(s,i){const{method:b,params:a}=s;if(b&&b!=="eth_call")return s;const c=a?.[0]||s,y=a?.[1],p=a?.[2];if(y&&y!=="latest"||p&&Object.keys(p).length>0||!c?.to||!c?.data||Object.keys(c).some(k=>!["to","data","from"].includes(k)))return s;const M=c.data.length;if(M<It)return s;const x="0x"+P(c.data),S=c.to;let B,A;if(i==="jit"||!i&&(M<3e3||M>=8e3))B=Nt(x),A="0x"+P(S).padStart(64,"0");else{const k=i==="flz"||!i?at.flzCompress(x):null,K=i==="cd"||!i&&k?at.cdCompress(x):null;i==="flz"||!i&&k&&(!K||k.length<K.length)?(A=k,B=zt(S)):(A=K,B=Ut(S))}return B.length+A.length>=M?s:{...s,params:[{...c,to:pt,data:A},y||"latest",{...p,[pt]:{code:B}}]}};export{Et as compress_call};
1
+ import{LibZip as wt}from"solady";var bt=(1n<<128n)-1n,M=(1n<<256n)-1n;var tt=o=>~o&M;var gt=(o,c)=>o&c&M,mt=(o,c)=>(o|c)&M,dt=(o,c)=>(o^c)&M,xt=(o,c)=>o+c&M,rt=(o,c)=>o-c&M,st=(o,c)=>c<<o&M,ot=(o,c)=>c>>o&M,it=(o,c)=>{let x=Number(o)+1,y=(1n<<BigInt(x*8))-1n,f=1n<<BigInt(x*8-1),g=c&y;return((g&f)!==0n?g|~y&M:g)&M};var O=o=>o.replace(/^0x/,"").toLowerCase(),Ut=o=>{let c=O(o),x=c.length,y=new Uint8Array(x/2);for(let f=0;f<x;f+=2)y[f/2]=Number.parseInt(c.slice(f,f+2),16);return y},Z=o=>{let c="";for(let x=0;x<o.length;x++)c+=o[x].toString(16).padStart(2,"0");return c},ht=(o,c)=>{let x=O(o),y=Ut(x),f=new Uint8Array(c+y.length);f.set(y,c);let g=f.length,w=Math.ceil(g/32),k=w*32,N=new Array(w),I=new Array(w),z=new Map,S=new Map,h=null;for(let r=0;r<w;r++){let l=r*32,u=new Uint8Array(32);if(l<g){let i=Math.min(l+32,g);u.set(f.subarray(l,i),0)}N[r]=u;let C=Z(u),L=S.get(C),nt=h===C;if(L)L.freq+=1,nt||(L.normFreq+=1),L.lastWordIndex=r,L.lastOffset=l,z.set(C,L.freq);else{let i={freq:1,normFreq:1,firstWordIndex:r,lastWordIndex:r,firstOffset:l,lastOffset:l,reuseCost:-1};S.set(C,i),z.set(C,1)}h=C;let U=[];for(let i=0;i<32;){for(;i<32&&u[i]===0;)++i;if(i>=32)break;let q=i;for(;i<32&&u[i]!==0;)++i;U.push({s:q,e:i-1})}I[r]=U}for(let r of S.values()){let u=(r.firstOffset===0?0:Math.ceil(Math.log2(r.firstOffset+1)/8))+3,C=r.normFreq*32,L=r.normFreq*u;r.reuseCost=C>L?u:-1}let W=new Uint8Array(32),m=r=>r<0||r>=w?W:N[r],F=r=>r<0||r>=w?[]:I[r],j=r=>{let l=new Uint8Array(32);if(r<0||r>=g)return l;let u=Math.min(r+32,g);return l.set(f.slice(r,u),0),l},V=(r,l)=>{if(l<=0)return new Uint8Array(0);let u=new Uint8Array(l);if(r<0||r>=g)return u;let C=Math.min(r+l,g);return u.set(f.slice(r,C),0),u};return{hex:x,buffer:f,roundedLength:k,padding:c,dataLength:y.length,wordCount:w,wordFreq:z,wordStats:S,getWord:m,getSegments:F,mload:j,slice:V}};var ct=function(o,c,x){let y=28,f=ht(o,y),g=224n,w=O(c).padStart(16,"0"),k=x?BigInt("0x"+O(x)):96n,N=new Set([0n,32n,g,k,BigInt("0x"+w)]),I=2n,z=Array.from(f.wordFreq.entries()).map(([t,e])=>[BigInt("0x"+t),e]).filter(([t])=>!N.has(t));z.length>0&&(I=z.reduce((t,e)=>e[1]>t[1]?e:t)[0]);let{wordCount:S}=f,h=[],W=[],m=[],F=0,j=new Map,V=!0,r=t=>t+31&-32,l=t=>{let e=m.lastIndexOf(t);return e=e===-1?-1:m.length-1-e,e>15?-1:e},u=new Map,C=new Map,L=0,nt=(t,e,n)=>t.set(e,(t.get(e)||0)+n),U=(t,e)=>{h.push(t),W.push(e??null)},i=(t,e=1)=>{m.push(t),e!==0&&nt(u,t,e),++L,C.set(t,L)},q=()=>[m.pop(),m.pop()],ft=(t,e)=>{F=r(t+e)},D=(t,e)=>{if(t==128){let n=m[m.length-1];i(n,V?0:1)}if(t==80&&m.pop(),t==71&&i(I,0),t==48&&i(g,0),t==51&&i(k,0),t==54&&i(32n,0),t==89&&i(BigInt(F),0),t===11){let[n,s]=q();i(it(n,s),1)}if(t==25){let n=m.pop();i(tt(n),0)}if(t===24){let[n,s]=q();i(dt(n,s),1)}if(t==22){let[n,s]=q();i(gt(n,s),1)}if(t==23){let[n,s]=q();i(mt(n,s),1)}if(t==1){let[n,s]=q();i(xt(n,s),1)}if(t===3){let[n,s]=q();i(rt(s,n),1)}if(t==27){let[n,s]=q();i(st(n,s),1)}if(t==28){let[n,s]=q();i(ot(n,s),1)}if(t>=96&&t<=127||t===95){let n=0n;for(let b of e||[])n=n<<8n|BigInt(b);if(n==I){i(n,0),U(71);return}if(n==g){i(n,0),U(48);return}if(n==k){i(n,0),U(51);return}if(n==32n){i(n,0),U(54);return}if(n===BigInt(F)&&n!==0n){i(n,0),U(89);return}let s=l(n);if(s!==-1&&t!==95){i(n,V?1:0),U(128+s);return}if(n===M){i(n,0),U(95),U(25);return}i(n,1),U(t,e||null);return}if(t===81){let n=Number(m.pop());i(j.has(n)?j.get(n):0n,0)}if(t===82){let[n,s]=q(),b=Number(n);j.set(b,s&M),ft(b,32)}if(t===83){let[n,s]=q();ft(Number(n),1)}U(t,e||null)},$=t=>D(t),St=t=>{if(t===0n)return 0;let e=0,n=t<0n?-t:t;for(;n>0n;)++e,n>>=8n;return e},P=t=>t===0n?1:1+St(t),X=t=>{let e=typeof t=="bigint"?t:BigInt(t);if(e>0n&&e===BigInt(F))return D(89);if(e===32n)return D(54);if(e===0n)return D(95);let n=e,s=[];for(;n!==0n;)s.unshift(Number(n&0xffn)),n>>=8n;return D(95+s.length,s)},at=t=>D(95+t.length,Array.from(t)),Y=[],B=t=>{Y.push({t:"num",v:t}),X(t)},lt=t=>{Y.push({t:"bytes",b:t}),at(t)},p=t=>{Y.push({t:"op",o:t}),$(t)},Bt=t=>{let e=0,n=!0;for(let{s,e:b}of t)e+=1+(b-s+1),31-b>0&&(e+=3),n||(e+=1),n=!1;return e},ut=(t,e)=>{let n=t.slice(e[0].s),s=0n;for(let a of n)s=s<<8n|BigInt(a);let b=1+n.length,E=Bt(e),_=b,v=()=>lt(n),G=tt(s),J=P(G)+1;J<_&&(_=J,v=()=>{B(G),p(25)});let R=rt(0n,s),d=1+P(R)+1;d<_&&(_=d,v=()=>{B(0),B(R),p(3)});for(let a=1;a<n.length;a++){let T=(1n<<BigInt(a*8))-1n,H=s&T;if(it(BigInt(a-1),H)===s&&(H&1n<<BigInt(a*8-1))!==0n){let K=P(H)+2+1;K<_&&(_=K,v=()=>{B(H),B(a-1),p(11)});break}}for(let a=8;a<=248;a+=8){let T=ot(BigInt(a),s);if(T===0n)break;let H=tt(T);if(st(BigInt(a),H)===s){let K=P(H)+P(BigInt(a))+2;K<_&&(_=K,v=()=>{B(H),B(a),p(27),p(25)})}}return E<_&&(_=E,v=()=>{let a=!0;for(let{s:T,e:H}of e){let Q=31-H;lt(t.slice(T,H+1)),Q>0&&(B(Q*8),p(27)),a||p(23),a=!1}}),{literal:n,literalVal:s,bestCost:_,bestEmit:v,literalCost:b,shlCost:E}},A=0;for(;A<S;){let t=A*32,e=f.getWord(A),n=f.getSegments(A);if(!n.length){++A;continue}let s=Z(e),b=1;for(;A+b<S;){let d=f.getWord(A+b);if(!f.getSegments(A+b).length||Z(d)!==s)break;++b}if(b>=2){let{bestEmit:d}=ut(e,n);d(),p(128),B(t),p(82);for(let T=1;T<b;T++)p(128),p(89),p(82);let a=f.wordStats.get(s);a&&a.lastWordIndex<=A+b-1&&p(80),A+=b;continue}let{literalCost:E,shlCost:_,bestCost:v,bestEmit:G}=ut(e,n);if(E>8){let d=f.wordStats.get(s);if(d&&d.reuseCost!==-1&&A>d.firstWordIndex){let a=d.firstOffset===0?0:Math.ceil(Math.log2(d.firstOffset+1)/8);if(E>d.reuseCost+a){B(d.firstOffset),p(81),B(t),p(82),++A;continue}}}let J=n.every(({s:d,e:a})=>d===a),R=n.length*3;if(J&&R<v&&R<=_){for(let{s:d}of n)B(e[d]),B(t+d),p(83);++A;continue}G(),B(t),p(82),++A}let At=Y.slice();h=[],W=[],m=[],F=0,j=new Map,V=!1;let Mt=new Set([0n,32n,I,g,k]);Array.from(u.entries()).filter(([t,e])=>e>1&&!Mt.has(t)).map(([t,e])=>{let n=P(t),s=e*(n-1)-n;return{val:t,uses:e,net:s,p:n}}).sort((t,e)=>e.net!==t.net?e.net-t.net:e.uses!==t.uses?e.uses-t.uses:t.p-e.p).filter(t=>t.net>0&&t.val<=bt).slice(0,15).forEach(({val:t})=>{X(t)});for(let t of At)t.t==="num"?X(t.v):t.t==="bytes"?at(t.b):t.t==="op"&&$(t.o);$(95),$(95),X(f.dataLength),X(y);let et=[];for(let t=0;t<h.length;++t)et.push(h[t]),h[t]>=96&&h[t]<=127&&W[t]&&et.push(...W[t]);let It="0x"+Z(new Uint8Array(et))+"345f355af13d5f5f3e3d5ff3",Ct="0x"+O(w).padStart(64,"0");return{bytecode:It,calldata:Ct,to:"0x"+g.toString(16).padStart(40,"0"),from:O(k.toString(16)).padStart(40,"0"),balance:I.toString(16)}};var pt=o=>`0x365f73${O(o)}815b838110602f575f80848134865af1503d5f803e3d5ff35b803590815f1a8060051c908115609857600190600783149285831a6007018118840218600201948383011a90601f1660081b0101808603906020811860208211021890815f5b80830151818a015201858110609257505050600201019201916018565b82906075565b6001929350829150019101925f5b82811060b3575001916018565b85851060c1575b60010160a6565b936001818192355f1a878501530194905060ba56`;var yt=o=>`0x5f5f5b368110602d575f8083813473${O(o)}5af1503d5f803e3d5ff35b600180820192909160031981019035185f1a8015604c57815301906002565b505f19815282820192607f9060031981019035185f1a818111156072575b160101906002565b838101368437606a56`;var Et=function(o,c){let{method:x,params:y}=o;if(x&&x!=="eth_call")return o;let f=y?.[0]||o,g=y?.[1],w=y?.[2];if(w&&Object.keys(w).length>0||!f?.to||!f?.data||Object.keys(f).some(r=>!["to","data","from"].includes(r)))return o;let k=f.data.length;if(k<1150)return o;let N="0x"+O(f.data),I=f.to,z=f.from,S,h,W,m,F;if(c==="jit"||!c&&(k<3e3||k>=8e3)){let r=ct(N,I,z);S=r.bytecode,h=r.calldata,W=r.to,m=r.from,F=r.balance}else{let r=c?null:ct(N,I,z),l=c==="flz"||!c?wt.flzCompress(N):null,u=c==="cd"||!c&&l?wt.cdCompress(N):null;c==="flz"||!c&&l&&(!u||l.length<u.length)?(h=l,S=pt(I)):(h=u,S=yt(I)),W="0x"+224n.toString(16).padStart(40,"0"),m=z?O(z).padStart(16,"0"):void 0,F="0",!c&&r&&r.bytecode.length+r.calldata.length<S.length+h.length&&(S=r.bytecode,h=r.calldata,W=r.to,m=r.from,F=r.balance)}if(S.length+h.length>=k)return o;let j={code:S,balance:"0x"+F},V={to:W,data:h};return m&&(V.from="0x"+m),{...o,params:[V,g,{...w,[W]:j}]}};export{Et as compress_call};
2
+ //! @__PURE__
5
3
  //# sourceMappingURL=jit-compressor.js.map