@molpha/sdk 0.2.0-dev-20261005191253 → 0.2.0-dev-20261007162054
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.
- package/README.md +34 -8
- package/dist/index.d.ts +27 -16
- package/dist/index.js +22 -7
- package/dist/index.js.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/{wallet--IGHoCtG.d.ts → wallet-DGe_pi93.d.ts} +11 -0
- package/idl/profiles/dev/molpha.json +7841 -0
- package/idl/profiles/stable/molpha.json +5563 -0
- package/package.json +5 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/aggregation.ts","../src/core/encoding.ts","../src/core/apiconfig.ts","../src/core/constants.ts","../src/core/int256.ts","../src/core/nodeKeys.ts","../src/core/selection.ts","../src/gateway/auth.ts","../src/gateway/encryption.ts","../src/evm/eip712.ts","../src/gateway/x402.ts","../src/gateway/identity.ts","../src/gateway/index.ts","../src/core/coalition.ts","../src/solana/accounts.ts","../src/solana/pdas.ts","../idl/molpha.json","../idl/index.ts","../src/solana/plans.ts","../src/solana/client.ts","../src/wallet.ts","../src/core/message.ts","../src/core/timestamp.ts","../src/core/verifyCodes.ts","../src/evm/abi.ts","../src/evm/constants.ts","../src/evm/helpers.ts","../src/starknet/constants.ts","../src/starknet/helpers.ts","../src/bulk.ts","../src/index.ts"],"names":["nobleUtf8ToBytes","nobleConcatBytes","nobleBytesToHex","nobleHexToBytes","keccak_256","secp256k1","address","randomBytes","pda","registry","SEED_GATEWAY","PlanType","U32_MAX","assertUint","word","success","code","U8_MAX","U64_MAX","U256_MAX","strip0x","stripOuterQuotes","assertBigUint"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Aggregation (tolerance mode) config validation and canonicalization.\n *\n * `aggregation` is part of the API config and therefore part of `sourceId`. It is OMITTED\n * for exact mode: a config carrying `mode: \"exact\"` would hash differently from the same\n * config without the key, so it is rejected rather than silently normalized. The node\n * (`new/tolerance.Validate`) is the reference.\n */\nimport type { AggregationConfig } from \"./types.js\";\n\n/** Tolerance mode needs at least this many signers (`signaturesRequired >= 3`). */\nexport const MIN_TOLERANCE_SIGNATURES = 3;\n\nconst MAX_U32 = 0xffffffff;\nconst MAX_U8 = 0xff;\n\n/** Thrown for an unusable `aggregation` config. */\nexport class AggregationConfigError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"AggregationConfigError\";\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Validate an `aggregation` config and return a fresh object with the canonical key order\n * (`mode`, `rule`, `maxDeviationBps`, `maxAgeMs`, `numeric{type, decimals}`) — the order\n * the source hash and the node's JSON blob use.\n *\n * The result is built field by field: unknown or reordered keys on the input can never\n * reach the hash or the wire. `undefined` / `null` mean exact mode and return `undefined`.\n *\n * @throws {AggregationConfigError} on `mode: \"exact\"`, an unsupported mode / rule / numeric\n * type, or an out-of-range number.\n */\nexport function canonicalizeAggregation(\n aggregation: AggregationConfig | null | undefined,\n): AggregationConfig | undefined {\n if (aggregation === undefined || aggregation === null) return undefined;\n if (!isRecord(aggregation)) {\n throw new AggregationConfigError(\"aggregation must be an object\");\n }\n\n const { mode, rule, maxDeviationBps, maxAgeMs, numeric } = aggregation as unknown as Record<\n string,\n unknown\n >;\n\n if (mode === \"exact\") {\n throw new AggregationConfigError(\n 'aggregation.mode \"exact\" is not accepted: omit `aggregation` for exact mode (adding it would change the sourceId)',\n );\n }\n if (mode !== \"tolerance\") {\n throw new AggregationConfigError(\n `unsupported aggregation.mode ${JSON.stringify(mode)}: only \"tolerance\" is supported`,\n );\n }\n if (rule !== \"median\") {\n throw new AggregationConfigError(\n `unsupported aggregation.rule ${JSON.stringify(rule)}: only \"median\" is supported`,\n );\n }\n if (\n typeof maxDeviationBps !== \"number\" ||\n !Number.isInteger(maxDeviationBps) ||\n maxDeviationBps < 0 ||\n maxDeviationBps > MAX_U32\n ) {\n throw new AggregationConfigError(\n `aggregation.maxDeviationBps must be an integer in 0..${MAX_U32}, got ${String(maxDeviationBps)}`,\n );\n }\n if (typeof maxAgeMs !== \"number\" || !Number.isSafeInteger(maxAgeMs) || maxAgeMs <= 0) {\n throw new AggregationConfigError(\n `aggregation.maxAgeMs must be a positive safe integer (milliseconds), got ${String(maxAgeMs)}`,\n );\n }\n if (!isRecord(numeric)) {\n throw new AggregationConfigError(\"aggregation.numeric must be an object\");\n }\n if (numeric.type !== \"int256\") {\n throw new AggregationConfigError(\n `unsupported aggregation.numeric.type ${JSON.stringify(numeric.type)}: only \"int256\" is supported`,\n );\n }\n const decimals = numeric.decimals;\n if (typeof decimals !== \"number\" || !Number.isInteger(decimals) || decimals < 0 || decimals > MAX_U8) {\n throw new AggregationConfigError(\n `aggregation.numeric.decimals must be an integer in 0..${MAX_U8}, got ${String(decimals)}`,\n );\n }\n\n return {\n mode: \"tolerance\",\n rule: \"median\",\n maxDeviationBps,\n maxAgeMs,\n numeric: { type: \"int256\", decimals },\n };\n}\n\n/**\n * Tolerance mode needs `signaturesRequired >= 3`; the node rejects anything lower.\n * A no-op for exact mode (`aggregation` omitted).\n *\n * @throws {AggregationConfigError}\n */\nexport function assertAggregationQuorum(\n aggregation: AggregationConfig | null | undefined,\n signaturesRequired: number,\n): void {\n if (aggregation === undefined || aggregation === null) return;\n if (signaturesRequired < MIN_TOLERANCE_SIGNATURES) {\n throw new AggregationConfigError(\n `tolerance aggregation requires signaturesRequired >= ${MIN_TOLERANCE_SIGNATURES}, got ${signaturesRequired}`,\n );\n }\n}\n","/**\n * Byte encoding primitives. Isomorphic — no `Buffer`, no `fs`. All byte work is\n * `Uint8Array` + `@noble/hashes/utils.js`. The canonical selection-bitmap and value\n * representation is a 32-byte big-endian word; `bigint` is used only for internal\n * sampling/packing math and is never exposed on the wire.\n */\nimport {\n bytesToHex as nobleBytesToHex,\n hexToBytes as nobleHexToBytes,\n utf8ToBytes as nobleUtf8ToBytes,\n concatBytes as nobleConcatBytes,\n} from \"@noble/hashes/utils.js\";\n\nexport const utf8 = (s: string): Uint8Array => nobleUtf8ToBytes(s);\nexport const concatBytes = (...arrays: Uint8Array[]): Uint8Array =>\n nobleConcatBytes(...arrays);\n\n/** Lower-case hex, no `0x` prefix. */\nexport const bytesToHex = (bytes: Uint8Array): string => nobleBytesToHex(bytes);\n\n/** Accepts an optional leading `0x`; case-insensitive. */\nexport function hexToBytes(hex: string): Uint8Array {\n const clean = hex.startsWith(\"0x\") || hex.startsWith(\"0X\") ? hex.slice(2) : hex;\n return nobleHexToBytes(clean);\n}\n\n/** Hex with a leading `0x`. */\nexport const bytesToHex0x = (bytes: Uint8Array): string => \"0x\" + bytesToHex(bytes);\n\n/** u8 → 1 byte. Range-checked: `Uint8Array.of` would silently wrap an out-of-range value. */\nexport function u8(value: number): Uint8Array {\n assertUint(value, 0xff, \"u8\");\n return Uint8Array.of(value);\n}\n\n/** Big-endian u32 → 4 bytes. */\nexport function u32be(value: number): Uint8Array {\n assertUint(value, 0xffffffff, \"u32\");\n const out = new Uint8Array(4);\n new DataView(out.buffer).setUint32(0, value, false);\n return out;\n}\n\n/** Little-endian u32 → 4 bytes (used for PDA seeds like the registry index). */\nexport function u32le(value: number): Uint8Array {\n assertUint(value, 0xffffffff, \"u32\");\n const out = new Uint8Array(4);\n new DataView(out.buffer).setUint32(0, value, true);\n return out;\n}\n\n/** Big-endian u64 → 8 bytes. Accepts `number` or `bigint`. */\nexport function u64be(value: number | bigint): Uint8Array {\n const v = typeof value === \"bigint\" ? value : BigInt(value);\n if (v < 0n || v > 0xffffffffffffffffn) {\n throw new RangeError(`u64 out of range: ${v}`);\n }\n const out = new Uint8Array(8);\n new DataView(out.buffer).setBigUint64(0, v, false);\n return out;\n}\n\n/** Little-endian u64 → 8 bytes. Accepts `number` or `bigint`. */\nexport function u64le(value: number | bigint): Uint8Array {\n const v = typeof value === \"bigint\" ? value : BigInt(value);\n if (v < 0n || v > 0xffffffffffffffffn) {\n throw new RangeError(`u64 out of range: ${v}`);\n }\n const out = new Uint8Array(8);\n new DataView(out.buffer).setBigUint64(0, v, true);\n return out;\n}\n\n/** Big-endian 32-byte word ← bigint (0 ≤ v < 2^256). */\nexport function u256beFromBigInt(value: bigint): Uint8Array {\n if (value < 0n) throw new RangeError(\"u256 cannot be negative\");\n const out = new Uint8Array(32);\n let v = value;\n for (let i = 31; i >= 0 && v > 0n; i--) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n if (v > 0n) throw new RangeError(\"u256 overflow (>= 2^256)\");\n return out;\n}\n\n/** bigint ← big-endian byte word (any length). */\nexport function bigIntFromBytesBe(bytes: Uint8Array): bigint {\n let v = 0n;\n for (const b of bytes) v = (v << 8n) | BigInt(b);\n return v;\n}\n\n/** Throw unless `bytes.length === len`. Returns the input for chaining. */\nexport function ensureLength(bytes: Uint8Array, len: number, label: string): Uint8Array {\n if (bytes.length !== len) {\n throw new RangeError(`${label}: expected ${len} bytes, got ${bytes.length}`);\n }\n return bytes;\n}\n\n/** Coerce hex string or bytes to a fixed-length byte array. */\nexport function toFixedBytes(\n value: string | Uint8Array,\n len: number,\n label: string,\n): Uint8Array {\n const bytes = typeof value === \"string\" ? hexToBytes(value) : value;\n return ensureLength(bytes, len, label);\n}\n\nfunction assertUint(value: number, max: number, label: string): void {\n if (!Number.isInteger(value) || value < 0 || value > max) {\n throw new RangeError(`${label} out of range: ${value}`);\n }\n}\n\n/**\n * Standard base64 (padded, no line breaks). Isomorphic: `btoa` is available in\n * Node 20+ and every browser, so no `Buffer` is pulled into browser bundles.\n */\nexport function bytesToBase64(bytes: Uint8Array): string {\n let binary = \"\";\n // Chunked to keep a large payload off the argument stack.\n for (let i = 0; i < bytes.length; i += 0x8000) {\n binary += String.fromCharCode(...bytes.subarray(i, i + 0x8000));\n }\n return btoa(binary);\n}\n\n/** Accepts padded or unpadded standard base64. */\nexport function base64ToBytes(value: string): Uint8Array {\n const padded = value.length % 4 === 0 ? value : value + \"=\".repeat(4 - (value.length % 4));\n const binary = atob(padded);\n const out = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) out[i] = binary.charCodeAt(i);\n return out;\n}\n","/**\n * API config canonicalization + source-id derivation. Must stay byte-identical with\n * gateway/node verification: `sourceId = keccak256(JSON.stringify(canonical apiConfig))`.\n */\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { canonicalizeAggregation } from \"./aggregation.js\";\nimport { bytesToHex, utf8 } from \"./encoding.js\";\nimport type { APIConfig } from \"./types.js\";\n\n/** Lexicographic UTF-16 code-unit order — locale-independent, matches gateway/node. */\nfunction compareCodeUnits(a: string, b: string): number {\n const len = Math.min(a.length, b.length);\n for (let i = 0; i < len; i++) {\n const diff = a.charCodeAt(i) - b.charCodeAt(i);\n if (diff !== 0) return diff;\n }\n return a.length - b.length;\n}\n\nfunction sortHeaders(headers: Record<string, string>): Record<string, string> {\n return Object.fromEntries(Object.entries(headers).sort(([a], [b]) => compareCodeUnits(a, b)));\n}\n\n/**\n * Gateway wire shape — defaults applied before hash / encryption.\n *\n * Keys are emitted in the fixed order `url`, `method`, `headers`, `responseParser`,\n * `valueTransform`, `aggregation`; `aggregation` is present only for tolerance mode and its\n * nested keys are rebuilt in canonical order (`canonicalizeAggregation`), so no extra or\n * reordered input key can reach the hash. A config without `aggregation` hashes exactly as\n * before.\n *\n * @throws {AggregationConfigError} if `aggregation` is invalid (including `mode: \"exact\"`).\n */\nexport function canonicalizeAPIConfig(apiConfig: APIConfig): APIConfig {\n const headers = apiConfig.headers ?? {};\n const aggregation = canonicalizeAggregation(apiConfig.aggregation);\n return {\n url: apiConfig.url,\n method: apiConfig.method ?? \"GET\",\n headers: Object.keys(headers).length === 0 ? headers : sortHeaders(headers),\n responseParser: apiConfig.responseParser,\n valueTransform: apiConfig.valueTransform ?? \"\",\n ...(aggregation ? { aggregation } : {}),\n };\n}\n\n/**\n * `sourceId = keccak256(JSON.stringify(canonical apiConfig))` — the 32-byte identity of a\n * data source. Hash the same config (including `{{secret.*}}` placeholders) you send to\n * `MolphaGateway.requestSignedData`; the gateway and every verifier recompute it from\n * `apiConfig`.\n */\nexport function deriveSourceId(apiConfig: APIConfig): Uint8Array {\n return keccak_256(utf8(JSON.stringify(canonicalizeAPIConfig(apiConfig))));\n}\n\n/** Hex-encoded {@link deriveSourceId} (64 lowercase hex chars, no `0x`). */\nexport function deriveSourceIdString(apiConfig: APIConfig): string {\n return bytesToHex(deriveSourceId(apiConfig));\n}\n","/**\n * Protocol-wide constants that must stay in sync with the vendored IDL. Kept as plain\n * literals so gateway-only / browser bundles never pull in `idl/molpha.json`.\n */\n\n/** Molpha program id (`idl/molpha.json` → `address`). Asserted equal in `test/gateway-auth.test.ts`. */\nexport const MOLPHA_PROGRAM_ID = \"chivcFQgxzwkpLvW41PV431HQ4dYpaW3povQH3AdpQt\";\n","/**\n * Signed `int256` helpers for tolerance-mode values.\n *\n * In tolerance mode the signed `value` is a two's-complement `bytes32` integer: the source's\n * decimal string scaled by `10^decimals`, rounded half to even, bounds-checked against\n * `int256`. Mirrors `new/tolerance` (`Encode` / `Decode` / `Format`) in molpha-node-client\n * byte for byte.\n */\nimport { bigIntFromBytesBe, hexToBytes, u256beFromBigInt } from \"./encoding.js\";\n\n/** `2^255 - 1`. */\nexport const INT256_MAX: bigint = (1n << 255n) - 1n;\n/** `-2^255`. */\nexport const INT256_MIN: bigint = -(1n << 255n);\n\nconst TWO_256 = 1n << 256n;\n/** Input digit cap, matching the node, before any big-integer allocation. */\nconst MAX_DECIMAL_DIGITS = 10_000;\n\nfunction assertDecimals(decimals: number): void {\n if (!Number.isInteger(decimals) || decimals < 0 || decimals > 255) {\n throw new RangeError(`decimals must be an integer in 0..255, got ${decimals}`);\n }\n}\n\nfunction toBytes32(value: Uint8Array | string, label: string): Uint8Array {\n const bytes = typeof value === \"string\" ? hexToBytes(value) : value;\n if (bytes.length !== 32) {\n throw new RangeError(`${label}: expected 32 bytes, got ${bytes.length}`);\n }\n return bytes;\n}\n\n/** Two's-complement `bytes32` (big-endian) of a signed integer in `[-2^255, 2^255)`. */\nexport function encodeInt256(value: bigint): Uint8Array {\n if (value > INT256_MAX || value < INT256_MIN) {\n throw new RangeError(\"int256 overflow\");\n }\n return u256beFromBigInt(value < 0n ? value + TWO_256 : value);\n}\n\n/** Signed integer of a two's-complement `bytes32` (bytes or hex, optional `0x`). */\nexport function decodeInt256(value: Uint8Array | string): bigint {\n const n = bigIntFromBytesBe(toBytes32(value, \"int256 value\"));\n return n >= 1n << 255n ? n - TWO_256 : n;\n}\n\n/**\n * Parse an ordinary decimal string (`[+-]digits[.digits]`, no exponent, no whitespace),\n * scale by `10^decimals`, round half to even, and return the `int256` two's-complement\n * `bytes32` the nodes sign for a tolerance-mode source.\n *\n * @throws {Error} `invalid decimal`, `decimal too long`, or `int256 overflow`.\n */\nexport function encodeInt256Decimal(decimal: string, decimals: number): Uint8Array {\n assertDecimals(decimals);\n if (typeof decimal !== \"string\" || decimal === \"\" || decimal.trim() !== decimal) {\n throw new Error(\"invalid decimal\");\n }\n let s = decimal;\n const negative = s.startsWith(\"-\");\n if (negative || s.startsWith(\"+\")) s = s.slice(1);\n\n const parts = s.split(\".\");\n if (parts.length > 2 || parts[0] === \"\" || (parts.length === 2 && parts[1] === \"\")) {\n throw new Error(\"invalid decimal\");\n }\n for (const part of parts) {\n if (!/^[0-9]*$/.test(part)) throw new Error(\"invalid decimal\");\n }\n const frac = parts.length === 2 ? parts[1]! : \"\";\n if (parts[0]!.length + frac.length > MAX_DECIMAL_DIGITS) {\n throw new Error(\"decimal too long\");\n }\n\n let scaled = BigInt(parts[0]! + frac);\n const shift = decimals - frac.length;\n if (shift >= 0) {\n scaled *= 10n ** BigInt(shift);\n } else {\n const divisor = 10n ** BigInt(-shift);\n let q = scaled / divisor;\n const r = scaled % divisor;\n const twice = r * 2n;\n if (twice > divisor || (twice === divisor && (q & 1n) === 1n)) q += 1n;\n scaled = q;\n }\n if (negative) scaled = -scaled;\n return encodeInt256(scaled);\n}\n\n/**\n * Render a signed integer — a two's-complement `bytes32` (bytes or hex), or an already\n * decoded `bigint` — at the source's scale: `decimals` fractional places with trailing zeros\n * trimmed (`-1.2`, `42`, `0.00000005`). Inverse of {@link encodeInt256Decimal} up to\n * rounding.\n */\nexport function formatInt256Decimal(value: Uint8Array | string | bigint, decimals: number): string {\n assertDecimals(decimals);\n const n = typeof value === \"bigint\" ? value : decodeInt256(value);\n if (n > INT256_MAX || n < INT256_MIN) throw new RangeError(\"int256 overflow\");\n if (decimals === 0) return n.toString();\n const negative = n < 0n;\n let digits = (negative ? -n : n).toString();\n while (digits.length <= decimals) digits = \"0\" + digits;\n const point = digits.length - decimals;\n let fracEnd = digits.length;\n while (fracEnd > point && digits[fracEnd - 1] === \"0\") fracEnd--;\n const fraction = digits.slice(point, fracEnd);\n const text = fraction === \"\" ? digits.slice(0, point) : `${digits.slice(0, point)}.${fraction}`;\n return negative ? `-${text}` : text;\n}\n","import { secp256k1 } from \"@noble/curves/secp256k1.js\";\nimport { bytesToHex, concatBytes, ensureLength, hexToBytes } from \"./encoding.js\";\n\nconst SECP256K1_COMPRESSED_PUBLIC_KEY_BYTES = 33;\nconst SECP256K1_UNCOMPRESSED_PUBLIC_KEY_BYTES = 65;\n\n/**\n * Parse a secp256k1 public key and return canonical compressed lower-case hex.\n * Accepts compressed or uncompressed SEC1 public keys with an optional `0x`.\n */\nexport function normalizeSecp256k1PublicKeyHex(\n publicKeyHex: string,\n label = \"secp256k1 public key\",\n): string {\n if (typeof publicKeyHex !== \"string\") {\n throw new Error(`${label}: expected hex string`);\n }\n\n let bytes: Uint8Array;\n try {\n bytes = hexToBytes(publicKeyHex);\n } catch {\n throw new Error(`${label}: invalid hex`);\n }\n\n if (\n bytes.length !== SECP256K1_COMPRESSED_PUBLIC_KEY_BYTES &&\n bytes.length !== SECP256K1_UNCOMPRESSED_PUBLIC_KEY_BYTES\n ) {\n throw new Error(\n `${label}: expected ${SECP256K1_COMPRESSED_PUBLIC_KEY_BYTES}-byte compressed or ${SECP256K1_UNCOMPRESSED_PUBLIC_KEY_BYTES}-byte uncompressed public key`,\n );\n }\n\n try {\n return bytesToHex(secp256k1.Point.fromBytes(bytes).toBytes(true));\n } catch {\n throw new Error(`${label}: invalid secp256k1 public key`);\n }\n}\n\n/** Reconstruct a compressed secp256k1 public key from 32-byte affine X/Y coordinates. */\nexport function secp256k1PublicKeyFromCoordinates(\n x: Uint8Array,\n y: Uint8Array,\n label = \"secp256k1 public key coordinates\",\n): string {\n ensureLength(x, 32, `${label}.x`);\n ensureLength(y, 32, `${label}.y`);\n return normalizeSecp256k1PublicKeyHex(\n bytesToHex(concatBytes(Uint8Array.of(0x04), x, y)),\n label,\n );\n}\n","/**\n * Node selection: deterministic, verifiable, without replacement.\n *\n * Canonical bitmap representation = 32-byte big-endian word (bit `i` lives in\n * byte `31 - (i >> 3)`, mask `1 << (i & 7)`), matching the wire / on-chain form.\n */\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { concatBytes, ensureLength, u32be, u64be, utf8 } from \"./encoding.js\";\n\nconst SELECTION_SEED_DOMAIN = keccak_256(utf8(\"MOLPHA_SELECTION_V1\"));\nconst SELECTION_DERIVE_DOMAIN = keccak_256(utf8(\"MOLPHA_SELECTION_DERIVE\"));\n\n/**\n * Width in milliseconds of the window selection reads from the timestamp. The timestamp\n * is unix milliseconds; the seed uses `floor(timestamp / SELECTION_WINDOW_MS)`, so\n * sub-second precision never changes the committee. Changing it is a consensus break and must\n * bump the selection prefix.\n */\nexport const SELECTION_WINDOW_MS = 1000n;\n\n/** Maximum hashing rounds before giving up (matches on-chain cap). */\nconst MAX_ROUNDS = 65_536;\n\nconst BITMAP_BYTES = 32;\nconst MAX_NODES = BITMAP_BYTES * 8; // 256\nconst U32_MAX = 0xffff_ffff;\n\n/**\n * `seed = keccak256(keccak256(\"MOLPHA_SELECTION_V1\") || sourceId || be32(rv) || be64(ts / 1000))`,\n * where `ts` is the timestamp in unix MILLISECONDS (its 1 s window index is hashed).\n */\nexport function deriveSelectionSeed(\n sourceId: Uint8Array,\n registryVersion: number,\n timestamp: number | bigint,\n): Uint8Array {\n ensureLength(sourceId, 32, \"sourceId\");\n return keccak_256(\n concatBytes(\n SELECTION_SEED_DOMAIN,\n sourceId,\n u32be(registryVersion),\n u64be(BigInt(timestamp) / SELECTION_WINDOW_MS),\n ),\n );\n}\n\n/** `min(signaturesRequired + redundancyBuffer, nodeCount)`. */\nexport function effectiveSelectionSize(\n signaturesRequired: number,\n redundancyBuffer: number,\n nodeCount: number,\n): number {\n return Math.min(signaturesRequired + redundancyBuffer, nodeCount);\n}\n\n/** Is bit `bit` set in the 32-byte big-endian `bitmap`? */\nexport function bitmapBitSet(bitmap: Uint8Array, bit: number): boolean {\n if (bit < 0 || bit >= MAX_NODES) return false;\n const byte = bitmap[BITMAP_BYTES - 1 - (bit >> 3)] ?? 0;\n return (byte & (1 << (bit & 7))) !== 0;\n}\n\nfunction setBit(bitmap: Uint8Array, bit: number): void {\n const idx = BITMAP_BYTES - 1 - (bit >> 3);\n bitmap[idx] = (bitmap[idx] ?? 0) | (1 << (bit & 7));\n}\n\n/** Indices of set bits in `[0, nodeCount)`, ascending. */\nexport function selectedIndices(bitmap: Uint8Array, nodeCount: number): number[] {\n const out: number[] = [];\n for (let i = 0; i < nodeCount; i++) {\n if (bitmapBitSet(bitmap, i)) out.push(i);\n }\n return out;\n}\n\n/**\n * Rejection-sample `groupSize` distinct indices out of `nodeCount` from `seed`,\n * returning a 32-byte big-endian bitmap. Uses the complement optimization when\n * `groupSize > nodeCount / 2` (sample the smaller set, then invert).\n */\nexport function deriveGroupBitmap(\n seed: Uint8Array,\n nodeCount: number,\n groupSize: number,\n): Uint8Array {\n if (!Number.isInteger(nodeCount) || nodeCount <= 0 || nodeCount > MAX_NODES) {\n throw new RangeError(`GroupBitmapDerivationFailed: invalid nodeCount ${nodeCount}`);\n }\n if (!Number.isInteger(groupSize) || groupSize < 0 || groupSize > nodeCount) {\n throw new RangeError(`GroupBitmapDerivationFailed: invalid groupSize ${groupSize}`);\n }\n const bitmap = new Uint8Array(BITMAP_BYTES);\n if (groupSize === 0) return bitmap;\n if (groupSize === nodeCount) {\n for (let i = 0; i < nodeCount; i++) setBit(bitmap, i);\n return bitmap;\n }\n\n // Complement optimization: sample the smaller half, invert at the end.\n const complement = groupSize > nodeCount - groupSize;\n const sampleCount = complement ? nodeCount - groupSize : groupSize;\n const limit = Math.floor(U32_MAX / nodeCount) * nodeCount;\n\n const chosen = new Set<number>();\n let round = 0;\n while (chosen.size < sampleCount && round < MAX_ROUNDS) {\n const counterWord = new Uint8Array(32);\n counterWord.set(u64be(round), 24);\n const block = keccak_256(concatBytes(seed, SELECTION_DERIVE_DOMAIN, counterWord));\n for (let off = 0; off + 4 <= block.length && chosen.size < sampleCount; off += 4) {\n const limb =\n ((block[off]! << 24) |\n (block[off + 1]! << 16) |\n (block[off + 2]! << 8) |\n block[off + 3]!) >>>\n 0;\n if (limb < limit) {\n const idx = limb % nodeCount;\n chosen.add(idx);\n }\n }\n round++;\n }\n if (chosen.size < sampleCount) {\n throw new Error(\"GroupBitmapDerivationFailed: round cap reached\");\n }\n\n if (complement) {\n for (let i = 0; i < nodeCount; i++) {\n if (!chosen.has(i)) setBit(bitmap, i);\n }\n } else {\n for (const i of chosen) setBit(bitmap, i);\n }\n return bitmap;\n}\n\n/**\n * Convenience orchestrator: derive the selection bitmap end-to-end.\n * `redundancy` defaults to 0; `ts` is the timestamp in unix MILLISECONDS and defaults\n * to now. The gateway assigns the real timestamp of a round, so this is for tests and tools.\n */\nexport function deriveSelectionBitmap(\n sourceId: Uint8Array,\n registryVersion: number,\n nodeCount: number,\n signaturesRequired: number,\n redundancy = 0,\n ts: number | bigint = Date.now(),\n): Uint8Array {\n const seed = deriveSelectionSeed(sourceId, registryVersion, ts);\n const size = effectiveSelectionSize(signaturesRequired, redundancy, nodeCount);\n return deriveGroupBitmap(seed, nodeCount, size);\n}\n","/**\n * Gateway request authentication (`RequestAuth`).\n *\n * hash = keccak256(\"MOLPHA_REQAUTH_V1\" || programId(32) || gatewayPda(32) || sourceId(32) ||\n * u8(signaturesRequired) || u64le(authTimestamp))\n *\n * The consumer authority (the subscription owner, or a delegate of it) ed25519-signs the 32-byte\n * hash. Binding the program id and the Gateway PDA means a signature is only redeemable by the\n * gateway the consumer chose, on the deployment they meant to pay: never a bearer token.\n *\n * `authTimestamp` is the caller's unix SECONDS at signing: a freshness stamp for the\n * authorization only. It is unrelated to the round's `timestamp` (unix milliseconds,\n * assigned by the gateway), and RequestAuth is not part of the round ID, the selection, the signed\n * message or the x402 memo.\n */\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { concatBytes, ensureLength, toFixedBytes, utf8, u64le } from \"../core/encoding.js\";\n\nexport type { Signer } from \"../core/types.js\";\n\nexport const REQUEST_AUTH_DOMAIN: Uint8Array = utf8(\"MOLPHA_REQAUTH_V1\");\n\nexport interface RequestAuthFields {\n /** Program id, 32 bytes (see `addressToBytes` for base58). */\n programId: Uint8Array;\n /** Gateway PDA `[\"molpha_gateway\", gatewayAuthority]`, 32 bytes (see `deriveGatewayPda`). */\n gateway: Uint8Array;\n /** 32-byte source id, hex or bytes. */\n sourceId: Uint8Array | string;\n /** u8 — the per-request quorum. */\n signaturesRequired: number;\n /** u64 unix SECONDS at signing (the auth freshness stamp, not the round's timestamp). */\n authTimestamp: number | bigint;\n}\n\n/** Borsh encoding of `RequestAuth` — the hash body, without the domain. */\nexport function encodeRequestAuth(fields: RequestAuthFields): Uint8Array {\n if (\n !Number.isInteger(fields.signaturesRequired) ||\n fields.signaturesRequired < 1 ||\n fields.signaturesRequired > 255\n ) {\n throw new RangeError(`signaturesRequired out of u8 range: ${fields.signaturesRequired}`);\n }\n return concatBytes(\n ensureLength(fields.programId, 32, \"programId\"),\n ensureLength(fields.gateway, 32, \"gateway\"),\n toFixedBytes(fields.sourceId, 32, \"sourceId\"),\n Uint8Array.of(fields.signaturesRequired),\n u64le(fields.authTimestamp),\n );\n}\n\n/** `keccak256(REQUEST_AUTH_DOMAIN || encodeRequestAuth(fields))` — the message the consumer signs. */\nexport function hashRequestAuth(fields: RequestAuthFields): Uint8Array {\n return keccak_256(concatBytes(REQUEST_AUTH_DOMAIN, encodeRequestAuth(fields)));\n}\n","/**\n * API-config secret resolution + ECDH config encryption for selected nodes.\n */\nimport { gcm } from \"@noble/ciphers/aes.js\";\nimport { secp256k1 } from \"@noble/curves/secp256k1.js\";\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { randomBytes } from \"@noble/hashes/utils.js\";\nimport { canonicalizeAPIConfig } from \"../core/apiconfig.js\";\nimport { bytesToHex, concatBytes, hexToBytes, utf8 } from \"../core/encoding.js\";\nimport { normalizeSecp256k1PublicKeyHex } from \"../core/nodeKeys.js\";\nimport type { APIConfig, EncKeyBundle, Node } from \"../core/types.js\";\n\nconst NONCE_BYTES = 12; // AES-GCM nonce\nconst SYM_KEY_BYTES = 32;\n\nconst SECRET_PLACEHOLDER = /\\{\\{\\s*secret\\.([A-Za-z0-9_]+)\\s*\\}\\}/g;\n\ninterface EncryptionRecipient {\n index: number;\n signingKey: string;\n}\n\n/**\n * Replace `{{secret.NAME}}` placeholders in the string fields of an API config.\n * Throws if a referenced secret is missing.\n */\nexport function resolveAPIConfig(\n apiConfig: APIConfig,\n secrets: Record<string, string>,\n): APIConfig {\n const sub = (s: string): string =>\n s.replace(SECRET_PLACEHOLDER, (_m, name: string) => {\n if (!(name in secrets)) throw new Error(`Missing secret: ${name}`);\n return secrets[name]!;\n });\n\n const headers = apiConfig.headers\n ? Object.fromEntries(Object.entries(apiConfig.headers).map(([k, v]) => [k, sub(v)]))\n : undefined;\n\n return {\n ...apiConfig,\n url: sub(apiConfig.url),\n ...(headers ? { headers } : {}),\n responseParser: sub(apiConfig.responseParser),\n ...(apiConfig.valueTransform ? { valueTransform: sub(apiConfig.valueTransform) } : {}),\n };\n}\n\n/**\n * Encrypt a resolved API config with a fresh symmetric key, then ECDH-wrap that\n * key for each selected node. The gateway only ever sees placeholders.\n */\nexport function encryptForNodes(\n apiConfig: APIConfig,\n secrets: Record<string, string>,\n selectedNodes: Node[],\n): EncKeyBundle {\n const recipients = validateEncryptionRecipients(selectedNodes);\n\n const resolved = resolveAPIConfig(apiConfig, secrets);\n const plaintext = utf8(JSON.stringify(canonicalizeAPIConfig(resolved)));\n\n const symKey = randomBytes(SYM_KEY_BYTES);\n const nonceSym = randomBytes(NONCE_BYTES);\n const ciphertext = gcm(symKey, nonceSym).encrypt(plaintext);\n\n const ephemeralPriv = secp256k1.utils.randomSecretKey();\n const ephemeralPub = secp256k1.getPublicKey(ephemeralPriv, true); // compressed\n\n const envelopes: Record<string, string> = {};\n for (const node of recipients) {\n const envelopeIndex = String(node.index);\n const nodePub = hexToBytes(node.signingKey);\n const shared = secp256k1.getSharedSecret(ephemeralPriv, nodePub);\n const wrapKey = keccak_256(shared);\n const nonceEnv = randomBytes(NONCE_BYTES);\n const wrappedSymKey = gcm(wrapKey, nonceEnv).encrypt(symKey);\n envelopes[envelopeIndex] = bytesToHex(concatBytes(nonceEnv, wrappedSymKey));\n }\n\n return {\n ephemeralPub: bytesToHex(ephemeralPub),\n nonceSym: bytesToHex(nonceSym),\n ciphertext: bytesToHex(ciphertext),\n envelopes,\n };\n}\n\nfunction validateEncryptionRecipients(selectedNodes: Node[]): EncryptionRecipient[] {\n if (selectedNodes.length === 0) throw new Error(\"No nodes to encrypt for\");\n\n const envelopeIndexes = new Set<string>();\n const envelopeKeys = new Set<string>();\n return selectedNodes.map((node) => {\n if (!Number.isInteger(node.index) || node.index < 0) {\n throw new Error(`Selected node index must be a non-negative integer: ${node.index}`);\n }\n const envelopeIndex = String(node.index);\n if (envelopeIndexes.has(envelopeIndex)) {\n throw new Error(`Duplicate selected node index: ${node.index}`);\n }\n envelopeIndexes.add(envelopeIndex);\n\n const signingKey = normalizeSecp256k1PublicKeyHex(\n node.signingKey,\n `Selected node ${node.index} signingKey`,\n );\n if (envelopeKeys.has(signingKey)) {\n throw new Error(`Duplicate selected node signingKey: ${node.index}`);\n }\n envelopeKeys.add(signingKey);\n return { index: node.index, signingKey };\n });\n}\n","/**\n * EIP-712 typed-data hashing and EIP-3009 `TransferWithAuthorization` digests.\n *\n * Used to sign payments to an API source that is itself x402-paywalled: the\n * caller authorizes a transfer from their own wallet, so the token contract is\n * the EIP-712 verifying contract. Signature-critical bytes — must stay\n * byte-identical with the token contract and the source's facilitator.\n */\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { secp256k1 } from \"@noble/curves/secp256k1.js\";\nimport { bytesToHex, bytesToHex0x, concatBytes, hexToBytes, utf8 } from \"../core/encoding.js\";\nimport type { EvmSigner } from \"../core/types.js\";\n\n/** EIP-712 domain of the token contract that will settle the authorization. */\nexport interface Eip712Domain {\n name: string;\n version: string;\n chainId: number;\n /** Token contract address, 0x-prefixed. */\n verifyingContract: string;\n}\n\n/** EIP-3009 transfer authorization. Amounts are decimal strings of base units. */\nexport interface TransferAuthorization {\n from: string;\n to: string;\n value: string;\n validAfter: string;\n validBefore: string;\n /** 0x-prefixed 32-byte nonce. */\n nonce: string;\n}\n\nconst typeHash = (signature: string): Uint8Array => keccak_256(utf8(signature));\n\nexport const EIP712_DOMAIN_TYPEHASH = typeHash(\n \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\",\n);\n\nexport const TRANSFER_WITH_AUTHORIZATION_TYPEHASH = typeHash(\n \"TransferWithAuthorization(address from,address to,uint256 value,uint256 validAfter,uint256 validBefore,bytes32 nonce)\",\n);\n\n/** ABI-encode one 32-byte word from raw bytes, right-aligned. */\nfunction word(bytes: Uint8Array): Uint8Array {\n if (bytes.length > 32) throw new RangeError(\"ABI word overflow\");\n const out = new Uint8Array(32);\n out.set(bytes, 32 - bytes.length);\n return out;\n}\n\nfunction addressWord(address: string): Uint8Array {\n const bytes = hexToBytes(address);\n if (bytes.length !== 20) throw new RangeError(`Not a 20-byte address: ${address}`);\n return word(bytes);\n}\n\nfunction uintWord(value: string | bigint): Uint8Array {\n const n = typeof value === \"bigint\" ? value : BigInt(value);\n if (n < 0n) throw new RangeError(`Not an unsigned integer: ${value}`);\n const hex = n.toString(16);\n return word(hexToBytes(hex.length % 2 === 0 ? hex : \"0\" + hex));\n}\n\nfunction bytes32Word(value: string): Uint8Array {\n const bytes = hexToBytes(value);\n if (bytes.length !== 32) throw new RangeError(`Not a 32-byte value: ${value}`);\n return bytes;\n}\n\nexport function domainSeparator(domain: Eip712Domain): Uint8Array {\n return keccak_256(\n concatBytes(\n EIP712_DOMAIN_TYPEHASH,\n keccak_256(utf8(domain.name)),\n keccak_256(utf8(domain.version)),\n uintWord(BigInt(domain.chainId)),\n addressWord(domain.verifyingContract),\n ),\n );\n}\n\nexport function transferWithAuthorizationHash(auth: TransferAuthorization): Uint8Array {\n return keccak_256(\n concatBytes(\n TRANSFER_WITH_AUTHORIZATION_TYPEHASH,\n addressWord(auth.from),\n addressWord(auth.to),\n uintWord(auth.value),\n uintWord(auth.validAfter),\n uintWord(auth.validBefore),\n bytes32Word(auth.nonce),\n ),\n );\n}\n\n/** The 32-byte digest a wallet signs: `keccak256(0x1901 || domain || struct)`. */\nexport function transferWithAuthorizationDigest(\n domain: Eip712Domain,\n auth: TransferAuthorization,\n): Uint8Array {\n return keccak_256(\n concatBytes(\n Uint8Array.from([0x19, 0x01]),\n domainSeparator(domain),\n transferWithAuthorizationHash(auth),\n ),\n );\n}\n\n/** EIP-55 checksum form. Some facilitators reject non-checksummed addresses. */\nexport function toChecksumAddress(address: string): string {\n const lower = bytesToHex(hexToBytes(address));\n if (lower.length !== 40) throw new RangeError(`Not a 20-byte address: ${address}`);\n const digest = bytesToHex(keccak_256(utf8(lower)));\n let out = \"0x\";\n for (let i = 0; i < lower.length; i++) {\n out += parseInt(digest[i]!, 16) >= 8 ? lower[i]!.toUpperCase() : lower[i]!;\n }\n return out;\n}\n\n/** The EIP-55 address of a raw secp256k1 private key. */\nexport function evmAddressFromPrivateKey(privateKey: string | Uint8Array): string {\n const key = typeof privateKey === \"string\" ? hexToBytes(privateKey) : privateKey;\n if (key.length !== 32) throw new RangeError(\"EVM private key must be 32 bytes\");\n const uncompressed = secp256k1.getPublicKey(key, false);\n // Drop the 0x04 tag, keccak the 64-byte point, keep the low 20 bytes.\n return toChecksumAddress(bytesToHex0x(keccak_256(uncompressed.subarray(1)).subarray(12)));\n}\n\n/**\n * Build an {@link EvmSigner} from a raw secp256k1 private key. The key stays in\n * the caller's process: neither Molpha nor the gateway ever sees one.\n */\nexport function createEvmSignerFromPrivateKey(privateKey: string | Uint8Array): EvmSigner {\n const key = typeof privateKey === \"string\" ? hexToBytes(privateKey) : privateKey;\n const address = evmAddressFromPrivateKey(key);\n\n return {\n address,\n async signDigest(digest: Uint8Array): Promise<Uint8Array> {\n if (digest.length !== 32) throw new RangeError(\"Digest must be 32 bytes\");\n // Noble returns [recovery || r || s]; Ethereum wants r || s || v.\n const signed = secp256k1.sign(digest, key, { prehash: false, format: \"recovered\" });\n const out = new Uint8Array(65);\n out.set(signed.subarray(1), 0);\n out[64] = 27 + signed[0]!;\n return out;\n },\n };\n}\n","/**\n * Paying an API source that is itself x402-paywalled.\n *\n * The caller pays the source directly, from their own wallet on the source's\n * network. Molpha never holds, signs for, or converts those funds, and the\n * Molpha side of the round is unchanged: a paid source still costs exactly one\n * round of subscription quota, and source payment never enters `sourceId`.\n */\nimport { randomBytes } from \"@noble/hashes/utils.js\";\nimport { base64ToBytes, bytesToBase64, bytesToHex0x, utf8 } from \"../core/encoding.js\";\nimport { effectiveSelectionSize } from \"../core/selection.js\";\nimport type {\n APIConfig,\n AssetDomain,\n EvmSigner,\n UpstreamQuote,\n UpstreamTerms,\n} from \"../core/types.js\";\nimport { transferWithAuthorizationDigest, toChecksumAddress } from \"../evm/eip712.js\";\nimport { resolveAPIConfig } from \"./encryption.js\";\n\n/**\n * Payment networks whose authorizations this SDK can sign. Beta is Base USDC;\n * the asset is pinned because the caller signs a transfer from their own wallet\n * and the token contract is the EIP-712 verifying contract.\n */\nconst NETWORKS: Record<string, { chainId: number; usdc: string }> = {\n \"eip155:8453\": { chainId: 8453, usdc: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\" },\n \"eip155:84532\": { chainId: 84532, usdc: \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\" },\n // x402 v1 network names.\n base: { chainId: 8453, usdc: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\" },\n \"base-sepolia\": { chainId: 84532, usdc: \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\" },\n};\n\n/** Raised when a round needs source payment the caller cannot or did not make. */\nexport class UpstreamPaymentRequiredError extends Error {\n constructor(\n readonly quote: UpstreamQuote,\n message?: string,\n ) {\n super(\n message ??\n `API source requires payment for up to ${quote.eligibleSetSize} fetches: ${quote.resource}`,\n );\n this.name = \"UpstreamPaymentRequiredError\";\n }\n}\n\n/**\n * Number of source fetches this round may perform, and so authorizations to\n * sign: `min(signaturesRequired + redundancyBuffer, nodeCount)`. Identical to\n * the round's selection size — the eligible set *is* the set that fetches.\n */\nexport function eligibleSetSize(\n signaturesRequired: number,\n registry: { nodeCount: number; redundancyBuffer: number },\n): number {\n return effectiveSelectionSize(\n signaturesRequired,\n registry.redundancyBuffer,\n registry.nodeCount,\n );\n}\n\n/** Reads a gateway 402 body and returns the relayed upstream quote, if any. */\nexport function parseUpstreamQuote(envelope: unknown): UpstreamQuote | null {\n if (!envelope || typeof envelope !== \"object\") return null;\n const extensions = (envelope as { extensions?: unknown }).extensions;\n if (!extensions || typeof extensions !== \"object\") return null;\n const quote = (extensions as { upstream?: unknown }).upstream;\n if (!quote || typeof quote !== \"object\") return null;\n return typeof (quote as UpstreamQuote).eligibleSetSize === \"number\"\n ? (quote as UpstreamQuote)\n : null;\n}\n\n/** One `accepts` entry of a source's 402 envelope. */\ninterface Offer {\n scheme?: string;\n network?: string;\n asset?: string;\n payTo?: string;\n amount?: string | number;\n maxAmountRequired?: string | number;\n maxTimeoutSeconds?: string | number;\n extra?: { name?: string; version?: string };\n}\n\n/** Picks the one offer this SDK can sign, and validates it before any signing. */\nfunction selectTerms(\n envelope: Record<string, unknown>,\n resource: string,\n assetDomain?: AssetDomain,\n): UpstreamTerms {\n const version = envelope.x402Version === 1 ? 1 : 2;\n const offers: Offer[] = Array.isArray(envelope.accepts) ? envelope.accepts : [];\n if (offers.length === 0) {\n throw new Error(`Source 402 for ${resource} advertised no payment terms`);\n }\n\n const supported = offers.find(\n (o) => o.scheme === \"exact\" && NETWORKS[String(o.network)] !== undefined,\n );\n if (!supported) {\n const seen = offers.map((o) => `${o.scheme}/${o.network}`).join(\", \");\n throw new Error(\n `Source ${resource} requires an unsupported payment scheme or network (${seen}); this SDK signs exact payments on Base USDC only`,\n );\n }\n\n const network = NETWORKS[String(supported.network)]!;\n const asset = String(supported.asset ?? \"\");\n if (asset.toLowerCase() !== network.usdc.toLowerCase()) {\n throw new Error(\n `Source ${resource} asks to be paid in ${asset} on ${supported.network}; this SDK signs USDC (${network.usdc}) only`,\n );\n }\n\n const domain =\n assetDomain ??\n (supported.extra?.name && supported.extra?.version\n ? { name: String(supported.extra.name), version: String(supported.extra.version) }\n : undefined);\n if (!domain) {\n throw new Error(\n `Source ${resource} omitted extra.name/extra.version for ${asset}; supply sourcePayment.assetDomain to sign against it`,\n );\n }\n\n const amount = String(supported.amount ?? supported.maxAmountRequired ?? \"\");\n if (!/^\\d+$/.test(amount)) {\n throw new Error(`Source ${resource} quoted a non-integer price: ${amount}`);\n }\n const payTo = String(supported.payTo ?? \"\");\n if (!payTo) throw new Error(`Source ${resource} omitted payTo`);\n\n return {\n x402Version: version,\n // Echoed verbatim in the signed payload, so it must stay the source's own object.\n requirements: supported as Record<string, unknown>,\n network: String(supported.network),\n chainId: network.chainId,\n asset,\n payTo,\n amount,\n maxTimeoutSeconds: Number(supported.maxTimeoutSeconds ?? 60),\n domain,\n resource,\n };\n}\n\n/** Decodes an x402 envelope from the `PAYMENT-REQUIRED` header, or the body. */\nfunction decodeEnvelope(headerValue: string | null, body: string): Record<string, unknown> {\n if (headerValue) {\n try {\n return JSON.parse(\n new TextDecoder().decode(base64ToBytes(headerValue)),\n ) as Record<string, unknown>;\n } catch {\n // Fall through to the body, which carries the same object.\n }\n }\n return JSON.parse(body) as Record<string, unknown>;\n}\n\n/**\n * Validates caller-supplied terms with the same allowlist and structural checks\n * as {@link probeSource}. Returns canonical {@link UpstreamTerms} derived from\n * `terms.requirements`, not the caller's top-level fields.\n */\nexport function validateSuppliedTerms(\n terms: UpstreamTerms,\n resource: string,\n assetDomain?: AssetDomain,\n): UpstreamTerms {\n return selectTerms(\n {\n x402Version: terms.x402Version,\n accepts: [terms.requirements as Offer],\n },\n resource,\n assetDomain,\n );\n}\n\n/**\n * Fetch the source unpaid to read its own x402 terms. This is a price fetch,\n * not a data fetch: nodes remain the only fetchers of the value itself.\n * Returns `null` when the source is not paywalled.\n */\nexport async function probeSource(\n apiConfig: APIConfig,\n options: { secrets?: Record<string, string>; assetDomain?: AssetDomain; timeoutMs?: number } = {},\n): Promise<UpstreamTerms | null> {\n const resolved = options.secrets ? resolveAPIConfig(apiConfig, options.secrets) : apiConfig;\n\n const init: RequestInit = {\n method: resolved.method ?? \"GET\",\n headers: resolved.headers ?? {},\n };\n let res: Response;\n if (options.timeoutMs === undefined) {\n res = await fetch(resolved.url, init);\n } else {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), options.timeoutMs);\n try {\n res = await fetch(resolved.url, { ...init, signal: controller.signal });\n } finally {\n clearTimeout(timer);\n }\n }\n if (res.status !== 402) return null;\n\n // Probe against the placeholder URL so the terms describe the declared source.\n return selectTerms(\n decodeEnvelope(res.headers.get(\"PAYMENT-REQUIRED\"), await res.text()),\n apiConfig.url,\n options.assetDomain,\n );\n}\n\n/**\n * Sign one x402 payment authorization per eligible node.\n *\n * Sign the whole eligible set. Only authorizations a node actually spends ever\n * settle, so unused ones cost nothing, while signing fewer starves buffer nodes\n * and raises the round's failure probability. Every authorization carries a\n * unique nonce, which is what prevents one from settling twice.\n */\nexport async function signSourcePayments(\n terms: UpstreamTerms,\n signer: EvmSigner,\n count: number,\n): Promise<string[]> {\n if (!Number.isInteger(count) || count < 1) {\n throw new RangeError(`Cannot sign ${count} source payments`);\n }\n\n const now = Math.floor(Date.now() / 1000);\n const validAfter = String(now - 600);\n const validBefore = String(now + Math.max(terms.maxTimeoutSeconds, 60));\n\n const payments: string[] = [];\n for (let i = 0; i < count; i++) {\n const authorization = {\n from: toChecksumAddress(signer.address),\n to: toChecksumAddress(terms.payTo),\n value: terms.amount,\n validAfter,\n validBefore,\n nonce: bytesToHex0x(randomBytes(32)),\n };\n const digest = transferWithAuthorizationDigest(\n {\n name: terms.domain.name,\n version: terms.domain.version,\n chainId: terms.chainId,\n verifyingContract: terms.asset,\n },\n authorization,\n );\n const signature = bytesToHex0x(await signer.signDigest(digest));\n\n const payload =\n terms.x402Version === 1\n ? {\n x402Version: 1,\n scheme: \"exact\",\n network: terms.network,\n payload: { signature, authorization },\n }\n : {\n x402Version: 2,\n accepted: terms.requirements,\n payload: { signature, authorization },\n };\n payments.push(bytesToBase64(utf8(JSON.stringify(payload))));\n }\n return payments;\n}\n","/**\n * Gateway on-chain identity. The request-auth hash binds the Gateway PDA\n * (`[\"molpha_gateway\", gatewayAuthority]`), so the client must know which gateway it is\n * talking to. Kit-only — no `@anchor-lang/core` / web3.js on the gateway path.\n */\nimport {\n address,\n getAddressEncoder,\n getProgramDerivedAddress,\n type Address,\n} from \"@solana/kit\";\nimport { utf8 } from \"../core/encoding.js\";\n\nconst SEED_GATEWAY = utf8(\"molpha_gateway\");\nconst addressEncoder = getAddressEncoder();\n\n/** One gateway endpoint plus, optionally, the authority key its `Gateway` PDA derives from. */\nexport interface GatewayEndpoint {\n /** Base URL, e.g. `https://gateway.example.com` (trailing slash ignored). */\n url: string;\n /**\n * Base58 Solana pubkey of the gateway's signing authority. When omitted the client\n * fetches it once from `GET {url}/v1/info` (`data.gatewayAuthority`) the first time an\n * authenticated request targets this endpoint.\n */\n gatewayAuthority?: string;\n}\n\nexport type GatewayEndpointInput = string | GatewayEndpoint;\n\n/** Payload of `GET /v1/info` (inside the usual `{ status, data }` envelope). */\nexport interface GatewayInfo {\n gatewayAuthority: string;\n /** Program id the gateway settles against; must match the client's when present. */\n programId?: string;\n /** The gateway's round timestamp grid in milliseconds (`round.tick_ms`), when advertised. */\n tickMs?: number;\n /** Longest the gateway waits for a round, in seconds (`node.agg_wait_seconds`), when advertised. */\n roundTimeoutSeconds?: number;\n /** Rounds the gateway runs at once (`limits.max_inflight_rounds`); 0 or absent: not advertised. */\n maxInflightRounds?: number;\n}\n\nexport function normalizeEndpoint(input: GatewayEndpointInput): GatewayEndpoint {\n const endpoint: GatewayEndpoint = typeof input === \"string\" ? { url: input } : { ...input };\n endpoint.url = endpoint.url.replace(/\\/$/, \"\");\n if (!endpoint.url) throw new Error(\"Gateway endpoint url must not be empty\");\n return endpoint;\n}\n\n/** 32-byte form of a base58 address. */\nexport function addressToBytes(value: string): Uint8Array {\n return Uint8Array.from(addressEncoder.encode(address(value)));\n}\n\n/** `[\"molpha_gateway\", gatewayAuthority]` under `programId`, as a base58 address. */\nexport async function deriveGatewayPdaAddress(\n gatewayAuthority: string,\n programId: string,\n): Promise<Address> {\n const [pda] = await getProgramDerivedAddress({\n programAddress: address(programId),\n seeds: [SEED_GATEWAY, addressToBytes(gatewayAuthority)],\n });\n return pda;\n}\n\n/** 32-byte Gateway PDA — the `gateway` field of `RequestAuth`. */\nexport async function deriveGatewayPda(\n gatewayAuthority: string,\n programId: string,\n): Promise<Uint8Array> {\n return addressToBytes(await deriveGatewayPdaAddress(gatewayAuthority, programId));\n}\n\n/** Validate an unwrapped `/v1/info` payload. */\nexport function parseGatewayInfo(data: unknown): GatewayInfo {\n if (!data || typeof data !== \"object\") {\n throw new Error(\"GET /v1/info returned malformed payload\");\n }\n const record = data as Record<string, unknown>;\n const gatewayAuthority = record.gatewayAuthority;\n if (typeof gatewayAuthority !== \"string\" || !gatewayAuthority) {\n throw new Error(\"GET /v1/info payload is missing gatewayAuthority\");\n }\n const programId = record.programId;\n if (programId !== undefined && typeof programId !== \"string\") {\n throw new Error(\"GET /v1/info programId must be a base58 string\");\n }\n const info: GatewayInfo = { gatewayAuthority };\n if (programId !== undefined) info.programId = programId;\n // Timing and capacity are advisory: take them when they are sensible positive numbers.\n const positive = (v: unknown): number | undefined =>\n typeof v === \"number\" && Number.isFinite(v) && v > 0 ? v : undefined;\n const tickMs = positive(record.tickMs);\n if (tickMs !== undefined) info.tickMs = tickMs;\n const roundTimeoutSeconds = positive(record.roundTimeoutSeconds);\n if (roundTimeoutSeconds !== undefined) info.roundTimeoutSeconds = roundTimeoutSeconds;\n const maxInflightRounds = positive(record.maxInflightRounds);\n if (maxInflightRounds !== undefined) info.maxInflightRounds = maxInflightRounds;\n return info;\n}\n","/**\n * `MolphaGateway` — isomorphic HTTP client with multi-endpoint failover.\n */\nimport { assertAggregationQuorum, canonicalizeAggregation } from \"../core/aggregation.js\";\nimport { canonicalizeAPIConfig, deriveSourceId } from \"../core/apiconfig.js\";\nimport { MOLPHA_PROGRAM_ID } from \"../core/constants.js\";\nimport { bytesToHex, bytesToHex0x } from \"../core/encoding.js\";\nimport { formatInt256Decimal } from \"../core/int256.js\";\nimport { normalizeSecp256k1PublicKeyHex } from \"../core/nodeKeys.js\";\nimport { effectiveSelectionSize } from \"../core/selection.js\";\nimport type {\n AggregationConfig,\n APIConfig,\n Attestation,\n Node,\n NodeKeyVerifier,\n NodesInfo,\n RegistrySelectionConfig,\n Signer,\n SourcePaymentOptions,\n UpstreamTerms,\n} from \"../core/types.js\";\nimport { hashRequestAuth } from \"./auth.js\";\nimport { encryptForNodes } from \"./encryption.js\";\nimport {\n UpstreamPaymentRequiredError,\n parseUpstreamQuote,\n probeSource,\n signSourcePayments,\n validateSuppliedTerms,\n} from \"./x402.js\";\nimport {\n addressToBytes,\n deriveGatewayPda,\n normalizeEndpoint,\n parseGatewayInfo,\n type GatewayEndpoint,\n type GatewayEndpointInput,\n type GatewayInfo,\n} from \"./identity.js\";\n\nexport type { RegistrySelectionConfig } from \"../core/types.js\";\nexport * from \"./auth.js\";\nexport * from \"./identity.js\";\nexport * from \"./x402.js\";\n\nexport interface RequestSignedDataOptions {\n /**\n * The API definition to resolve. Its canonical form determines the round's\n * `sourceId = keccak256(JSON.stringify(canonicalizeAPIConfig(apiConfig)))`, so pass the\n * same config (including `{{secret.*}}` placeholders) every time.\n */\n apiConfig: APIConfig;\n /**\n * Requested quorum (u8, ≥ the protocol `min_signers`). Median tolerance mode\n * (`apiConfig.aggregation`) additionally requires `>= 3`; lower values are rejected\n * before any request is made.\n */\n signaturesRequired: number;\n /**\n * Solana pubkey (base58) of the subscription owner.\n * Overrides the gateway's `defaultSubscriptionOwner` when set.\n */\n subscriptionOwner?: string;\n /**\n * Solana pubkey (base58) of the consumer: the subscription owner, or a delegate of it.\n * Overrides the gateway's `defaultConsumerAuthority` when set.\n */\n consumerAuthority?: string;\n /**\n * Signs `hashRequestAuth({ programId, gateway, sourceId, signaturesRequired, authTimestamp })`.\n * The hash binds the gateway's on-chain account, so it is computed — and the signer\n * invoked — once per endpoint actually tried, with a fresh `authTimestamp` each time.\n * Overrides the gateway's `defaultSigner` when set. When both are omitted, sends an all-zero\n * authSig (a gateway rejects it with 401; for tests and local tooling only).\n */\n signer?: Signer;\n encrypt?: { secrets: Record<string, string> };\n /**\n * Pays an API source that is itself x402-paywalled. The SDK reads the source's\n * own 402, signs one authorization per node in the round's eligible set, and\n * sends them with the round as `sourcePayments`.\n *\n * Payment goes to the source, never to Molpha: the round still costs exactly\n * one round of subscription quota. Only authorizations a node actually spends\n * ever settle, so the redundancy buffer costs nothing when it goes unused.\n * Without this, a paywalled source throws {@link UpstreamPaymentRequiredError}.\n */\n sourcePayment?: SourcePaymentOptions;\n /** Max accepted value age in seconds. Default 60. */\n maxAge?: number;\n /**\n * Max attempts. Each retry waits for a later gateway tick, plus jitter, and for longer after a\n * busy answer (`Retry-After`) or a failure that is not a conflict (capped exponential backoff);\n * see {@link retryDelayMs}. Default {@link DEFAULT_MAX_RETRIES}.\n */\n maxRetries?: number;\n /**\n * The gateway's tick grid in milliseconds (its `round.tick_ms`). A retry waits for the start of\n * the next tick so it is a new round, not a duplicate of the last. Default: the gateway's\n * advertised `tickMs` (read once, on the first retry), else 1000.\n */\n tickMs?: number;\n /**\n * Per-request timeout in ms. Default {@link DEFAULT_ROUND_TIMEOUT_MS}, above the gateway's own\n * wait for a round: a shorter timeout abandons rounds the gateway is still running and the retry\n * then starts another.\n */\n timeoutMs?: number;\n /**\n * Pre-fetched round inputs. Any field present here skips its network/on-chain\n * fetch, so a fully-populated context turns `requestSignedData` into a single\n * POST round (the \"short\" flow). Build a reusable one with\n * {@link MolphaGateway.prepareContext}.\n *\n * Caching is opt-in because these inputs can drift: a stale `registryVersion`,\n * `redundancyBuffer`, `nodeCount`, or `nodes` set produces a result the chain will\n * reject. Refresh the context when the on-chain registry version changes.\n */\n context?: Partial<RoundContext>;\n /**\n * Authenticates selected gateway node encryption keys before private API\n * secrets are encrypted. Overrides the gateway-level verifier when set.\n */\n verifyNodeKeys?: NodeKeyVerifier;\n /**\n * Unsafe development escape hatch for standalone gateway usage. When true,\n * encrypted private API requests may use gateway-provided node keys without\n * authentication. Defaults to false.\n */\n allowUnverifiedNodeKeysForPrivateApi?: boolean;\n}\n\nexport interface MolphaGatewayOptions {\n /** Solana pubkey (base58) of the subscription owner used when a request omits it. */\n defaultSubscriptionOwner?: string;\n /** Solana pubkey (base58) of the consumer authority used when a request omits it. */\n defaultConsumerAuthority?: string;\n /**\n * Molpha program id the request authorization is bound to (and that `fetchGatewayInfo`\n * checks the gateway settles against). Defaults to the vendored `MOLPHA_PROGRAM_ID`;\n * must match the gateway's deployment.\n */\n programId?: string;\n /**\n * Authenticates selected gateway node encryption keys before private API\n * secrets are encrypted.\n */\n verifyNodeKeys?: NodeKeyVerifier;\n /**\n * Unsafe development escape hatch. When true, encrypted private API requests\n * may use gateway-provided node keys without authentication. Defaults to false.\n */\n allowUnverifiedNodeKeysForPrivateApi?: boolean;\n /** Source of randomness in [0, 1) for retry jitter; defaults to `Math.random` (tests only). */\n random?: () => number;\n}\n\n/**\n * The slow-changing inputs a `requestSignedData` round binds to. Fetch once with\n * {@link MolphaGateway.prepareContext} and reuse across many rounds.\n */\nexport interface RoundContext extends RegistrySelectionConfig {\n /** Full registry node set: private API secrets are encrypted for every node in it. */\n nodes: Node[];\n}\n\n/** Round inputs after resolution; `nodes` is only fetched when a round needs it. */\ninterface ResolvedRound extends RegistrySelectionConfig {\n nodes?: Node[];\n}\n\ninterface GatewaySignedDataResponse {\n status: \"completed\" | \"pending\" | string;\n data?: GatewaySignedData;\n}\n\n/**\n * The gateway's `attestation` object (`AttestationData.attestation`): the signed struct as the\n * on-chain `Attestation`, with `payload.value` the packed 32-byte value.\n */\ninterface GatewayAttestation {\n payload?: {\n value?: string;\n sourceId?: string;\n registryVersion?: number;\n signaturesRequired?: number;\n /** Legacy wire name on some gateways; newer responses use `timestamp`. */\n canonicalTimestamp?: number;\n /** Gateway-assigned round time, unix milliseconds. */\n timestamp?: number;\n };\n signature?: {\n signature?: string;\n commitment?: string;\n signersBitmap?: string;\n };\n}\n\ninterface GatewaySignedData {\n /** Current gateways nest the signed struct here; the flat fields below are the older shape. */\n attestation?: GatewayAttestation;\n sourceId?: string;\n /** Echo of the canonical apiConfig hash; equals `sourceId`. */\n configHash?: string;\n /** Echo of the request's tolerance policy; present only for tolerance rounds. */\n aggregation?: unknown;\n value?: string;\n valuePacked?: string;\n timestamp?: number;\n registryVersion?: number;\n signaturesRequired?: number;\n signersBitmap?: string;\n s?: string;\n commitmentAddr?: string;\n fresh?: boolean;\n}\n\ninterface GatewayEnvelope<T> {\n status: string;\n data: T;\n}\n\nconst ZERO_AUTH_SIG = new Uint8Array(64);\n\n/** Caller's unix SECONDS: the `authTimestamp` of a RequestAuth, not the round's timestamp. */\nconst authTimestampNow = (): number => Math.floor(Date.now() / 1000);\n\n/** The gateway's default tick grid in milliseconds. */\nconst DEFAULT_TICK_MS = 1000;\n\n/** Milliseconds from `nowMs` to the start of the next tick, plus a millisecond of margin. */\nexport function msUntilNextTick(nowMs: number, tickMs: number): number {\n return tickMs - (nowMs % tickMs) + 1;\n}\n\nconst sleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));\n\n/** First delay of the exponential backoff, in ms. */\nconst BACKOFF_BASE_MS = 250;\n/** Cap of the exponential backoff, in ms. */\nconst BACKOFF_MAX_MS = 5_000;\n/**\n * Default per-request timeout: above the gateway's own wait for a round (`node.agg_wait_seconds`,\n * 30 s by default), so the client does not abandon a round the gateway is still running and then\n * start a second one. A gateway advertises its value as `roundTimeoutSeconds` in `GET /v1/info`.\n */\nexport const DEFAULT_ROUND_TIMEOUT_MS = 35_000;\n/** Default number of attempts. */\nexport const DEFAULT_MAX_RETRIES = 6;\n\n/**\n * Why an attempt failed, as far as it decides how long to wait before the next one:\n * - `conflict`: HTTP 409, this consumer already has a round for the source in this tick;\n * - `busy`: HTTP 503 or 429, the gateway is at capacity or a node set is unavailable, optionally\n * with the gateway's `Retry-After`;\n * - `error`: anything else that may be transient (timeout, network, other 5xx).\n */\nexport type RetryCause =\n | { kind: \"conflict\" }\n | { kind: \"busy\"; retryAfterMs?: number }\n | { kind: \"error\" };\n\n/**\n * How long to wait before the next attempt, in ms. Every delay reaches at least the start of the\n * next tick (a retry inside the tick that just failed would be a duplicate round), then adds jitter\n * so clients that failed together do not retry together:\n * - conflict: the next tick plus up to half a tick;\n * - busy: the later of the next tick and the gateway's `Retry-After` (a tick if absent), plus up to\n * a tick;\n * - error: capped exponential backoff (250 ms, 500 ms, ... 5 s) with half of it randomized.\n * `failures` is the number of attempts that have failed so far (1 after the first).\n */\nexport function retryDelayMs(\n cause: RetryCause,\n failures: number,\n nowMs: number,\n tickMs: number,\n random: () => number = Math.random,\n): number {\n const nextTick = msUntilNextTick(nowMs, tickMs);\n switch (cause.kind) {\n case \"conflict\":\n return nextTick + random() * (tickMs / 2);\n case \"busy\":\n return Math.max(nextTick, cause.retryAfterMs ?? tickMs) + random() * tickMs;\n case \"error\": {\n const backoff = Math.min(BACKOFF_BASE_MS * 2 ** Math.max(failures - 1, 0), BACKOFF_MAX_MS);\n return Math.max(nextTick, backoff / 2 + random() * (backoff / 2));\n }\n }\n}\n\n/** The more demanding of two causes, so one endpoint's busy answer is not hidden by another's error. */\nfunction mergeCause(a: RetryCause, b: RetryCause): RetryCause {\n if (a.kind === \"busy\" || b.kind === \"busy\") {\n const waits = [a, b].flatMap((c) => (c.kind === \"busy\" && c.retryAfterMs !== undefined ? [c.retryAfterMs] : []));\n return waits.length ? { kind: \"busy\", retryAfterMs: Math.max(...waits) } : { kind: \"busy\" };\n }\n if (a.kind === \"conflict\" || b.kind === \"conflict\") return { kind: \"conflict\" };\n return { kind: \"error\" };\n}\n\n/** Parse a `Retry-After` header given in seconds into ms; HTTP dates and junk are ignored. */\nfunction retryAfterMs(res: Response): number | undefined {\n const raw = res.headers.get(\"retry-after\");\n if (raw === null) return undefined;\n const seconds = Number(raw);\n return Number.isFinite(seconds) && seconds >= 0 ? Math.min(seconds, 60) * 1000 : undefined;\n}\n\n/** Default gateway base URL when `endpoints` is omitted. */\nexport const DEFAULT_GATEWAY_ENDPOINT = \"https://dev-gateway.molpha.io/\";\n\n/** Thrown for terminal gateway errors (400/401) — never retried. */\nexport class GatewayError extends Error {\n constructor(\n message: string,\n readonly status?: number,\n ) {\n super(message);\n this.name = \"GatewayError\";\n }\n}\n\nexport class MolphaGateway {\n private readonly endpoints: GatewayEndpoint[];\n private readonly getRegistrySelectionConfig: () => Promise<RegistrySelectionConfig>;\n private readonly defaultSigner?: Signer;\n private readonly defaultSubscriptionOwner?: string;\n private readonly defaultConsumerAuthority?: string;\n private readonly verifyNodeKeys?: NodeKeyVerifier;\n private readonly allowUnverifiedNodeKeysForPrivateApi: boolean;\n /** Program id the request authorization is bound to (base58). */\n readonly programId: string;\n private readonly programIdBytes: Uint8Array;\n /** Gateway PDA per endpoint URL; resolved once per client lifetime. */\n private readonly gatewayPdas = new Map<string, Promise<Uint8Array>>();\n /** Advertised timing per endpoint URL, read lazily on the first retry. */\n private readonly advertisedInfo = new Map<string, Promise<GatewayInfo | undefined>>();\n private readonly random: () => number;\n\n constructor(\n endpoints?: GatewayEndpointInput | GatewayEndpointInput[],\n getRegistrySelectionConfig: () => Promise<RegistrySelectionConfig> = async () => {\n throw new Error(\n \"MolphaGateway requires getRegistrySelectionConfig to request signed data — pass the current on-chain registry version, redundancy buffer and node count (e.g. () => solana.getRegistrySelectionConfig())\",\n );\n },\n defaultSigner?: Signer,\n /**\n * Either a default subscription owner (base58) or gateway options. A string is the\n * shorthand for `{ defaultSubscriptionOwner }` used by standalone callers/tests.\n */\n defaultSubscriptionOwnerOrOptions?: string | MolphaGatewayOptions,\n defaultConsumerAuthority?: string,\n ) {\n const list =\n endpoints === undefined\n ? [DEFAULT_GATEWAY_ENDPOINT]\n : Array.isArray(endpoints)\n ? endpoints\n : [endpoints];\n if (list.length === 0) throw new Error(\"At least one endpoint is required\");\n this.endpoints = list.map(normalizeEndpoint);\n this.getRegistrySelectionConfig = getRegistrySelectionConfig;\n this.defaultSigner = defaultSigner;\n\n const options: MolphaGatewayOptions =\n typeof defaultSubscriptionOwnerOrOptions === \"string\"\n ? {\n defaultSubscriptionOwner: defaultSubscriptionOwnerOrOptions,\n defaultConsumerAuthority,\n }\n : (defaultSubscriptionOwnerOrOptions ?? {});\n\n this.defaultSubscriptionOwner = options.defaultSubscriptionOwner;\n this.defaultConsumerAuthority =\n options.defaultConsumerAuthority ?? options.defaultSubscriptionOwner;\n this.verifyNodeKeys = options.verifyNodeKeys;\n this.allowUnverifiedNodeKeysForPrivateApi =\n options.allowUnverifiedNodeKeysForPrivateApi ?? false;\n this.programId = options.programId ?? MOLPHA_PROGRAM_ID;\n this.programIdBytes = addressToBytes(this.programId);\n this.random = options.random ?? Math.random;\n }\n\n /** The configured gateway base URLs, in failover order. */\n endpointUrls(): string[] {\n return this.endpoints.map((e) => e.url);\n }\n\n /** Tries endpoints in order; returns the first node list it can fetch. */\n async getNodes(): Promise<Node[]> {\n return (await this.getNodesInfo()).nodes;\n }\n\n /**\n * `GET /v1/nodes` — the peer set plus the gateway's view of the registry\n * selection policy, which sizes the eligible set a paid source must fund.\n *\n * The `registry` block is advisory: it is whatever the gateway read from the\n * chain, and is absent when that read failed. Prefer the\n * on-chain read (`MolphaSolanaClient.getRegistrySelectionConfig`) whenever a\n * Solana connection is available — `requestSignedData` already does.\n */\n async getNodesInfo(): Promise<NodesInfo> {\n const data = await this.firstReachableData<NodesInfo>(\"/v1/nodes\");\n return {\n nodes: data.nodes,\n ...(data.registry ? { registry: data.registry } : {}),\n };\n }\n\n async isHealthy(): Promise<boolean> {\n for (const endpoint of this.endpoints) {\n try {\n const res = await fetch(`${endpoint.url}/health`, { method: \"GET\" });\n if (res.ok) return true;\n } catch {\n // try next\n }\n }\n return false;\n }\n\n /**\n * `GET {url}/v1/info` — the gateway's on-chain identity. Throws when the gateway\n * reports a `programId` different from this client's.\n */\n async fetchGatewayInfo(\n endpoint: GatewayEndpointInput,\n timeoutMs?: number,\n ): Promise<GatewayInfo> {\n const { url } = normalizeEndpoint(endpoint);\n const res = await this.fetchWithTimeout(`${url}/v1/info`, { method: \"GET\" }, timeoutMs);\n if (!res.ok) {\n throw new GatewayError(`GET /v1/info failed (${res.status})`, res.status);\n }\n const info = parseGatewayInfo(unwrapEnvelope(await res.json(), \"/v1/info\"));\n if (info.programId !== undefined && info.programId !== this.programId) {\n throw new GatewayError(\n `Gateway ${url} settles against program ${info.programId}, but this client is bound to ${this.programId}`,\n );\n }\n return info;\n }\n\n /**\n * Fetch the slow-changing round inputs (registry version, redundancy buffer,\n * node count, node set) once so they can be reused across many\n * {@link requestSignedData} calls. Pass the result back via\n * `requestSignedData({ ..., context })` to skip the prelude and run a\n * single-round \"short\" flow.\n *\n * Both fetches run in parallel. Registry version, redundancy buffer and node\n * count come from the on-chain registry read.\n */\n async prepareContext(): Promise<RoundContext> {\n const [registry, nodes] = await Promise.all([\n this.getRegistrySelectionConfig(),\n this.getNodes(),\n ]);\n return { ...registry, nodes };\n }\n\n /**\n * Request a threshold-signed data update from the gateway, with retry +\n * failover. The body is POSTed to each endpoint in order until one `completed`s.\n *\n * The round's `sourceId` is derived from `apiConfig`. The request carries no round timestamp:\n * the gateway assigns the round's `timestamp` (unix milliseconds) from its own clock\n * on a tick grid, and the committee follows from it. The result carries the assigned\n * timestamp and the signers' bitmap. A retry waits for a later tick, because a round that was\n * already reserved or dispatched cannot run again in the same one (HTTP 409).\n *\n * The request is authorized by a `RequestAuth` signature (`authSig`) over the program id, the\n * endpoint's Gateway PDA, the source id, the quorum and `authTimestamp` (unix seconds, read\n * from the local clock for every attempt). It only proves the caller may spend the\n * subscription's rounds; it is not part of the round, so the signature is recomputed for every\n * endpoint tried.\n *\n * Because the committee is unknown until the gateway stamps the round, private API\n * secrets are encrypted for **every** node of the registry; the gateway forwards only the\n * selected nodes' envelopes.\n *\n * By default this fetches the registry selection config up front and the node\n * set only when the round needs it (private API encryption, or when the registry\n * read does not report `nodeCount`). Supply `opts.context` (e.g. from\n * {@link prepareContext}) to reuse cached inputs and skip those fetches — a\n * fully-populated context collapses the call to a single POST round.\n *\n * When the API source is itself x402-paywalled, pass `opts.sourcePayment` to\n * fund it; without that, such a source throws\n * {@link UpstreamPaymentRequiredError} carrying the gateway's quote.\n */\n async requestSignedData(opts: RequestSignedDataOptions): Promise<Attestation> {\n const {\n apiConfig,\n signer,\n encrypt,\n sourcePayment,\n maxAge = 60,\n maxRetries = DEFAULT_MAX_RETRIES,\n timeoutMs = DEFAULT_ROUND_TIMEOUT_MS,\n } = opts;\n const signaturesRequired = assertSignaturesRequired(opts.signaturesRequired);\n\n const verifyNodeKeys = opts.verifyNodeKeys ?? this.verifyNodeKeys;\n const allowUnverified =\n opts.allowUnverifiedNodeKeysForPrivateApi ??\n this.allowUnverifiedNodeKeysForPrivateApi;\n if (encrypt && !verifyNodeKeys && !allowUnverified) {\n throw new Error(\n \"Private API encryption requires authenticated node keys. Provide verifyNodeKeys or set allowUnverifiedNodeKeysForPrivateApi: true for unsafe development use.\",\n );\n }\n\n // Validates `aggregation` (rejects `mode: \"exact\"`, unsupported rules, bad numbers) as\n // part of canonicalization; tolerance additionally needs a quorum of at least 3.\n const requestApiConfig = canonicalizeAPIConfig(apiConfig);\n assertAggregationQuorum(requestApiConfig.aggregation, signaturesRequired);\n const sourceIdBytes = deriveSourceId(requestApiConfig);\n const sourceId = bytesToHex(sourceIdBytes);\n\n const subscriptionOwner = opts.subscriptionOwner ?? this.defaultSubscriptionOwner;\n if (!subscriptionOwner) {\n throw new Error(\n \"subscriptionOwner is required — pass opts.subscriptionOwner or set MolphaGateway defaultSubscriptionOwner (MolphaSDK sets this from wallet.publicKey)\",\n );\n }\n const consumerAuthority =\n opts.consumerAuthority ?? this.defaultConsumerAuthority ?? subscriptionOwner;\n const authSigner = signer ?? this.defaultSigner;\n\n let round = await this.resolveContext(opts.context, encrypt !== undefined);\n let { registryVersion, redundancyBuffer } = round;\n const nodeCountOf = (r: ResolvedRound): number => {\n if (r.nodeCount !== undefined && r.nodes !== undefined && r.nodes.length !== r.nodeCount) {\n throw new Error(\n `Gateway node list has ${r.nodes.length} nodes but registry ${r.registryVersion} has node_count ${r.nodeCount} — refresh the round context`,\n );\n }\n const n = r.nodeCount ?? r.nodes?.length;\n if (n === undefined) throw new Error(\"Round context resolved neither nodeCount nor nodes\");\n return n;\n };\n let nodeCount = nodeCountOf(round);\n\n // A paywalled source is paid by the caller, per node fetch, from their own\n // wallet. Read the source's terms once, then sign fresh authorizations per\n // attempt so a retry never reuses a nonce. The registry already tells us the\n // eligible set size, so no quote round trip is needed in the common case.\n let terms: UpstreamTerms | null = null;\n let authorizations = 0;\n let requoted = false;\n if (sourcePayment) {\n terms = sourcePayment.terms\n ? validateSuppliedTerms(\n sourcePayment.terms,\n requestApiConfig.url,\n sourcePayment.assetDomain,\n )\n : await probeSource(apiConfig, {\n ...(encrypt ? { secrets: encrypt.secrets } : {}),\n ...(sourcePayment.assetDomain ? { assetDomain: sourcePayment.assetDomain } : {}),\n timeoutMs,\n });\n if (terms) {\n authorizations = effectiveSelectionSize(\n signaturesRequired,\n redundancyBuffer,\n nodeCount,\n );\n }\n }\n\n let lastError: unknown;\n // The gateway stamps a round with the tick it arrives in. A round already reserved for this\n // consumer, or already dispatched to the nodes, cannot run again in that tick: so each retry\n // waits for a later one (see retryDelayMs). The grid is the gateway's advertised one, read once\n // on the first retry, unless the caller pinned it.\n let tickMs = opts.tickMs;\n let groupSize = effectiveSelectionSize(signaturesRequired, redundancyBuffer, nodeCount);\n // Every registry node, ascending: the committee is not known until the gateway has stamped\n // the round, so the envelope set cannot be narrowed here.\n let registryIndexes = Array.from({ length: nodeCount }, (_, index) => index);\n // What made the last attempt fail decides how long to wait before the next.\n let cause: RetryCause = { kind: \"error\" };\n // A stale registry version is refreshed at most once per call, and the refreshed attempt is\n // neither counted nor delayed. `refreshedOnce` is never reset: a registry that is still stale\n // after the refresh is a terminal error, not a reason to refresh again.\n let refreshedOnce = false;\n let retryNow = false;\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n if (attempt > 0 && !retryNow) {\n tickMs ??= (await this.advertisedTickMs(timeoutMs)) ?? DEFAULT_TICK_MS;\n await sleep(retryDelayMs(cause, attempt, Date.now(), tickMs, this.random));\n }\n retryNow = false;\n cause = { kind: \"error\" };\n\n let encKeyBundle: ReturnType<typeof encryptForNodes> | undefined;\n if (encrypt) {\n const recipients = selectedNodesForPrivateApiEncryption(round.nodes ?? [], registryIndexes);\n\n if (verifyNodeKeys) {\n await verifyNodeKeys({\n sourceId,\n registryVersion,\n nodeIndexes: [...registryIndexes],\n nodes: recipients.map((node) => ({ ...node })),\n });\n }\n\n encKeyBundle = encryptForNodes(requestApiConfig, encrypt.secrets, recipients);\n }\n\n // Fresh authorizations per attempt: each carries a unique nonce, which is\n // what keeps one from settling twice.\n let sourcePayments: string[] | undefined;\n if (terms && sourcePayment && authorizations > 0) {\n sourcePayments = await signSourcePayments(\n terms,\n sourcePayment.signer,\n authorizations,\n );\n }\n\n const baseBody: Record<string, unknown> = {\n sourceId,\n registryVersion,\n maxAge,\n signaturesRequired,\n subscriptionOwner,\n consumerAuthority,\n apiConfig: requestApiConfig,\n };\n if (encKeyBundle) baseBody.encKeyBundle = encKeyBundle;\n if (sourcePayments) baseBody.sourcePayments = sourcePayments;\n\n /** Set when a relayed source quote makes this attempt's round obsolete. */\n let requote = false;\n /** Set when the gateway says the registry version is stale. */\n let restartForRefresh = false;\n for (const endpoint of this.endpoints) {\n try {\n // Fresh per attempt and per endpoint: the stamp is read from the local clock each time,\n // so a retry after a 409 never reuses an old one.\n let authSig: Uint8Array = ZERO_AUTH_SIG;\n let authTimestamp = authTimestampNow();\n if (authSigner) {\n const gateway = await this.resolveGatewayPda(endpoint, timeoutMs);\n authTimestamp = authTimestampNow();\n authSig = await authSigner(\n hashRequestAuth({\n programId: this.programIdBytes,\n gateway,\n sourceId: sourceIdBytes,\n signaturesRequired,\n authTimestamp,\n }),\n );\n }\n const body = { ...baseBody, authSig: bytesToHex0x(authSig), authTimestamp };\n\n const res = await this.post(\n `${endpoint.url}/v1/round/execute`,\n body,\n timeoutMs,\n );\n\n // The API source itself wants paying, so the gateway relays its quote\n // instead of a fetch failure. Payment is required, just not to Molpha.\n if (res.status === 402) {\n const quote = parseUpstreamQuote(\n await res.json().catch(() => null),\n );\n if (!quote) {\n throw new GatewayError(\n \"Gateway requires payment but returned no upstream source quote\",\n 402,\n );\n }\n if (!sourcePayment) throw new UpstreamPaymentRequiredError(quote);\n // Already funded to the quoted size and still refused: the source\n // rejected the payment material, which resigning cannot fix.\n if (terms && requoted && authorizations >= quote.eligibleSetSize) {\n throw new UpstreamPaymentRequiredError(\n quote,\n `Source payment was not accepted for ${quote.resource}: ${quote.error ?? \"no detail\"}`,\n );\n }\n requoted = true;\n if (quote.eligibleSetSize !== groupSize) {\n throw new GatewayError(\n `Gateway upstream quote eligibleSetSize ${quote.eligibleSetSize} does not match this round's selection size ${groupSize} (min(signaturesRequired + redundancyBuffer, nodeCount))`,\n 402,\n );\n }\n authorizations = groupSize;\n if (!terms) {\n // Terms we cannot sign are terminal, not transient: surface them\n // with the quote instead of re-probing once per attempt.\n try {\n terms = await probeSource(apiConfig, {\n ...(encrypt ? { secrets: encrypt.secrets } : {}),\n ...(sourcePayment.assetDomain\n ? { assetDomain: sourcePayment.assetDomain }\n : {}),\n timeoutMs,\n });\n } catch (err) {\n throw new UpstreamPaymentRequiredError(\n quote,\n `Cannot pay ${quote.resource}: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n if (!terms) {\n throw new UpstreamPaymentRequiredError(\n quote,\n `Gateway reports ${quote.resource} is paywalled but the source returned no payment terms`,\n );\n }\n // Recover in a later tick: this round is spent, so the next\n // attempt is a new round rather than a retry of the failed one.\n lastError = new UpstreamPaymentRequiredError(quote);\n requote = true;\n break;\n }\n\n const errorDetail = !res.ok ? await parseGatewayErrorDetail(res) : undefined;\n // The registry rolled since the inputs were read (a cached context, or a roll between\n // the read and the request). Read it afresh and retry once, without spending an attempt.\n if (\n res.status === 400 &&\n !refreshedOnce &&\n !restartForRefresh &&\n /registryVersion.*current version/i.test(errorDetail ?? \"\")\n ) {\n restartForRefresh = true;\n break;\n }\n // 400 and 401 are the request's fault; 403 is the subscription's (inactive, or the\n // round quota for the term is spent): none of them improves by trying again.\n if (res.status === 400 || res.status === 401 || res.status === 403) {\n throw new GatewayError(\n formatGatewayErrorMessage(\"Gateway rejected request\", res.status, errorDetail),\n res.status,\n );\n }\n if (res.status === 503 || res.status === 429) {\n lastError = new GatewayError(\n formatGatewayErrorMessage(\n res.status === 429 ? \"Gateway rate limited\" : \"Gateway unavailable\",\n res.status,\n errorDetail,\n ),\n res.status,\n );\n const wait = retryAfterMs(res);\n cause = mergeCause(cause, wait === undefined ? { kind: \"busy\" } : { kind: \"busy\", retryAfterMs: wait });\n continue; // a different gateway may already hold the AggSig\n }\n if (!res.ok) {\n lastError = new GatewayError(\n formatGatewayErrorMessage(\"Gateway error\", res.status, errorDetail),\n res.status,\n );\n // This consumer already has a round for the source in this tick: wait for the next.\n if (res.status === 409) cause = mergeCause(cause, { kind: \"conflict\" });\n continue;\n }\n const json = (await res.json()) as GatewaySignedDataResponse;\n if (json.status === \"completed\" && json.data) {\n return toResult(json.data, {\n sourceId,\n signaturesRequired,\n ...(requestApiConfig.aggregation\n ? { aggregation: requestApiConfig.aggregation }\n : {}),\n });\n }\n lastError = new Error(`Gateway returned status: ${json.status}`);\n } catch (err) {\n // An unpayable or refused source is terminal — never retried blindly.\n if (err instanceof UpstreamPaymentRequiredError) throw err;\n if (\n err instanceof GatewayError &&\n (err.status === 400 || err.status === 401 || err.status === 402 || err.status === 403)\n ) {\n throw err;\n }\n lastError = err; // timeout / network / identity lookup → next endpoint\n }\n }\n if (restartForRefresh) {\n round = await this.resolveContext(undefined, encrypt !== undefined);\n ({ registryVersion, redundancyBuffer } = round);\n nodeCount = nodeCountOf(round);\n groupSize = effectiveSelectionSize(signaturesRequired, redundancyBuffer, nodeCount);\n registryIndexes = Array.from({ length: nodeCount }, (_, index) => index);\n refreshedOnce = true;\n retryNow = true;\n attempt--; // the refreshed request is the same attempt, with the right inputs\n continue;\n }\n // A requote invalidates this attempt's body for every endpoint alike.\n if (requote) continue;\n }\n throw lastError instanceof Error\n ? lastError\n : new Error(\"Gateway round failed after retries\");\n }\n\n /**\n * Resolve the round inputs, fetching only the fields absent from `cached`.\n * Registry version, redundancy buffer and node count are treated as a unit (one\n * snapshot read). The node list is fetched only when `needNodes` (private API\n * encryption) or when nothing else can tell us the node count.\n */\n private async resolveContext(\n cached: Partial<RoundContext> | undefined,\n needNodes: boolean,\n ): Promise<ResolvedRound> {\n const hasRegistry =\n cached?.registryVersion !== undefined && cached?.redundancyBuffer !== undefined;\n const registryPromise: Promise<RegistrySelectionConfig> = hasRegistry\n ? Promise.resolve({\n registryVersion: cached.registryVersion!,\n redundancyBuffer: cached.redundancyBuffer!,\n ...(cached.nodeCount !== undefined ? { nodeCount: cached.nodeCount } : {}),\n })\n : this.getRegistrySelectionConfig();\n\n if (cached?.nodes !== undefined) {\n return { ...(await registryPromise), nodes: cached.nodes };\n }\n if (needNodes) {\n const [registry, nodes] = await Promise.all([registryPromise, this.getNodes()]);\n return { ...registry, nodes };\n }\n const registry = await registryPromise;\n if (registry.nodeCount !== undefined) return registry;\n return { ...registry, nodes: await this.getNodes() };\n }\n\n /**\n * The gateway's advertised tick grid, read once per endpoint and only when a retry needs it. Any\n * failure (an old gateway without `/v1/info`, a timeout) means \"not advertised\", so the caller\n * falls back to the default; a failure is not cached.\n */\n private async advertisedTickMs(timeoutMs: number): Promise<number | undefined> {\n for (const endpoint of this.endpoints) {\n let pending = this.advertisedInfo.get(endpoint.url);\n if (!pending) {\n pending = this.fetchGatewayInfo(endpoint, Math.min(timeoutMs, 3_000)).catch(() => undefined);\n this.advertisedInfo.set(endpoint.url, pending);\n }\n const info = await pending;\n if (info === undefined) {\n this.advertisedInfo.delete(endpoint.url);\n continue;\n }\n if (info.tickMs !== undefined) return info.tickMs;\n }\n return undefined;\n }\n\n /** Gateway PDA bytes for an endpoint, cached per URL. A failed lookup is not cached. */\n private resolveGatewayPda(\n endpoint: GatewayEndpoint,\n timeoutMs: number,\n ): Promise<Uint8Array> {\n let pending = this.gatewayPdas.get(endpoint.url);\n if (!pending) {\n pending = this.lookupGatewayPda(endpoint, timeoutMs).catch((err: unknown) => {\n this.gatewayPdas.delete(endpoint.url);\n throw err;\n });\n this.gatewayPdas.set(endpoint.url, pending);\n }\n return pending;\n }\n\n private async lookupGatewayPda(\n endpoint: GatewayEndpoint,\n timeoutMs: number,\n ): Promise<Uint8Array> {\n const authority =\n endpoint.gatewayAuthority ??\n (await this.fetchGatewayInfo(endpoint, timeoutMs)).gatewayAuthority;\n return deriveGatewayPda(authority, this.programId);\n }\n\n private async firstReachableData<T>(path: string): Promise<T> {\n let lastError: unknown;\n for (const endpoint of this.endpoints) {\n try {\n const res = await fetch(`${endpoint.url}${path}`, { method: \"GET\" });\n if (res.ok) {\n return unwrapEnvelope(await res.json(), path, res.status) as T;\n }\n lastError = new GatewayError(`GET ${path} failed (${res.status})`, res.status);\n } catch (err) {\n lastError = err;\n }\n }\n throw lastError instanceof Error ? lastError : new Error(`GET ${path} failed`);\n }\n\n private async post(\n url: string,\n body: unknown,\n timeoutMs: number,\n ): Promise<Response> {\n return this.fetchWithTimeout(\n url,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n },\n timeoutMs,\n );\n }\n\n private async fetchWithTimeout(\n url: string,\n init: RequestInit,\n timeoutMs?: number,\n ): Promise<Response> {\n if (timeoutMs === undefined) {\n return fetch(url, init);\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n return await fetch(url, { ...init, signal: controller.signal });\n } finally {\n clearTimeout(timer);\n }\n }\n}\n\nfunction assertSignaturesRequired(value: number): number {\n if (!Number.isInteger(value) || value < 1 || value > 255) {\n throw new RangeError(`signaturesRequired must be an integer in 1..255, got ${value}`);\n }\n return value;\n}\n\n/** Unwrap the gateway `{ status, data }` envelope. */\nfunction unwrapEnvelope(json: unknown, path: string, status?: number): unknown {\n const wrapped = json as Partial<GatewayEnvelope<unknown>> | null;\n if (wrapped === null || typeof wrapped !== \"object\" || wrapped.data === undefined) {\n throw new GatewayError(`GET ${path} returned malformed payload`, status);\n }\n return wrapped.data;\n}\n\nfunction selectedNodesForPrivateApiEncryption(\n nodes: Node[],\n selectedIndexes: number[],\n): Node[] {\n if (!Array.isArray(nodes)) {\n throw new Error(\"Private API encryption requires a gateway node array\");\n }\n if (selectedIndexes.length === 0) {\n throw new Error(\"Private API encryption requires at least one selected node\");\n }\n\n const selectedIndexSet = new Set<number>();\n for (const index of selectedIndexes) {\n if (!Number.isInteger(index) || index < 0) {\n throw new Error(\n `Private API encryption selected index must be a non-negative integer: ${index}`,\n );\n }\n if (selectedIndexSet.has(index)) {\n throw new Error(`Private API encryption selected index is duplicated: ${index}`);\n }\n selectedIndexSet.add(index);\n }\n\n const selectedByIndex = new Map<number, Node>();\n const nodeIndexes = new Set<number>();\n for (const node of nodes) {\n if (!Number.isInteger(node.index) || node.index < 0) {\n throw new Error(`Gateway node index must be a non-negative integer: ${node.index}`);\n }\n if (node.index >= nodes.length) {\n throw new Error(\n `Gateway node index ${node.index} is outside the node list range 0..${nodes.length - 1}`,\n );\n }\n if (nodeIndexes.has(node.index)) {\n throw new Error(`Gateway returned duplicate node index: ${node.index}`);\n }\n nodeIndexes.add(node.index);\n if (!selectedIndexSet.has(node.index)) continue;\n selectedByIndex.set(node.index, node);\n }\n\n const selectedSigningKeys = new Set<string>();\n return selectedIndexes.map((index) => {\n const node = selectedByIndex.get(index);\n if (!node) {\n throw new Error(`Gateway node list is missing selected node index: ${index}`);\n }\n const signingKey = normalizeSecp256k1PublicKeyHex(\n node.signingKey,\n `Gateway selected node ${index} signingKey`,\n );\n if (selectedSigningKeys.has(signingKey)) {\n throw new Error(`Gateway returned duplicate selected node signingKey: ${index}`);\n }\n selectedSigningKeys.add(signingKey);\n return node;\n });\n}\n\nfunction formatGatewayErrorMessage(\n prefix: string,\n status: number,\n detail?: string,\n): string {\n if (!detail) return `${prefix} (${status})`;\n return `${prefix} (${status}): ${detail}`;\n}\n\nasync function parseGatewayErrorDetail(res: Response): Promise<string | undefined> {\n try {\n const text = (await res.text()).trim();\n if (!text) return undefined;\n try {\n const parsed = JSON.parse(text) as unknown;\n if (parsed && typeof parsed === \"object\") {\n const record = parsed as Record<string, unknown>;\n const message = record.error ?? record.message ?? record.detail;\n if (typeof message === \"string\" && message.trim()) return message.trim();\n }\n } catch {\n // fall back to raw body below\n }\n return text;\n } catch {\n return undefined;\n }\n}\n\nfunction normalizeHex(value: string): string {\n return (value.startsWith(\"0x\") || value.startsWith(\"0X\") ? value.slice(2) : value).toLowerCase();\n}\n\n/**\n * Lift a nested `attestation` (current gateways) into the flat field names the rest of this\n * module reads, leaving the older flat body untouched. Top-level `value`, `fresh`,\n * `configHash` and `aggregation` are the same in both shapes.\n */\nfunction flattenGatewayData(data: GatewaySignedData): GatewaySignedData {\n const nested = data.attestation;\n if (!nested) return data;\n const { attestation: _nested, ...rest } = data;\n const { payload, signature } = nested;\n const timestamp = payload?.timestamp ?? payload?.canonicalTimestamp;\n return {\n ...rest,\n ...(payload?.sourceId !== undefined ? { sourceId: payload.sourceId } : {}),\n ...(payload?.value !== undefined ? { valuePacked: payload.value } : {}),\n ...(timestamp !== undefined ? { timestamp } : {}),\n ...(payload?.registryVersion !== undefined ? { registryVersion: payload.registryVersion } : {}),\n ...(payload?.signaturesRequired !== undefined\n ? { signaturesRequired: payload.signaturesRequired }\n : {}),\n ...(signature?.signersBitmap !== undefined ? { signersBitmap: signature.signersBitmap } : {}),\n ...(signature?.signature !== undefined ? { s: signature.signature } : {}),\n ...(signature?.commitment !== undefined ? { commitmentAddr: signature.commitment } : {}),\n };\n}\n\n/**\n * Shape the gateway payload into an {@link Attestation}. `sourceId` and\n * `signaturesRequired` must echo the request (they key the feed and the signed message).\n * Everything else the verifiers recompute comes from the response and is refused when absent\n * rather than filled in locally: the gateway assigns `timestamp` (unix milliseconds), so\n * the caller cannot know it, and the signing set is whoever the nodes signed with.\n *\n * Tolerance mode: `value` is rendered from the signed `payload.value` at the source's\n * `decimals` rather than trusted as sent.\n */\nfunction toResult(\n raw: GatewaySignedData,\n ctx: {\n sourceId: string;\n signaturesRequired: number;\n aggregation?: AggregationConfig;\n },\n): Attestation {\n if (raw.attestation) {\n const { payload, signature } = raw.attestation;\n if (!payload || !signature) {\n throw new GatewayError(\"Gateway response is missing the attestation\");\n }\n }\n const data = flattenGatewayData(raw);\n if (data.sourceId !== undefined && normalizeHex(data.sourceId) !== ctx.sourceId) {\n throw new GatewayError(\n `Gateway response sourceId ${data.sourceId} does not match the requested ${ctx.sourceId}`,\n );\n }\n if (data.configHash !== undefined && normalizeHex(data.configHash) !== ctx.sourceId) {\n throw new GatewayError(\n `Gateway response configHash ${data.configHash} does not match the requested sourceId ${ctx.sourceId}`,\n );\n }\n if (\n data.signaturesRequired !== undefined &&\n data.signaturesRequired !== ctx.signaturesRequired\n ) {\n throw new GatewayError(\n `Gateway response signaturesRequired ${data.signaturesRequired} does not match the requested ${ctx.signaturesRequired}`,\n );\n }\n if (data.aggregation !== undefined && data.aggregation !== null) {\n let echoed: AggregationConfig | undefined;\n try {\n echoed = canonicalizeAggregation(data.aggregation as AggregationConfig);\n } catch (err) {\n throw new GatewayError(\n `Gateway response carries an invalid aggregation echo: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n if (!ctx.aggregation) {\n throw new GatewayError(\n \"Gateway response carries an aggregation, but the request was exact mode (no aggregation)\",\n );\n }\n if (JSON.stringify(echoed) !== JSON.stringify(ctx.aggregation)) {\n throw new GatewayError(\n `Gateway response aggregation ${JSON.stringify(echoed)} does not match the requested ${JSON.stringify(ctx.aggregation)}`,\n );\n }\n }\n const fields = {\n timestamp: data.timestamp,\n registryVersion: data.registryVersion,\n value: data.valuePacked,\n signersBitmap: data.signersBitmap,\n s: data.s,\n commitmentAddr: data.commitmentAddr,\n };\n for (const [name, field] of Object.entries(fields)) {\n if (field === undefined || field === \"\") {\n throw new GatewayError(`Gateway response is missing ${name}`);\n }\n }\n let value = data.value ?? \"\";\n if (ctx.aggregation) {\n try {\n value = formatInt256Decimal(fields.value!, ctx.aggregation.numeric.decimals);\n } catch (err) {\n throw new GatewayError(\n `Gateway tolerance response value is not an int256 word: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n return {\n payload: {\n sourceId: ctx.sourceId,\n value: fields.value!,\n timestamp: fields.timestamp!,\n registryVersion: fields.registryVersion!,\n signaturesRequired: ctx.signaturesRequired,\n },\n signature: {\n signersBitmap: fields.signersBitmap!,\n s: fields.s!,\n commitmentAddr: fields.commitmentAddr!,\n },\n value,\n fresh: data.fresh ?? true,\n };\n}\n","/**\n * Coalition key: the affine sum of the signers' secp256k1 public keys.\n *\n * `submit_attestation` takes it as untrusted instruction data and checks it projectively\n * against its own sum of the signers' `Node` keys (`X ≡ x·Z²`, `Y ≡ y·Z³`), so a wrong key\n * only fails the transaction — it can never select another key. It is a property of the\n * point, not of any library's arithmetic: summing in any order with any secp256k1\n * implementation gives the same `(x, y)`. Mirrors `molpha_verifier::coalition_key`.\n */\nimport { secp256k1 } from \"@noble/curves/secp256k1.js\";\nimport { bytesToHex, hexToBytes, u256beFromBigInt } from \"./encoding.js\";\n\n/** Affine coalition key, 32-byte big-endian coordinates (`CoalitionKey` in the program IDL). */\nexport interface CoalitionKey {\n x: Uint8Array;\n y: Uint8Array;\n}\n\n/** A signer's public key: SEC1 compressed / uncompressed (bytes or hex), or affine `(x, y)`. */\nexport type Secp256k1KeyInput =\n | Uint8Array\n | string\n | { x: Uint8Array | string; y: Uint8Array | string };\n\ntype Point = InstanceType<typeof secp256k1.Point>;\n\nfunction coordinate(value: Uint8Array | string, label: string): bigint {\n const bytes = typeof value === \"string\" ? hexToBytes(value) : value;\n if (bytes.length !== 32) {\n throw new RangeError(`${label}: expected 32 bytes, got ${bytes.length}`);\n }\n return BigInt(\"0x\" + bytesToHex(bytes));\n}\n\nfunction toPoint(key: Secp256k1KeyInput, index: number): Point {\n const label = `signer key ${index}`;\n try {\n if (typeof key === \"string\" || key instanceof Uint8Array) {\n return secp256k1.Point.fromBytes(typeof key === \"string\" ? hexToBytes(key) : key);\n }\n const point = secp256k1.Point.fromAffine({\n x: coordinate(key.x, `${label}.x`),\n y: coordinate(key.y, `${label}.y`),\n });\n point.assertValidity();\n return point;\n } catch (err) {\n throw new Error(\n `${label} is not a valid secp256k1 public key: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n}\n\n/**\n * Affine sum of `keys` as a {@link CoalitionKey}.\n *\n * @throws {Error} on an empty set, an invalid point, or a sum at infinity (the verifier\n * rejects both of the latter as `InvalidAggregateSignature`).\n */\nexport function computeCoalitionKey(keys: Iterable<Secp256k1KeyInput>): CoalitionKey {\n let sum: Point | undefined;\n let index = 0;\n for (const key of keys) {\n const point = toPoint(key, index++);\n sum = sum === undefined ? point : sum.add(point);\n }\n if (sum === undefined) throw new Error(\"coalition key needs at least one signer key\");\n if (sum.is0()) throw new Error(\"coalition key is the point at infinity\");\n const { x, y } = sum.toAffine();\n return { x: u256beFromBigInt(x), y: u256beFromBigInt(y) };\n}\n","/**\n * Account views and remaining-accounts construction for `submit_attestation`.\n *\n * `submit_attestation` (program 3d01170, `utils/attestation.rs::verify_attestation_core`)\n * takes exactly one `Node` account per set signer bit, read-only, in ascending bit order\n * (`remaining_accounts.len() == popcount(signersBitmap)`); the verifier requires\n * `account == registry.nodes[bit]` and reads each signer's secp256k1 key from it.\n */\nimport type { Address } from \"@solana/kit\";\nimport { hexToBytes } from \"../core/encoding.js\";\nimport { selectedIndices } from \"../core/selection.js\";\nimport { type SolanaAccountMeta, toPublicKey } from \"./kit.js\";\n\n/** On-chain `RegistryState` (Anchor camelCase): pointer to the current immutable snapshot. */\nexport interface RegistryStateView {\n currentVersion: number;\n nextVersion: number;\n}\n\n/**\n * Immutable, version-addressed `Registry` snapshot. `nodes` holds only the populated\n * `[..nodeCount]` entries; entry `i` is the `Node` account address for signer bit `i`.\n */\nexport interface RegistryView {\n version: number;\n nodeCount: number;\n /** Selection padding: `min(signaturesRequired + redundancyBuffer, nodeCount)`. */\n redundancyBuffer: number;\n nodes: Address[];\n /** Unix seconds until which this superseded snapshot still verifies; `0n` while current. */\n graceActiveUntil: bigint;\n /** Inclusive creation time (unix seconds): a version cannot verify a round dated before it existed. */\n activeFrom: bigint;\n}\n\n/** Set-bit indices of a 32-byte big-endian bitmap (full 256-bit scan). */\nexport function bitmapToIndices(signersBitmapHex: string): number[] {\n return selectedIndices(hexToBytes(signersBitmapHex), 256);\n}\n\n/**\n * Signer `Node` accounts for `submit_attestation`, in ascending signers-bitmap bit order.\n * Bit `i` resolves to `registry.nodes[i]` of the snapshot the round was signed against;\n * a bit at or beyond `nodeCount` can never verify, so it is rejected client-side.\n */\nexport function resolveRemainingAccounts(\n signersBitmapHex: string,\n registry: RegistryView,\n): SolanaAccountMeta[] {\n return bitmapToIndices(signersBitmapHex).map((bit) => {\n const node = registry.nodes[bit];\n if (bit >= registry.nodeCount || node === undefined) {\n throw new Error(\n `InvalidNodeIndex: signer bit ${bit} is outside registry ${registry.version} node_count ${registry.nodeCount}`,\n );\n }\n return { pubkey: toPublicKey(node), isSigner: false, isWritable: false };\n });\n}\n","/**\n * Consumer PDA derivations. Seed byte strings are cross-checked against the IDL const\n * seeds in `test/solana.test.ts` / `test/idl.test.ts`.\n */\nimport type { Address } from \"@solana/kit\";\nimport { ensureLength, u32le, utf8 } from \"../core/encoding.js\";\nimport {\n addressBytes,\n findProgramAddressSync,\n type SolanaAddress,\n} from \"./kit.js\";\n\nconst SEED_CONFIG = utf8(\"molpha_config\");\nconst SEED_REGISTRY = utf8(\"molpha_registry\");\nconst SEED_NODE = utf8(\"molpha_node\");\nconst SEED_PLAN = utf8(\"molpha_plan\");\nconst SEED_SUBSCRIPTION = utf8(\"molpha_subscription\");\nconst SEED_FEED = utf8(\"molpha_feed\");\nconst SEED_GATEWAY = utf8(\"molpha_gateway\");\n\nconst pda = (seeds: Uint8Array[], programId: SolanaAddress): Address =>\n findProgramAddressSync(seeds, programId);\n\nexport const protocolConfigPda = (programId: SolanaAddress): Address =>\n pda([SEED_CONFIG], programId);\n\n/** Mutable pointer to the current registry snapshot: `[\"molpha_registry\"]`. */\nexport const registryStatePda = (programId: SolanaAddress): Address =>\n pda([SEED_REGISTRY], programId);\n\n/** Immutable, version-addressed registry snapshot: `[\"molpha_registry\", version u32 LE]`. */\nexport const registryPda = (version: number, programId: SolanaAddress): Address =>\n pda([SEED_REGISTRY, u32le(version)], programId);\n\n/**\n * Authority-keyed `Node` account: `[\"molpha_node\", authority]` (`Node.authority`). Registry\n * snapshots store these addresses directly in `nodes[i]`, so consumers rarely need to\n * derive them.\n */\nexport const nodePda = (authority: SolanaAddress, programId: SolanaAddress): Address =>\n pda([SEED_NODE, addressBytes(authority)], programId);\n\n/** Bonded gateway account: `[\"molpha_gateway\", gatewayAuthority]` — the `gateway` bound into `RequestAuth`. */\nexport const gatewayPda = (authority: SolanaAddress, programId: SolanaAddress): Address =>\n pda([SEED_GATEWAY, addressBytes(authority)], programId);\n\n/** Plan PDA is `[b\"molpha_plan\", [planType as u8]]`. */\nexport const planPda = (planId: number, programId: SolanaAddress): Address =>\n pda([SEED_PLAN, Uint8Array.of(planId)], programId);\n\nexport const subscriptionPda = (owner: SolanaAddress, programId: SolanaAddress): Address =>\n pda([SEED_SUBSCRIPTION, addressBytes(owner)], programId);\n\n/**\n * Feed state, keyed per `(sourceId, signaturesRequired, submitter)`:\n * `[\"molpha_feed\", sourceId, [signaturesRequired], submitter]`. Created lazily by the\n * first `submit_attestation` from that submitter.\n */\nexport function feedPda(\n sourceId: Uint8Array,\n signaturesRequired: number,\n submitter: SolanaAddress,\n programId: SolanaAddress,\n): Address {\n ensureLength(sourceId, 32, \"sourceId\");\n if (!Number.isInteger(signaturesRequired) || signaturesRequired < 0 || signaturesRequired > 255) {\n throw new RangeError(`signaturesRequired out of u8 range: ${signaturesRequired}`);\n }\n return pda(\n [SEED_FEED, sourceId, Uint8Array.of(signaturesRequired), addressBytes(submitter)],\n programId,\n );\n}\n","{\n \"address\": \"chivcFQgxzwkpLvW41PV431HQ4dYpaW3povQH3AdpQt\",\n \"metadata\": {\n \"name\": \"molpha\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Molpha Oracle Solana Program - Merged from molpha-solana and molpha-feed\"\n },\n \"instructions\": [\n {\n \"name\": \"add_delegate\",\n \"discriminator\": [\n 3,\n 67,\n 128,\n 218,\n 69,\n 139,\n 53,\n 88\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"subscription\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 115,\n 117,\n 98,\n 115,\n 99,\n 114,\n 105,\n 112,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n }\n ]\n }\n },\n {\n \"name\": \"delegate_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 100,\n 101,\n 108,\n 101,\n 103,\n 97,\n 116,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"args.delegate\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"AddDelegateArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"add_plan\",\n \"discriminator\": [\n 199,\n 79,\n 170,\n 244,\n 91,\n 21,\n 110,\n 218\n ],\n \"accounts\": [\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"plan\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\n \"protocol_config\"\n ]\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"config\",\n \"type\": {\n \"defined\": {\n \"name\": \"PlanConfig\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"claim_node_rewards\",\n \"discriminator\": [\n 151,\n 201,\n 146,\n 161,\n 104,\n 100,\n 214,\n 1\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\n \"node\"\n ]\n },\n {\n \"name\": \"protocol_config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"node\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 110,\n 111,\n 100,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"authority\"\n }\n ]\n }\n },\n {\n \"name\": \"treasury\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"destination\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"authority\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"close_epoch\",\n \"discriminator\": [\n 13,\n 87,\n 7,\n 133,\n 109,\n 14,\n 83,\n 25\n ],\n \"accounts\": [\n {\n \"name\": \"epoch_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"epoch\"\n }\n ]\n }\n },\n {\n \"name\": \"open_epoch_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"open_epoch\"\n }\n ]\n }\n },\n {\n \"name\": \"rent_payer\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"open_epoch\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"close_ticket_marker\",\n \"discriminator\": [\n 26,\n 65,\n 122,\n 188,\n 125,\n 132,\n 159,\n 107\n ],\n \"accounts\": [\n {\n \"name\": \"ticket_marker\",\n \"writable\": true\n },\n {\n \"name\": \"submitter\",\n \"writable\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"credit_epoch_rewards\",\n \"discriminator\": [\n 212,\n 185,\n 139,\n 96,\n 103,\n 248,\n 140,\n 198\n ],\n \"accounts\": [\n {\n \"name\": \"protocol_config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"epoch_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"epoch\"\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"slots\",\n \"type\": {\n \"vec\": \"u16\"\n }\n }\n ]\n },\n {\n \"name\": \"deactivate_gateway\",\n \"discriminator\": [\n 2,\n 119,\n 77,\n 158,\n 3,\n 8,\n 116,\n 252\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\n \"protocol_config\"\n ]\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"gateway\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"deactivate_node\",\n \"discriminator\": [\n 242,\n 185,\n 114,\n 146,\n 22,\n 248,\n 23,\n 157\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"registry_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"current_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.current_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"new_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.next_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"node\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 110,\n 111,\n 100,\n 101\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"node_owner\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"node_owner\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"extend_subscription\",\n \"discriminator\": [\n 47,\n 230,\n 116,\n 118,\n 171,\n 228,\n 24,\n 46\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"subscription\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 115,\n 117,\n 98,\n 115,\n 99,\n 114,\n 105,\n 112,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n }\n ]\n }\n },\n {\n \"name\": \"plan\"\n },\n {\n \"name\": \"owner_usdc\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"treasury\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"finalize_epoch\",\n \"discriminator\": [\n 159,\n 93,\n 117,\n 217,\n 63,\n 44,\n 249,\n 76\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"target\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"epoch\"\n }\n ]\n }\n },\n {\n \"name\": \"next\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"epoch.saturating_add(1)\"\n }\n ]\n }\n },\n {\n \"name\": \"successor\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"epoch.saturating_add(2)\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"initialize\",\n \"discriminator\": [\n 175,\n 175,\n 109,\n 31,\n 13,\n 152,\n 155,\n 237\n ],\n \"accounts\": [\n {\n \"name\": \"protocol_config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"registry_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 0,\n 0,\n 0,\n 0\n ]\n }\n ]\n }\n },\n {\n \"name\": \"usdc_mint\"\n },\n {\n \"name\": \"treasury\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"usdc_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"node_deposit_vault\",\n \"docs\": [\n \"One vault for every node's security deposit, held apart from protocol revenue.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"registry_state\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"usdc_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"epoch0\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ]\n }\n ]\n }\n },\n {\n \"name\": \"epoch1\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"InitializeArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"register_gateway\",\n \"discriminator\": [\n 183,\n 184,\n 135,\n 228,\n 71,\n 191,\n 76,\n 222\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\n \"protocol_config\"\n ]\n },\n {\n \"name\": \"protocol_config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"gateway\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 103,\n 97,\n 116,\n 101,\n 119,\n 97,\n 121\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"args.authority\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"RegisterGatewayArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"register_node\",\n \"discriminator\": [\n 102,\n 85,\n 117,\n 114,\n 194,\n 188,\n 211,\n 168\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\n \"protocol_config\"\n ]\n },\n {\n \"name\": \"node_owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"registry_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"current_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.current_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"new_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.next_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"node\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 110,\n 111,\n 100,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"node_owner\"\n }\n ]\n }\n },\n {\n \"name\": \"secp256k1_key_claim\",\n \"writable\": true\n },\n {\n \"name\": \"owner_usdc\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"node_owner\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"node_deposit_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"registry_state\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"RegisterNodeArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"reinstate_node\",\n \"discriminator\": [\n 13,\n 253,\n 148,\n 213,\n 56,\n 50,\n 49,\n 121\n ],\n \"accounts\": [\n {\n \"name\": \"caller\",\n \"docs\": [\n \"Permissionless after `frozen_until`; authority may reinstate earlier.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"registry_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"current_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.current_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"new_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.next_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"node\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 110,\n 111,\n 100,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"node.authority\",\n \"account\": \"Node\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"remove_delegate\",\n \"discriminator\": [\n 94,\n 37,\n 16,\n 59,\n 7,\n 84,\n 97,\n 211\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"subscription\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 115,\n 117,\n 98,\n 115,\n 99,\n 114,\n 105,\n 112,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n }\n ]\n }\n },\n {\n \"name\": \"delegate_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 100,\n 101,\n 108,\n 101,\n 103,\n 97,\n 116,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"args.delegate\"\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemoveDelegateArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"slash_offence\",\n \"discriminator\": [\n 108,\n 88,\n 94,\n 69,\n 17,\n 2,\n 103,\n 124\n ],\n \"accounts\": [\n {\n \"name\": \"reporter\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"registry_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"evidence_registry\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"offence\"\n }\n ]\n }\n },\n {\n \"name\": \"current_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.current_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"new_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.next_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"punishment_case\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 112,\n 117,\n 110,\n 105,\n 115,\n 104,\n 109,\n 101,\n 110,\n 116\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"offence\"\n }\n ]\n }\n },\n {\n \"name\": \"node_deposit_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"registry_state\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"treasury\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"reporter_usdc\",\n \"docs\": [\n \"Must already exist. Creating it here would cost two more transaction slots, which the\",\n \"signer list needs more than a reporter needs the convenience.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"reporter\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"offence\",\n \"type\": {\n \"defined\": {\n \"name\": \"Offence\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"submit_attestation\",\n \"discriminator\": [\n 238,\n 220,\n 255,\n 105,\n 183,\n 211,\n 40,\n 83\n ],\n \"accounts\": [\n {\n \"name\": \"submitter\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"registry\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"args.attestation.payload.registry_version\"\n }\n ]\n }\n },\n {\n \"name\": \"feed\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 102,\n 101,\n 101,\n 100\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"args.attestation.payload.source_id\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"args.attestation.payload.signatures_required\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"submitter\"\n }\n ]\n }\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"SubmitAttestationArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"submit_ticket\",\n \"discriminator\": [\n 180,\n 57,\n 11,\n 108,\n 162,\n 36,\n 145,\n 150\n ],\n \"accounts\": [\n {\n \"name\": \"submitter\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"registry\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"attestation.payload.registry_version\"\n }\n ]\n }\n },\n {\n \"name\": \"epoch_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"epoch_index\"\n }\n ]\n }\n },\n {\n \"name\": \"gateway\",\n \"docs\": [\n \"Gateway whose authority signed the round dispatch.\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 103,\n 97,\n 116,\n 101,\n 119,\n 97,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"gateway.authority\",\n \"account\": \"Gateway\"\n }\n ]\n }\n },\n {\n \"name\": \"ticket_marker\",\n \"writable\": true\n },\n {\n \"name\": \"instructions_sysvar\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"attestation\",\n \"type\": {\n \"defined\": {\n \"name\": \"Attestation\"\n }\n }\n },\n {\n \"name\": \"roster_slots\",\n \"type\": {\n \"vec\": \"u16\"\n }\n },\n {\n \"name\": \"coalition_key\",\n \"type\": {\n \"defined\": {\n \"name\": \"CoalitionKey\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"subscribe\",\n \"discriminator\": [\n 254,\n 28,\n 191,\n 138,\n 156,\n 179,\n 183,\n 53\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"plan\"\n },\n {\n \"name\": \"subscription\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 115,\n 117,\n 98,\n 115,\n 99,\n 114,\n 105,\n 112,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n }\n ]\n }\n },\n {\n \"name\": \"owner_usdc\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"treasury\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"plan_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"PlanType\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"sweep_treasury_revenue\",\n \"discriminator\": [\n 72,\n 190,\n 138,\n 104,\n 78,\n 128,\n 112,\n 59\n ],\n \"accounts\": [\n {\n \"name\": \"protocol_config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"treasury\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"epoch_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"open_epoch\"\n }\n ]\n }\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"open_epoch\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"update_config\",\n \"discriminator\": [\n 29,\n 158,\n 252,\n 191,\n 10,\n 83,\n 219,\n 99\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\n \"protocol_config\"\n ]\n },\n {\n \"name\": \"protocol_config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"UpdateConfigArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"update_node_endpoint\",\n \"discriminator\": [\n 63,\n 119,\n 147,\n 11,\n 73,\n 81,\n 230,\n 155\n ],\n \"accounts\": [\n {\n \"name\": \"node_owner\",\n \"signer\": true\n },\n {\n \"name\": \"node\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 110,\n 111,\n 100,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"node_owner\"\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"UpdateNodeEndpointArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"update_plan\",\n \"discriminator\": [\n 119,\n 112,\n 58,\n 60,\n 76,\n 205,\n 1,\n 100\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\n \"protocol_config\"\n ]\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"plan\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"config\",\n \"type\": {\n \"defined\": {\n \"name\": \"PlanConfig\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"update_registry_policy\",\n \"discriminator\": [\n 89,\n 241,\n 118,\n 140,\n 129,\n 101,\n 42,\n 161\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\n \"protocol_config\"\n ]\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"registry_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"current_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.current_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"new_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.next_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"redundancy_buffer\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"withdraw_node_deposit\",\n \"discriminator\": [\n 53,\n 141,\n 47,\n 100,\n 83,\n 245,\n 210,\n 6\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"node\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 110,\n 111,\n 100,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"authority\"\n }\n ]\n }\n },\n {\n \"name\": \"registry_state\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"node_deposit_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"registry_state\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"destination\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"authority\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"withdraw_protocol_reserve\",\n \"discriminator\": [\n 68,\n 111,\n 180,\n 79,\n 228,\n 72,\n 116,\n 12\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\n \"protocol_config\"\n ]\n },\n {\n \"name\": \"protocol_config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"treasury\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"destination\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"Delegate\",\n \"discriminator\": [\n 92,\n 145,\n 166,\n 111,\n 11,\n 38,\n 38,\n 247\n ]\n },\n {\n \"name\": \"EpochState\",\n \"discriminator\": [\n 191,\n 63,\n 139,\n 237,\n 144,\n 12,\n 223,\n 210\n ]\n },\n {\n \"name\": \"Feed\",\n \"discriminator\": [\n 69,\n 191,\n 16,\n 227,\n 132,\n 187,\n 84,\n 227\n ]\n },\n {\n \"name\": \"Gateway\",\n \"discriminator\": [\n 210,\n 132,\n 162,\n 254,\n 10,\n 224,\n 45,\n 86\n ]\n },\n {\n \"name\": \"Node\",\n \"discriminator\": [\n 208,\n 53,\n 1,\n 3,\n 49,\n 122,\n 180,\n 49\n ]\n },\n {\n \"name\": \"Plan\",\n \"discriminator\": [\n 161,\n 231,\n 251,\n 119,\n 2,\n 12,\n 162,\n 2\n ]\n },\n {\n \"name\": \"ProtocolConfig\",\n \"discriminator\": [\n 207,\n 91,\n 250,\n 28,\n 152,\n 179,\n 215,\n 209\n ]\n },\n {\n \"name\": \"PunishmentCase\",\n \"discriminator\": [\n 215,\n 186,\n 32,\n 101,\n 142,\n 74,\n 46,\n 130\n ]\n },\n {\n \"name\": \"Registry\",\n \"discriminator\": [\n 47,\n 174,\n 110,\n 246,\n 184,\n 182,\n 252,\n 218\n ]\n },\n {\n \"name\": \"RegistryState\",\n \"discriminator\": [\n 29,\n 34,\n 224,\n 195,\n 175,\n 183,\n 99,\n 97\n ]\n },\n {\n \"name\": \"Secp256k1KeyClaim\",\n \"discriminator\": [\n 128,\n 160,\n 40,\n 228,\n 165,\n 251,\n 194,\n 86\n ]\n },\n {\n \"name\": \"Subscription\",\n \"discriminator\": [\n 64,\n 7,\n 26,\n 135,\n 102,\n 132,\n 98,\n 33\n ]\n },\n {\n \"name\": \"TicketMarker\",\n \"discriminator\": [\n 1,\n 117,\n 194,\n 234,\n 146,\n 15,\n 115,\n 255\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"DelegateAdded\",\n \"discriminator\": [\n 96,\n 159,\n 58,\n 144,\n 26,\n 171,\n 141,\n 70\n ]\n },\n {\n \"name\": \"DelegateRemoved\",\n \"discriminator\": [\n 91,\n 243,\n 235,\n 175,\n 109,\n 235,\n 217,\n 84\n ]\n },\n {\n \"name\": \"DelegateStatusChanged\",\n \"discriminator\": [\n 188,\n 202,\n 137,\n 41,\n 54,\n 213,\n 14,\n 92\n ]\n },\n {\n \"name\": \"EpochClosed\",\n \"discriminator\": [\n 21,\n 4,\n 48,\n 56,\n 29,\n 169,\n 77,\n 42\n ]\n },\n {\n \"name\": \"EpochCreated\",\n \"discriminator\": [\n 191,\n 150,\n 240,\n 63,\n 59,\n 212,\n 233,\n 124\n ]\n },\n {\n \"name\": \"EpochFinalized\",\n \"discriminator\": [\n 109,\n 54,\n 231,\n 81,\n 101,\n 249,\n 145,\n 107\n ]\n },\n {\n \"name\": \"EpochRewardCredited\",\n \"discriminator\": [\n 12,\n 42,\n 166,\n 244,\n 196,\n 241,\n 134,\n 186\n ]\n },\n {\n \"name\": \"FeedUpdated\",\n \"discriminator\": [\n 200,\n 60,\n 190,\n 86,\n 247,\n 9,\n 50,\n 81\n ]\n },\n {\n \"name\": \"GatewayDeactivated\",\n \"discriminator\": [\n 67,\n 206,\n 26,\n 221,\n 251,\n 18,\n 50,\n 73\n ]\n },\n {\n \"name\": \"GatewayRegistered\",\n \"discriminator\": [\n 171,\n 121,\n 170,\n 61,\n 195,\n 155,\n 35,\n 98\n ]\n },\n {\n \"name\": \"NodeDeactivated\",\n \"discriminator\": [\n 74,\n 15,\n 22,\n 250,\n 74,\n 89,\n 202,\n 244\n ]\n },\n {\n \"name\": \"NodeDepositWithdrawn\",\n \"discriminator\": [\n 144,\n 148,\n 204,\n 72,\n 127,\n 171,\n 1,\n 39\n ]\n },\n {\n \"name\": \"NodeEndpointUpdated\",\n \"discriminator\": [\n 121,\n 121,\n 209,\n 202,\n 113,\n 134,\n 46,\n 240\n ]\n },\n {\n \"name\": \"NodePunished\",\n \"discriminator\": [\n 5,\n 220,\n 63,\n 21,\n 153,\n 202,\n 80,\n 79\n ]\n },\n {\n \"name\": \"NodeRegistered\",\n \"discriminator\": [\n 15,\n 57,\n 183,\n 59,\n 93,\n 55,\n 157,\n 195\n ]\n },\n {\n \"name\": \"NodeReinstated\",\n \"discriminator\": [\n 45,\n 0,\n 72,\n 79,\n 131,\n 183,\n 198,\n 205\n ]\n },\n {\n \"name\": \"OffenceProven\",\n \"discriminator\": [\n 33,\n 127,\n 13,\n 247,\n 209,\n 98,\n 62,\n 116\n ]\n },\n {\n \"name\": \"PlanAdded\",\n \"discriminator\": [\n 253,\n 31,\n 157,\n 223,\n 171,\n 1,\n 203,\n 207\n ]\n },\n {\n \"name\": \"PlanUpdated\",\n \"discriminator\": [\n 49,\n 51,\n 198,\n 31,\n 170,\n 70,\n 253,\n 195\n ]\n },\n {\n \"name\": \"ProtocolConfigUpdated\",\n \"discriminator\": [\n 20,\n 99,\n 32,\n 237,\n 111,\n 86,\n 195,\n 199\n ]\n },\n {\n \"name\": \"ProtocolInitialized\",\n \"discriminator\": [\n 173,\n 122,\n 168,\n 254,\n 9,\n 118,\n 76,\n 132\n ]\n },\n {\n \"name\": \"ProtocolReserveWithdrawn\",\n \"discriminator\": [\n 116,\n 158,\n 232,\n 233,\n 174,\n 58,\n 218,\n 183\n ]\n },\n {\n \"name\": \"RegistryUpdated\",\n \"discriminator\": [\n 152,\n 3,\n 201,\n 176,\n 91,\n 63,\n 47,\n 83\n ]\n },\n {\n \"name\": \"RevenueSwept\",\n \"discriminator\": [\n 57,\n 110,\n 215,\n 130,\n 155,\n 53,\n 55,\n 28\n ]\n },\n {\n \"name\": \"RewardsClaimed\",\n \"discriminator\": [\n 75,\n 98,\n 88,\n 18,\n 219,\n 112,\n 88,\n 121\n ]\n },\n {\n \"name\": \"Subscribed\",\n \"discriminator\": [\n 135,\n 59,\n 105,\n 76,\n 190,\n 236,\n 138,\n 228\n ]\n },\n {\n \"name\": \"SubscriptionExtended\",\n \"discriminator\": [\n 149,\n 17,\n 152,\n 209,\n 131,\n 145,\n 5,\n 6\n ]\n },\n {\n \"name\": \"TicketMarkerClosed\",\n \"discriminator\": [\n 109,\n 122,\n 80,\n 119,\n 203,\n 4,\n 131,\n 160\n ]\n },\n {\n \"name\": \"TicketRosterOverflow\",\n \"discriminator\": [\n 147,\n 69,\n 132,\n 24,\n 191,\n 8,\n 117,\n 185\n ]\n },\n {\n \"name\": \"TicketSubmitted\",\n \"discriminator\": [\n 190,\n 48,\n 169,\n 171,\n 61,\n 217,\n 169,\n 249\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"InvalidMinSigners\",\n \"msg\": \"invalid min signers\"\n },\n {\n \"code\": 6001,\n \"name\": \"InvalidTimestamp\",\n \"msg\": \"invalid timestamp\"\n },\n {\n \"code\": 6002,\n \"name\": \"InvalidMint\",\n \"msg\": \"invalid usdc mint\"\n },\n {\n \"code\": 6003,\n \"name\": \"InvalidNodeIndex\",\n \"msg\": \"Signer index outside node_count(version)\"\n },\n {\n \"code\": 6004,\n \"name\": \"InvalidNodeAccount\",\n \"msg\": \"Node account does not match expected index/owner\"\n },\n {\n \"code\": 6005,\n \"name\": \"UnauthorizedNodeAuthority\",\n \"msg\": \"Caller is not node.owner or registry.authority\"\n },\n {\n \"code\": 6006,\n \"name\": \"NodeCapExceeded\",\n \"msg\": \"pending_node_count >= registry.node_count or node_index_hint >= registry.node_count\"\n },\n {\n \"code\": 6007,\n \"name\": \"InvalidPoP\",\n \"msg\": \"PoP Schnorr verification failed at registration\"\n },\n {\n \"code\": 6008,\n \"name\": \"NodeNotActive\",\n \"msg\": \"Instruction requires Active node status\"\n },\n {\n \"code\": 6009,\n \"name\": \"PubkeyNotOnCurve\",\n \"msg\": \"Submitted compressed pubkey does not decompress to a valid curve point\"\n },\n {\n \"code\": 6010,\n \"name\": \"InvalidRegistryVersion\",\n \"msg\": \"registry version or version-addressed registry account is invalid\"\n },\n {\n \"code\": 6011,\n \"name\": \"RegistryNotActive\",\n \"msg\": \"registry is not active\"\n },\n {\n \"code\": 6012,\n \"name\": \"InvalidSourceId\",\n \"msg\": \"source_id does not match feed.source_id\"\n },\n {\n \"code\": 6013,\n \"name\": \"RegistryPolicyUnchanged\",\n \"msg\": \"new redundancy buffer must differ from the current registry policy\"\n },\n {\n \"code\": 6014,\n \"name\": \"InvalidRedundancyBuffer\",\n \"msg\": \"redundancy buffer must be between 1 and 8\"\n },\n {\n \"code\": 6015,\n \"name\": \"InvalidGatewayEndpoint\",\n \"msg\": \"Gateway endpoint is invalid\"\n },\n {\n \"code\": 6016,\n \"name\": \"InvalidNodeEndpoint\",\n \"msg\": \"Node endpoint is invalid\"\n },\n {\n \"code\": 6017,\n \"name\": \"InvalidSignature\",\n \"msg\": \"Invalid aggregate signature\"\n },\n {\n \"code\": 6018,\n \"name\": \"GroupBitmapDerivationFailed\",\n \"msg\": \"Could not derive group bitmap\"\n },\n {\n \"code\": 6019,\n \"name\": \"InvalidSignersBitmap\",\n \"msg\": \"Signers bitmap contains out-of-range indices\"\n },\n {\n \"code\": 6020,\n \"name\": \"PlanNotActive\",\n \"msg\": \"plan exists but is_active is false\"\n },\n {\n \"code\": 6021,\n \"name\": \"InvalidPlanParams\",\n \"msg\": \"invalid plan quorum or signer parameters\"\n },\n {\n \"code\": 6022,\n \"name\": \"InvalidDelegateLimits\",\n \"msg\": \"invalid delegate limit parameters\"\n },\n {\n \"code\": 6023,\n \"name\": \"DelegateCannotBeOwner\",\n \"msg\": \"delegate cannot be the owner\"\n },\n {\n \"code\": 6024,\n \"name\": \"DelegateCapReached\",\n \"msg\": \"subscription delegate_count >= plan.max_delegates\"\n },\n {\n \"code\": 6025,\n \"name\": \"InvalidRegistrationSalt\",\n \"msg\": \"registration_salt must not be zero\"\n },\n {\n \"code\": 6026,\n \"name\": \"InsufficientSigners\",\n \"msg\": \"popcount(signers_bitmap) < signatures_required\"\n },\n {\n \"code\": 6027,\n \"name\": \"SignaturesBelowMinSigners\",\n \"msg\": \"signatures_required is below protocol min_signers\"\n },\n {\n \"code\": 6028,\n \"name\": \"SignersNotSubsetOfSelection\",\n \"msg\": \"Signer bits outside selection bitmap\"\n },\n {\n \"code\": 6029,\n \"name\": \"InvalidAggregateSignature\",\n \"msg\": \"PoP-Schnorr aggregate verification failed\"\n },\n {\n \"code\": 6030,\n \"name\": \"FeedNotNewer\",\n \"msg\": \"timestamp <= feed.timestamp\"\n },\n {\n \"code\": 6031,\n \"name\": \"SignaturesRequiredMismatch\",\n \"msg\": \"signatures_required does not match feed.signatures_required\"\n },\n {\n \"code\": 6032,\n \"name\": \"MissingSignerAccount\",\n \"msg\": \"Missing or mis-ordered signer slot version account\"\n },\n {\n \"code\": 6033,\n \"name\": \"SubscriptionNotActive\",\n \"msg\": \"subscription has expired\"\n },\n {\n \"code\": 6034,\n \"name\": \"QuorumBelowThreshold\",\n \"msg\": \"popcount(signers_bitmap) < signatures_required\"\n },\n {\n \"code\": 6035,\n \"name\": \"GatewayNotActive\",\n \"msg\": \"gateway is not active\"\n },\n {\n \"code\": 6036,\n \"name\": \"NothingToClaim\",\n \"msg\": \"no claimable rewards\"\n },\n {\n \"code\": 6037,\n \"name\": \"InvalidWithdrawalState\",\n \"msg\": \"account is not in a state that permits withdrawal\"\n },\n {\n \"code\": 6038,\n \"name\": \"NothingToWithdraw\",\n \"msg\": \"withdrawable balance is zero\"\n },\n {\n \"code\": 6039,\n \"name\": \"WithdrawalCooldownActive\",\n \"msg\": \"withdrawal cooldown has not elapsed\"\n },\n {\n \"code\": 6040,\n \"name\": \"WithdrawalArithmeticOverflow\",\n \"msg\": \"withdrawal deadline arithmetic overflow\"\n },\n {\n \"code\": 6041,\n \"name\": \"InvalidWithdrawalCooldown\",\n \"msg\": \"withdrawal cooldown must be positive and fit a slot deadline\"\n },\n {\n \"code\": 6042,\n \"name\": \"InvalidInstructionsSysvar\",\n \"msg\": \"instructions sysvar account is invalid\"\n },\n {\n \"code\": 6043,\n \"name\": \"CreditedExceedsSelection\",\n \"msg\": \"credited signer count exceeds signatures_required + redundancy_buffer\"\n },\n {\n \"code\": 6044,\n \"name\": \"InvalidRawValue\",\n \"msg\": \"raw value exceeds Feed::MAX_VALUE_LEN or does not match the hash of the attestation value\"\n },\n {\n \"code\": 6045,\n \"name\": \"EquivocationSameStatement\",\n \"msg\": \"equivocation requires two attestations for one duty with different values\"\n },\n {\n \"code\": 6046,\n \"name\": \"NotEquivocation\",\n \"msg\": \"attestations do not sign different values for one duty\"\n },\n {\n \"code\": 6047,\n \"name\": \"EvidenceHashMismatch\",\n \"msg\": \"recomputed evidence hash does not match the supplied evidence_hash\"\n },\n {\n \"code\": 6048,\n \"name\": \"GuiltySetEmpty\",\n \"msg\": \"intersection of the two signer bitmaps is empty\"\n },\n {\n \"code\": 6049,\n \"name\": \"NodeTombstoned\",\n \"msg\": \"node is permanently tombstoned\"\n },\n {\n \"code\": 6050,\n \"name\": \"NodeNotFrozen\",\n \"msg\": \"node is not Frozen\"\n },\n {\n \"code\": 6051,\n \"name\": \"NodeStillFrozen\",\n \"msg\": \"node is still inside its freeze window\"\n },\n {\n \"code\": 6052,\n \"name\": \"NodeAlreadyInRegistry\",\n \"msg\": \"node is already present in the current registry\"\n },\n {\n \"code\": 6053,\n \"name\": \"SignersFullySelected\",\n \"msg\": \"every signer was within the derived selection - no unsolicited signer\"\n },\n {\n \"code\": 6054,\n \"name\": \"NothingToPunish\",\n \"msg\": \"every guilty node is already tombstoned\"\n },\n {\n \"code\": 6055,\n \"name\": \"NonceCommitmentMismatch\",\n \"msg\": \"attestations do not share an aggregate nonce commitment\"\n },\n {\n \"code\": 6056,\n \"name\": \"RegistryVersionMismatch\",\n \"msg\": \"attestations have different registry versions, or one older than the feed's\"\n },\n {\n \"code\": 6057,\n \"name\": \"NonceReuseSameMessage\",\n \"msg\": \"attestations sign the same message\"\n },\n {\n \"code\": 6058,\n \"name\": \"PreferEquivocation\",\n \"msg\": \"same duty with different values is equivocation - file it as one\"\n },\n {\n \"code\": 6059,\n \"name\": \"AttestationTooStale\",\n \"msg\": \"timestamp is older than now - max_settlement_delay_seconds\"\n },\n {\n \"code\": 6060,\n \"name\": \"AttestationInFuture\",\n \"msg\": \"timestamp is further ahead of cluster time than the allowed drift\"\n },\n {\n \"code\": 6061,\n \"name\": \"InvalidMaxReceiptDelay\",\n \"msg\": \"max_settlement_delay_seconds must be positive and fit a timestamp deadline\"\n },\n {\n \"code\": 6062,\n \"name\": \"TreasuryInsolvent\",\n \"msg\": \"treasury balance cannot back the protocol's reward liability\"\n },\n {\n \"code\": 6063,\n \"name\": \"InvalidChallengerBounty\",\n \"msg\": \"challenger_bounty_bps must not exceed 10000\"\n },\n {\n \"code\": 6064,\n \"name\": \"RewardLiabilityUnderflow\",\n \"msg\": \"reward liability underflow\"\n },\n {\n \"code\": 6065,\n \"name\": \"DepositVaultUnderfunded\",\n \"msg\": \"node deposit vault does not cover the recorded total deposits\"\n },\n {\n \"code\": 6066,\n \"name\": \"TranscriptContextsEqual\",\n \"msg\": \"both transcripts carry the same (b, c) challenge pair\"\n },\n {\n \"code\": 6067,\n \"name\": \"NonCanonicalScalar\",\n \"msg\": \"scalar is zero or not below the secp256k1 curve order\"\n },\n {\n \"code\": 6068,\n \"name\": \"MerkleProofTooDeep\",\n \"msg\": \"merkle proof exceeds the maximum accepted depth\"\n },\n {\n \"code\": 6069,\n \"name\": \"InvalidMerkleProof\",\n \"msg\": \"merkle proof does not connect the leaf to the signed batch root\"\n },\n {\n \"code\": 6070,\n \"name\": \"InvalidBatchSignature\",\n \"msg\": \"commitment batch signature does not verify against the node key\"\n },\n {\n \"code\": 6071,\n \"name\": \"InvalidPartialSignature\",\n \"msg\": \"partial signature does not satisfy the nonce equation\"\n },\n {\n \"code\": 6072,\n \"name\": \"InvalidNoncePoint\",\n \"msg\": \"committed nonce is not a valid secp256k1 point\"\n },\n {\n \"code\": 6073,\n \"name\": \"InvalidMinimumNodeDeposit\",\n \"msg\": \"minimum node deposit must be positive\"\n },\n {\n \"code\": 6074,\n \"name\": \"InvalidRoundPrice\",\n \"msg\": \"base price plus rewards for the maximum signer count must fit u64\"\n },\n {\n \"code\": 6075,\n \"name\": \"RewardOverflow\",\n \"msg\": \"reward or reward liability arithmetic overflowed\"\n },\n {\n \"code\": 6076,\n \"name\": \"UnexpectedSignerAccounts\",\n \"msg\": \"signer account list must contain exactly one account per signer\"\n },\n {\n \"code\": 6077,\n \"name\": \"InvalidCoalitionKey\",\n \"msg\": \"coalition key is not the sum of the signer keys\"\n },\n {\n \"code\": 6078,\n \"name\": \"InvalidEpochLength\",\n \"msg\": \"epoch_len_seconds is outside the allowed bounds\"\n },\n {\n \"code\": 6079,\n \"name\": \"InvalidTicketGrace\",\n \"msg\": \"ticket_grace_seconds must be positive and shorter than the epoch\"\n },\n {\n \"code\": 6080,\n \"name\": \"InvalidTicketTarget\",\n \"msg\": \"target_tickets_per_epoch is outside the allowed bounds\"\n },\n {\n \"code\": 6081,\n \"name\": \"InvalidAvailabilityFloor\",\n \"msg\": \"availability floor must not exceed 10000 bps and needs a positive sample minimum\"\n },\n {\n \"code\": 6082,\n \"name\": \"InvalidProtocolFee\",\n \"msg\": \"protocol_fee_bps must not exceed 10000\"\n },\n {\n \"code\": 6083,\n \"name\": \"EpochNotOpen\",\n \"msg\": \"epoch is not open at the current cluster time\"\n },\n {\n \"code\": 6084,\n \"name\": \"TicketWindowClosed\",\n \"msg\": \"epoch no longer accepts tickets\"\n },\n {\n \"code\": 6085,\n \"name\": \"RoundOutsideEpoch\",\n \"msg\": \"timestamp is outside the epoch window\"\n },\n {\n \"code\": 6086,\n \"name\": \"NotATicket\",\n \"msg\": \"round does not fall under the epoch ticket threshold\"\n },\n {\n \"code\": 6087,\n \"name\": \"DispatchSigInvalid\",\n \"msg\": \"gateway dispatch signature missing or invalid\"\n },\n {\n \"code\": 6088,\n \"name\": \"InvalidRosterSlot\",\n \"msg\": \"roster slot hint does not match the epoch roster\"\n },\n {\n \"code\": 6089,\n \"name\": \"TicketCapReached\",\n \"msg\": \"epoch ticket cap reached\"\n },\n {\n \"code\": 6090,\n \"name\": \"TicketMarkerNotExpired\",\n \"msg\": \"ticket marker is still inside its epoch ticket window\"\n },\n {\n \"code\": 6091,\n \"name\": \"EpochNotFinalizable\",\n \"msg\": \"epoch ticket window has not ended\"\n },\n {\n \"code\": 6092,\n \"name\": \"EpochNotFinalized\",\n \"msg\": \"epoch is not finalized\"\n },\n {\n \"code\": 6093,\n \"name\": \"InvalidEpochSequence\",\n \"msg\": \"next epoch account does not follow the finalized epoch\"\n },\n {\n \"code\": 6094,\n \"name\": \"NothingToCredit\",\n \"msg\": \"roster slot has no weight or was already credited\"\n },\n {\n \"code\": 6095,\n \"name\": \"EpochNotClosable\",\n \"msg\": \"epoch still has uncredited nodes or is inside its evidence window\"\n },\n {\n \"code\": 6096,\n \"name\": \"NothingToSweep\",\n \"msg\": \"treasury holds no unswept income\"\n },\n {\n \"code\": 6097,\n \"name\": \"InsufficientProtocolReserve\",\n \"msg\": \"amount exceeds the protocol reserve\"\n },\n {\n \"code\": 6098,\n \"name\": \"AvailabilityAboveFloor\",\n \"msg\": \"node availability is not below the epoch payout floor\"\n },\n {\n \"code\": 6099,\n \"name\": \"InactivityAlreadyPunished\",\n \"msg\": \"node was already frozen during this epoch\"\n },\n {\n \"code\": 6100,\n \"name\": \"InvalidRentReceiver\",\n \"msg\": \"rent receiver must be the account that paid for the closed account\"\n },\n {\n \"code\": 6101,\n \"name\": \"InvalidInitialTau\",\n \"msg\": \"initial_tau is below the minimum ticket threshold\"\n }\n ],\n \"types\": [\n {\n \"name\": \"AddDelegateArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"delegate\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"max_data_requests\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Attestation\",\n \"docs\": [\n \"Payload plus aggregate Schnorr signature.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"payload\",\n \"type\": {\n \"defined\": {\n \"name\": \"AttestationPayload\"\n }\n }\n },\n {\n \"name\": \"signature\",\n \"type\": {\n \"defined\": {\n \"name\": \"SchnorrSignature\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"AttestationPayload\",\n \"docs\": [\n \"Signed oracle attestation payload.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"value\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"source_id\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"registry_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"signatures_required\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"CoalitionKey\",\n \"docs\": [\n \"Affine coalition key `Σ X_i = (x, y)`, big-endian: an untrusted verification input.\",\n \"\",\n \"Supplying it lets the verifier check its Jacobian sum against the key instead of normalizing\",\n \"the sum with a field inversion (see [`CoalitionAccumulator::compressed_pubkey_with_key`]).\",\n \"It is a property of the point, not of the verifier's arithmetic: any secp256k1 library\",\n \"computes it as the plain sum of the signers' public keys, in any order.\",\n \"\",\n \"Not part of the signed message or the cross-VM [`crate::Attestation`]; carry it next to the\",\n \"attestation, e.g. in Solana instruction data.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"x\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"y\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"CommitmentReuseEvidence\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"attestation_a\",\n \"type\": {\n \"defined\": {\n \"name\": \"Attestation\"\n }\n }\n },\n {\n \"name\": \"attestation_b\",\n \"type\": {\n \"defined\": {\n \"name\": \"Attestation\"\n }\n }\n },\n {\n \"name\": \"coalition_key_a\",\n \"docs\": [\n \"Affine sum of `attestation_a`'s signer keys. A verification input, not evidence: it is\",\n \"left out of [`Evidence::hash`], so the case PDA derives from the attestations alone.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"CoalitionKey\"\n }\n }\n },\n {\n \"name\": \"coalition_key_b\",\n \"docs\": [\n \"Affine sum of `attestation_b`'s signer keys; see `coalition_key_a`.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"CoalitionKey\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"CommittedNoncePair\",\n \"docs\": [\n \"The nonce pair committed for one slot, as affine coordinates.\",\n \"\",\n \"Points travel uncompressed so the program never pays for a field square root; both are\",\n \"re-checked on-curve during equation verification.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"r1_x\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"r1_y\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"r2_x\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"r2_y\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Delegate\",\n \"docs\": [\n \"Owner-scoped delegate authorization. `max_data_requests` is enforced by the gateway at\",\n \"admission, not on chain.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegate\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"max_data_requests\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"DelegateAdded\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegate\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegate_count\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"added_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"DelegateRemoved\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegate\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegate_count\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"removed_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"DelegateStatusChanged\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"delegate\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"old_status\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"new_status\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"updated_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"EpochClosed\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"residual\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"rolled_into\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"closed_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"EpochCreated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"start\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"end\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"ticket_grace\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"tau\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EpochFinalized\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"pool\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"tickets\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"roster_len\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"weight_total\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"weighted_count\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"finalized_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"EpochRewardCredited\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"node\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"weight\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"forfeited\",\n \"docs\": [\n \"The node was tombstoned; its share stays in the epoch residual.\"\n ],\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"EpochState\",\n \"docs\": [\n \"One epoch of the reward pool: its window, pinned ticket threshold, swept income and the\",\n \"per-node participation counters fed by tickets.\",\n \"\",\n \"Counters are keyed by an epoch-local roster of `Node` PDAs rather than by registry position,\",\n \"because registry positions move between versions (swap-remove) while one epoch spans several.\",\n \"The roster fills lazily as tickets name nodes for the first time.\",\n \"\",\n \"PDA: `[SEED_PREFIX, epoch.to_le_bytes()]`. Layout has no implicit padding.\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"start\",\n \"docs\": [\n \"Inclusive window start (unix seconds). Equals the previous epoch's `end`.\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"end\",\n \"docs\": [\n \"Exclusive window end (unix seconds).\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"ticket_grace\",\n \"docs\": [\n \"Snapshot of `ticket_grace_seconds` at creation.\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"tau\",\n \"docs\": [\n \"A round is a ticket when the big-endian `u64` prefix of its ticket hash is below this.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"pool\",\n \"docs\": [\n \"USDC swept into this epoch while it was open.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"paid\",\n \"docs\": [\n \"Sum of payouts credited to nodes.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"weight_total\",\n \"docs\": [\n \"`Σ weight(slot)`, frozen at finalization.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"tickets\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"sum_signed\",\n \"docs\": [\n \"`Σ signed`, maintained per ticket.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"sum_selected\",\n \"docs\": [\n \"`Σ selected`, maintained per ticket.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"min_availability_bps\",\n \"docs\": [\n \"Snapshot: availability floor relative to the network inclusion rate, in bps.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"min_samples\",\n \"docs\": [\n \"Snapshot: samples below which the availability floor does not apply.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"roster_len\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"weighted_count\",\n \"docs\": [\n \"Roster slots with non-zero weight, frozen at finalization.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"credited_count\",\n \"docs\": [\n \"Weighted slots already processed by `credit_epoch_rewards`.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"finalized\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"rent_payer\",\n \"docs\": [\n \"Receives this account's rent when the epoch is closed.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"credited\",\n \"docs\": [\n \"Bitmap over roster slots already credited.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"signed\",\n \"type\": {\n \"array\": [\n \"u16\",\n 256\n ]\n }\n },\n {\n \"name\": \"selected\",\n \"type\": {\n \"array\": [\n \"u16\",\n 256\n ]\n }\n },\n {\n \"name\": \"roster\",\n \"type\": {\n \"array\": [\n {\n \"array\": [\n \"u8\",\n 32\n ]\n },\n 256\n ]\n }\n },\n {\n \"name\": \"min_signers\",\n \"docs\": [\n \"Snapshot of the admission quorum floor for rounds counted in this epoch.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_reserved\",\n \"type\": {\n \"array\": [\n \"u8\",\n 7\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"EquivocationEvidence\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"attestation_a\",\n \"type\": {\n \"defined\": {\n \"name\": \"Attestation\"\n }\n }\n },\n {\n \"name\": \"attestation_b\",\n \"type\": {\n \"defined\": {\n \"name\": \"Attestation\"\n }\n }\n },\n {\n \"name\": \"coalition_key_a\",\n \"docs\": [\n \"Affine sum of `attestation_a`'s signer keys. A verification input, not evidence: it is\",\n \"left out of [`Evidence::hash`], so the case PDA derives from the attestations alone.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"CoalitionKey\"\n }\n }\n },\n {\n \"name\": \"coalition_key_b\",\n \"docs\": [\n \"Affine sum of `attestation_b`'s signer keys; see `coalition_key_a`.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"CoalitionKey\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"Feed\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"source_id\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"value\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"value_kind\",\n \"type\": {\n \"defined\": {\n \"name\": \"FeedValueKind\"\n }\n }\n },\n {\n \"name\": \"submitter\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"signatures_required\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"signers_bitmap\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"registry_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"FeedUpdated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"source_id\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"registry_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"value\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"value_kind\",\n \"type\": {\n \"defined\": {\n \"name\": \"FeedValueKind\"\n }\n }\n },\n {\n \"name\": \"signers_bitmap\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"last_updated_slot\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"FeedValueKind\",\n \"docs\": [\n \"How to read [`Feed::value`], which is always the signed `AttestationPayload::value`.\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Value\"\n },\n {\n \"name\": \"Hash\"\n }\n ]\n }\n },\n {\n \"name\": \"Gateway\",\n \"docs\": [\n \"Protocol-authorized gateway identified by its Solana authority.\",\n \"\",\n \"Holds endpoint metadata and activation status. Keyed by the gateway's authority key, which\",\n \"signs the round dispatches tickets must carry. Gateways hold no funds: x402 payers pay the\",\n \"protocol treasury directly.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"ip\",\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"port\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"status\",\n \"type\": {\n \"defined\": {\n \"name\": \"GatewayStatus\"\n }\n }\n },\n {\n \"name\": \"registered_at\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"GatewayDeactivated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"gateway\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"deactivated_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"GatewayRegistered\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"ip\",\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"port\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"registered_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"GatewayStatus\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Active\"\n },\n {\n \"name\": \"Deactivated\"\n }\n ]\n }\n },\n {\n \"name\": \"InactivityEvidence\",\n \"docs\": [\n \"A node whose availability in a finalized epoch fell below that epoch's payout floor.\",\n \"\",\n \"Proven from the epoch's own counters; `registry_version` / `node_index` locate the node in the\",\n \"current registry so it can be removed. The case hash covers only `(epoch, roster_slot)`, so a\",\n \"node can be punished at most once per epoch, including after reinstatement.\",\n \"\",\n \"Remaining accounts: `[node, epoch_state]`.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"roster_slot\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"registry_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"node_index\",\n \"type\": \"u32\"\n }\n ]\n }\n },\n {\n \"name\": \"InitializeArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"withdrawal_cooldown_slots\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"redundancy_buffer\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"minimum_node_deposit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"reward_per_signature\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_settlement_delay_seconds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"challenger_bounty_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"usdc_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"x402_round_base\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_signers\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"epoch_len_seconds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"ticket_grace_seconds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"target_tickets_per_epoch\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"min_availability_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"min_availability_samples\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"protocol_fee_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"initial_tau\",\n \"docs\": [\n \"Ticket threshold of the two genesis epochs: a round is a ticket when the 64-bit prefix of its\",\n \"ticket hash is below it, so the sampling probability is `initial_tau / 2^64`. Size it as\",\n \"`2^64 * target_tickets_per_epoch / expected_rounds_per_epoch`. `u64::MAX` samples every round\",\n \"(every round then costs a ticket transaction until the controller, which moves the\",\n \"threshold at most 8x per epoch with a two-epoch lag, brings it down). Must be at least\",\n \"`TAU_MIN`.\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Node\",\n \"docs\": [\n \"Permanent node identity and reward account; never closed or re-keyed.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"secp256k1_pubkey_x\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"secp256k1_pubkey_y\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"status\",\n \"type\": {\n \"defined\": {\n \"name\": \"NodeStatus\"\n }\n }\n },\n {\n \"name\": \"ip\",\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"port\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"locked_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"claimable_rewards\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"registered_at\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"withdrawable_slot\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"frozen_until\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"NodeDeactivated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"node\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"node_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_registry_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"deactivated_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"NodeDepositWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"node\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"node_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"destination\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"withdrawn_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"NodeEndpointUpdated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"node\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"node_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"ip\",\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"port\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"updated_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"NodePunished\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"node\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"offence\",\n \"type\": {\n \"defined\": {\n \"name\": \"OffenceKind\"\n }\n }\n },\n {\n \"name\": \"slashed_locked\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"slashed_rewards\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"new_status\",\n \"type\": {\n \"defined\": {\n \"name\": \"NodeStatus\"\n }\n }\n },\n {\n \"name\": \"punished_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"NodeRegistered\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"node\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"index\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"registry_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"ip\",\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"port\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"security_deposit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"registered_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"NodeReinstated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"node\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"node_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"index\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"registry_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"reinstated_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"NodeStatus\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Active\"\n },\n {\n \"name\": \"Deactivated\"\n },\n {\n \"name\": \"Frozen\"\n },\n {\n \"name\": \"Tombstoned\"\n }\n ]\n }\n },\n {\n \"name\": \"NonceReuseEvidence\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"registry_version\",\n \"docs\": [\n \"Registry version that `node_index` indexes into; also bound into the batch signature.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"node_index\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"batch_meta\",\n \"docs\": [\n \"Opaque batch header bytes, covered by the signature but not interpreted on-chain.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"batch_root\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"batch_sig_s\",\n \"docs\": [\n \"Single-key EVM-Schnorr signature over the batch message.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"batch_commitment_addr\",\n \"type\": {\n \"array\": [\n \"u8\",\n 20\n ]\n }\n },\n {\n \"name\": \"slot\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"nonces\",\n \"type\": {\n \"defined\": {\n \"name\": \"CommittedNoncePair\"\n }\n }\n },\n {\n \"name\": \"merkle_proof\",\n \"type\": {\n \"vec\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n },\n {\n \"name\": \"transcript_a\",\n \"type\": {\n \"defined\": {\n \"name\": \"PartialTranscript\"\n }\n }\n },\n {\n \"name\": \"transcript_b\",\n \"type\": {\n \"defined\": {\n \"name\": \"PartialTranscript\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"Offence\",\n \"docs\": [\n \"Node-fault offence types. Each carries a fixed [`Penalty`] — see [`OffenceKind::penalty`].\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Equivocation\",\n \"fields\": [\n {\n \"defined\": {\n \"name\": \"EquivocationEvidence\"\n }\n }\n ]\n },\n {\n \"name\": \"UnsolicitedSigning\",\n \"fields\": [\n {\n \"defined\": {\n \"name\": \"UnsolicitedSigningEvidence\"\n }\n }\n ]\n },\n {\n \"name\": \"CommitmentReuse\",\n \"fields\": [\n {\n \"defined\": {\n \"name\": \"CommitmentReuseEvidence\"\n }\n }\n ]\n },\n {\n \"name\": \"NonceReuse\",\n \"fields\": [\n {\n \"defined\": {\n \"name\": \"NonceReuseEvidence\"\n }\n }\n ]\n },\n {\n \"name\": \"Inactivity\",\n \"fields\": [\n {\n \"defined\": {\n \"name\": \"InactivityEvidence\"\n }\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"OffenceKind\",\n \"docs\": [\n \"Fieldless offence identity stored on `PunishmentCase` and in events.\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Equivocation\"\n },\n {\n \"name\": \"UnsolicitedSigning\"\n },\n {\n \"name\": \"CommitmentReuse\"\n },\n {\n \"name\": \"NonceReuse\"\n },\n {\n \"name\": \"Inactivity\"\n }\n ]\n }\n },\n {\n \"name\": \"OffenceProven\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"offence\",\n \"type\": {\n \"defined\": {\n \"name\": \"OffenceKind\"\n }\n }\n },\n {\n \"name\": \"guilty_bitmap\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"evidence_hash\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"reporter\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"slashed_total\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bounty_paid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"proven_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"PartialTranscript\",\n \"docs\": [\n \"One partial-signature transcript: the challenge scalars and the resulting share.\",\n \"\",\n \"The program never recomputes `b` or `c` from a signing context — the offence is defined purely\",\n \"by the equation `s*G == R1 + b*R2 + c*X`, which is why message transport and commitment lists\",\n \"stay off-chain.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"b\",\n \"docs\": [\n \"Binding factor.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"c\",\n \"docs\": [\n \"Challenge.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"s\",\n \"docs\": [\n \"The node's partial signature scalar.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Plan\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"plan_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"PlanType\"\n }\n }\n },\n {\n \"name\": \"subscription_price\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_signers\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"max_delegates\",\n \"docs\": [\n \"Max delegates/agents an owner on this plan may provision.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"max_rounds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"private_api_enabled\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"is_active\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"PlanAdded\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"plan_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"subscription_price\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_signers\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"max_delegates\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"private_api_enabled\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"is_active\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"PlanConfig\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"plan_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"PlanType\"\n }\n }\n },\n {\n \"name\": \"subscription_price\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_signers\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"max_delegates\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"max_rounds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"private_api_enabled\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"is_active\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"PlanType\",\n \"repr\": {\n \"kind\": \"rust\"\n },\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Basic\"\n },\n {\n \"name\": \"Standard\"\n },\n {\n \"name\": \"Professional\"\n },\n {\n \"name\": \"Enterprise\"\n }\n ]\n }\n },\n {\n \"name\": \"PlanUpdated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"plan_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"subscription_price\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_signers\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"max_delegates\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"private_api_enabled\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"is_active\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"ProtocolConfig\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"usdc_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_per_signature\",\n \"docs\": [\n \"Published x402 pricing input: `x402_round_base + (k + b) · reward_per_signature`.\",\n \"Not read on chain; payouts come from the epoch pool.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_settlement_delay_seconds\",\n \"docs\": [\n \"Max age in seconds of `timestamp` relative to cluster time at attestation\",\n \"ingress, and the grace period of a superseded registry version.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"challenger_bounty_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"minimum_node_deposit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"withdrawal_cooldown_slots\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"x402_round_base\",\n \"docs\": [\n \"Published x402 pricing input; see `reward_per_signature`.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"reward_liability\",\n \"docs\": [\n \"Sum of every `Node.claimable_rewards`.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_signers\",\n \"docs\": [\n \"Current feed-admission floor; copied into each new epoch for ticket verification.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"epoch_len_seconds\",\n \"docs\": [\n \"Length of epochs created from now on.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"ticket_grace_seconds\",\n \"docs\": [\n \"Late-ticket window after an epoch ends, for epochs created from now on.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"target_tickets_per_epoch\",\n \"docs\": [\n \"Ticket count per epoch the threshold controller aims for.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"min_availability_bps\",\n \"docs\": [\n \"Payout floor relative to the network inclusion rate, in bps, for new epochs.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"min_availability_samples\",\n \"docs\": [\n \"Selections below which the availability floor does not apply, for new epochs.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"protocol_fee_bps\",\n \"docs\": [\n \"Share of all swept income kept by the protocol; the rest joins the epoch pool.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"pool_liability\",\n \"docs\": [\n \"Sum of `pool - paid` over every epoch not yet closed.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_reserved\",\n \"docs\": [\n \"Protocol fees and slashing proceeds held in the treasury.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ProtocolConfigUpdated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"reward_per_signature\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_settlement_delay_seconds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"challenger_bounty_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"minimum_node_deposit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"withdrawal_cooldown_slots\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"x402_round_base\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_signers\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"epoch_len_seconds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"ticket_grace_seconds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"target_tickets_per_epoch\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"min_availability_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"min_availability_samples\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"protocol_fee_bps\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"ProtocolInitialized\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"protocol_config\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"registry_state\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"registry\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"treasury\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"node_deposit_vault\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"usdc_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"initialized_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"ProtocolReserveWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"destination\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"withdrawn_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"PunishmentCase\",\n \"docs\": [\n \"Permanent, on-chain record of an executed node punishment.\",\n \"\",\n \"The PDA is seeded by `evidence_hash`, so `init` doubles as the anti-replay guard: the same\",\n \"evidence can only ever be submitted once, independent of any per-offence terminal-status guard.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"offence\",\n \"type\": {\n \"defined\": {\n \"name\": \"OffenceKind\"\n }\n }\n },\n {\n \"name\": \"reporter\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"registry_version\",\n \"docs\": [\n \"Registry version the guilty bitmap indexes into.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"guilty_bitmap\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"guilty_count\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"slashed_total\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bounty_paid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"evidence_hash\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"executed_slot\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"RegisterGatewayArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"ip\",\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"port\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"RegisterNodeArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"registration_salt\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"ip\",\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"port\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"secp256k1_pubkey_compressed\",\n \"type\": {\n \"array\": [\n \"u8\",\n 33\n ]\n }\n },\n {\n \"name\": \"pop_sig_r\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"pop_sig_s\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Registry\",\n \"docs\": [\n \"Immutable, version-addressed snapshot of the ordered node set and selection policy.\",\n \"\",\n \"Only `nodes[..node_count]` is populated. Node addresses are stored as bytes to keep the\",\n \"zero-copy layout POD-safe. `SPACE` includes the Anchor discriminator.\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"node_count\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"redundancy_buffer\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"nodes\",\n \"type\": {\n \"array\": [\n {\n \"array\": [\n \"u8\",\n 32\n ]\n },\n 256\n ]\n }\n },\n {\n \"name\": \"grace_active_until\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"active_from\",\n \"docs\": [\n \"Inclusive creation time. A version cannot verify a round dated before it existed.\"\n ],\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"RegistryState\",\n \"docs\": [\n \"Mutable pointer to the current immutable registry snapshot.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"current_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"next_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"RegistryUpdated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"new_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"node_count\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"redundancy_buffer\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"reason\",\n \"type\": {\n \"defined\": {\n \"name\": \"RegistryVersionReason\"\n }\n }\n },\n {\n \"name\": \"updated_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"RegistryVersionReason\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"NodeAdded\"\n },\n {\n \"name\": \"NodeRemoved\"\n },\n {\n \"name\": \"PolicyChanged\"\n },\n {\n \"name\": \"NodePunished\"\n },\n {\n \"name\": \"NodeReinstated\"\n }\n ]\n }\n },\n {\n \"name\": \"RemoveDelegateArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"delegate\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"RevenueSwept\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"gross\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"pool_share\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"swept_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"RewardsClaimed\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"beneficiary\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"claimed_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"SchnorrSignature\",\n \"docs\": [\n \"Aggregate Schnorr signature material.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"agg_sig_s\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"commitment\",\n \"type\": {\n \"array\": [\n \"u8\",\n 20\n ]\n }\n },\n {\n \"name\": \"signers_bitmap\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Secp256k1KeyClaim\",\n \"docs\": [\n \"Permanent reservation for a secp256k1 node key.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"node_pubkey\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"SubmitAttestationArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"attestation\",\n \"type\": {\n \"defined\": {\n \"name\": \"Attestation\"\n }\n }\n },\n {\n \"name\": \"raw_value\",\n \"docs\": [\n \"Preimage of `attestation.payload.value` for values longer than 32 bytes. When present the\",\n \"signed value must be `keccak256(raw_value)` and the feed stores it as\",\n \"[`FeedValueKind::Hash`].\"\n ],\n \"type\": {\n \"option\": \"bytes\"\n }\n },\n {\n \"name\": \"coalition_key\",\n \"docs\": [\n \"Affine sum of the signers' secp256k1 keys (`molpha_verifier::coalition_key`, or any\",\n \"library's point sum over their `Node` accounts). Unsigned and untrusted: the verifier\",\n \"checks it projectively against its own sum instead of inverting. A wrong key only fails\",\n \"the instruction.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"CoalitionKey\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"Subscribed\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"plan_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"prepaid_usdc\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"price_snapshot\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"subscribed_at\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"valid_until\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"Subscription\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"plan_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"PlanType\"\n }\n }\n },\n {\n \"name\": \"valid_until\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"max_rounds\",\n \"docs\": [\n \"Round quota per plan snapshot. Enforced by the gateway at admission, not on chain.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"delegate_count\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"max_delegates\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"max_signers\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"SubscriptionExtended\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"plan_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"extended_at\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"valid_until\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"TicketMarker\",\n \"docs\": [\n \"Existence marker for a submitted ticket; blocks resubmitting the same round.\",\n \"\",\n \"PDA: `[SEED_PREFIX, ticket_id]`. Once the round's epoch stops accepting tickets the round can\",\n \"never be submitted again, so the marker becomes closable and returns its rent.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"closable_after\",\n \"docs\": [\n \"The round's epoch ticket deadline (`end + ticket_grace`).\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"submitter\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"TicketMarkerClosed\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"ticket_marker\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"submitter\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"closed_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"TicketRosterOverflow\",\n \"docs\": [\n \"Selected nodes left uncounted because the epoch roster was full.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"ticket_id\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"uncounted\",\n \"type\": \"u32\"\n }\n ]\n }\n },\n {\n \"name\": \"TicketSubmitted\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"ticket_id\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"gateway\",\n \"docs\": [\n \"Gateway PDA whose authority signed the round dispatch.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"submitter\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"registry_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"signers_bitmap\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"UnsolicitedSigningEvidence\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"attestation\",\n \"type\": {\n \"defined\": {\n \"name\": \"Attestation\"\n }\n }\n },\n {\n \"name\": \"coalition_key\",\n \"docs\": [\n \"Affine sum of the attestation's signer keys, intruders included. A verification input,\",\n \"not evidence: it is left out of [`Evidence::hash`], so the case PDA derives from the\",\n \"attestation alone.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"CoalitionKey\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"UpdateConfigArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"withdrawal_cooldown_slots\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"minimum_node_deposit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"reward_per_signature\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_settlement_delay_seconds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"challenger_bounty_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"x402_round_base\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_signers\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"epoch_len_seconds\",\n \"docs\": [\n \"Epoch parameters apply to epochs created after this update, never to existing ones.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"ticket_grace_seconds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"target_tickets_per_epoch\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"min_availability_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"min_availability_samples\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"protocol_fee_bps\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"UpdateNodeEndpointArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"ip\",\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"port\",\n \"type\": \"u16\"\n }\n ]\n }\n }\n ]\n}","import type { Idl } from \"@anchor-lang/core\";\nimport idlJson from \"./molpha.json\" with { type: \"json\" };\n\n/**\n * Vendored Molpha Anchor IDL (`target/idl/molpha.json` from the program repo).\n *\n * Re-exported as `MOLPHA_IDL` and used as the default in `MolphaSDK` /\n * `MolphaSolanaClient.create`. Pass `idl` / `programId` only when pinning a\n * different deployment. Keep this copy aligned with the on-chain program you target.\n */\nexport const MOLPHA_IDL = idlJson as Idl;\n\n/** Program address baked into the vendored IDL. */\nexport const MOLPHA_PROGRAM_ADDRESS: string = idlJson.address;\n","/** On-chain subscription plan (`PlanType` in the Molpha program IDL). */\nexport enum PlanType {\n Basic = 0,\n Standard = 1,\n Professional = 2,\n Enterprise = 3,\n}\n\n/** Numeric plan index used for PDA derivation and on-chain reads. */\nexport type PlanId = 0 | 1 | 2 | 3;\n\nconst PLAN_VARIANTS = [\n { basic: {} },\n { standard: {} },\n { professional: {} },\n { enterprise: {} },\n] as const;\n\nexport function planVariant(planId: PlanId): (typeof PLAN_VARIANTS)[number] {\n return PLAN_VARIANTS[planId];\n}\n\nexport function planIdFromVariant(variant: Record<string, unknown>): PlanId {\n const key = Object.keys(variant)[0]?.toLowerCase();\n const idx = [\"basic\", \"standard\", \"professional\", \"enterprise\"].indexOf(key ?? \"\");\n if (idx < 0) throw new Error(`Unknown plan variant: ${JSON.stringify(variant)}`);\n return idx as PlanId;\n}\n","/**\n * `MolphaSolanaClient` — consumer on-chain surface only (subscribe, extend,\n * submitAttestation, readFeed/readPlan/readSubscription/readRegistry,\n * getRegistrySelectionConfig, verifyNodeKeysForPrivateApi). Built from an Anchor\n * `Program` over the vendored IDL (program `3d01170`, \"Epoch settlements\").\n */\nimport {\n AnchorProvider,\n Program,\n type Idl,\n type Wallet,\n web3,\n} from \"@anchor-lang/core\";\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport BN from \"bn.js\";\nimport type { Address } from \"@solana/kit\";\nimport { type CoalitionKey, computeCoalitionKey } from \"../core/coalition.js\";\nimport { bytesToHex, toFixedBytes } from \"../core/encoding.js\";\nimport {\n normalizeSecp256k1PublicKeyHex,\n secp256k1PublicKeyFromCoordinates,\n} from \"../core/nodeKeys.js\";\nimport type {\n Attestation,\n Node,\n NodeKeyVerifierArgs,\n RegistrySelectionConfig,\n} from \"../core/types.js\";\nimport {\n type RegistryStateView,\n type RegistryView,\n resolveRemainingAccounts,\n} from \"./accounts.js\";\nimport {\n addressFromBytes,\n getAssociatedTokenAddressSync,\n setComputeUnitLimit,\n setComputeUnitPrice,\n SYSTEM_PROGRAM_ADDRESS,\n TOKEN_PROGRAM_ADDRESS,\n toSolanaAddress,\n type SolanaAccountMeta,\n type SolanaAddress,\n type SolanaConnection,\n} from \"./kit.js\";\nimport {\n feedPda,\n planPda,\n protocolConfigPda,\n registryPda,\n registryStatePda,\n subscriptionPda,\n} from \"./pdas.js\";\nimport { MOLPHA_IDL, MOLPHA_PROGRAM_ADDRESS } from \"../../idl/index.js\";\nimport { PlanType, planIdFromVariant, planVariant, type PlanId } from \"./plans.js\";\n\nexport { PlanType, type PlanId } from \"./plans.js\";\n\n/** The most a transaction may request; the fallback when the signer count is unknown. */\nconst MAX_COMPUTE_UNIT_LIMIT = 1_400_000;\n\n/**\n * Compute units to request for a `submit_attestation` carrying `signerCount` signatures.\n *\n * The program's LiteSVM benchmark measures the whole transaction at about `43k + 9.1k` units per\n * signer (119k at 8 signers, 155k at 12, 208k at 18), so the old flat 1.4M request was 7-10 times\n * what a typical aggregate uses. That matters once a priority fee is attached, because it is\n * priced per requested unit, and for how the scheduler packs blocks. The estimate adds 15% and a\n * fixed 10k: the program's selection check costs a little more on some registries than the\n * benchmark's, and a limit that is hit fails the transaction for good.\n */\nexport function estimateSubmitComputeUnits(signerCount: number): number {\n if (!Number.isInteger(signerCount) || signerCount < 1) return MAX_COMPUTE_UNIT_LIMIT;\n const measured = 43_000 + 9_200 * signerCount;\n return Math.min(Math.round(measured * 1.15) + 10_000, MAX_COMPUTE_UNIT_LIMIT);\n}\n\n/** How long a registry read is reused. A registry version's node list never changes. */\nconst REGISTRY_CACHE_MS = 30_000;\n/** Cap on remembered node keys / coalition keys, so a long-lived client stays bounded. */\nconst KEY_CACHE_LIMIT = 8_192;\n/** How long a recent-prioritization-fee read is reused. */\nconst PRIORITY_FEE_CACHE_MS = 5_000;\n/** Percentile of recent fees for `priorityFeeMicroLamports: \"auto\"`, and the most it will pay. */\nconst AUTO_FEE_PERCENTILE = 0.75;\nconst AUTO_FEE_CAP_MICRO_LAMPORTS = 1_000_000;\ntype Commitment = NonNullable<ConstructorParameters<typeof AnchorProvider>[2]>[\"commitment\"];\n\nexport interface SubscribeResult {\n signature: string;\n /** USDC base units actually debited from the owner for this subscription. */\n pricePaid: bigint;\n}\n\nexport interface PlanInfo {\n planType: PlanType;\n /** Subscription price in USDC base units (raw u64, e.g. 1_000_000 = 1 USDC at 6 decimals). */\n subscriptionPrice: bigint;\n maxSigners: number;\n maxDelegates: number;\n /** Rounds a subscription on this plan may settle per period. */\n maxRounds: bigint;\n privateApiEnabled: boolean;\n isActive: boolean;\n}\n\n/**\n * On-chain `Subscription`. The program does not track usage (round quota is counted by the\n * gateway's off-chain outbox), so there is no on-chain \"rounds used\" figure to read.\n */\nexport interface SubscriptionInfo {\n owner: Address;\n planType: PlanType;\n /** Unix timestamp (seconds) until which the subscription is valid. */\n validUntil: bigint;\n /** Round quota per plan snapshot — enforced by the gateway at admission, not on chain. */\n maxRounds: bigint;\n delegateCount: number;\n maxDelegates: number;\n maxSigners: number;\n}\n\nexport interface SubmitResult {\n signature: string;\n /** Feed PDA written by this submit (`[\"molpha_feed\", sourceId, [signaturesRequired], submitter]`). */\n feed: Address;\n}\n\n/**\n * On-chain `Feed` (Anchor-decoded). `value` is always the signed\n * `AttestationPayload.value` (32 bytes): the oracle value itself when `valueKind` is\n * `value`, or `keccak256(rawValue)` when it is `hash` (the preimage travelled in the\n * submitting instruction). For a tolerance-mode source it is a two's-complement `int256`\n * (see `decodeInt256` / `formatInt256Decimal`).\n */\nexport interface FeedAccount {\n sourceId: number[];\n value: Uint8Array | number[];\n valueKind: { value: Record<string, never> } | { hash: Record<string, never> };\n submitter: Address;\n /** u64 unix MILLISECONDS (the round's gateway-assigned timestamp). */\n timestamp: BN;\n signaturesRequired: number;\n signersBitmap: number[];\n registryVersion: number;\n bump: number;\n}\n\n /** Anchor-encoded `SubmitAttestationArgs` (camelCase field names). */\nexport interface SubmitAttestationArgs {\n attestation: {\n payload: {\n value: number[];\n sourceId: number[];\n registryVersion: number;\n signaturesRequired: number;\n timestamp: BN;\n };\n signature: {\n aggSigS: number[];\n commitment: number[];\n signersBitmap: number[];\n };\n };\n /** Optional preimage when `payload.value` is `keccak256(rawValue)`. */\n rawValue: Uint8Array | null;\n coalitionKey: { x: number[]; y: number[] };\n}\n\nexport interface SubmitAttestationOptions {\n /**\n * Compute-unit limit. Defaults to {@link estimateSubmitComputeUnits} for the aggregate's signer\n * count, not the 1.4M maximum.\n */\n computeUnitLimit?: number;\n /**\n * Priority fee in micro-lamports per compute unit. A number is used as given; `\"auto\"` takes the\n * 75th percentile of the fees recently paid by transactions that wrote the feed, capped at 1\n * lamport per unit. Omitted: no priority fee, which is right on a quiet cluster. Raise it (or\n * use `\"auto\"`) when submits are dropped under load.\n */\n priorityFeeMicroLamports?: number | \"auto\";\n /**\n * Precomputed signer coalition key. When omitted, the client fetches signer `Node`\n * accounts and sums their secp256k1 keys ({@link computeCoalitionKey}).\n */\n coalitionKey?: CoalitionKey;\n /**\n * Optional value preimage (maximum 256 bytes). Its keccak256 digest must equal\n * `attestation.payload.value`; the program stores that digest with `valueKind.hash`.\n */\n rawValue?: Uint8Array;\n}\n\ninterface NodeAccount {\n secp256k1PubkeyX?: Uint8Array | number[];\n secp256k1PubkeyY?: Uint8Array | number[];\n secp256k1_pubkey_x?: Uint8Array | number[];\n secp256k1_pubkey_y?: Uint8Array | number[];\n}\n\ninterface CreateClientOpts {\n connection: SolanaConnection;\n wallet: Wallet;\n programId?: SolanaAddress;\n idl?: Idl;\n commitment?: Commitment;\n}\n\nexport class MolphaSolanaClient {\n // Registry reads and signer keys are shared by every submit that names the same registry\n // version, so a fleet of feeds reads them once. Promises are cached, so concurrent submits\n // coalesce; a failed read is dropped and retried by the next call.\n private readonly registryCache = new Map<number, { at: number; value: Promise<RegistryView> }>();\n private readonly nodeKeyCache = new Map<string, { x: Uint8Array; y: Uint8Array }>();\n private readonly coalitionCache = new Map<string, Promise<CoalitionKey>>();\n private priorityFeeCache?: { at: number; value: Promise<number> };\n\n private constructor(\n private readonly program: Program,\n private readonly provider: AnchorProvider,\n readonly programId: Address,\n ) {}\n\n static create(opts: CreateClientOpts): MolphaSolanaClient {\n const programId = toSolanaAddress(opts.programId ?? MOLPHA_PROGRAM_ADDRESS);\n const provider = new AnchorProvider(opts.connection, opts.wallet, {\n commitment: opts.commitment ?? \"confirmed\",\n });\n // Anchor reads the program id from `idl.address`; override it so the\n // caller-supplied programId always wins without mutating the vendored copy.\n const idl: Idl = { ...(opts.idl ?? MOLPHA_IDL), address: programId };\n const program = new Program(idl, provider);\n return new MolphaSolanaClient(program, provider, programId);\n }\n\n private get wallet(): Address {\n return toSolanaAddress(this.provider.wallet.publicKey);\n }\n\n /** Anchor's method/account namespaces are untyped without an IDL type param. */\n private get methods(): any {\n return this.program.methods;\n }\n private get accounts(): any {\n return this.program.account;\n }\n\n /**\n * Current registry version plus the selection inputs of that snapshot\n * (`redundancy_buffer`, `node_count`). Two account reads: `RegistryState`, then the\n * version-addressed `Registry`. Prefer this over {@link getRegistryVersion} when\n * deriving gateway selection bitmaps.\n */\n async getRegistrySelectionConfig(): Promise<Required<RegistrySelectionConfig>> {\n const state = await this.fetchRegistryState();\n const registry = await this.fetchRegistry(state.currentVersion);\n return {\n registryVersion: state.currentVersion,\n redundancyBuffer: registry.redundancyBuffer,\n nodeCount: registry.nodeCount,\n };\n }\n\n async getRegistryVersion(): Promise<number> {\n return (await this.fetchRegistryState()).currentVersion;\n }\n\n /** Read an immutable registry snapshot; defaults to the current version. */\n async readRegistry(version?: number): Promise<RegistryView> {\n const target = version ?? (await this.fetchRegistryState()).currentVersion;\n return this.fetchRegistry(target);\n }\n\n /** Fetch a plan's on-chain terms, including the USDC `subscriptionPrice` charged on `subscribe`. */\n async getPlan(plan: PlanType): Promise<PlanInfo> {\n const info = await this.readPlan(plan);\n if (!info) {\n throw new Error(`plan account not found for ${PlanType[plan] ?? plan}`);\n }\n return info;\n }\n\n /** Read a plan account, or `null` if it has not been initialized. */\n async readPlan(plan: PlanType): Promise<PlanInfo | null> {\n const account = await this.accounts.plan.fetchNullable(planPda(plan as PlanId, this.programId));\n return account ? this.decodePlan(account) : null;\n }\n\n /** Read an owner's subscription, or `null` if they have not subscribed. */\n async readSubscription(owner: SolanaAddress = this.wallet): Promise<SubscriptionInfo | null> {\n const account = await this.accounts.subscription.fetchNullable(\n subscriptionPda(owner, this.programId),\n );\n if (!account) return null;\n return {\n owner: toSolanaAddress(account.owner),\n planType: planIdFromVariant(account.planType) as unknown as PlanType,\n validUntil: BigInt(account.validUntil.toString()),\n maxRounds: BigInt(account.maxRounds.toString()),\n delegateCount: account.delegateCount,\n maxDelegates: account.maxDelegates,\n maxSigners: account.maxSigners,\n };\n }\n\n /**\n * Subscribe to a plan. This **debits USDC** from the owner: the plan's\n * `subscriptionPrice` is transferred to the protocol treasury on-chain.\n *\n * Payment is explicit and must be confirmed: pass `maxPriceUsdc` (USDC base\n * units) as the most you agree to pay. The SDK reads the live on-chain price\n * and aborts before sending the transaction if it exceeds that amount, so a\n * price change between display and confirmation can never silently overcharge.\n * The amount actually paid is returned as `pricePaid`.\n *\n * Use {@link getPlan} to display the current price to the user beforehand.\n */\n async subscribe(\n plan: PlanType,\n opts: { maxPriceUsdc: bigint | number | BN; ownerUsdc?: SolanaAddress },\n ): Promise<SubscribeResult> {\n const planId = plan as PlanId;\n const owner = this.wallet;\n const { usdcMint, treasury } = await this.fetchProtocolTokens();\n const price = await this.confirmPlanPrice(planId, opts.maxPriceUsdc, \"subscribe\");\n const ownerUsdc = opts.ownerUsdc ?? getAssociatedTokenAddressSync(usdcMint, owner);\n\n const signature = await this.methods\n .subscribe(planVariant(planId))\n .accountsPartial({\n owner,\n protocolConfig: protocolConfigPda(this.programId),\n plan: planPda(planId, this.programId),\n subscription: subscriptionPda(owner, this.programId),\n ownerUsdc,\n treasury,\n systemProgram: SYSTEM_PROGRAM_ADDRESS,\n tokenProgram: TOKEN_PROGRAM_ADDRESS,\n })\n .rpc();\n return { signature, pricePaid: price };\n }\n\n /**\n * Extend the current subscription for another period. Like {@link subscribe}\n * this **debits USDC** (the plan's `subscriptionPrice`) and requires explicit\n * payment confirmation via `maxPriceUsdc`.\n */\n async extendSubscription(\n opts: { maxPriceUsdc: bigint | number | BN; ownerUsdc?: SolanaAddress },\n ): Promise<SubscribeResult> {\n const owner = this.wallet;\n const subscription = subscriptionPda(owner, this.programId);\n const sub = await this.accounts.subscription.fetch(subscription);\n const planId = planIdFromVariant(sub.planType);\n const { usdcMint, treasury } = await this.fetchProtocolTokens();\n const price = await this.confirmPlanPrice(planId, opts.maxPriceUsdc, \"extendSubscription\");\n const ownerUsdc = opts.ownerUsdc ?? getAssociatedTokenAddressSync(usdcMint, owner);\n\n const signature = await this.methods\n .extendSubscription()\n .accountsPartial({\n owner,\n protocolConfig: protocolConfigPda(this.programId),\n subscription,\n plan: planPda(planId, this.programId),\n ownerUsdc,\n treasury,\n tokenProgram: TOKEN_PROGRAM_ADDRESS,\n })\n .rpc();\n return { signature, pricePaid: price };\n }\n\n /**\n * Read the live on-chain plan price and verify it does not exceed the amount\n * the caller agreed to pay. Returns the price (USDC base units) on success.\n */\n private async confirmPlanPrice(\n planId: PlanId,\n maxPriceUsdc: bigint | number | BN,\n method: string,\n ): Promise<bigint> {\n const max = toUsdcBaseUnits(maxPriceUsdc, \"maxPriceUsdc\");\n const plan = await this.accounts.plan.fetch(planPda(planId, this.programId));\n const price = BigInt(plan.subscriptionPrice.toString());\n if (price > max) {\n throw new Error(\n `${method}: plan price ${price} USDC base units exceeds the confirmed maximum ${max}. ` +\n \"The on-chain price may have changed — re-confirm the current price before paying.\",\n );\n }\n return price;\n }\n\n /**\n * Submit a gateway attestation via `submit_attestation`. The feed account for\n * `(sourceId, signaturesRequired, submitter)` is created on first use.\n *\n * Per the program, the instruction takes one read-only `Node` account per signer bit\n * (ascending bit order, resolved from the registry snapshot the round was signed\n * against) and a {@link CoalitionKey} argument. Unless `opts.coalitionKey` is given the\n * SDK fetches those `Node` accounts and sums their secp256k1 keys client-side\n * (`computeCoalitionKey`); the program only checks the key, so a wrong one fails the\n * transaction and nothing else.\n *\n * `opts.rawValue` is for values longer than 32 bytes: the signed `payload.value` must be\n * `keccak256(rawValue)`; {@link buildSubmitAttestationArgs} validates that before send.\n */\n async submitAttestation(\n attestation: Attestation,\n opts?: SubmitAttestationOptions,\n ): Promise<SubmitResult> {\n const { payload, signature: schnorr } = attestation;\n const sourceId = toFixedBytes(payload.sourceId, 32, \"sourceId\");\n const submitter = this.wallet;\n const registry = await this.fetchRegistryCached(payload.registryVersion);\n const remaining = resolveRemainingAccounts(schnorr.signersBitmap, registry);\n assertSignerCount(remaining.length, payload.signaturesRequired, registry);\n const coalitionKey =\n opts?.coalitionKey ??\n (await this.computeSignerCoalitionKey(remaining, registry, schnorr.signersBitmap));\n const feed = feedPda(sourceId, payload.signaturesRequired, submitter, this.programId);\n const preInstructions = [\n setComputeUnitLimit(opts?.computeUnitLimit ?? estimateSubmitComputeUnits(remaining.length)),\n ];\n const price = await this.resolvePriorityFee(opts?.priorityFeeMicroLamports, feed);\n if (price > 0) preInstructions.push(setComputeUnitPrice(price));\n\n const signature = await this.methods\n .submitAttestation(\n buildSubmitAttestationArgs(attestation, coalitionKey, opts?.rawValue),\n )\n .accountsPartial({\n submitter,\n registry: registryPda(payload.registryVersion, this.programId),\n feed,\n protocolConfig: protocolConfigPda(this.programId),\n systemProgram: SYSTEM_PROGRAM_ADDRESS,\n })\n .remainingAccounts(remaining)\n .preInstructions(preInstructions)\n .rpc();\n return { signature, feed };\n }\n\n /** The registry for `version`, reused for {@link REGISTRY_CACHE_MS}. */\n private fetchRegistryCached(version: number): Promise<RegistryView> {\n const now = Date.now();\n const hit = this.registryCache.get(version);\n if (hit && now - hit.at < REGISTRY_CACHE_MS) return hit.value;\n const value = this.fetchRegistry(version);\n this.registryCache.set(version, { at: now, value });\n value.catch(() => {\n if (this.registryCache.get(version)?.value === value) this.registryCache.delete(version);\n });\n return value;\n }\n\n private async resolvePriorityFee(\n option: number | \"auto\" | undefined,\n feed: SolanaAddress,\n ): Promise<number> {\n if (option === undefined) return 0;\n if (option !== \"auto\") {\n if (!Number.isFinite(option) || option < 0) {\n throw new Error(\"priorityFeeMicroLamports must be a non-negative number or \\\"auto\\\"\");\n }\n return Math.floor(option);\n }\n const now = Date.now();\n if (!this.priorityFeeCache || now - this.priorityFeeCache.at >= PRIORITY_FEE_CACHE_MS) {\n const value = (async () => {\n try {\n const recent = await this.provider.connection.getRecentPrioritizationFees({\n lockedWritableAccounts: [new web3.PublicKey(feed)],\n });\n const fees = recent.map((r) => r.prioritizationFee).sort((a, b) => a - b);\n if (fees.length === 0) return 0;\n const fee = fees[Math.min(fees.length - 1, Math.floor(fees.length * AUTO_FEE_PERCENTILE))]!;\n return Math.min(fee, AUTO_FEE_CAP_MICRO_LAMPORTS);\n } catch {\n return 0; // an unreadable fee market must not stop a submit\n }\n })();\n this.priorityFeeCache = { at: now, value };\n }\n return this.priorityFeeCache.value;\n }\n\n /** Sum of the signers' keys, read from their on-chain `Node` accounts (one batched fetch). */\n private computeSignerCoalitionKey(\n remaining: SolanaAccountMeta[],\n registry: RegistryView,\n signersBitmap: string,\n ): Promise<CoalitionKey> {\n // A node's key never changes, so the sum for one (registry, signer set) is reusable, and\n // each Node account is read at most once however many signer sets include it. The promise is\n // cached, so concurrent submits of one signer set share a single read.\n const setKey = `${registry.version}:${signersBitmap}`;\n const known = this.coalitionCache.get(setKey);\n if (known) return known;\n if (this.coalitionCache.size >= KEY_CACHE_LIMIT) this.coalitionCache.clear();\n const pending = this.sumSignerKeys(remaining, registry);\n this.coalitionCache.set(setKey, pending);\n pending.catch(() => {\n if (this.coalitionCache.get(setKey) === pending) this.coalitionCache.delete(setKey);\n });\n return pending;\n }\n\n private async sumSignerKeys(\n remaining: SolanaAccountMeta[],\n registry: RegistryView,\n ): Promise<CoalitionKey> {\n const addresses = remaining.map((meta) => meta.pubkey);\n const missing = addresses.filter((a) => !this.nodeKeyCache.has(a.toBase58()));\n if (missing.length > 0) {\n const accounts: Array<NodeAccount | null> = await this.accounts.node.fetchMultiple(missing);\n if (this.nodeKeyCache.size + missing.length > KEY_CACHE_LIMIT) this.nodeKeyCache.clear();\n accounts.forEach((account, i) => {\n if (!account) {\n throw new Error(\n `Node account ${missing[i]!.toBase58()} (registry ${registry.version}) does not exist`,\n );\n }\n this.nodeKeyCache.set(missing[i]!.toBase58(), {\n x: nodeCoordinate(account, \"secp256k1PubkeyX\", \"secp256k1_pubkey_x\"),\n y: nodeCoordinate(account, \"secp256k1PubkeyY\", \"secp256k1_pubkey_y\"),\n });\n });\n }\n return computeCoalitionKey(addresses.map((a) => this.nodeKeyCache.get(a.toBase58())!));\n }\n\n /**\n * Read the feed written by `submitter` (default: this wallet) for\n * `(sourceId, signaturesRequired)`, or `null` before its first submit.\n */\n async readFeed(\n sourceId: string,\n signaturesRequired: number,\n submitter: SolanaAddress = this.wallet,\n ): Promise<FeedAccount | null> {\n const feed = feedPda(\n toFixedBytes(sourceId, 32, \"sourceId\"),\n signaturesRequired,\n submitter,\n this.programId,\n );\n return (await this.accounts.feed.fetchNullable(feed)) as FeedAccount | null;\n }\n\n /**\n * Authenticate gateway-provided private API encryption keys against the\n * on-chain Node accounts of the round's registry snapshot (`registry.nodes[index]`).\n */\n async verifyNodeKeysForPrivateApi(args: NodeKeyVerifierArgs): Promise<void> {\n const registry = await this.fetchRegistry(args.registryVersion);\n const selectedNodes = selectedNodesForVerifier(args);\n\n await Promise.all(\n selectedNodes.map(async (node) => {\n const nodeAddress = registry.nodes[node.index];\n if (node.index >= registry.nodeCount || nodeAddress === undefined) {\n throw new Error(\n `Gateway selected node ${node.index} is outside registry ${registry.version} node_count ${registry.nodeCount}`,\n );\n }\n const account = await this.fetchNodeAccount(nodeAddress, node.index);\n const onChainKey = secp256k1PublicKeyFromCoordinates(\n nodeCoordinate(account, \"secp256k1PubkeyX\", \"secp256k1_pubkey_x\"),\n nodeCoordinate(account, \"secp256k1PubkeyY\", \"secp256k1_pubkey_y\"),\n `Node(${nodeAddress}) secp256k1 public key`,\n );\n const gatewayKey = normalizeSecp256k1PublicKeyHex(\n node.signingKey,\n `Gateway selected node ${node.index} signingKey`,\n );\n if (gatewayKey !== onChainKey) {\n throw new Error(\n `Gateway selected node ${node.index} signingKey does not match on-chain Node(${nodeAddress})`,\n );\n }\n }),\n );\n }\n\n private decodePlan(account: {\n planType: Record<string, unknown>;\n subscriptionPrice: { toString(): string };\n maxSigners: number;\n maxDelegates: number;\n maxRounds: { toString(): string };\n privateApiEnabled: boolean;\n isActive: boolean;\n }): PlanInfo {\n return {\n planType: planIdFromVariant(account.planType) as unknown as PlanType,\n subscriptionPrice: BigInt(account.subscriptionPrice.toString()),\n maxSigners: account.maxSigners,\n maxDelegates: account.maxDelegates,\n maxRounds: BigInt(account.maxRounds.toString()),\n privateApiEnabled: account.privateApiEnabled,\n isActive: account.isActive,\n };\n }\n\n private async fetchRegistryState(): Promise<RegistryStateView> {\n const state = await this.accounts.registryState.fetch(registryStatePda(this.programId));\n return {\n currentVersion: state.currentVersion,\n nextVersion: state.nextVersion,\n };\n }\n\n private async fetchRegistry(version: number): Promise<RegistryView> {\n const registry = await this.accounts.registry.fetch(registryPda(version, this.programId));\n const nodeCount: number = registry.nodeCount;\n const nodes = (registry.nodes as Array<Uint8Array | number[]>)\n .slice(0, nodeCount)\n .map((entry) => addressFromBytes(Uint8Array.from(entry)));\n return {\n version: registry.version,\n nodeCount,\n redundancyBuffer: registry.redundancyBuffer,\n nodes,\n graceActiveUntil: BigInt(registry.graceActiveUntil.toString()),\n activeFrom: BigInt(registry.activeFrom.toString()),\n };\n }\n\n private async fetchNodeAccount(\n nodeAddress: Address,\n selectedNodeIndex: number,\n ): Promise<NodeAccount> {\n try {\n return await this.accounts.node.fetch(nodeAddress);\n } catch (err) {\n const detail = err instanceof Error ? err.message : String(err);\n throw new Error(\n `Failed to fetch on-chain Node(${nodeAddress}) for selected node ${selectedNodeIndex}: ${detail}`,\n );\n }\n }\n\n /** `usdc_mint` from `ProtocolConfig`; the treasury is its ATA owned by the config PDA. */\n private async fetchProtocolTokens(): Promise<{ usdcMint: Address; treasury: Address }> {\n const protocolConfig = protocolConfigPda(this.programId);\n const config = await this.accounts.protocolConfig.fetch(protocolConfig);\n const usdcMint = toSolanaAddress(config.usdcMint);\n return {\n usdcMint,\n treasury: getAssociatedTokenAddressSync(usdcMint, protocolConfig),\n };\n }\n}\n\n/**\n * Build the Anchor `SubmitAttestationArgs` for a gateway result: `{ attestation: { payload,\n * signature }, rawValue, coalitionKey }`. `coalitionKey` is the affine sum of the signers'\n * keys (see `computeCoalitionKey`).\n */\nexport function buildSubmitAttestationArgs(\n attestation: Attestation,\n coalitionKey: CoalitionKey,\n rawValue?: Uint8Array | null,\n): SubmitAttestationArgs {\n const { payload, signature } = attestation;\n const value = toFixedBytes(payload.value, 32, \"payload.value\");\n if (rawValue && rawValue.length > 256) {\n throw new RangeError(`rawValue must be at most 256 bytes, got ${rawValue.length}`);\n }\n if (rawValue && bytesToHex(keccak_256(rawValue)) !== bytesToHex(value)) {\n throw new Error(\"rawValue keccak256 digest does not match attestation.payload.value\");\n }\n return {\n attestation: {\n payload: {\n value: Array.from(toFixedBytes(payload.value, 32, \"payload.value\")),\n sourceId: Array.from(toFixedBytes(payload.sourceId, 32, \"sourceId\")),\n registryVersion: payload.registryVersion,\n signaturesRequired: payload.signaturesRequired,\n timestamp: new BN(payload.timestamp),\n },\n signature: {\n aggSigS: Array.from(toFixedBytes(signature.s, 32, \"signature.s\")),\n commitment: Array.from(toFixedBytes(signature.commitmentAddr, 20, \"signature.commitmentAddr\")),\n signersBitmap: Array.from(toFixedBytes(signature.signersBitmap, 32, \"signature.signersBitmap\")),\n },\n },\n rawValue: rawValue ? toAnchorBytes(rawValue) : null,\n coalitionKey: {\n x: Array.from(toFixedBytes(coalitionKey.x, 32, \"coalitionKey.x\")),\n y: Array.from(toFixedBytes(coalitionKey.y, 32, \"coalitionKey.y\")),\n },\n };\n}\n\n/**\n * Mirror the program's signer-count bounds (`verify_attestation_core`):\n * `signaturesRequired <= popcount <= signaturesRequired + redundancyBuffer`.\n */\nfunction assertSignerCount(\n signerCount: number,\n signaturesRequired: number,\n registry: RegistryView,\n): void {\n if (signerCount < signaturesRequired) {\n throw new Error(\n `QuorumBelowThreshold: ${signerCount} signers < signaturesRequired ${signaturesRequired}`,\n );\n }\n if (signerCount > signaturesRequired + registry.redundancyBuffer) {\n throw new Error(\n `CreditedExceedsSelection: ${signerCount} signers > signaturesRequired ${signaturesRequired} + redundancy buffer ${registry.redundancyBuffer} of registry ${registry.version}`,\n );\n }\n}\n\n/** Browser-safe byte array accepted by Anchor's Buffer-oriented `bytes` Borsh layout. */\nfunction toAnchorBytes(bytes: Uint8Array): Uint8Array {\n const out = Uint8Array.from(bytes) as Uint8Array & {\n copy(target: Uint8Array, targetStart?: number): number;\n };\n out.copy = (target, targetStart = 0) => {\n target.set(out, targetStart);\n return out.length;\n };\n return out;\n}\n\n/** Normalize a confirmed USDC amount (base units) to `bigint`, rejecting non-integers. */\nfunction toUsdcBaseUnits(amount: bigint | number | BN, label: string): bigint {\n if (typeof amount === \"bigint\") {\n if (amount < 0n) throw new Error(`${label} must be non-negative, got ${amount}`);\n return amount;\n }\n if (typeof amount === \"number\") {\n if (!Number.isInteger(amount) || amount < 0) {\n throw new Error(`${label} must be a non-negative integer of USDC base units, got ${amount}`);\n }\n return BigInt(amount);\n }\n return BigInt(amount.toString());\n}\n\nfunction nodeCoordinate(\n account: NodeAccount,\n camelCaseField: \"secp256k1PubkeyX\" | \"secp256k1PubkeyY\",\n snakeCaseField: \"secp256k1_pubkey_x\" | \"secp256k1_pubkey_y\",\n): Uint8Array {\n const value = account[camelCaseField] ?? account[snakeCaseField];\n if (!(value instanceof Uint8Array) && !Array.isArray(value)) {\n throw new Error(`Node account is missing ${camelCaseField}`);\n }\n return toFixedBytes(Uint8Array.from(value), 32, `Node.${camelCaseField}`);\n}\n\nfunction selectedNodesForVerifier(args: NodeKeyVerifierArgs): Node[] {\n if (args.nodeIndexes.length === 0) {\n throw new Error(\"Private API node-key verification requires at least one selected index\");\n }\n if (args.nodes.length !== args.nodeIndexes.length) {\n throw new Error(\n `Private API node-key verification expected ${args.nodeIndexes.length} selected nodes, got ${args.nodes.length}`,\n );\n }\n\n const expected = new Set<number>();\n for (const index of args.nodeIndexes) {\n if (!Number.isInteger(index) || index < 0) {\n throw new Error(`Private API selected index must be a non-negative integer: ${index}`);\n }\n if (expected.has(index)) {\n throw new Error(`Private API selected index is duplicated: ${index}`);\n }\n expected.add(index);\n }\n\n const byIndex = new Map<number, Node>();\n for (const node of args.nodes) {\n if (!Number.isInteger(node.index) || node.index < 0) {\n throw new Error(\n `Private API selected node index must be a non-negative integer: ${node.index}`,\n );\n }\n if (!expected.has(node.index)) {\n throw new Error(`Private API selected node ${node.index} was not requested`);\n }\n if (byIndex.has(node.index)) {\n throw new Error(`Private API selected node index is duplicated: ${node.index}`);\n }\n byIndex.set(node.index, node);\n }\n\n return args.nodeIndexes.map((index) => {\n const node = byIndex.get(index);\n if (!node) {\n throw new Error(`Private API selected node is missing for index: ${index}`);\n }\n return node;\n });\n}\n","/**\n * Unified wallet surface: Anchor txs + gateway request-auth signing.\n */\nimport type { Wallet } from \"@anchor-lang/core\";\nimport { ed25519 } from \"@noble/curves/ed25519.js\";\nimport type { Signer } from \"./core/types.js\";\nimport type { SolanaKeypair } from \"./solana/kit.js\";\n\n/** Anchor `Wallet` plus optional gateway auth override. */\nexport type MolphaWallet = Wallet & {\n /**\n * Signs gateway request-auth hashes (`hashRequestAuth`). When omitted, derived from Anchor\n * `Wallet.payer` when the keypair secret is available (Node `Wallet`, etc.).\n */\n signAuthMessage?: Signer;\n};\n\nconst isKeypair = (value: unknown): value is SolanaKeypair =>\n typeof value === \"object\" &&\n value !== null &&\n \"secretKey\" in value &&\n value.secretKey instanceof Uint8Array;\n\n/** ed25519 gateway signer from a Solana keypair's 32-byte seed. */\nexport function signerFromKeypair(keypair: SolanaKeypair): Signer {\n const seed = keypair.secretKey.slice(0, 32);\n return async (message: Uint8Array): Promise<Uint8Array> => ed25519.sign(message, seed);\n}\n\n/** Resolve the gateway auth signer for a Molpha wallet, if available. */\nexport function gatewaySignerFromWallet(wallet: Wallet): Signer | undefined {\n const molpha = wallet as MolphaWallet;\n if (molpha.signAuthMessage) return molpha.signAuthMessage;\n if (\"payer\" in wallet && isKeypair(wallet.payer)) return signerFromKeypair(wallet.payer);\n return undefined;\n}\n","/**\n * Attestation message hash — the digest the node coalition Schnorr-signs and every verifier\n * (Solana program, EVM `VerifierLib.constructMessage`, Starknet) recomputes:\n *\n * message = keccak256(\n * keccak256(\"MOLPHA_MESSAGE_V1\") || value || sourceId || u32be(registryVersion) ||\n * u8(signaturesRequired) || u64be(timestamp) || signersBitmap\n * )\n *\n * `timestamp` is unix MILLISECONDS, assigned by the gateway. The preimage is 141 bytes.\n * Widths follow the Rust, Solidity, Solana, and node encoders.\n */\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { concatBytes, toFixedBytes, u8, u32be, u64be, utf8 } from \"./encoding.js\";\nimport type { Attestation } from \"./types.js\";\n\n/** `keccak256(\"MOLPHA_MESSAGE_V1\")` domain separator. */\nexport const MESSAGE_PREFIX: Uint8Array = keccak_256(utf8(\"MOLPHA_MESSAGE_V1\"));\n\nexport interface AttestationMessageFields {\n /** 32-byte source id (hex or bytes). */\n sourceId: string | Uint8Array;\n registryVersion: number;\n /** Encoded as a single byte (`uint8`); throws `RangeError` outside `0..255`. */\n signaturesRequired: number;\n /** 32-byte big-endian signers bitmap (hex or bytes). */\n signersBitmap: string | Uint8Array;\n /** 32-byte packed value (hex or bytes). */\n value: string | Uint8Array;\n /** Unix milliseconds (u64), assigned by the gateway. */\n timestamp: number | bigint;\n}\n\n/** Compute the attestation message hash (32 bytes). */\nexport function attestationMessageHash(fields: AttestationMessageFields): Uint8Array {\n if (!Number.isInteger(fields.signaturesRequired) || fields.signaturesRequired < 0 || fields.signaturesRequired > 255) {\n throw new RangeError(`signaturesRequired out of u8 range: ${fields.signaturesRequired}`);\n }\n return keccak_256(\n concatBytes(\n MESSAGE_PREFIX,\n toFixedBytes(fields.value, 32, \"value\"),\n toFixedBytes(fields.sourceId, 32, \"sourceId\"),\n u32be(fields.registryVersion),\n u8(fields.signaturesRequired),\n u64be(fields.timestamp),\n toFixedBytes(fields.signersBitmap, 32, \"signersBitmap\"),\n ),\n );\n}\n\n/** Message hash of a completed gateway attestation (`payload.value` is the signed word). */\nexport function attestationMessageHashFromAttestation(attestation: Attestation): Uint8Array {\n const { payload, signature } = attestation;\n return attestationMessageHash({\n sourceId: payload.sourceId,\n registryVersion: payload.registryVersion,\n signaturesRequired: payload.signaturesRequired,\n signersBitmap: signature.signersBitmap,\n value: payload.value,\n timestamp: payload.timestamp,\n });\n}\n","/**\n * `timestamp` is unix MILLISECONDS, assigned by the gateway. Chain clocks (Solana `Clock`,\n * EVM `block.timestamp`), epoch windows and `maxAge`/staleness are measured in SECONDS, so\n * anything that compares the two must go through {@link timestampSeconds}.\n */\n\n/** `timestamp` (unix ms) as whole unix seconds, floored. */\nexport function timestampSeconds(timestamp: number | bigint): number {\n const ms = typeof timestamp === \"bigint\" ? timestamp : BigInt(timestamp);\n if (ms < 0n) throw new RangeError(\"timestamp must not be negative\");\n return Number(ms / 1000n);\n}\n\n/**\n * Age in whole seconds of a timestamp against `nowSeconds`, saturating at 0 so a\n * timestamp slightly ahead of the local clock never goes negative.\n */\nexport function timestampAgeSeconds(\n timestamp: number | bigint,\n nowSeconds: number,\n): number {\n return Math.max(0, nowSeconds - timestampSeconds(timestamp));\n}\n","/**\n * Result codes returned by Molpha's stateless verifier contracts (`verify` on EVM and\n * Starknet). Shared across VMs: the same attestation yields the same code on every chain.\n *\n * Append-only — never renumber. Mirrors `VerifyCodes.sol` in `molpha-core-contracts` and\n * `verify_codes.cairo` in `molpha-starknet`. Two codes belong to mechanisms the verifiers\n * do not implement; they are kept so the numbering can never shift under them.\n */\nexport const VERIFY_CODES = {\n OK: 0,\n /** Reserved. Never returned. */\n FEED_WITNESS: 1,\n /** The payload's `registryVersion` does not exist on this verifier. */\n BAD_REGISTRY_VERSION: 2,\n /** Structurally invalid input, or a `timestamp` in the future when `maxAge != 0`. */\n MALFORMED: 3,\n /** `timestamp` predates the registry version's activation. */\n NOT_YET_ACTIVE: 4,\n /** The registry version was superseded more than the grace window before `timestamp`. */\n VERSION_EXPIRED: 5,\n /** Reserved. Never returned. */\n COMPROMISED_QUORUM: 6,\n /** The signer set is not within the round's derived selection group. */\n BAD_QUORUM: 7,\n /** The signers' aggregate public key is the point at infinity. */\n BAD_AGGREGATE: 8,\n /** The aggregate Schnorr signature does not verify. */\n BAD_SIGNATURE: 9,\n /** Older than the caller's `maxAge`. */\n STALE: 10,\n} as const;\n\nexport type VerifyCodeName = keyof typeof VERIFY_CODES;\nexport type VerifyCode = (typeof VERIFY_CODES)[VerifyCodeName];\n\nconst NAMES_BY_CODE: ReadonlyMap<number, VerifyCodeName> = new Map(\n (Object.entries(VERIFY_CODES) as [VerifyCodeName, VerifyCode][]).map(([name, code]) => [\n code,\n name,\n ]),\n);\n\n/**\n * Name of a verifier result code, or `undefined` for a code this SDK version does not know.\n * Codes are append-only, so an unknown code is a newer verifier, not a malformed response.\n */\nexport function verifyCodeName(code: number): VerifyCodeName | undefined {\n return NAMES_BY_CODE.get(code);\n}\n","/**\n * Molpha EVM verifier ABI: `verify(Attestation, uint64 maxAge) -> (bool, uint8)` plus every\n * read-only registry view on `IVerifier`. Owner-only mutators (`addNode`, `removeNode`,\n * `setRedundancyBuffer`) and `Ownable` plumbing are deliberately left out.\n *\n * Mirrors `IVerifier.sol` in `molpha-core-contracts`. Struct member order is ABI-significant\n * and equals the signed message order, so it is not the flat gateway field order on `Attestation`.\n */\nexport const MOLPHA_VERIFIER_ABI = [\n {\n type: \"function\",\n name: \"verify\",\n stateMutability: \"view\",\n inputs: [\n {\n name: \"attestation\",\n type: \"tuple\",\n internalType: \"struct IVerifier.Attestation\",\n components: [\n {\n name: \"payload\",\n type: \"tuple\",\n internalType: \"struct IVerifier.AttestationPayload\",\n components: [\n { name: \"value\", type: \"bytes32\", internalType: \"bytes32\" },\n { name: \"sourceId\", type: \"bytes32\", internalType: \"bytes32\" },\n { name: \"registryVersion\", type: \"uint32\", internalType: \"uint32\" },\n { name: \"signaturesRequired\", type: \"uint8\", internalType: \"uint8\" },\n { name: \"timestamp\", type: \"uint64\", internalType: \"uint64\" },\n ],\n },\n {\n name: \"signature\",\n type: \"tuple\",\n internalType: \"struct IVerifier.SchnorrSignature\",\n components: [\n { name: \"signature\", type: \"bytes32\", internalType: \"bytes32\" },\n { name: \"commitment\", type: \"address\", internalType: \"address\" },\n { name: \"signersBitmap\", type: \"uint256\", internalType: \"uint256\" },\n ],\n },\n ],\n },\n { name: \"maxAge\", type: \"uint64\", internalType: \"uint64\" },\n ],\n outputs: [\n { name: \"success\", type: \"bool\", internalType: \"bool\" },\n { name: \"code\", type: \"uint8\", internalType: \"uint8\" },\n ],\n },\n {\n type: \"function\",\n name: \"getRegistryVersion\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [{ name: \"registryVersion\", type: \"uint256\", internalType: \"uint256\" }],\n },\n {\n type: \"function\",\n name: \"getTotalNodes\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [{ name: \"totalNodes\", type: \"uint256\", internalType: \"uint256\" }],\n },\n {\n type: \"function\",\n name: \"redundancyBuffer\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [{ name: \"\", type: \"uint256\", internalType: \"uint256\" }],\n },\n {\n type: \"function\",\n name: \"getRegistryRoot\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [{ name: \"root\", type: \"bytes32\", internalType: \"bytes32\" }],\n },\n {\n type: \"function\",\n name: \"getRegistryRoot\",\n stateMutability: \"view\",\n inputs: [{ name: \"registryVersion\", type: \"uint256\", internalType: \"uint256\" }],\n outputs: [{ name: \"root\", type: \"bytes32\", internalType: \"bytes32\" }],\n },\n {\n type: \"function\",\n name: \"getRegistryPointer\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [{ name: \"registryPointer\", type: \"address\", internalType: \"address\" }],\n },\n {\n type: \"function\",\n name: \"getRegistryPointer\",\n stateMutability: \"view\",\n inputs: [{ name: \"registryVersion\", type: \"uint256\", internalType: \"uint256\" }],\n outputs: [{ name: \"registryPointer\", type: \"address\", internalType: \"address\" }],\n },\n {\n type: \"function\",\n name: \"activatesAt\",\n stateMutability: \"view\",\n inputs: [{ name: \"registryVersion\", type: \"uint256\", internalType: \"uint256\" }],\n outputs: [{ name: \"ts\", type: \"uint256\", internalType: \"uint256\" }],\n },\n {\n type: \"function\",\n name: \"retiredAt\",\n stateMutability: \"view\",\n inputs: [{ name: \"registryVersion\", type: \"uint256\", internalType: \"uint256\" }],\n outputs: [{ name: \"ts\", type: \"uint256\", internalType: \"uint256\" }],\n },\n {\n type: \"function\",\n name: \"isLatestVersion\",\n stateMutability: \"view\",\n inputs: [{ name: \"registryVersion\", type: \"uint256\", internalType: \"uint256\" }],\n outputs: [{ name: \"latest\", type: \"bool\", internalType: \"bool\" }],\n },\n {\n type: \"function\",\n name: \"nodeStatus\",\n stateMutability: \"view\",\n inputs: [{ name: \"node\", type: \"address\", internalType: \"address\" }],\n outputs: [{ name: \"\", type: \"uint8\", internalType: \"uint8\" }],\n },\n {\n type: \"function\",\n name: \"isNode\",\n stateMutability: \"view\",\n inputs: [{ name: \"node\", type: \"address\", internalType: \"address\" }],\n outputs: [{ name: \"\", type: \"bool\", internalType: \"bool\" }],\n },\n /** Thrown by the per-version views for a version that was never published. `verify` never reverts. */\n { type: \"error\", name: \"InvalidRegistryVersion\", inputs: [] },\n] as const;\n","/**\n * Deployed Molpha verifier contract address on EVM chains.\n * Deployed via CREATE2 for the same address on every supported chain.\n */\n\n/** Supported EVM testnet identifiers (chain selection only). */\nexport type MolphaEvmNetwork =\n | \"evm-sepolia\"\n | \"arbitrum-sepolia\"\n | \"avalanche-fuji\"\n | \"bsc-testnet\";\n\n/** CREATE2 Molpha verifier address — identical on all supported EVM chains. */\nexport const MOLPHA_VERIFIER_ADDRESS =\n \"0xE1fd792b7E54e0C8F0Cd1c8055E446ff36d233eB\" as const;\n","/**\n * EVM verifier helpers — framework-agnostic builders for\n * `verify(Attestation attestation, uint64 maxAge) returns (bool success, uint8 code)` on\n * deployed Molpha verifier contracts, plus a raw calldata encoder and a result decoder.\n *\n * Nothing here depends on ethers or viem. The struct objects use the Solidity member names\n * and viem's primitive types (`uint64`/`uint256` as `bigint`, `uint32`/`uint8` as `number`),\n * so they pass straight into `readContract` with `MOLPHA_VERIFIER_ABI` or into an ethers\n * `Contract`; `encodeEvmVerifyCalldata` produces the bytes for a raw `eth_call`.\n */\nimport {\n bigIntFromBytesBe,\n bytesToHex,\n concatBytes,\n hexToBytes,\n toFixedBytes,\n u256beFromBigInt,\n} from \"../core/encoding.js\";\nimport type { Attestation } from \"../core/types.js\";\nimport { VERIFY_CODES, verifyCodeName, type VerifyCodeName } from \"../core/verifyCodes.js\";\n\n/**\n * `IVerifier.AttestationPayload` — the signed half of an attestation.\n *\n * Member order is the order of the signed message preimage and of the ABI tuple, so it is\n * load bearing — it is not the flat gateway field order on {@link Attestation}.\n */\nexport interface EvmAttestationPayload {\n /** `bytes32` packed value. */\n value: `0x${string}`;\n /** `bytes32` source id. */\n sourceId: `0x${string}`;\n /** `uint32`. */\n registryVersion: number;\n /** `uint8`. */\n signaturesRequired: number;\n /** `uint64`, unix MILLISECONDS (`timestamp / 1000` is the seconds the verifier's `maxAge` uses). */\n timestamp: bigint;\n}\n\n/** `IVerifier.SchnorrSignature`. */\nexport interface EvmSchnorrSignature {\n /** `bytes32` Schnorr scalar `s`. */\n signature: `0x${string}`;\n /** `address` of the nonce point `R`. */\n commitment: `0x${string}`;\n /** `uint256` signers bitmap; bit `i` is node `i` of the registry version. */\n signersBitmap: bigint;\n}\n\n/** `IVerifier.Attestation`. */\nexport interface EvmAttestation {\n payload: EvmAttestationPayload;\n signature: EvmSchnorrSignature;\n}\n\n/** Positional arguments for `verify(attestation, maxAge)`. */\nexport interface EvmVerifierArgs {\n attestation: EvmAttestation;\n /** Freshness window in seconds (`uint64`). `0n` disables the check. */\n maxAge: bigint;\n}\n\nexport interface BuildEvmVerifierArgsOptions {\n /**\n * Freshness window in seconds. The verifier rejects the attestation with `STALE` when it\n * is older than this, and as `MALFORMED` when it is dated in the future.\n *\n * Required on purpose. `0` disables the check entirely, and that is not a neutral\n * default: the verifier is stateless, so without a window it accepts a correctly signed\n * attestation forever. Pass `0` only when the consuming contract enforces freshness or\n * ordering itself.\n */\n maxAge: number | bigint;\n}\n\n/** Decoded `verify` return value. */\nexport interface EvmVerifyResult {\n success: boolean;\n /** Raw result code — see `VERIFY_CODES`. */\n code: number;\n /** Name of `code`, or `\"UNKNOWN\"` for a code newer than this SDK. */\n reason: VerifyCodeName | \"UNKNOWN\";\n}\n\n/**\n * `bytes4(keccak256(\"verify(((bytes32,bytes32,uint32,uint8,uint64),(bytes32,address,uint256)),uint64)\"))`.\n */\nconst VERIFY_SELECTOR = hexToBytes(\"67e2907b\");\n\nconst U8_MAX = 0xffn;\nconst U32_MAX = 0xffff_ffffn;\nconst U64_MAX = 0xffff_ffff_ffff_ffffn;\nconst U256_MAX = (1n << 256n) - 1n;\n\nfunction strip0x(value: string): string {\n return value.startsWith(\"0x\") || value.startsWith(\"0X\") ? value.slice(2) : value;\n}\n\nfunction stripOuterQuotes(value: string): string {\n const trimmed = value.trim();\n if (\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\")) ||\n (trimmed.startsWith('\"') && trimmed.endsWith('\"'))\n ) {\n return trimmed.slice(1, -1);\n }\n return trimmed;\n}\n\n/**\n * Normalize hex to a fixed-size `0x`-prefixed value.\n * Accepts optional `0x` prefix and surrounding quotes.\n */\nexport function toFixedHex(value: string, bytes: number, label: string): `0x${string}` {\n const clean = strip0x(stripOuterQuotes(value)).toLowerCase();\n if (clean.length !== bytes * 2) {\n throw new RangeError(\n `${label}: expected ${bytes} bytes (${bytes * 2} hex chars), got ${clean.length / 2}`,\n );\n }\n return `0x${clean}`;\n}\n\n/** Convert a 32-byte hex bitmap to a `uint256` bigint (big-endian). */\nexport function signersBitmapToUint256(value: string): bigint {\n const bytes = toFixedBytes(toFixedHex(value, 32, \"signersBitmap\"), 32, \"signersBitmap\");\n return bigIntFromBytesBe(bytes);\n}\n\n/** Decimal string form of the signers bitmap — useful for JSON logging. */\nexport function signersBitmapToDecimal(value: string): string {\n return signersBitmapToUint256(value).toString();\n}\n\n/**\n * Checks an integer fits its Solidity type. Out-of-range calldata does not reach `verify`\n * at all: the ABI decoder reverts on dirty high bits instead of returning a result code.\n * Catching it here keeps that failure in the caller's process.\n */\nfunction assertUint(value: number, max: bigint, label: string): number {\n if (!Number.isSafeInteger(value) || value < 0 || BigInt(value) > max) {\n throw new RangeError(`${label}: expected an integer in 0..${max}, got ${value}`);\n }\n return value;\n}\n\nfunction assertBigUint(value: number | bigint, max: bigint, label: string): bigint {\n if (typeof value === \"number\" && !Number.isSafeInteger(value)) {\n throw new RangeError(`${label}: expected an integer in 0..${max}, got ${value}`);\n }\n const n = BigInt(value);\n if (n < 0n || n > max) {\n throw new RangeError(`${label}: expected an integer in 0..${max}, got ${value}`);\n }\n return n;\n}\n\n/** Left-pad a fixed-width value into one 32-byte ABI word. */\nfunction word(value: string, bytes: number, label: string): Uint8Array {\n const out = new Uint8Array(32);\n out.set(toFixedBytes(toFixedHex(value, bytes, label), bytes, label), 32 - bytes);\n return out;\n}\n\n/**\n * Build the `verify(attestation, maxAge)` arguments from a gateway result.\n *\n * ```ts\n * const { attestation, maxAge } = buildEvmVerifierArgs(result, { maxAge: 300 });\n * await client.readContract({ abi: MOLPHA_VERIFIER_ABI, functionName: \"verify\", args: [attestation, maxAge], ... });\n * ```\n */\nexport function buildEvmVerifierArgs(\n attestation: Attestation,\n options: BuildEvmVerifierArgsOptions,\n): EvmVerifierArgs {\n const { payload: signed, signature: sig } = attestation;\n const payload: EvmAttestationPayload = {\n value: toFixedHex(signed.value, 32, \"payload.value\"),\n sourceId: toFixedHex(signed.sourceId, 32, \"sourceId\"),\n registryVersion: assertUint(signed.registryVersion, U32_MAX, \"registryVersion\"),\n signaturesRequired: assertUint(signed.signaturesRequired, U8_MAX, \"signaturesRequired\"),\n timestamp: assertBigUint(signed.timestamp, U64_MAX, \"timestamp\"),\n };\n\n const signature: EvmSchnorrSignature = {\n signature: toFixedHex(sig.s, 32, \"signature\"),\n commitment: toFixedHex(sig.commitmentAddr, 20, \"commitment\"),\n signersBitmap: signersBitmapToUint256(sig.signersBitmap),\n };\n\n return {\n attestation: { payload, signature },\n maxAge: assertBigUint(options.maxAge, U64_MAX, \"maxAge\"),\n };\n}\n\n/**\n * ABI calldata for `verify(attestation, maxAge)`: the 4-byte selector followed by nine\n * 32-byte words. Both structs are static, so they encode inline with no offsets:\n *\n * `value, sourceId, registryVersion, signaturesRequired, timestamp, signature,\n * commitment, signersBitmap, maxAge`\n *\n * For a raw `eth_call` (`{ to: verifier, data }`).\n */\nexport function encodeEvmVerifyCalldata(args: EvmVerifierArgs): `0x${string}` {\n const { payload, signature } = args.attestation;\n const data = concatBytes(\n VERIFY_SELECTOR,\n word(payload.value, 32, \"value\"),\n word(payload.sourceId, 32, \"sourceId\"),\n u256beFromBigInt(BigInt(assertUint(payload.registryVersion, U32_MAX, \"registryVersion\"))),\n u256beFromBigInt(\n BigInt(assertUint(payload.signaturesRequired, U8_MAX, \"signaturesRequired\")),\n ),\n u256beFromBigInt(assertBigUint(payload.timestamp, U64_MAX, \"timestamp\")),\n word(signature.signature, 32, \"signature\"),\n word(signature.commitment, 20, \"commitment\"),\n u256beFromBigInt(assertBigUint(signature.signersBitmap, U256_MAX, \"signersBitmap\")),\n u256beFromBigInt(assertBigUint(args.maxAge, U64_MAX, \"maxAge\")),\n );\n return `0x${bytesToHex(data)}`;\n}\n\n/**\n * Decode the `(bool, uint8)` returned by `verify`.\n *\n * Accepts the raw 64-byte return data from `eth_call`, or the tuple an ABI-aware client\n * decodes (viem `readContract` returns `[true, 0]`; an ethers `Result` indexes the same way).\n * Throws when the two halves disagree (`success` with a non-zero code, or failure with\n * `OK`), which means the call did not reach a Molpha verifier of this interface.\n */\nexport function parseEvmVerifyResult(\n result:\n | string\n | { readonly 0: boolean | number | bigint; readonly 1: number | bigint },\n): EvmVerifyResult {\n let successWord: bigint;\n let codeWord: bigint;\n\n if (typeof result === \"string\") {\n const clean = strip0x(result.trim());\n if (!/^[0-9a-fA-F]*$/.test(clean) || clean.length !== 128) {\n throw new RangeError(\n `verify result: expected 64 bytes of return data, got ${JSON.stringify(result)}`,\n );\n }\n successWord = BigInt(`0x${clean.slice(0, 64)}`);\n codeWord = BigInt(`0x${clean.slice(64)}`);\n } else {\n const success = result[0];\n const code = result[1];\n successWord = typeof success === \"boolean\" ? (success ? 1n : 0n) : BigInt(success);\n if (typeof code === \"number\" && !Number.isSafeInteger(code)) {\n throw new RangeError(`verify result: code must fit uint8, got ${code}`);\n }\n codeWord = BigInt(code);\n }\n\n if (successWord !== 0n && successWord !== 1n) {\n throw new RangeError(`verify result: success must be 0 or 1, got ${successWord}`);\n }\n if (codeWord < 0n || codeWord > U8_MAX) {\n throw new RangeError(`verify result: code must fit uint8, got ${codeWord}`);\n }\n\n const success = successWord === 1n;\n const code = Number(codeWord);\n if (success !== (code === VERIFY_CODES.OK)) {\n throw new Error(\n `verify result is inconsistent: success=${success} with code ${code}; ` +\n \"the call did not reach a Molpha verifier with this interface\",\n );\n }\n\n return { success, code, reason: verifyCodeName(code) ?? \"UNKNOWN\" };\n}\n","/**\n * Deployed Molpha verifier contract addresses on Starknet testnets.\n */\n\n/** Supported Starknet testnet identifiers. */\nexport type MolphaStarknetNetwork = \"starknet-sepolia\";\n\n/** Deployed verifier address on Starknet Sepolia. */\nexport const MOLPHA_VERIFIER_STARKNET_SEPOLIA =\n \"0x0378df4dbecf8f0c7daa801282932f7011c7a5e5773bab9eaf68f5fa5e7530ef\" as const;\n\n/** Network id -> deployed verifier address. */\nexport const MOLPHA_VERIFIER_STARKNET_ADDRESSES: Record<\n MolphaStarknetNetwork,\n `0x${string}`\n> = {\n \"starknet-sepolia\": MOLPHA_VERIFIER_STARKNET_SEPOLIA,\n};\n\n/** Resolve the deployed verifier address for a supported Starknet network. */\nexport function getMolphaStarknetVerifierAddress(\n network: MolphaStarknetNetwork,\n): `0x${string}` {\n return MOLPHA_VERIFIER_STARKNET_ADDRESSES[network];\n}\n","/**\n * Starknet verifier helpers — framework-agnostic builders for\n * `verify(attestation: Attestation, max_age: u64) -> (bool, u8)` on deployed Molpha\n * verifier contracts, plus a raw calldata encoder and a result decoder.\n *\n * Nothing here depends on `starknet.js`. The struct objects use the Cairo member names, so\n * an ABI-aware client can pass them straight through; `encodeStarknetVerifyCalldata`\n * produces the flat felt array for a raw `starknet_call`.\n */\nimport { bigIntFromBytesBe, toFixedBytes } from \"../core/encoding.js\";\nimport type { Attestation } from \"../core/types.js\";\nimport { VERIFY_CODES, verifyCodeName, type VerifyCodeName } from \"../core/verifyCodes.js\";\n\n/**\n * Starknet calldata shape for `AttestationPayload`.\n *\n * Member order is the order of the signed message preimage and of Cairo `Serde`, so it is\n * load bearing — it is not the flat gateway field order on {@link Attestation}.\n */\nexport interface StarknetAttestationPayload {\n /** 32-byte packed value as `u256`. */\n value: bigint;\n /** 32-byte source id as `u256`. */\n source_id: bigint;\n /** `u32`. */\n registry_version: number;\n /** `u8`. */\n signatures_required: number;\n /** `u64`, unix MILLISECONDS (`/ 1000` is the seconds the verifier's `max_age` uses). */\n timestamp: number;\n}\n\n/** Starknet calldata shape for `SchnorrSignature`. */\nexport interface StarknetSchnorrSignature {\n /** Schnorr scalar `s` as `u256`. */\n signature: bigint;\n /** Ethereum-style 20-byte address of the nonce point `R`, as a `felt252`. */\n commitment: bigint;\n /** Big-endian signers bitmap as `u256`; bit `i` is node `i` of the registry version. */\n signers_bitmap: bigint;\n}\n\n/** Starknet calldata shape for `Attestation`. */\nexport interface StarknetAttestation {\n payload: StarknetAttestationPayload;\n signature: StarknetSchnorrSignature;\n}\n\n/** Positional arguments for `verify(attestation, max_age)`. */\nexport interface StarknetVerifierArgs {\n attestation: StarknetAttestation;\n /** Freshness window in seconds (`u64`). `0` disables the check. */\n maxAge: number;\n}\n\nexport interface BuildStarknetVerifierArgsOptions {\n /**\n * Freshness window in seconds. The verifier rejects the attestation with `STALE` when it\n * is older than this, and as `MALFORMED` when it is dated in the future.\n *\n * Required on purpose. `0` disables the check entirely, and that is not a neutral\n * default: the verifier is stateless, so without a window it accepts a correctly signed\n * attestation forever. Pass `0` only when the consuming contract enforces freshness or\n * ordering itself.\n */\n maxAge: number;\n}\n\n/** Decoded `verify` return value. */\nexport interface StarknetVerifyResult {\n success: boolean;\n /** Raw result code — see `VERIFY_CODES`. */\n code: number;\n /** Name of `code`, or `\"UNKNOWN\"` for a code newer than this SDK. */\n reason: VerifyCodeName | \"UNKNOWN\";\n}\n\n/** A felt as returned by `starknet_call` (hex or decimal string) or by an ABI-aware client. */\nexport type StarknetFeltLike = string | number | bigint | boolean;\n\nconst U8_MAX = 0xffn;\nconst U32_MAX = 0xffff_ffffn;\nconst U64_MAX = 0xffff_ffff_ffff_ffffn;\nconst U128_MASK = (1n << 128n) - 1n;\nconst U256_MAX = (1n << 256n) - 1n;\nconst ADDRESS_MAX = (1n << 160n) - 1n;\n\nfunction strip0x(value: string): string {\n return value.startsWith(\"0x\") || value.startsWith(\"0X\") ? value.slice(2) : value;\n}\n\nfunction stripOuterQuotes(value: string): string {\n const trimmed = value.trim();\n if (\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\")) ||\n (trimmed.startsWith('\"') && trimmed.endsWith('\"'))\n ) {\n return trimmed.slice(1, -1);\n }\n return trimmed;\n}\n\nfunction toStrictHex(value: string, bytes: number, label: string): `0x${string}` {\n const clean = strip0x(stripOuterQuotes(value)).toLowerCase();\n if (clean.length !== bytes * 2) {\n throw new RangeError(\n `${label}: expected ${bytes} bytes (${bytes * 2} hex chars), got ${clean.length / 2}`,\n );\n }\n return `0x${clean}`;\n}\n\nfunction fixedHexToBigInt(value: string, bytes: number, label: string): bigint {\n const hex = toStrictHex(value, bytes, label);\n const raw = toFixedBytes(hex, bytes, label);\n return bigIntFromBytesBe(raw);\n}\n\n/**\n * Checks an integer fits its Cairo type. Out-of-range calldata does not reach `verify` at\n * all: Cairo `Serde` fails while decoding the arguments, and the call reverts instead of\n * returning a result code. Catching it here keeps that failure in the caller's process.\n */\nfunction assertUint(value: number, max: bigint, label: string): number {\n if (!Number.isSafeInteger(value) || value < 0 || BigInt(value) > max) {\n throw new RangeError(`${label}: expected an integer in 0..${max}, got ${value}`);\n }\n return value;\n}\n\nfunction assertBigUint(value: bigint, max: bigint, label: string): bigint {\n if (value < 0n || value > max) {\n throw new RangeError(`${label}: expected an integer in 0..${max}, got ${value}`);\n }\n return value;\n}\n\nfunction toFelt(value: bigint | number): `0x${string}` {\n return `0x${BigInt(value).toString(16)}`;\n}\n\n/** Cairo `u256` serializes as two felts, low limb first. */\nfunction u256Felts(value: bigint, label: string): [`0x${string}`, `0x${string}`] {\n assertBigUint(value, U256_MAX, label);\n return [toFelt(value & U128_MASK), toFelt(value >> 128n)];\n}\n\nfunction feltToBigInt(value: StarknetFeltLike, label: string): bigint {\n if (typeof value === \"boolean\") return value ? 1n : 0n;\n if (typeof value === \"bigint\") return value;\n if (typeof value === \"number\") {\n if (!Number.isSafeInteger(value)) throw new RangeError(`${label}: not an integer: ${value}`);\n return BigInt(value);\n }\n const text = value.trim();\n if (!/^(0x[0-9a-fA-F]+|[0-9]+)$/.test(text)) {\n throw new RangeError(`${label}: not a felt: ${JSON.stringify(value)}`);\n }\n return BigInt(text);\n}\n\n/** Convert a 20-byte commitment address hex to a Starknet felt-compatible bigint. */\nexport function commitmentAddressToStarknetFelt(value: string): bigint {\n return fixedHexToBigInt(value, 20, \"commitment\");\n}\n\n/** Convert a 32-byte bitmap hex to a Starknet/Cairo `u256` bigint. */\nexport function signersBitmapToStarknetUint256(value: string): bigint {\n return fixedHexToBigInt(value, 32, \"signersBitmap\");\n}\n\n/**\n * Build the `verify(attestation, max_age)` arguments from a gateway result.\n *\n * ```ts\n * const { attestation, maxAge } = buildStarknetVerifierArgs(result, { maxAge: 300 });\n * ```\n */\nexport function buildStarknetVerifierArgs(\n attestation: Attestation,\n options: BuildStarknetVerifierArgsOptions,\n): StarknetVerifierArgs {\n const { payload: signed, signature: sig } = attestation;\n const payload: StarknetAttestationPayload = {\n value: fixedHexToBigInt(signed.value, 32, \"payload.value\"),\n source_id: fixedHexToBigInt(signed.sourceId, 32, \"sourceId\"),\n registry_version: assertUint(signed.registryVersion, U32_MAX, \"registryVersion\"),\n signatures_required: assertUint(signed.signaturesRequired, U8_MAX, \"signaturesRequired\"),\n timestamp: assertUint(signed.timestamp, U64_MAX, \"timestamp\"),\n };\n\n const signature: StarknetSchnorrSignature = {\n signature: fixedHexToBigInt(sig.s, 32, \"signature\"),\n commitment: commitmentAddressToStarknetFelt(sig.commitmentAddr),\n signers_bitmap: signersBitmapToStarknetUint256(sig.signersBitmap),\n };\n\n return {\n attestation: { payload, signature },\n maxAge: assertUint(options.maxAge, U64_MAX, \"maxAge\"),\n };\n}\n\n/**\n * Flat felt calldata for `verify(attestation, max_age)`, in Cairo `Serde` order — 13 felts:\n *\n * `value.low, value.high, source_id.low, source_id.high, registry_version,\n * signatures_required, timestamp, signature.low, signature.high, commitment,\n * signers_bitmap.low, signers_bitmap.high, max_age`\n *\n * For a raw `starknet_call` with `entry_point_selector = selector(\"verify\")`.\n */\nexport function encodeStarknetVerifyCalldata(args: StarknetVerifierArgs): `0x${string}`[] {\n const { payload, signature } = args.attestation;\n return [\n ...u256Felts(payload.value, \"value\"),\n ...u256Felts(payload.source_id, \"source_id\"),\n toFelt(assertUint(payload.registry_version, U32_MAX, \"registry_version\")),\n toFelt(assertUint(payload.signatures_required, U8_MAX, \"signatures_required\")),\n toFelt(assertUint(payload.timestamp, U64_MAX, \"timestamp\")),\n ...u256Felts(signature.signature, \"signature\"),\n // An Ethereum-style address, so it must fit 160 bits (the verifier reports a wider one\n // as `MALFORMED`; one past the field prime would not even deserialize).\n toFelt(assertBigUint(signature.commitment, ADDRESS_MAX, \"commitment\")),\n ...u256Felts(signature.signers_bitmap, \"signers_bitmap\"),\n toFelt(assertUint(args.maxAge, U64_MAX, \"maxAge\")),\n ];\n}\n\n/**\n * Decode the `(bool, u8)` returned by `verify`.\n *\n * Accepts the raw two-felt array from `starknet_call` (e.g. `[\"0x1\", \"0x0\"]`) or the tuple\n * an ABI-aware client decodes (e.g. `{ 0: true, 1: 0n }`). Throws when the two halves\n * disagree (`success` with a non-zero code, or failure with `OK`), which means the call did\n * not reach a Molpha verifier of this interface.\n */\nexport function parseStarknetVerifyResult(\n result:\n | readonly StarknetFeltLike[]\n | { readonly 0: StarknetFeltLike; readonly 1: StarknetFeltLike },\n): StarknetVerifyResult {\n if (Array.isArray(result) && result.length !== 2) {\n throw new RangeError(`verify result: expected 2 felts, got ${result.length}`);\n }\n const tuple = result as { readonly 0: StarknetFeltLike; readonly 1: StarknetFeltLike };\n\n const successFelt = feltToBigInt(tuple[0], \"verify result success\");\n if (successFelt !== 0n && successFelt !== 1n) {\n throw new RangeError(`verify result: success must be 0 or 1, got ${successFelt}`);\n }\n const codeFelt = feltToBigInt(tuple[1], \"verify result code\");\n if (codeFelt < 0n || codeFelt > U8_MAX) {\n throw new RangeError(`verify result: code must fit u8, got ${codeFelt}`);\n }\n\n const success = successFelt === 1n;\n const code = Number(codeFelt);\n if (success !== (code === VERIFY_CODES.OK)) {\n throw new Error(\n `verify result is inconsistent: success=${success} with code ${code}; ` +\n \"the call did not reach a Molpha verifier with this interface\",\n );\n }\n\n return { success, code, reason: verifyCodeName(code) ?? \"UNKNOWN\" };\n}\n","/**\n * Drive many feeds through the gateway (and optionally on to Solana) without overloading it.\n *\n * The consumer is the party that pushes updates and pays for them, so the cost and the burst\n * behaviour of a large set of feeds is the consumer's to control. {@link requestMany} does the parts\n * that matter at volume:\n *\n * - the registry inputs are read once and shared by every request, not once per feed;\n * - concurrency is bounded and adapts: it starts from the gateway's advertised capacity, halves\n * when the gateway answers busy (503/429) and creeps back up while requests succeed (AIMD);\n * - request starts are spread over a window by a hash of each feed's source id, so feeds that fall\n * due together do not arrive together, and the same feed always lands at the same offset;\n * - submitting to Solana runs on its own, smaller limiter, pipelined behind the requests;\n * - a failed submit never discards the signed attestation the gateway returned (and quota paid for).\n *\n * Each request still has the single-request retry policy (backoff with jitter, `Retry-After`, a stale\n * registry refreshed once; see {@link retryDelayMs}).\n */\nimport type { Address } from \"@solana/kit\";\nimport type { APIConfig, Attestation } from \"./core/types.js\";\nimport { deriveSourceIdString } from \"./core/apiconfig.js\";\nimport { GatewayError, type RequestSignedDataOptions } from \"./gateway/index.js\";\nimport type { MolphaSDK } from \"./index.js\";\n\n/** One feed to update. */\nexport interface BulkFeed {\n apiConfig: APIConfig;\n signaturesRequired: number;\n /** Echoed in the result; for the caller's own bookkeeping. */\n label?: string;\n}\n\nexport interface BulkOptions {\n /**\n * Most gateway requests in flight. The limit adapts below this ceiling. Default: half the gateway's\n * advertised `maxInflightRounds` (at most 64), or 32 when it advertises none.\n */\n concurrency?: number;\n /**\n * Spread request starts over this many ms by a hash of the feed's source id. Feeds that are due on\n * the same tick otherwise arrive together and queue at the gateway. Default 0 (no spreading).\n */\n spreadMs?: number;\n /** Submit each attestation to Solana after its round. Default true. */\n submit?: boolean;\n /** Most Solana submits in flight. Default 8. */\n submitConcurrency?: number;\n /**\n * Options applied to every request (subscription owner, signer, `maxRetries`, `timeoutMs`, ...).\n * `apiConfig`, `signaturesRequired` and `context` are set per feed.\n */\n request?: Omit<RequestSignedDataOptions, \"apiConfig\" | \"signaturesRequired\" | \"context\">;\n /** Called as each feed finishes, in completion order. */\n onResult?: (result: BulkResult) => void;\n /** Stops starting new feeds; those already started finish. */\n signal?: AbortSignal;\n}\n\nexport interface BulkResult {\n /** Position in the input array. */\n index: number;\n label?: string;\n /** The gateway round succeeded (submitting is reported separately in `submitError`). */\n ok: boolean;\n /** The signed attestation, whenever the round succeeded, including when the submit failed. */\n attestation?: Attestation;\n /** Transaction signature and feed account, when submitted. */\n signature?: string;\n feedAddress?: Address;\n /** Why the round failed. */\n error?: unknown;\n /** Why submitting failed after a successful round; `attestation` is still valid. */\n submitError?: unknown;\n}\n\nconst DEFAULT_CONCURRENCY = 32;\nconst MAX_DEFAULT_CONCURRENCY = 64;\nconst DEFAULT_SUBMIT_CONCURRENCY = 8;\n/** Shortest interval between two halvings, so a burst of busy answers cuts the limit once, not to 1. */\nconst BACKOFF_COOLDOWN_MS = 1_000;\n\n/**\n * An adaptive concurrency limit: additive increase on success, multiplicative decrease on a busy\n * answer. Waiters are served in arrival order.\n */\nexport class AdaptiveLimiter {\n private limit_: number;\n private inFlight = 0;\n private successes = 0;\n private lastCut = -Infinity;\n private readonly waiters: Array<() => void> = [];\n\n constructor(\n initial: number,\n private readonly max: number,\n private readonly now: () => number = Date.now,\n ) {\n this.max = Math.max(1, max);\n this.limit_ = Math.min(Math.max(1, Math.floor(initial)), this.max);\n }\n\n get limit(): number {\n return this.limit_;\n }\n\n async acquire(): Promise<void> {\n if (this.inFlight < this.limit_) {\n this.inFlight++;\n return;\n }\n await new Promise<void>((resolve) => this.waiters.push(resolve));\n }\n\n /** Release a slot. `busy` reports that the gateway answered at capacity. */\n release(outcome: \"ok\" | \"busy\" | \"other\"): void {\n this.inFlight--;\n if (outcome === \"busy\") {\n this.successes = 0;\n const t = this.now();\n if (t - this.lastCut >= BACKOFF_COOLDOWN_MS) {\n this.limit_ = Math.max(1, Math.floor(this.limit_ / 2));\n this.lastCut = t;\n }\n } else if (outcome === \"ok\") {\n // One more slot after a full window of successes at the current limit.\n if (++this.successes >= this.limit_ && this.limit_ < this.max) {\n this.limit_++;\n this.successes = 0;\n }\n }\n while (this.waiters.length > 0 && this.inFlight < this.limit_) {\n this.inFlight++;\n this.waiters.shift()!();\n }\n }\n}\n\n/** Deterministic start offset for a feed: the same source id always lands at the same point. */\nexport function spreadOffsetMs(sourceIdHex: string, spreadMs: number): number {\n if (spreadMs <= 0) return 0;\n return Number.parseInt(sourceIdHex.slice(0, 8), 16) % spreadMs;\n}\n\nconst isBusy = (err: unknown): boolean =>\n err instanceof GatewayError && (err.status === 503 || err.status === 429);\n\n/**\n * Update many feeds. Results are returned in input order; a feed that fails does not stop the others.\n */\nexport async function requestMany(\n sdk: MolphaSDK,\n feeds: BulkFeed[],\n opts: BulkOptions = {},\n): Promise<BulkResult[]> {\n const results = new Array<BulkResult>(feeds.length);\n if (feeds.length === 0) return results;\n\n // What the gateway advertises is advisory; an old gateway without it just gets the default.\n const advertised = await sdk.gateway\n .fetchGatewayInfo(sdkFirstEndpoint(sdk))\n .catch(() => undefined);\n const ceiling =\n opts.concurrency ??\n (advertised?.maxInflightRounds\n ? Math.min(Math.max(1, Math.floor(advertised.maxInflightRounds / 2)), MAX_DEFAULT_CONCURRENCY)\n : DEFAULT_CONCURRENCY);\n const requests = new AdaptiveLimiter(ceiling, ceiling);\n const submits = new AdaptiveLimiter(\n opts.submitConcurrency ?? DEFAULT_SUBMIT_CONCURRENCY,\n opts.submitConcurrency ?? DEFAULT_SUBMIT_CONCURRENCY,\n );\n // One read of the registry inputs for the whole batch.\n const context = await sdk.gateway.prepareContext();\n const submit = opts.submit ?? true;\n const started = Date.now();\n\n const one = async (index: number): Promise<void> => {\n const feed = feeds[index]!;\n const result: BulkResult = { index, ok: false, ...(feed.label !== undefined ? { label: feed.label } : {}) };\n results[index] = result;\n try {\n const wait = spreadOffsetMs(deriveSourceIdString(feed.apiConfig), opts.spreadMs ?? 0) - (Date.now() - started);\n if (wait > 0) await new Promise((resolve) => setTimeout(resolve, wait));\n if (opts.signal?.aborted) {\n result.error = new Error(\"aborted before the feed was started\");\n return;\n }\n\n await requests.acquire();\n let outcome: \"ok\" | \"busy\" | \"other\" = \"other\";\n try {\n result.attestation = await sdk.gateway.requestSignedData({\n ...opts.request,\n apiConfig: feed.apiConfig,\n signaturesRequired: feed.signaturesRequired,\n context,\n });\n result.ok = true;\n outcome = \"ok\";\n } catch (err) {\n result.error = err;\n outcome = isBusy(err) ? \"busy\" : \"other\";\n } finally {\n requests.release(outcome);\n }\n\n if (result.ok && submit && result.attestation) {\n await submits.acquire();\n try {\n const sent = await sdk.solana.submitAttestation(result.attestation);\n result.signature = sent.signature;\n result.feedAddress = sent.feed;\n } catch (err) {\n result.submitError = err; // the round succeeded: keep the attestation\n } finally {\n submits.release(\"other\");\n }\n }\n } finally {\n opts.onResult?.(result);\n }\n };\n\n await Promise.all(feeds.map((_, index) => one(index)));\n return results;\n}\n\n/** The first configured gateway endpoint (the one `fetchGatewayInfo` should ask). */\nfunction sdkFirstEndpoint(sdk: MolphaSDK): string {\n return sdk.gateway.endpointUrls()[0]!;\n}\n","/**\n * `@molpha/sdk` — Consumer SDK public surface.\n *\n * The `MolphaSDK` facade wires the gateway and Solana clients together; consumers\n * who only read or only run gateway rounds can use `sdk.gateway` / `sdk.solana`\n * directly (or import `MolphaGateway` / `MolphaSolanaClient` standalone).\n */\nimport { address, type Address } from \"@solana/kit\";\nimport type { AnchorProvider, Idl } from \"@anchor-lang/core\";\nimport {\n type GatewayEndpointInput,\n type RequestSignedDataOptions,\n MolphaGateway,\n} from \"./gateway/index.js\";\nimport { MolphaSolanaClient } from \"./solana/client.js\";\nimport type { Attestation } from \"./core/types.js\";\nimport { MOLPHA_IDL, MOLPHA_PROGRAM_ADDRESS } from \"../idl/index.js\";\nimport { gatewaySignerFromWallet, type MolphaWallet } from \"./wallet.js\";\nimport type { SolanaConnection } from \"./solana/kit.js\";\ntype Commitment = NonNullable<ConstructorParameters<typeof AnchorProvider>[2]>[\"commitment\"];\n\n// Public re-exports.\nexport * from \"./core/index.js\";\nexport * from \"./gateway/index.js\";\nexport * from \"./evm/index.js\";\nexport * from \"./starknet/index.js\";\nexport * from \"./solana/index.js\";\nexport * from \"./bulk.js\";\nexport { MOLPHA_IDL, MOLPHA_PROGRAM_ADDRESS } from \"../idl/index.js\";\nexport { gatewaySignerFromWallet, signerFromKeypair, type MolphaWallet } from \"./wallet.js\";\n\nexport interface MolphaSDKOptions {\n /**\n * Defaults to `DEFAULT_GATEWAY_ENDPOINT`. Pass multiple entries for failover. Each\n * entry is a URL or `{ url, gatewayAuthority }`; when the authority is omitted it is\n * discovered from the gateway's `GET /v1/info`.\n */\n endpoints?: GatewayEndpointInput | GatewayEndpointInput[];\n connection: SolanaConnection;\n /** On-chain txs + gateway auth (see `MolphaWallet`). */\n wallet: MolphaWallet;\n /** Defaults to the vendored IDL's program address. Bound into gateway request auth. */\n programId?: Address | string;\n /** Defaults to `MOLPHA_IDL`. Override when pinning a different deployment. */\n idl?: Idl;\n commitment?: Commitment;\n}\n\n/**\n * Thrown by {@link MolphaSDK.requestAndSubmit} when the gateway round succeeded but submitting the\n * attestation to Solana failed. The round consumed subscription quota and the signed attestation is\n * valid, so it is carried here: submit `error.result` again (it stays valid until its freshness\n * window passes, and re-submitting it is safe) instead of requesting, and paying for, a new round.\n */\nexport class SubmitFailedError extends Error {\n constructor(\n /** The signed attestation the gateway returned. */\n readonly result: Attestation,\n override readonly cause: unknown,\n ) {\n super(\n `Gateway round succeeded but submitting the attestation failed: ${\n cause instanceof Error ? cause.message : String(cause)\n }`,\n );\n this.name = \"SubmitFailedError\";\n }\n}\n\nexport class MolphaSDK {\n readonly gateway: MolphaGateway;\n readonly solana: MolphaSolanaClient;\n\n constructor(opts: MolphaSDKOptions) {\n const programId = address(String(opts.programId ?? MOLPHA_PROGRAM_ADDRESS));\n this.solana = MolphaSolanaClient.create({\n connection: opts.connection,\n wallet: opts.wallet,\n programId,\n idl: opts.idl ?? MOLPHA_IDL,\n ...(opts.commitment ? { commitment: opts.commitment } : {}),\n });\n this.gateway = new MolphaGateway(\n opts.endpoints,\n () => this.solana.getRegistrySelectionConfig(),\n gatewaySignerFromWallet(opts.wallet),\n {\n defaultSubscriptionOwner: opts.wallet.publicKey.toBase58(),\n programId,\n verifyNodeKeys: (args) => this.solana.verifyNodeKeysForPrivateApi(args),\n },\n );\n }\n\n /**\n * Request a threshold-signed data update from the gateway (against the current\n * on-chain registry version) and submit it via `submit_attestation`.\n */\n async requestAndSubmit(\n opts: RequestSignedDataOptions,\n ): Promise<{ result: Attestation; signature: string; feed: Address }> {\n const result = await this.gateway.requestSignedData(opts);\n try {\n const { signature, feed } = await this.solana.submitAttestation(result);\n return { result, signature, feed };\n } catch (cause) {\n // The round is already paid for and signed: do not lose it with the failed submit.\n throw new SubmitFailedError(result, cause);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/aggregation.ts","../src/core/encoding.ts","../src/core/apiconfig.ts","../src/deployment.generated.ts","../src/core/int256.ts","../src/core/nodeKeys.ts","../src/core/selection.ts","../src/gateway/auth.ts","../src/gateway/encryption.ts","../src/evm/eip712.ts","../src/gateway/x402.ts","../src/gateway/identity.ts","../src/gateway/index.ts","../src/core/coalition.ts","../src/solana/accounts.ts","../src/solana/pdas.ts","../idl/molpha.json","../idl/index.ts","../src/solana/plans.ts","../src/solana/client.ts","../src/wallet.ts","../src/core/message.ts","../src/core/timestamp.ts","../src/core/verifyCodes.ts","../src/evm/abi.ts","../src/evm/helpers.ts","../src/starknet/constants.ts","../src/starknet/helpers.ts","../src/bulk.ts","../src/index.ts"],"names":["nobleUtf8ToBytes","nobleConcatBytes","nobleBytesToHex","nobleHexToBytes","keccak_256","secp256k1","address","randomBytes","pda","registry","SEED_GATEWAY","PlanType","U32_MAX","assertUint","word","success","code","U8_MAX","U64_MAX","U256_MAX","strip0x","stripOuterQuotes","assertBigUint"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Aggregation (tolerance mode) config validation and canonicalization.\n *\n * `aggregation` is part of the API config and therefore part of `sourceId`. It is OMITTED\n * for exact mode: a config carrying `mode: \"exact\"` would hash differently from the same\n * config without the key, so it is rejected rather than silently normalized. The node\n * (`new/tolerance.Validate`) is the reference.\n */\nimport type { AggregationConfig } from \"./types.js\";\n\n/** Tolerance mode needs at least this many signers (`signaturesRequired >= 3`). */\nexport const MIN_TOLERANCE_SIGNATURES = 3;\n\nconst MAX_U32 = 0xffffffff;\nconst MAX_U8 = 0xff;\n\n/** Thrown for an unusable `aggregation` config. */\nexport class AggregationConfigError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"AggregationConfigError\";\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Validate an `aggregation` config and return a fresh object with the canonical key order\n * (`mode`, `rule`, `maxDeviationBps`, `maxAgeMs`, `numeric{type, decimals}`) — the order\n * the source hash and the node's JSON blob use.\n *\n * The result is built field by field: unknown or reordered keys on the input can never\n * reach the hash or the wire. `undefined` / `null` mean exact mode and return `undefined`.\n *\n * @throws {AggregationConfigError} on `mode: \"exact\"`, an unsupported mode / rule / numeric\n * type, or an out-of-range number.\n */\nexport function canonicalizeAggregation(\n aggregation: AggregationConfig | null | undefined,\n): AggregationConfig | undefined {\n if (aggregation === undefined || aggregation === null) return undefined;\n if (!isRecord(aggregation)) {\n throw new AggregationConfigError(\"aggregation must be an object\");\n }\n\n const { mode, rule, maxDeviationBps, maxAgeMs, numeric } = aggregation as unknown as Record<\n string,\n unknown\n >;\n\n if (mode === \"exact\") {\n throw new AggregationConfigError(\n 'aggregation.mode \"exact\" is not accepted: omit `aggregation` for exact mode (adding it would change the sourceId)',\n );\n }\n if (mode !== \"tolerance\") {\n throw new AggregationConfigError(\n `unsupported aggregation.mode ${JSON.stringify(mode)}: only \"tolerance\" is supported`,\n );\n }\n if (rule !== \"median\") {\n throw new AggregationConfigError(\n `unsupported aggregation.rule ${JSON.stringify(rule)}: only \"median\" is supported`,\n );\n }\n if (\n typeof maxDeviationBps !== \"number\" ||\n !Number.isInteger(maxDeviationBps) ||\n maxDeviationBps < 0 ||\n maxDeviationBps > MAX_U32\n ) {\n throw new AggregationConfigError(\n `aggregation.maxDeviationBps must be an integer in 0..${MAX_U32}, got ${String(maxDeviationBps)}`,\n );\n }\n if (typeof maxAgeMs !== \"number\" || !Number.isSafeInteger(maxAgeMs) || maxAgeMs <= 0) {\n throw new AggregationConfigError(\n `aggregation.maxAgeMs must be a positive safe integer (milliseconds), got ${String(maxAgeMs)}`,\n );\n }\n if (!isRecord(numeric)) {\n throw new AggregationConfigError(\"aggregation.numeric must be an object\");\n }\n if (numeric.type !== \"int256\") {\n throw new AggregationConfigError(\n `unsupported aggregation.numeric.type ${JSON.stringify(numeric.type)}: only \"int256\" is supported`,\n );\n }\n const decimals = numeric.decimals;\n if (typeof decimals !== \"number\" || !Number.isInteger(decimals) || decimals < 0 || decimals > MAX_U8) {\n throw new AggregationConfigError(\n `aggregation.numeric.decimals must be an integer in 0..${MAX_U8}, got ${String(decimals)}`,\n );\n }\n\n return {\n mode: \"tolerance\",\n rule: \"median\",\n maxDeviationBps,\n maxAgeMs,\n numeric: { type: \"int256\", decimals },\n };\n}\n\n/**\n * Tolerance mode needs `signaturesRequired >= 3`; the node rejects anything lower.\n * A no-op for exact mode (`aggregation` omitted).\n *\n * @throws {AggregationConfigError}\n */\nexport function assertAggregationQuorum(\n aggregation: AggregationConfig | null | undefined,\n signaturesRequired: number,\n): void {\n if (aggregation === undefined || aggregation === null) return;\n if (signaturesRequired < MIN_TOLERANCE_SIGNATURES) {\n throw new AggregationConfigError(\n `tolerance aggregation requires signaturesRequired >= ${MIN_TOLERANCE_SIGNATURES}, got ${signaturesRequired}`,\n );\n }\n}\n","/**\n * Byte encoding primitives. Isomorphic — no `Buffer`, no `fs`. All byte work is\n * `Uint8Array` + `@noble/hashes/utils.js`. The canonical selection-bitmap and value\n * representation is a 32-byte big-endian word; `bigint` is used only for internal\n * sampling/packing math and is never exposed on the wire.\n */\nimport {\n bytesToHex as nobleBytesToHex,\n hexToBytes as nobleHexToBytes,\n utf8ToBytes as nobleUtf8ToBytes,\n concatBytes as nobleConcatBytes,\n} from \"@noble/hashes/utils.js\";\n\nexport const utf8 = (s: string): Uint8Array => nobleUtf8ToBytes(s);\nexport const concatBytes = (...arrays: Uint8Array[]): Uint8Array =>\n nobleConcatBytes(...arrays);\n\n/** Lower-case hex, no `0x` prefix. */\nexport const bytesToHex = (bytes: Uint8Array): string => nobleBytesToHex(bytes);\n\n/** Accepts an optional leading `0x`; case-insensitive. */\nexport function hexToBytes(hex: string): Uint8Array {\n const clean = hex.startsWith(\"0x\") || hex.startsWith(\"0X\") ? hex.slice(2) : hex;\n return nobleHexToBytes(clean);\n}\n\n/** Hex with a leading `0x`. */\nexport const bytesToHex0x = (bytes: Uint8Array): string => \"0x\" + bytesToHex(bytes);\n\n/** u8 → 1 byte. Range-checked: `Uint8Array.of` would silently wrap an out-of-range value. */\nexport function u8(value: number): Uint8Array {\n assertUint(value, 0xff, \"u8\");\n return Uint8Array.of(value);\n}\n\n/** Big-endian u32 → 4 bytes. */\nexport function u32be(value: number): Uint8Array {\n assertUint(value, 0xffffffff, \"u32\");\n const out = new Uint8Array(4);\n new DataView(out.buffer).setUint32(0, value, false);\n return out;\n}\n\n/** Little-endian u32 → 4 bytes (used for PDA seeds like the registry index). */\nexport function u32le(value: number): Uint8Array {\n assertUint(value, 0xffffffff, \"u32\");\n const out = new Uint8Array(4);\n new DataView(out.buffer).setUint32(0, value, true);\n return out;\n}\n\n/** Big-endian u64 → 8 bytes. Accepts `number` or `bigint`. */\nexport function u64be(value: number | bigint): Uint8Array {\n const v = typeof value === \"bigint\" ? value : BigInt(value);\n if (v < 0n || v > 0xffffffffffffffffn) {\n throw new RangeError(`u64 out of range: ${v}`);\n }\n const out = new Uint8Array(8);\n new DataView(out.buffer).setBigUint64(0, v, false);\n return out;\n}\n\n/** Little-endian u64 → 8 bytes. Accepts `number` or `bigint`. */\nexport function u64le(value: number | bigint): Uint8Array {\n const v = typeof value === \"bigint\" ? value : BigInt(value);\n if (v < 0n || v > 0xffffffffffffffffn) {\n throw new RangeError(`u64 out of range: ${v}`);\n }\n const out = new Uint8Array(8);\n new DataView(out.buffer).setBigUint64(0, v, true);\n return out;\n}\n\n/** Big-endian 32-byte word ← bigint (0 ≤ v < 2^256). */\nexport function u256beFromBigInt(value: bigint): Uint8Array {\n if (value < 0n) throw new RangeError(\"u256 cannot be negative\");\n const out = new Uint8Array(32);\n let v = value;\n for (let i = 31; i >= 0 && v > 0n; i--) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n if (v > 0n) throw new RangeError(\"u256 overflow (>= 2^256)\");\n return out;\n}\n\n/** bigint ← big-endian byte word (any length). */\nexport function bigIntFromBytesBe(bytes: Uint8Array): bigint {\n let v = 0n;\n for (const b of bytes) v = (v << 8n) | BigInt(b);\n return v;\n}\n\n/** Throw unless `bytes.length === len`. Returns the input for chaining. */\nexport function ensureLength(bytes: Uint8Array, len: number, label: string): Uint8Array {\n if (bytes.length !== len) {\n throw new RangeError(`${label}: expected ${len} bytes, got ${bytes.length}`);\n }\n return bytes;\n}\n\n/** Coerce hex string or bytes to a fixed-length byte array. */\nexport function toFixedBytes(\n value: string | Uint8Array,\n len: number,\n label: string,\n): Uint8Array {\n const bytes = typeof value === \"string\" ? hexToBytes(value) : value;\n return ensureLength(bytes, len, label);\n}\n\nfunction assertUint(value: number, max: number, label: string): void {\n if (!Number.isInteger(value) || value < 0 || value > max) {\n throw new RangeError(`${label} out of range: ${value}`);\n }\n}\n\n/**\n * Standard base64 (padded, no line breaks). Isomorphic: `btoa` is available in\n * Node 20+ and every browser, so no `Buffer` is pulled into browser bundles.\n */\nexport function bytesToBase64(bytes: Uint8Array): string {\n let binary = \"\";\n // Chunked to keep a large payload off the argument stack.\n for (let i = 0; i < bytes.length; i += 0x8000) {\n binary += String.fromCharCode(...bytes.subarray(i, i + 0x8000));\n }\n return btoa(binary);\n}\n\n/** Accepts padded or unpadded standard base64. */\nexport function base64ToBytes(value: string): Uint8Array {\n const padded = value.length % 4 === 0 ? value : value + \"=\".repeat(4 - (value.length % 4));\n const binary = atob(padded);\n const out = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) out[i] = binary.charCodeAt(i);\n return out;\n}\n","/**\n * API config canonicalization + source-id derivation. Must stay byte-identical with\n * gateway/node verification: `sourceId = keccak256(JSON.stringify(canonical apiConfig))`.\n */\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { canonicalizeAggregation } from \"./aggregation.js\";\nimport { bytesToHex, utf8 } from \"./encoding.js\";\nimport type { APIConfig } from \"./types.js\";\n\n/** Lexicographic UTF-16 code-unit order — locale-independent, matches gateway/node. */\nfunction compareCodeUnits(a: string, b: string): number {\n const len = Math.min(a.length, b.length);\n for (let i = 0; i < len; i++) {\n const diff = a.charCodeAt(i) - b.charCodeAt(i);\n if (diff !== 0) return diff;\n }\n return a.length - b.length;\n}\n\nfunction sortHeaders(headers: Record<string, string>): Record<string, string> {\n return Object.fromEntries(Object.entries(headers).sort(([a], [b]) => compareCodeUnits(a, b)));\n}\n\n/**\n * Gateway wire shape — defaults applied before hash / encryption.\n *\n * Keys are emitted in the fixed order `url`, `method`, `headers`, `responseParser`,\n * `valueTransform`, `aggregation`; `aggregation` is present only for tolerance mode and its\n * nested keys are rebuilt in canonical order (`canonicalizeAggregation`), so no extra or\n * reordered input key can reach the hash. A config without `aggregation` hashes exactly as\n * before.\n *\n * @throws {AggregationConfigError} if `aggregation` is invalid (including `mode: \"exact\"`).\n */\nexport function canonicalizeAPIConfig(apiConfig: APIConfig): APIConfig {\n const headers = apiConfig.headers ?? {};\n const aggregation = canonicalizeAggregation(apiConfig.aggregation);\n return {\n url: apiConfig.url,\n method: apiConfig.method ?? \"GET\",\n headers: Object.keys(headers).length === 0 ? headers : sortHeaders(headers),\n responseParser: apiConfig.responseParser,\n valueTransform: apiConfig.valueTransform ?? \"\",\n ...(aggregation ? { aggregation } : {}),\n };\n}\n\n/**\n * `sourceId = keccak256(JSON.stringify(canonical apiConfig))` — the 32-byte identity of a\n * data source. Hash the same config (including `{{secret.*}}` placeholders) you send to\n * `MolphaGateway.requestSignedData`; the gateway and every verifier recompute it from\n * `apiConfig`.\n */\nexport function deriveSourceId(apiConfig: APIConfig): Uint8Array {\n return keccak_256(utf8(JSON.stringify(canonicalizeAPIConfig(apiConfig))));\n}\n\n/** Hex-encoded {@link deriveSourceId} (64 lowercase hex chars, no `0x`). */\nexport function deriveSourceIdString(apiConfig: APIConfig): string {\n return bytesToHex(deriveSourceId(apiConfig));\n}\n","/**\n * GENERATED by `scripts/select-profile.ts` — do not edit.\n * Profile: dev\n * EVM/Starknet verifier addresses are unset until the Attestation-interface redeploy. Codegen falls back to stable addresses and sets MOLPHA_DEV_VERIFIERS_PROVISIONAL.\n */\nexport const MOLPHA_SDK_PROFILE = \"dev\" as const;\nexport const DEFAULT_GATEWAY_ENDPOINT = \"https://dev-gateway.molpha.io/\";\nexport const MOLPHA_PROGRAM_ID = \"chivcFQgxzwkpLvW41PV431HQ4dYpaW3povQH3AdpQt\";\nexport const MOLPHA_VERIFIER_ADDRESS = \"0xE1fd792b7E54e0C8F0Cd1c8055E446ff36d233eB\" as const;\nexport const MOLPHA_VERIFIER_STARKNET_SEPOLIA = \"0x0378df4dbecf8f0c7daa801282932f7011c7a5e5773bab9eaf68f5fa5e7530ef\" as const;\n/** True when the active profile has unset EVM/Starknet addresses (dev falls back to stable). */\nexport const MOLPHA_DEV_VERIFIERS_PROVISIONAL = true as const;\n","/**\n * Signed `int256` helpers for tolerance-mode values.\n *\n * In tolerance mode the signed `value` is a two's-complement `bytes32` integer: the source's\n * decimal string scaled by `10^decimals`, rounded half to even, bounds-checked against\n * `int256`. Mirrors `new/tolerance` (`Encode` / `Decode` / `Format`) in molpha-node-client\n * byte for byte.\n */\nimport { bigIntFromBytesBe, hexToBytes, u256beFromBigInt } from \"./encoding.js\";\n\n/** `2^255 - 1`. */\nexport const INT256_MAX: bigint = (1n << 255n) - 1n;\n/** `-2^255`. */\nexport const INT256_MIN: bigint = -(1n << 255n);\n\nconst TWO_256 = 1n << 256n;\n/** Input digit cap, matching the node, before any big-integer allocation. */\nconst MAX_DECIMAL_DIGITS = 10_000;\n\nfunction assertDecimals(decimals: number): void {\n if (!Number.isInteger(decimals) || decimals < 0 || decimals > 255) {\n throw new RangeError(`decimals must be an integer in 0..255, got ${decimals}`);\n }\n}\n\nfunction toBytes32(value: Uint8Array | string, label: string): Uint8Array {\n const bytes = typeof value === \"string\" ? hexToBytes(value) : value;\n if (bytes.length !== 32) {\n throw new RangeError(`${label}: expected 32 bytes, got ${bytes.length}`);\n }\n return bytes;\n}\n\n/** Two's-complement `bytes32` (big-endian) of a signed integer in `[-2^255, 2^255)`. */\nexport function encodeInt256(value: bigint): Uint8Array {\n if (value > INT256_MAX || value < INT256_MIN) {\n throw new RangeError(\"int256 overflow\");\n }\n return u256beFromBigInt(value < 0n ? value + TWO_256 : value);\n}\n\n/** Signed integer of a two's-complement `bytes32` (bytes or hex, optional `0x`). */\nexport function decodeInt256(value: Uint8Array | string): bigint {\n const n = bigIntFromBytesBe(toBytes32(value, \"int256 value\"));\n return n >= 1n << 255n ? n - TWO_256 : n;\n}\n\n/**\n * Parse an ordinary decimal string (`[+-]digits[.digits]`, no exponent, no whitespace),\n * scale by `10^decimals`, round half to even, and return the `int256` two's-complement\n * `bytes32` the nodes sign for a tolerance-mode source.\n *\n * @throws {Error} `invalid decimal`, `decimal too long`, or `int256 overflow`.\n */\nexport function encodeInt256Decimal(decimal: string, decimals: number): Uint8Array {\n assertDecimals(decimals);\n if (typeof decimal !== \"string\" || decimal === \"\" || decimal.trim() !== decimal) {\n throw new Error(\"invalid decimal\");\n }\n let s = decimal;\n const negative = s.startsWith(\"-\");\n if (negative || s.startsWith(\"+\")) s = s.slice(1);\n\n const parts = s.split(\".\");\n if (parts.length > 2 || parts[0] === \"\" || (parts.length === 2 && parts[1] === \"\")) {\n throw new Error(\"invalid decimal\");\n }\n for (const part of parts) {\n if (!/^[0-9]*$/.test(part)) throw new Error(\"invalid decimal\");\n }\n const frac = parts.length === 2 ? parts[1]! : \"\";\n if (parts[0]!.length + frac.length > MAX_DECIMAL_DIGITS) {\n throw new Error(\"decimal too long\");\n }\n\n let scaled = BigInt(parts[0]! + frac);\n const shift = decimals - frac.length;\n if (shift >= 0) {\n scaled *= 10n ** BigInt(shift);\n } else {\n const divisor = 10n ** BigInt(-shift);\n let q = scaled / divisor;\n const r = scaled % divisor;\n const twice = r * 2n;\n if (twice > divisor || (twice === divisor && (q & 1n) === 1n)) q += 1n;\n scaled = q;\n }\n if (negative) scaled = -scaled;\n return encodeInt256(scaled);\n}\n\n/**\n * Render a signed integer — a two's-complement `bytes32` (bytes or hex), or an already\n * decoded `bigint` — at the source's scale: `decimals` fractional places with trailing zeros\n * trimmed (`-1.2`, `42`, `0.00000005`). Inverse of {@link encodeInt256Decimal} up to\n * rounding.\n */\nexport function formatInt256Decimal(value: Uint8Array | string | bigint, decimals: number): string {\n assertDecimals(decimals);\n const n = typeof value === \"bigint\" ? value : decodeInt256(value);\n if (n > INT256_MAX || n < INT256_MIN) throw new RangeError(\"int256 overflow\");\n if (decimals === 0) return n.toString();\n const negative = n < 0n;\n let digits = (negative ? -n : n).toString();\n while (digits.length <= decimals) digits = \"0\" + digits;\n const point = digits.length - decimals;\n let fracEnd = digits.length;\n while (fracEnd > point && digits[fracEnd - 1] === \"0\") fracEnd--;\n const fraction = digits.slice(point, fracEnd);\n const text = fraction === \"\" ? digits.slice(0, point) : `${digits.slice(0, point)}.${fraction}`;\n return negative ? `-${text}` : text;\n}\n","import { secp256k1 } from \"@noble/curves/secp256k1.js\";\nimport { bytesToHex, concatBytes, ensureLength, hexToBytes } from \"./encoding.js\";\n\nconst SECP256K1_COMPRESSED_PUBLIC_KEY_BYTES = 33;\nconst SECP256K1_UNCOMPRESSED_PUBLIC_KEY_BYTES = 65;\n\n/**\n * Parse a secp256k1 public key and return canonical compressed lower-case hex.\n * Accepts compressed or uncompressed SEC1 public keys with an optional `0x`.\n */\nexport function normalizeSecp256k1PublicKeyHex(\n publicKeyHex: string,\n label = \"secp256k1 public key\",\n): string {\n if (typeof publicKeyHex !== \"string\") {\n throw new Error(`${label}: expected hex string`);\n }\n\n let bytes: Uint8Array;\n try {\n bytes = hexToBytes(publicKeyHex);\n } catch {\n throw new Error(`${label}: invalid hex`);\n }\n\n if (\n bytes.length !== SECP256K1_COMPRESSED_PUBLIC_KEY_BYTES &&\n bytes.length !== SECP256K1_UNCOMPRESSED_PUBLIC_KEY_BYTES\n ) {\n throw new Error(\n `${label}: expected ${SECP256K1_COMPRESSED_PUBLIC_KEY_BYTES}-byte compressed or ${SECP256K1_UNCOMPRESSED_PUBLIC_KEY_BYTES}-byte uncompressed public key`,\n );\n }\n\n try {\n return bytesToHex(secp256k1.Point.fromBytes(bytes).toBytes(true));\n } catch {\n throw new Error(`${label}: invalid secp256k1 public key`);\n }\n}\n\n/** Reconstruct a compressed secp256k1 public key from 32-byte affine X/Y coordinates. */\nexport function secp256k1PublicKeyFromCoordinates(\n x: Uint8Array,\n y: Uint8Array,\n label = \"secp256k1 public key coordinates\",\n): string {\n ensureLength(x, 32, `${label}.x`);\n ensureLength(y, 32, `${label}.y`);\n return normalizeSecp256k1PublicKeyHex(\n bytesToHex(concatBytes(Uint8Array.of(0x04), x, y)),\n label,\n );\n}\n","/**\n * Node selection: deterministic, verifiable, without replacement.\n *\n * Canonical bitmap representation = 32-byte big-endian word (bit `i` lives in\n * byte `31 - (i >> 3)`, mask `1 << (i & 7)`), matching the wire / on-chain form.\n */\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { concatBytes, ensureLength, u32be, u64be, utf8 } from \"./encoding.js\";\n\nconst SELECTION_SEED_DOMAIN = keccak_256(utf8(\"MOLPHA_SELECTION_V1\"));\nconst SELECTION_DERIVE_DOMAIN = keccak_256(utf8(\"MOLPHA_SELECTION_DERIVE\"));\n\n/**\n * Width in milliseconds of the window selection reads from the timestamp. The timestamp\n * is unix milliseconds; the seed uses `floor(timestamp / SELECTION_WINDOW_MS)`, so\n * sub-second precision never changes the committee. Changing it is a consensus break and must\n * bump the selection prefix.\n */\nexport const SELECTION_WINDOW_MS = 1000n;\n\n/** Maximum hashing rounds before giving up (matches on-chain cap). */\nconst MAX_ROUNDS = 65_536;\n\nconst BITMAP_BYTES = 32;\nconst MAX_NODES = BITMAP_BYTES * 8; // 256\nconst U32_MAX = 0xffff_ffff;\n\n/**\n * `seed = keccak256(keccak256(\"MOLPHA_SELECTION_V1\") || sourceId || be32(rv) || be64(ts / 1000))`,\n * where `ts` is the timestamp in unix MILLISECONDS (its 1 s window index is hashed).\n */\nexport function deriveSelectionSeed(\n sourceId: Uint8Array,\n registryVersion: number,\n timestamp: number | bigint,\n): Uint8Array {\n ensureLength(sourceId, 32, \"sourceId\");\n return keccak_256(\n concatBytes(\n SELECTION_SEED_DOMAIN,\n sourceId,\n u32be(registryVersion),\n u64be(BigInt(timestamp) / SELECTION_WINDOW_MS),\n ),\n );\n}\n\n/** `min(signaturesRequired + redundancyBuffer, nodeCount)`. */\nexport function effectiveSelectionSize(\n signaturesRequired: number,\n redundancyBuffer: number,\n nodeCount: number,\n): number {\n return Math.min(signaturesRequired + redundancyBuffer, nodeCount);\n}\n\n/** Is bit `bit` set in the 32-byte big-endian `bitmap`? */\nexport function bitmapBitSet(bitmap: Uint8Array, bit: number): boolean {\n if (bit < 0 || bit >= MAX_NODES) return false;\n const byte = bitmap[BITMAP_BYTES - 1 - (bit >> 3)] ?? 0;\n return (byte & (1 << (bit & 7))) !== 0;\n}\n\nfunction setBit(bitmap: Uint8Array, bit: number): void {\n const idx = BITMAP_BYTES - 1 - (bit >> 3);\n bitmap[idx] = (bitmap[idx] ?? 0) | (1 << (bit & 7));\n}\n\n/** Indices of set bits in `[0, nodeCount)`, ascending. */\nexport function selectedIndices(bitmap: Uint8Array, nodeCount: number): number[] {\n const out: number[] = [];\n for (let i = 0; i < nodeCount; i++) {\n if (bitmapBitSet(bitmap, i)) out.push(i);\n }\n return out;\n}\n\n/**\n * Rejection-sample `groupSize` distinct indices out of `nodeCount` from `seed`,\n * returning a 32-byte big-endian bitmap. Uses the complement optimization when\n * `groupSize > nodeCount / 2` (sample the smaller set, then invert).\n */\nexport function deriveGroupBitmap(\n seed: Uint8Array,\n nodeCount: number,\n groupSize: number,\n): Uint8Array {\n if (!Number.isInteger(nodeCount) || nodeCount <= 0 || nodeCount > MAX_NODES) {\n throw new RangeError(`GroupBitmapDerivationFailed: invalid nodeCount ${nodeCount}`);\n }\n if (!Number.isInteger(groupSize) || groupSize < 0 || groupSize > nodeCount) {\n throw new RangeError(`GroupBitmapDerivationFailed: invalid groupSize ${groupSize}`);\n }\n const bitmap = new Uint8Array(BITMAP_BYTES);\n if (groupSize === 0) return bitmap;\n if (groupSize === nodeCount) {\n for (let i = 0; i < nodeCount; i++) setBit(bitmap, i);\n return bitmap;\n }\n\n // Complement optimization: sample the smaller half, invert at the end.\n const complement = groupSize > nodeCount - groupSize;\n const sampleCount = complement ? nodeCount - groupSize : groupSize;\n const limit = Math.floor(U32_MAX / nodeCount) * nodeCount;\n\n const chosen = new Set<number>();\n let round = 0;\n while (chosen.size < sampleCount && round < MAX_ROUNDS) {\n const counterWord = new Uint8Array(32);\n counterWord.set(u64be(round), 24);\n const block = keccak_256(concatBytes(seed, SELECTION_DERIVE_DOMAIN, counterWord));\n for (let off = 0; off + 4 <= block.length && chosen.size < sampleCount; off += 4) {\n const limb =\n ((block[off]! << 24) |\n (block[off + 1]! << 16) |\n (block[off + 2]! << 8) |\n block[off + 3]!) >>>\n 0;\n if (limb < limit) {\n const idx = limb % nodeCount;\n chosen.add(idx);\n }\n }\n round++;\n }\n if (chosen.size < sampleCount) {\n throw new Error(\"GroupBitmapDerivationFailed: round cap reached\");\n }\n\n if (complement) {\n for (let i = 0; i < nodeCount; i++) {\n if (!chosen.has(i)) setBit(bitmap, i);\n }\n } else {\n for (const i of chosen) setBit(bitmap, i);\n }\n return bitmap;\n}\n\n/**\n * Convenience orchestrator: derive the selection bitmap end-to-end.\n * `redundancy` defaults to 0; `ts` is the timestamp in unix MILLISECONDS and defaults\n * to now. The gateway assigns the real timestamp of a round, so this is for tests and tools.\n */\nexport function deriveSelectionBitmap(\n sourceId: Uint8Array,\n registryVersion: number,\n nodeCount: number,\n signaturesRequired: number,\n redundancy = 0,\n ts: number | bigint = Date.now(),\n): Uint8Array {\n const seed = deriveSelectionSeed(sourceId, registryVersion, ts);\n const size = effectiveSelectionSize(signaturesRequired, redundancy, nodeCount);\n return deriveGroupBitmap(seed, nodeCount, size);\n}\n","/**\n * Gateway request authentication (`RequestAuth`).\n *\n * hash = keccak256(\"MOLPHA_REQAUTH_V1\" || programId(32) || gatewayPda(32) || sourceId(32) ||\n * u8(signaturesRequired) || u64le(authTimestamp))\n *\n * The consumer authority (the subscription owner, or a delegate of it) ed25519-signs the 32-byte\n * hash. Binding the program id and the Gateway PDA means a signature is only redeemable by the\n * gateway the consumer chose, on the deployment they meant to pay: never a bearer token.\n *\n * `authTimestamp` is the caller's unix SECONDS at signing: a freshness stamp for the\n * authorization only. It is unrelated to the round's `timestamp` (unix milliseconds,\n * assigned by the gateway), and RequestAuth is not part of the round ID, the selection, the signed\n * message or the x402 memo.\n */\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { concatBytes, ensureLength, toFixedBytes, utf8, u64le } from \"../core/encoding.js\";\n\nexport type { Signer } from \"../core/types.js\";\n\nexport const REQUEST_AUTH_DOMAIN: Uint8Array = utf8(\"MOLPHA_REQAUTH_V1\");\n\nexport interface RequestAuthFields {\n /** Program id, 32 bytes (see `addressToBytes` for base58). */\n programId: Uint8Array;\n /** Gateway PDA `[\"molpha_gateway\", gatewayAuthority]`, 32 bytes (see `deriveGatewayPda`). */\n gateway: Uint8Array;\n /** 32-byte source id, hex or bytes. */\n sourceId: Uint8Array | string;\n /** u8 — the per-request quorum. */\n signaturesRequired: number;\n /** u64 unix SECONDS at signing (the auth freshness stamp, not the round's timestamp). */\n authTimestamp: number | bigint;\n}\n\n/** Borsh encoding of `RequestAuth` — the hash body, without the domain. */\nexport function encodeRequestAuth(fields: RequestAuthFields): Uint8Array {\n if (\n !Number.isInteger(fields.signaturesRequired) ||\n fields.signaturesRequired < 1 ||\n fields.signaturesRequired > 255\n ) {\n throw new RangeError(`signaturesRequired out of u8 range: ${fields.signaturesRequired}`);\n }\n return concatBytes(\n ensureLength(fields.programId, 32, \"programId\"),\n ensureLength(fields.gateway, 32, \"gateway\"),\n toFixedBytes(fields.sourceId, 32, \"sourceId\"),\n Uint8Array.of(fields.signaturesRequired),\n u64le(fields.authTimestamp),\n );\n}\n\n/** `keccak256(REQUEST_AUTH_DOMAIN || encodeRequestAuth(fields))` — the message the consumer signs. */\nexport function hashRequestAuth(fields: RequestAuthFields): Uint8Array {\n return keccak_256(concatBytes(REQUEST_AUTH_DOMAIN, encodeRequestAuth(fields)));\n}\n","/**\n * API-config secret resolution + ECDH config encryption for selected nodes.\n */\nimport { gcm } from \"@noble/ciphers/aes.js\";\nimport { secp256k1 } from \"@noble/curves/secp256k1.js\";\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { randomBytes } from \"@noble/hashes/utils.js\";\nimport { canonicalizeAPIConfig } from \"../core/apiconfig.js\";\nimport { bytesToHex, concatBytes, hexToBytes, utf8 } from \"../core/encoding.js\";\nimport { normalizeSecp256k1PublicKeyHex } from \"../core/nodeKeys.js\";\nimport type { APIConfig, EncKeyBundle, Node } from \"../core/types.js\";\n\nconst NONCE_BYTES = 12; // AES-GCM nonce\nconst SYM_KEY_BYTES = 32;\n\nconst SECRET_PLACEHOLDER = /\\{\\{\\s*secret\\.([A-Za-z0-9_]+)\\s*\\}\\}/g;\n\ninterface EncryptionRecipient {\n index: number;\n signingKey: string;\n}\n\n/**\n * Replace `{{secret.NAME}}` placeholders in the string fields of an API config.\n * Throws if a referenced secret is missing.\n */\nexport function resolveAPIConfig(\n apiConfig: APIConfig,\n secrets: Record<string, string>,\n): APIConfig {\n const sub = (s: string): string =>\n s.replace(SECRET_PLACEHOLDER, (_m, name: string) => {\n if (!(name in secrets)) throw new Error(`Missing secret: ${name}`);\n return secrets[name]!;\n });\n\n const headers = apiConfig.headers\n ? Object.fromEntries(Object.entries(apiConfig.headers).map(([k, v]) => [k, sub(v)]))\n : undefined;\n\n return {\n ...apiConfig,\n url: sub(apiConfig.url),\n ...(headers ? { headers } : {}),\n responseParser: sub(apiConfig.responseParser),\n ...(apiConfig.valueTransform ? { valueTransform: sub(apiConfig.valueTransform) } : {}),\n };\n}\n\n/**\n * Encrypt a resolved API config with a fresh symmetric key, then ECDH-wrap that\n * key for each selected node. The gateway only ever sees placeholders.\n */\nexport function encryptForNodes(\n apiConfig: APIConfig,\n secrets: Record<string, string>,\n selectedNodes: Node[],\n): EncKeyBundle {\n const recipients = validateEncryptionRecipients(selectedNodes);\n\n const resolved = resolveAPIConfig(apiConfig, secrets);\n const plaintext = utf8(JSON.stringify(canonicalizeAPIConfig(resolved)));\n\n const symKey = randomBytes(SYM_KEY_BYTES);\n const nonceSym = randomBytes(NONCE_BYTES);\n const ciphertext = gcm(symKey, nonceSym).encrypt(plaintext);\n\n const ephemeralPriv = secp256k1.utils.randomSecretKey();\n const ephemeralPub = secp256k1.getPublicKey(ephemeralPriv, true); // compressed\n\n const envelopes: Record<string, string> = {};\n for (const node of recipients) {\n const envelopeIndex = String(node.index);\n const nodePub = hexToBytes(node.signingKey);\n const shared = secp256k1.getSharedSecret(ephemeralPriv, nodePub);\n const wrapKey = keccak_256(shared);\n const nonceEnv = randomBytes(NONCE_BYTES);\n const wrappedSymKey = gcm(wrapKey, nonceEnv).encrypt(symKey);\n envelopes[envelopeIndex] = bytesToHex(concatBytes(nonceEnv, wrappedSymKey));\n }\n\n return {\n ephemeralPub: bytesToHex(ephemeralPub),\n nonceSym: bytesToHex(nonceSym),\n ciphertext: bytesToHex(ciphertext),\n envelopes,\n };\n}\n\nfunction validateEncryptionRecipients(selectedNodes: Node[]): EncryptionRecipient[] {\n if (selectedNodes.length === 0) throw new Error(\"No nodes to encrypt for\");\n\n const envelopeIndexes = new Set<string>();\n const envelopeKeys = new Set<string>();\n return selectedNodes.map((node) => {\n if (!Number.isInteger(node.index) || node.index < 0) {\n throw new Error(`Selected node index must be a non-negative integer: ${node.index}`);\n }\n const envelopeIndex = String(node.index);\n if (envelopeIndexes.has(envelopeIndex)) {\n throw new Error(`Duplicate selected node index: ${node.index}`);\n }\n envelopeIndexes.add(envelopeIndex);\n\n const signingKey = normalizeSecp256k1PublicKeyHex(\n node.signingKey,\n `Selected node ${node.index} signingKey`,\n );\n if (envelopeKeys.has(signingKey)) {\n throw new Error(`Duplicate selected node signingKey: ${node.index}`);\n }\n envelopeKeys.add(signingKey);\n return { index: node.index, signingKey };\n });\n}\n","/**\n * EIP-712 typed-data hashing and EIP-3009 `TransferWithAuthorization` digests.\n *\n * Used to sign payments to an API source that is itself x402-paywalled: the\n * caller authorizes a transfer from their own wallet, so the token contract is\n * the EIP-712 verifying contract. Signature-critical bytes — must stay\n * byte-identical with the token contract and the source's facilitator.\n */\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { secp256k1 } from \"@noble/curves/secp256k1.js\";\nimport { bytesToHex, bytesToHex0x, concatBytes, hexToBytes, utf8 } from \"../core/encoding.js\";\nimport type { EvmSigner } from \"../core/types.js\";\n\n/** EIP-712 domain of the token contract that will settle the authorization. */\nexport interface Eip712Domain {\n name: string;\n version: string;\n chainId: number;\n /** Token contract address, 0x-prefixed. */\n verifyingContract: string;\n}\n\n/** EIP-3009 transfer authorization. Amounts are decimal strings of base units. */\nexport interface TransferAuthorization {\n from: string;\n to: string;\n value: string;\n validAfter: string;\n validBefore: string;\n /** 0x-prefixed 32-byte nonce. */\n nonce: string;\n}\n\nconst typeHash = (signature: string): Uint8Array => keccak_256(utf8(signature));\n\nexport const EIP712_DOMAIN_TYPEHASH = typeHash(\n \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\",\n);\n\nexport const TRANSFER_WITH_AUTHORIZATION_TYPEHASH = typeHash(\n \"TransferWithAuthorization(address from,address to,uint256 value,uint256 validAfter,uint256 validBefore,bytes32 nonce)\",\n);\n\n/** ABI-encode one 32-byte word from raw bytes, right-aligned. */\nfunction word(bytes: Uint8Array): Uint8Array {\n if (bytes.length > 32) throw new RangeError(\"ABI word overflow\");\n const out = new Uint8Array(32);\n out.set(bytes, 32 - bytes.length);\n return out;\n}\n\nfunction addressWord(address: string): Uint8Array {\n const bytes = hexToBytes(address);\n if (bytes.length !== 20) throw new RangeError(`Not a 20-byte address: ${address}`);\n return word(bytes);\n}\n\nfunction uintWord(value: string | bigint): Uint8Array {\n const n = typeof value === \"bigint\" ? value : BigInt(value);\n if (n < 0n) throw new RangeError(`Not an unsigned integer: ${value}`);\n const hex = n.toString(16);\n return word(hexToBytes(hex.length % 2 === 0 ? hex : \"0\" + hex));\n}\n\nfunction bytes32Word(value: string): Uint8Array {\n const bytes = hexToBytes(value);\n if (bytes.length !== 32) throw new RangeError(`Not a 32-byte value: ${value}`);\n return bytes;\n}\n\nexport function domainSeparator(domain: Eip712Domain): Uint8Array {\n return keccak_256(\n concatBytes(\n EIP712_DOMAIN_TYPEHASH,\n keccak_256(utf8(domain.name)),\n keccak_256(utf8(domain.version)),\n uintWord(BigInt(domain.chainId)),\n addressWord(domain.verifyingContract),\n ),\n );\n}\n\nexport function transferWithAuthorizationHash(auth: TransferAuthorization): Uint8Array {\n return keccak_256(\n concatBytes(\n TRANSFER_WITH_AUTHORIZATION_TYPEHASH,\n addressWord(auth.from),\n addressWord(auth.to),\n uintWord(auth.value),\n uintWord(auth.validAfter),\n uintWord(auth.validBefore),\n bytes32Word(auth.nonce),\n ),\n );\n}\n\n/** The 32-byte digest a wallet signs: `keccak256(0x1901 || domain || struct)`. */\nexport function transferWithAuthorizationDigest(\n domain: Eip712Domain,\n auth: TransferAuthorization,\n): Uint8Array {\n return keccak_256(\n concatBytes(\n Uint8Array.from([0x19, 0x01]),\n domainSeparator(domain),\n transferWithAuthorizationHash(auth),\n ),\n );\n}\n\n/** EIP-55 checksum form. Some facilitators reject non-checksummed addresses. */\nexport function toChecksumAddress(address: string): string {\n const lower = bytesToHex(hexToBytes(address));\n if (lower.length !== 40) throw new RangeError(`Not a 20-byte address: ${address}`);\n const digest = bytesToHex(keccak_256(utf8(lower)));\n let out = \"0x\";\n for (let i = 0; i < lower.length; i++) {\n out += parseInt(digest[i]!, 16) >= 8 ? lower[i]!.toUpperCase() : lower[i]!;\n }\n return out;\n}\n\n/** The EIP-55 address of a raw secp256k1 private key. */\nexport function evmAddressFromPrivateKey(privateKey: string | Uint8Array): string {\n const key = typeof privateKey === \"string\" ? hexToBytes(privateKey) : privateKey;\n if (key.length !== 32) throw new RangeError(\"EVM private key must be 32 bytes\");\n const uncompressed = secp256k1.getPublicKey(key, false);\n // Drop the 0x04 tag, keccak the 64-byte point, keep the low 20 bytes.\n return toChecksumAddress(bytesToHex0x(keccak_256(uncompressed.subarray(1)).subarray(12)));\n}\n\n/**\n * Build an {@link EvmSigner} from a raw secp256k1 private key. The key stays in\n * the caller's process: neither Molpha nor the gateway ever sees one.\n */\nexport function createEvmSignerFromPrivateKey(privateKey: string | Uint8Array): EvmSigner {\n const key = typeof privateKey === \"string\" ? hexToBytes(privateKey) : privateKey;\n const address = evmAddressFromPrivateKey(key);\n\n return {\n address,\n async signDigest(digest: Uint8Array): Promise<Uint8Array> {\n if (digest.length !== 32) throw new RangeError(\"Digest must be 32 bytes\");\n // Noble returns [recovery || r || s]; Ethereum wants r || s || v.\n const signed = secp256k1.sign(digest, key, { prehash: false, format: \"recovered\" });\n const out = new Uint8Array(65);\n out.set(signed.subarray(1), 0);\n out[64] = 27 + signed[0]!;\n return out;\n },\n };\n}\n","/**\n * Paying an API source that is itself x402-paywalled.\n *\n * The caller pays the source directly, from their own wallet on the source's\n * network. Molpha never holds, signs for, or converts those funds, and the\n * Molpha side of the round is unchanged: a paid source still costs exactly one\n * round of subscription quota, and source payment never enters `sourceId`.\n */\nimport { randomBytes } from \"@noble/hashes/utils.js\";\nimport { base64ToBytes, bytesToBase64, bytesToHex0x, utf8 } from \"../core/encoding.js\";\nimport { effectiveSelectionSize } from \"../core/selection.js\";\nimport type {\n APIConfig,\n AssetDomain,\n EvmSigner,\n UpstreamQuote,\n UpstreamTerms,\n} from \"../core/types.js\";\nimport { transferWithAuthorizationDigest, toChecksumAddress } from \"../evm/eip712.js\";\nimport { resolveAPIConfig } from \"./encryption.js\";\n\n/**\n * Payment networks whose authorizations this SDK can sign. Beta is Base USDC;\n * the asset is pinned because the caller signs a transfer from their own wallet\n * and the token contract is the EIP-712 verifying contract.\n */\nconst NETWORKS: Record<string, { chainId: number; usdc: string }> = {\n \"eip155:8453\": { chainId: 8453, usdc: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\" },\n \"eip155:84532\": { chainId: 84532, usdc: \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\" },\n // x402 v1 network names.\n base: { chainId: 8453, usdc: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\" },\n \"base-sepolia\": { chainId: 84532, usdc: \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\" },\n};\n\n/** An x402 payment identifier: 16-128 of [A-Za-z0-9_-]; the recommended `pay_` plus 32 hex digits. */\nfunction newPaymentId(): string {\n return `pay_${bytesToHex0x(randomBytes(16)).slice(2)}`;\n}\n\n/** Raised when a round needs source payment the caller cannot or did not make. */\nexport class UpstreamPaymentRequiredError extends Error {\n constructor(\n readonly quote: UpstreamQuote,\n message?: string,\n ) {\n super(\n message ??\n `API source requires payment for up to ${quote.eligibleSetSize} fetches: ${quote.resource}`,\n );\n this.name = \"UpstreamPaymentRequiredError\";\n }\n}\n\n/**\n * Number of source fetches this round may perform, and so authorizations to\n * sign: `min(signaturesRequired + redundancyBuffer, nodeCount)`. Identical to\n * the round's selection size — the eligible set *is* the set that fetches.\n */\nexport function eligibleSetSize(\n signaturesRequired: number,\n registry: { nodeCount: number; redundancyBuffer: number },\n): number {\n return effectiveSelectionSize(\n signaturesRequired,\n registry.redundancyBuffer,\n registry.nodeCount,\n );\n}\n\n/** Reads a gateway 402 body and returns the relayed upstream quote, if any. */\nexport function parseUpstreamQuote(envelope: unknown): UpstreamQuote | null {\n if (!envelope || typeof envelope !== \"object\") return null;\n const extensions = (envelope as { extensions?: unknown }).extensions;\n if (!extensions || typeof extensions !== \"object\") return null;\n const quote = (extensions as { upstream?: unknown }).upstream;\n if (!quote || typeof quote !== \"object\") return null;\n return typeof (quote as UpstreamQuote).eligibleSetSize === \"number\"\n ? (quote as UpstreamQuote)\n : null;\n}\n\n/** One `accepts` entry of a source's 402 envelope. */\ninterface Offer {\n scheme?: string;\n network?: string;\n asset?: string;\n payTo?: string;\n amount?: string | number;\n maxAmountRequired?: string | number;\n maxTimeoutSeconds?: string | number;\n extra?: { name?: string; version?: string };\n}\n\n/** Picks the one offer this SDK can sign, and validates it before any signing. */\nfunction selectTerms(\n envelope: Record<string, unknown>,\n resource: string,\n assetDomain?: AssetDomain,\n): UpstreamTerms {\n const version = envelope.x402Version === 1 ? 1 : 2;\n const offers: Offer[] = Array.isArray(envelope.accepts) ? envelope.accepts : [];\n if (offers.length === 0) {\n throw new Error(`Source 402 for ${resource} advertised no payment terms`);\n }\n\n const supported = offers.find(\n (o) => o.scheme === \"exact\" && NETWORKS[String(o.network)] !== undefined,\n );\n if (!supported) {\n const seen = offers.map((o) => `${o.scheme}/${o.network}`).join(\", \");\n throw new Error(\n `Source ${resource} requires an unsupported payment scheme or network (${seen}); this SDK signs exact payments on Base USDC only`,\n );\n }\n\n const network = NETWORKS[String(supported.network)]!;\n const asset = String(supported.asset ?? \"\");\n if (asset.toLowerCase() !== network.usdc.toLowerCase()) {\n throw new Error(\n `Source ${resource} asks to be paid in ${asset} on ${supported.network}; this SDK signs USDC (${network.usdc}) only`,\n );\n }\n\n const domain =\n assetDomain ??\n (supported.extra?.name && supported.extra?.version\n ? { name: String(supported.extra.name), version: String(supported.extra.version) }\n : undefined);\n if (!domain) {\n throw new Error(\n `Source ${resource} omitted extra.name/extra.version for ${asset}; supply sourcePayment.assetDomain to sign against it`,\n );\n }\n\n const amount = String(supported.amount ?? supported.maxAmountRequired ?? \"\");\n if (!/^\\d+$/.test(amount)) {\n throw new Error(`Source ${resource} quoted a non-integer price: ${amount}`);\n }\n const payTo = String(supported.payTo ?? \"\");\n if (!payTo) throw new Error(`Source ${resource} omitted payTo`);\n\n // A source that declares payment-identifier may require it (TickerLayer does: without one a payment is a 400).\n const declared = (envelope as { extensions?: Record<string, unknown> }).extensions?.[\"payment-identifier\"] as\n | { info?: unknown; schema?: unknown }\n | undefined;\n const paymentIdentifier =\n declared && typeof declared === \"object\" && declared.info && typeof declared.info === \"object\"\n ? { info: declared.info as Record<string, unknown>, schema: declared.schema }\n : undefined;\n\n return {\n x402Version: version,\n paymentIdentifier,\n // Echoed verbatim in the signed payload, so it must stay the source's own object.\n requirements: supported as Record<string, unknown>,\n network: String(supported.network),\n chainId: network.chainId,\n asset,\n payTo,\n amount,\n maxTimeoutSeconds: Number(supported.maxTimeoutSeconds ?? 60),\n domain,\n resource,\n };\n}\n\n/** Decodes an x402 envelope from the `PAYMENT-REQUIRED` header, or the body. */\nfunction decodeEnvelope(headerValue: string | null, body: string): Record<string, unknown> {\n if (headerValue) {\n try {\n return JSON.parse(\n new TextDecoder().decode(base64ToBytes(headerValue)),\n ) as Record<string, unknown>;\n } catch {\n // Fall through to the body, which carries the same object.\n }\n }\n return JSON.parse(body) as Record<string, unknown>;\n}\n\n/**\n * Validates caller-supplied terms with the same allowlist and structural checks\n * as {@link probeSource}. Returns canonical {@link UpstreamTerms} derived from\n * `terms.requirements`, not the caller's top-level fields.\n */\nexport function validateSuppliedTerms(\n terms: UpstreamTerms,\n resource: string,\n assetDomain?: AssetDomain,\n): UpstreamTerms {\n return selectTerms(\n {\n x402Version: terms.x402Version,\n accepts: [terms.requirements as Offer],\n },\n resource,\n assetDomain,\n );\n}\n\n/**\n * Fetch the source unpaid to read its own x402 terms. This is a price fetch,\n * not a data fetch: nodes remain the only fetchers of the value itself.\n * Returns `null` when the source is not paywalled.\n */\nexport async function probeSource(\n apiConfig: APIConfig,\n options: { secrets?: Record<string, string>; assetDomain?: AssetDomain; timeoutMs?: number } = {},\n): Promise<UpstreamTerms | null> {\n const resolved = options.secrets ? resolveAPIConfig(apiConfig, options.secrets) : apiConfig;\n\n const init: RequestInit = {\n method: resolved.method ?? \"GET\",\n headers: resolved.headers ?? {},\n };\n let res: Response;\n if (options.timeoutMs === undefined) {\n res = await fetch(resolved.url, init);\n } else {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), options.timeoutMs);\n try {\n res = await fetch(resolved.url, { ...init, signal: controller.signal });\n } finally {\n clearTimeout(timer);\n }\n }\n if (res.status !== 402) return null;\n\n // Probe against the placeholder URL so the terms describe the declared source.\n return selectTerms(\n decodeEnvelope(res.headers.get(\"PAYMENT-REQUIRED\"), await res.text()),\n apiConfig.url,\n options.assetDomain,\n );\n}\n\n/**\n * Sign one x402 payment authorization per eligible node.\n *\n * Sign the whole eligible set. Only authorizations a node actually spends ever\n * settle, so unused ones cost nothing, while signing fewer starves buffer nodes\n * and raises the round's failure probability. Every authorization carries a\n * unique nonce, which is what prevents one from settling twice.\n */\nexport async function signSourcePayments(\n terms: UpstreamTerms,\n signer: EvmSigner,\n count: number,\n): Promise<string[]> {\n if (!Number.isInteger(count) || count < 1) {\n throw new RangeError(`Cannot sign ${count} source payments`);\n }\n\n const now = Math.floor(Date.now() / 1000);\n const validAfter = String(now - 600);\n const validBefore = String(now + Math.max(terms.maxTimeoutSeconds, 60));\n\n const payments: string[] = [];\n for (let i = 0; i < count; i++) {\n const authorization = {\n from: toChecksumAddress(signer.address),\n to: toChecksumAddress(terms.payTo),\n value: terms.amount,\n validAfter,\n validBefore,\n nonce: bytesToHex0x(randomBytes(32)),\n };\n const digest = transferWithAuthorizationDigest(\n {\n name: terms.domain.name,\n version: terms.domain.version,\n chainId: terms.chainId,\n verifyingContract: terms.asset,\n },\n authorization,\n );\n const signature = bytesToHex0x(await signer.signDigest(digest));\n\n const payload: Record<string, unknown> =\n terms.x402Version === 1\n ? {\n x402Version: 1,\n scheme: \"exact\",\n network: terms.network,\n payload: { signature, authorization },\n }\n : {\n x402Version: 2,\n accepted: terms.requirements,\n payload: { signature, authorization },\n };\n if (terms.x402Version === 2 && terms.paymentIdentifier) {\n // One identifier per authorization: the source ties it to this exact request and payment, so one\n // shared across nodes would make their fetches look like retries of each other.\n const { info, schema } = terms.paymentIdentifier;\n payload.extensions = {\n \"payment-identifier\": {\n info: { ...info, id: newPaymentId() },\n ...(schema !== undefined ? { schema } : {}),\n },\n };\n }\n payments.push(bytesToBase64(utf8(JSON.stringify(payload))));\n }\n return payments;\n}\n","/**\n * Gateway on-chain identity. The request-auth hash binds the Gateway PDA\n * (`[\"molpha_gateway\", gatewayAuthority]`), so the client must know which gateway it is\n * talking to. Kit-only — no `@anchor-lang/core` / web3.js on the gateway path.\n */\nimport {\n address,\n getAddressEncoder,\n getProgramDerivedAddress,\n type Address,\n} from \"@solana/kit\";\nimport { utf8 } from \"../core/encoding.js\";\n\nconst SEED_GATEWAY = utf8(\"molpha_gateway\");\nconst addressEncoder = getAddressEncoder();\n\n/** One gateway endpoint plus, optionally, the authority key its `Gateway` PDA derives from. */\nexport interface GatewayEndpoint {\n /** Base URL, e.g. `https://gateway.example.com` (trailing slash ignored). */\n url: string;\n /**\n * Base58 Solana pubkey of the gateway's signing authority. When omitted the client\n * fetches it once from `GET {url}/v1/info` (`data.gatewayAuthority`) the first time an\n * authenticated request targets this endpoint.\n */\n gatewayAuthority?: string;\n}\n\nexport type GatewayEndpointInput = string | GatewayEndpoint;\n\n/** Payload of `GET /v1/info` (inside the usual `{ status, data }` envelope). */\nexport interface GatewayInfo {\n gatewayAuthority: string;\n /** Program id the gateway settles against; must match the client's when present. */\n programId?: string;\n /** The gateway's round timestamp grid in milliseconds (`round.tick_ms`), when advertised. */\n tickMs?: number;\n /** Longest the gateway waits for a round, in seconds (`node.agg_wait_seconds`), when advertised. */\n roundTimeoutSeconds?: number;\n /** Rounds the gateway runs at once (`limits.max_inflight_rounds`); 0 or absent: not advertised. */\n maxInflightRounds?: number;\n}\n\nexport function normalizeEndpoint(input: GatewayEndpointInput): GatewayEndpoint {\n const endpoint: GatewayEndpoint = typeof input === \"string\" ? { url: input } : { ...input };\n endpoint.url = endpoint.url.replace(/\\/$/, \"\");\n if (!endpoint.url) throw new Error(\"Gateway endpoint url must not be empty\");\n return endpoint;\n}\n\n/** 32-byte form of a base58 address. */\nexport function addressToBytes(value: string): Uint8Array {\n return Uint8Array.from(addressEncoder.encode(address(value)));\n}\n\n/** `[\"molpha_gateway\", gatewayAuthority]` under `programId`, as a base58 address. */\nexport async function deriveGatewayPdaAddress(\n gatewayAuthority: string,\n programId: string,\n): Promise<Address> {\n const [pda] = await getProgramDerivedAddress({\n programAddress: address(programId),\n seeds: [SEED_GATEWAY, addressToBytes(gatewayAuthority)],\n });\n return pda;\n}\n\n/** 32-byte Gateway PDA — the `gateway` field of `RequestAuth`. */\nexport async function deriveGatewayPda(\n gatewayAuthority: string,\n programId: string,\n): Promise<Uint8Array> {\n return addressToBytes(await deriveGatewayPdaAddress(gatewayAuthority, programId));\n}\n\n/** Validate an unwrapped `/v1/info` payload. */\nexport function parseGatewayInfo(data: unknown): GatewayInfo {\n if (!data || typeof data !== \"object\") {\n throw new Error(\"GET /v1/info returned malformed payload\");\n }\n const record = data as Record<string, unknown>;\n const gatewayAuthority = record.gatewayAuthority;\n if (typeof gatewayAuthority !== \"string\" || !gatewayAuthority) {\n throw new Error(\"GET /v1/info payload is missing gatewayAuthority\");\n }\n const programId = record.programId;\n if (programId !== undefined && typeof programId !== \"string\") {\n throw new Error(\"GET /v1/info programId must be a base58 string\");\n }\n const info: GatewayInfo = { gatewayAuthority };\n if (programId !== undefined) info.programId = programId;\n // Timing and capacity are advisory: take them when they are sensible positive numbers.\n const positive = (v: unknown): number | undefined =>\n typeof v === \"number\" && Number.isFinite(v) && v > 0 ? v : undefined;\n const tickMs = positive(record.tickMs);\n if (tickMs !== undefined) info.tickMs = tickMs;\n const roundTimeoutSeconds = positive(record.roundTimeoutSeconds);\n if (roundTimeoutSeconds !== undefined) info.roundTimeoutSeconds = roundTimeoutSeconds;\n const maxInflightRounds = positive(record.maxInflightRounds);\n if (maxInflightRounds !== undefined) info.maxInflightRounds = maxInflightRounds;\n return info;\n}\n","/**\n * `MolphaGateway` — isomorphic HTTP client with multi-endpoint failover.\n */\nimport { assertAggregationQuorum, canonicalizeAggregation } from \"../core/aggregation.js\";\nimport { canonicalizeAPIConfig, deriveSourceId } from \"../core/apiconfig.js\";\nimport { MOLPHA_PROGRAM_ID } from \"../core/constants.js\";\nimport { DEFAULT_GATEWAY_ENDPOINT } from \"../deployment.generated.js\";\nimport { bytesToHex, bytesToHex0x } from \"../core/encoding.js\";\nimport { formatInt256Decimal } from \"../core/int256.js\";\nimport { normalizeSecp256k1PublicKeyHex } from \"../core/nodeKeys.js\";\nimport { effectiveSelectionSize } from \"../core/selection.js\";\nimport type {\n AggregationConfig,\n APIConfig,\n Attestation,\n Node,\n NodeKeyVerifier,\n NodesInfo,\n RegistrySelectionConfig,\n Signer,\n SourcePaymentOptions,\n UpstreamTerms,\n} from \"../core/types.js\";\nimport { hashRequestAuth } from \"./auth.js\";\nimport { encryptForNodes } from \"./encryption.js\";\nimport {\n UpstreamPaymentRequiredError,\n parseUpstreamQuote,\n probeSource,\n signSourcePayments,\n validateSuppliedTerms,\n} from \"./x402.js\";\nimport {\n addressToBytes,\n deriveGatewayPda,\n normalizeEndpoint,\n parseGatewayInfo,\n type GatewayEndpoint,\n type GatewayEndpointInput,\n type GatewayInfo,\n} from \"./identity.js\";\n\nexport type { RegistrySelectionConfig } from \"../core/types.js\";\nexport * from \"./auth.js\";\nexport * from \"./identity.js\";\nexport * from \"./x402.js\";\n\nexport interface RequestSignedDataOptions {\n /**\n * The API definition to resolve. Its canonical form determines the round's\n * `sourceId = keccak256(JSON.stringify(canonicalizeAPIConfig(apiConfig)))`, so pass the\n * same config (including `{{secret.*}}` placeholders) every time.\n */\n apiConfig: APIConfig;\n /**\n * Requested quorum (u8, ≥ the protocol `min_signers`). Median tolerance mode\n * (`apiConfig.aggregation`) additionally requires `>= 3`; lower values are rejected\n * before any request is made.\n */\n signaturesRequired: number;\n /**\n * Solana pubkey (base58) of the subscription owner.\n * Overrides the gateway's `defaultSubscriptionOwner` when set.\n */\n subscriptionOwner?: string;\n /**\n * Solana pubkey (base58) of the consumer: the subscription owner, or a delegate of it.\n * Overrides the gateway's `defaultConsumerAuthority` when set.\n */\n consumerAuthority?: string;\n /**\n * Signs `hashRequestAuth({ programId, gateway, sourceId, signaturesRequired, authTimestamp })`.\n * The hash binds the gateway's on-chain account, so it is computed — and the signer\n * invoked — once per endpoint actually tried, with a fresh `authTimestamp` each time.\n * Overrides the gateway's `defaultSigner` when set. When both are omitted, sends an all-zero\n * authSig (a gateway rejects it with 401; for tests and local tooling only).\n */\n signer?: Signer;\n encrypt?: { secrets: Record<string, string> };\n /**\n * Pays an API source that is itself x402-paywalled. The SDK reads the source's\n * own 402, signs one authorization per node in the round's eligible set, and\n * sends them with the round as `sourcePayments`.\n *\n * Payment goes to the source, never to Molpha: the round still costs exactly\n * one round of subscription quota. Only authorizations a node actually spends\n * ever settle, so the redundancy buffer costs nothing when it goes unused.\n * Without this, a paywalled source throws {@link UpstreamPaymentRequiredError}.\n */\n sourcePayment?: SourcePaymentOptions;\n /** Max accepted value age in seconds. Default 60. */\n maxAge?: number;\n /**\n * Max attempts. Each retry waits for a later gateway tick, plus jitter, and for longer after a\n * busy answer (`Retry-After`) or a failure that is not a conflict (capped exponential backoff);\n * see {@link retryDelayMs}. Default {@link DEFAULT_MAX_RETRIES}.\n */\n maxRetries?: number;\n /**\n * The gateway's tick grid in milliseconds (its `round.tick_ms`). A retry waits for the start of\n * the next tick so it is a new round, not a duplicate of the last. Default: the gateway's\n * advertised `tickMs` (read once, on the first retry), else 1000.\n */\n tickMs?: number;\n /**\n * Per-request timeout in ms. Default {@link DEFAULT_ROUND_TIMEOUT_MS}, above the gateway's own\n * wait for a round: a shorter timeout abandons rounds the gateway is still running and the retry\n * then starts another.\n */\n timeoutMs?: number;\n /**\n * Pre-fetched round inputs. Any field present here skips its network/on-chain\n * fetch, so a fully-populated context turns `requestSignedData` into a single\n * POST round (the \"short\" flow). Build a reusable one with\n * {@link MolphaGateway.prepareContext}.\n *\n * Caching is opt-in because these inputs can drift: a stale `registryVersion`,\n * `redundancyBuffer`, `nodeCount`, or `nodes` set produces a result the chain will\n * reject. Refresh the context when the on-chain registry version changes.\n */\n context?: Partial<RoundContext>;\n /**\n * Authenticates selected gateway node encryption keys before private API\n * secrets are encrypted. Overrides the gateway-level verifier when set.\n */\n verifyNodeKeys?: NodeKeyVerifier;\n /**\n * Unsafe development escape hatch for standalone gateway usage. When true,\n * encrypted private API requests may use gateway-provided node keys without\n * authentication. Defaults to false.\n */\n allowUnverifiedNodeKeysForPrivateApi?: boolean;\n}\n\nexport interface MolphaGatewayOptions {\n /** Solana pubkey (base58) of the subscription owner used when a request omits it. */\n defaultSubscriptionOwner?: string;\n /** Solana pubkey (base58) of the consumer authority used when a request omits it. */\n defaultConsumerAuthority?: string;\n /**\n * Molpha program id the request authorization is bound to (and that `fetchGatewayInfo`\n * checks the gateway settles against). Defaults to the vendored `MOLPHA_PROGRAM_ID`;\n * must match the gateway's deployment.\n */\n programId?: string;\n /**\n * Authenticates selected gateway node encryption keys before private API\n * secrets are encrypted.\n */\n verifyNodeKeys?: NodeKeyVerifier;\n /**\n * Unsafe development escape hatch. When true, encrypted private API requests\n * may use gateway-provided node keys without authentication. Defaults to false.\n */\n allowUnverifiedNodeKeysForPrivateApi?: boolean;\n /** Source of randomness in [0, 1) for retry jitter; defaults to `Math.random` (tests only). */\n random?: () => number;\n}\n\n/**\n * The slow-changing inputs a `requestSignedData` round binds to. Fetch once with\n * {@link MolphaGateway.prepareContext} and reuse across many rounds.\n */\nexport interface RoundContext extends RegistrySelectionConfig {\n /** Full registry node set: private API secrets are encrypted for every node in it. */\n nodes: Node[];\n}\n\n/** Round inputs after resolution; `nodes` is only fetched when a round needs it. */\ninterface ResolvedRound extends RegistrySelectionConfig {\n nodes?: Node[];\n}\n\ninterface GatewaySignedDataResponse {\n status: \"completed\" | \"pending\" | string;\n data?: GatewaySignedData;\n}\n\n/**\n * The gateway's `attestation` object (`AttestationData.attestation`): the signed struct as the\n * on-chain `Attestation`, with `payload.value` the packed 32-byte value.\n */\ninterface GatewayAttestation {\n payload?: {\n value?: string;\n sourceId?: string;\n registryVersion?: number;\n signaturesRequired?: number;\n /** Legacy wire name on some gateways; newer responses use `timestamp`. */\n canonicalTimestamp?: number;\n /** Gateway-assigned round time, unix milliseconds. */\n timestamp?: number;\n };\n signature?: {\n signature?: string;\n commitment?: string;\n signersBitmap?: string;\n };\n}\n\ninterface GatewaySignedData {\n /** Current gateways nest the signed struct here; the flat fields below are the older shape. */\n attestation?: GatewayAttestation;\n sourceId?: string;\n /** Echo of the canonical apiConfig hash; equals `sourceId`. */\n configHash?: string;\n /** Echo of the request's tolerance policy; present only for tolerance rounds. */\n aggregation?: unknown;\n value?: string;\n valuePacked?: string;\n timestamp?: number;\n registryVersion?: number;\n signaturesRequired?: number;\n signersBitmap?: string;\n s?: string;\n commitmentAddr?: string;\n fresh?: boolean;\n}\n\ninterface GatewayEnvelope<T> {\n status: string;\n data: T;\n}\n\nconst ZERO_AUTH_SIG = new Uint8Array(64);\n\n/** Caller's unix SECONDS: the `authTimestamp` of a RequestAuth, not the round's timestamp. */\nconst authTimestampNow = (): number => Math.floor(Date.now() / 1000);\n\n/** The gateway's default tick grid in milliseconds. */\nconst DEFAULT_TICK_MS = 1000;\n\n/** Milliseconds from `nowMs` to the start of the next tick, plus a millisecond of margin. */\nexport function msUntilNextTick(nowMs: number, tickMs: number): number {\n return tickMs - (nowMs % tickMs) + 1;\n}\n\nconst sleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));\n\n/** First delay of the exponential backoff, in ms. */\nconst BACKOFF_BASE_MS = 250;\n/** Cap of the exponential backoff, in ms. */\nconst BACKOFF_MAX_MS = 5_000;\n/**\n * Default per-request timeout: above the gateway's own wait for a round (`node.agg_wait_seconds`,\n * 30 s by default), so the client does not abandon a round the gateway is still running and then\n * start a second one. A gateway advertises its value as `roundTimeoutSeconds` in `GET /v1/info`.\n */\nexport const DEFAULT_ROUND_TIMEOUT_MS = 35_000;\n/** Default number of attempts. */\nexport const DEFAULT_MAX_RETRIES = 6;\n\n/**\n * Why an attempt failed, as far as it decides how long to wait before the next one:\n * - `conflict`: HTTP 409, this consumer already has a round for the source in this tick;\n * - `busy`: HTTP 503 or 429, the gateway is at capacity or a node set is unavailable, optionally\n * with the gateway's `Retry-After`;\n * - `error`: anything else that may be transient (timeout, network, other 5xx).\n */\nexport type RetryCause =\n | { kind: \"conflict\" }\n | { kind: \"busy\"; retryAfterMs?: number }\n | { kind: \"error\" };\n\n/**\n * How long to wait before the next attempt, in ms. Every delay reaches at least the start of the\n * next tick (a retry inside the tick that just failed would be a duplicate round), then adds jitter\n * so clients that failed together do not retry together:\n * - conflict: the next tick plus up to half a tick;\n * - busy: the later of the next tick and the gateway's `Retry-After` (a tick if absent), plus up to\n * a tick;\n * - error: capped exponential backoff (250 ms, 500 ms, ... 5 s) with half of it randomized.\n * `failures` is the number of attempts that have failed so far (1 after the first).\n */\nexport function retryDelayMs(\n cause: RetryCause,\n failures: number,\n nowMs: number,\n tickMs: number,\n random: () => number = Math.random,\n): number {\n const nextTick = msUntilNextTick(nowMs, tickMs);\n switch (cause.kind) {\n case \"conflict\":\n return nextTick + random() * (tickMs / 2);\n case \"busy\":\n return Math.max(nextTick, cause.retryAfterMs ?? tickMs) + random() * tickMs;\n case \"error\": {\n const backoff = Math.min(BACKOFF_BASE_MS * 2 ** Math.max(failures - 1, 0), BACKOFF_MAX_MS);\n return Math.max(nextTick, backoff / 2 + random() * (backoff / 2));\n }\n }\n}\n\n/** The more demanding of two causes, so one endpoint's busy answer is not hidden by another's error. */\nfunction mergeCause(a: RetryCause, b: RetryCause): RetryCause {\n if (a.kind === \"busy\" || b.kind === \"busy\") {\n const waits = [a, b].flatMap((c) => (c.kind === \"busy\" && c.retryAfterMs !== undefined ? [c.retryAfterMs] : []));\n return waits.length ? { kind: \"busy\", retryAfterMs: Math.max(...waits) } : { kind: \"busy\" };\n }\n if (a.kind === \"conflict\" || b.kind === \"conflict\") return { kind: \"conflict\" };\n return { kind: \"error\" };\n}\n\n/** Parse a `Retry-After` header given in seconds into ms; HTTP dates and junk are ignored. */\nfunction retryAfterMs(res: Response): number | undefined {\n const raw = res.headers.get(\"retry-after\");\n if (raw === null) return undefined;\n const seconds = Number(raw);\n return Number.isFinite(seconds) && seconds >= 0 ? Math.min(seconds, 60) * 1000 : undefined;\n}\n\n/** Default gateway base URL when `endpoints` is omitted (from the active deployment profile). */\nexport { DEFAULT_GATEWAY_ENDPOINT };\n\n/** Thrown for terminal gateway errors (400/401) — never retried. */\nexport class GatewayError extends Error {\n constructor(\n message: string,\n readonly status?: number,\n ) {\n super(message);\n this.name = \"GatewayError\";\n }\n}\n\nexport class MolphaGateway {\n private readonly endpoints: GatewayEndpoint[];\n private readonly getRegistrySelectionConfig: () => Promise<RegistrySelectionConfig>;\n private readonly defaultSigner?: Signer;\n private readonly defaultSubscriptionOwner?: string;\n private readonly defaultConsumerAuthority?: string;\n private readonly verifyNodeKeys?: NodeKeyVerifier;\n private readonly allowUnverifiedNodeKeysForPrivateApi: boolean;\n /** Program id the request authorization is bound to (base58). */\n readonly programId: string;\n private readonly programIdBytes: Uint8Array;\n /** Gateway PDA per endpoint URL; resolved once per client lifetime. */\n private readonly gatewayPdas = new Map<string, Promise<Uint8Array>>();\n /** Advertised timing per endpoint URL, read lazily on the first retry. */\n private readonly advertisedInfo = new Map<string, Promise<GatewayInfo | undefined>>();\n private readonly random: () => number;\n\n constructor(\n endpoints?: GatewayEndpointInput | GatewayEndpointInput[],\n getRegistrySelectionConfig: () => Promise<RegistrySelectionConfig> = async () => {\n throw new Error(\n \"MolphaGateway requires getRegistrySelectionConfig to request signed data — pass the current on-chain registry version, redundancy buffer and node count (e.g. () => solana.getRegistrySelectionConfig())\",\n );\n },\n defaultSigner?: Signer,\n /**\n * Either a default subscription owner (base58) or gateway options. A string is the\n * shorthand for `{ defaultSubscriptionOwner }` used by standalone callers/tests.\n */\n defaultSubscriptionOwnerOrOptions?: string | MolphaGatewayOptions,\n defaultConsumerAuthority?: string,\n ) {\n const list =\n endpoints === undefined\n ? [DEFAULT_GATEWAY_ENDPOINT]\n : Array.isArray(endpoints)\n ? endpoints\n : [endpoints];\n if (list.length === 0) throw new Error(\"At least one endpoint is required\");\n this.endpoints = list.map(normalizeEndpoint);\n this.getRegistrySelectionConfig = getRegistrySelectionConfig;\n this.defaultSigner = defaultSigner;\n\n const options: MolphaGatewayOptions =\n typeof defaultSubscriptionOwnerOrOptions === \"string\"\n ? {\n defaultSubscriptionOwner: defaultSubscriptionOwnerOrOptions,\n defaultConsumerAuthority,\n }\n : (defaultSubscriptionOwnerOrOptions ?? {});\n\n this.defaultSubscriptionOwner = options.defaultSubscriptionOwner;\n this.defaultConsumerAuthority =\n options.defaultConsumerAuthority ?? options.defaultSubscriptionOwner;\n this.verifyNodeKeys = options.verifyNodeKeys;\n this.allowUnverifiedNodeKeysForPrivateApi =\n options.allowUnverifiedNodeKeysForPrivateApi ?? false;\n this.programId = options.programId ?? MOLPHA_PROGRAM_ID;\n this.programIdBytes = addressToBytes(this.programId);\n this.random = options.random ?? Math.random;\n }\n\n /** The configured gateway base URLs, in failover order. */\n endpointUrls(): string[] {\n return this.endpoints.map((e) => e.url);\n }\n\n /** Tries endpoints in order; returns the first node list it can fetch. */\n async getNodes(): Promise<Node[]> {\n return (await this.getNodesInfo()).nodes;\n }\n\n /**\n * `GET /v1/nodes` — the peer set plus the gateway's view of the registry\n * selection policy, which sizes the eligible set a paid source must fund.\n *\n * The `registry` block is advisory: it is whatever the gateway read from the\n * chain, and is absent when that read failed. Prefer the\n * on-chain read (`MolphaSolanaClient.getRegistrySelectionConfig`) whenever a\n * Solana connection is available — `requestSignedData` already does.\n */\n async getNodesInfo(): Promise<NodesInfo> {\n const data = await this.firstReachableData<NodesInfo>(\"/v1/nodes\");\n return {\n nodes: data.nodes,\n ...(data.registry ? { registry: data.registry } : {}),\n };\n }\n\n async isHealthy(): Promise<boolean> {\n for (const endpoint of this.endpoints) {\n try {\n const res = await fetch(`${endpoint.url}/health`, { method: \"GET\" });\n if (res.ok) return true;\n } catch {\n // try next\n }\n }\n return false;\n }\n\n /**\n * `GET {url}/v1/info` — the gateway's on-chain identity. Throws when the gateway\n * reports a `programId` different from this client's.\n */\n async fetchGatewayInfo(\n endpoint: GatewayEndpointInput,\n timeoutMs?: number,\n ): Promise<GatewayInfo> {\n const { url } = normalizeEndpoint(endpoint);\n const res = await this.fetchWithTimeout(`${url}/v1/info`, { method: \"GET\" }, timeoutMs);\n if (!res.ok) {\n throw new GatewayError(`GET /v1/info failed (${res.status})`, res.status);\n }\n const info = parseGatewayInfo(unwrapEnvelope(await res.json(), \"/v1/info\"));\n if (info.programId !== undefined && info.programId !== this.programId) {\n throw new GatewayError(\n `Gateway ${url} settles against program ${info.programId}, but this client is bound to ${this.programId}`,\n );\n }\n return info;\n }\n\n /**\n * Fetch the slow-changing round inputs (registry version, redundancy buffer,\n * node count, node set) once so they can be reused across many\n * {@link requestSignedData} calls. Pass the result back via\n * `requestSignedData({ ..., context })` to skip the prelude and run a\n * single-round \"short\" flow.\n *\n * Both fetches run in parallel. Registry version, redundancy buffer and node\n * count come from the on-chain registry read.\n */\n async prepareContext(): Promise<RoundContext> {\n const [registry, nodes] = await Promise.all([\n this.getRegistrySelectionConfig(),\n this.getNodes(),\n ]);\n return { ...registry, nodes };\n }\n\n /**\n * Request a threshold-signed data update from the gateway, with retry +\n * failover. The body is POSTed to each endpoint in order until one `completed`s.\n *\n * The round's `sourceId` is derived from `apiConfig`. The request carries no round timestamp:\n * the gateway assigns the round's `timestamp` (unix milliseconds) from its own clock\n * on a tick grid, and the committee follows from it. The result carries the assigned\n * timestamp and the signers' bitmap. A retry waits for a later tick, because a round that was\n * already reserved or dispatched cannot run again in the same one (HTTP 409).\n *\n * The request is authorized by a `RequestAuth` signature (`authSig`) over the program id, the\n * endpoint's Gateway PDA, the source id, the quorum and `authTimestamp` (unix seconds, read\n * from the local clock for every attempt). It only proves the caller may spend the\n * subscription's rounds; it is not part of the round, so the signature is recomputed for every\n * endpoint tried.\n *\n * Because the committee is unknown until the gateway stamps the round, private API\n * secrets are encrypted for **every** node of the registry; the gateway forwards only the\n * selected nodes' envelopes.\n *\n * By default this fetches the registry selection config up front and the node\n * set only when the round needs it (private API encryption, or when the registry\n * read does not report `nodeCount`). Supply `opts.context` (e.g. from\n * {@link prepareContext}) to reuse cached inputs and skip those fetches — a\n * fully-populated context collapses the call to a single POST round.\n *\n * When the API source is itself x402-paywalled, pass `opts.sourcePayment` to\n * fund it; without that, such a source throws\n * {@link UpstreamPaymentRequiredError} carrying the gateway's quote.\n */\n async requestSignedData(opts: RequestSignedDataOptions): Promise<Attestation> {\n const {\n apiConfig,\n signer,\n encrypt,\n sourcePayment,\n maxAge = 60,\n maxRetries = DEFAULT_MAX_RETRIES,\n timeoutMs = DEFAULT_ROUND_TIMEOUT_MS,\n } = opts;\n const signaturesRequired = assertSignaturesRequired(opts.signaturesRequired);\n\n const verifyNodeKeys = opts.verifyNodeKeys ?? this.verifyNodeKeys;\n const allowUnverified =\n opts.allowUnverifiedNodeKeysForPrivateApi ??\n this.allowUnverifiedNodeKeysForPrivateApi;\n if (encrypt && !verifyNodeKeys && !allowUnverified) {\n throw new Error(\n \"Private API encryption requires authenticated node keys. Provide verifyNodeKeys or set allowUnverifiedNodeKeysForPrivateApi: true for unsafe development use.\",\n );\n }\n\n // Validates `aggregation` (rejects `mode: \"exact\"`, unsupported rules, bad numbers) as\n // part of canonicalization; tolerance additionally needs a quorum of at least 3.\n const requestApiConfig = canonicalizeAPIConfig(apiConfig);\n assertAggregationQuorum(requestApiConfig.aggregation, signaturesRequired);\n const sourceIdBytes = deriveSourceId(requestApiConfig);\n const sourceId = bytesToHex(sourceIdBytes);\n\n const subscriptionOwner = opts.subscriptionOwner ?? this.defaultSubscriptionOwner;\n if (!subscriptionOwner) {\n throw new Error(\n \"subscriptionOwner is required — pass opts.subscriptionOwner or set MolphaGateway defaultSubscriptionOwner (MolphaSDK sets this from wallet.publicKey)\",\n );\n }\n const consumerAuthority =\n opts.consumerAuthority ?? this.defaultConsumerAuthority ?? subscriptionOwner;\n const authSigner = signer ?? this.defaultSigner;\n\n let round = await this.resolveContext(opts.context, encrypt !== undefined);\n let { registryVersion, redundancyBuffer } = round;\n const nodeCountOf = (r: ResolvedRound): number => {\n if (r.nodeCount !== undefined && r.nodes !== undefined && r.nodes.length !== r.nodeCount) {\n throw new Error(\n `Gateway node list has ${r.nodes.length} nodes but registry ${r.registryVersion} has node_count ${r.nodeCount} — refresh the round context`,\n );\n }\n const n = r.nodeCount ?? r.nodes?.length;\n if (n === undefined) throw new Error(\"Round context resolved neither nodeCount nor nodes\");\n return n;\n };\n let nodeCount = nodeCountOf(round);\n\n // A paywalled source is paid by the caller, per node fetch, from their own\n // wallet. Read the source's terms once, then sign fresh authorizations per\n // attempt so a retry never reuses a nonce. The registry already tells us the\n // eligible set size, so no quote round trip is needed in the common case.\n let terms: UpstreamTerms | null = null;\n let authorizations = 0;\n let requoted = false;\n if (sourcePayment) {\n terms = sourcePayment.terms\n ? validateSuppliedTerms(\n sourcePayment.terms,\n requestApiConfig.url,\n sourcePayment.assetDomain,\n )\n : await probeSource(apiConfig, {\n ...(encrypt ? { secrets: encrypt.secrets } : {}),\n ...(sourcePayment.assetDomain ? { assetDomain: sourcePayment.assetDomain } : {}),\n timeoutMs,\n });\n if (terms) {\n authorizations = effectiveSelectionSize(\n signaturesRequired,\n redundancyBuffer,\n nodeCount,\n );\n }\n }\n\n let lastError: unknown;\n // The gateway stamps a round with the tick it arrives in. A round already reserved for this\n // consumer, or already dispatched to the nodes, cannot run again in that tick: so each retry\n // waits for a later one (see retryDelayMs). The grid is the gateway's advertised one, read once\n // on the first retry, unless the caller pinned it.\n let tickMs = opts.tickMs;\n let groupSize = effectiveSelectionSize(signaturesRequired, redundancyBuffer, nodeCount);\n // Every registry node, ascending: the committee is not known until the gateway has stamped\n // the round, so the envelope set cannot be narrowed here.\n let registryIndexes = Array.from({ length: nodeCount }, (_, index) => index);\n // What made the last attempt fail decides how long to wait before the next.\n let cause: RetryCause = { kind: \"error\" };\n // A stale registry version is refreshed at most once per call, and the refreshed attempt is\n // neither counted nor delayed. `refreshedOnce` is never reset: a registry that is still stale\n // after the refresh is a terminal error, not a reason to refresh again.\n let refreshedOnce = false;\n let retryNow = false;\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n if (attempt > 0 && !retryNow) {\n tickMs ??= (await this.advertisedTickMs(timeoutMs)) ?? DEFAULT_TICK_MS;\n await sleep(retryDelayMs(cause, attempt, Date.now(), tickMs, this.random));\n }\n retryNow = false;\n cause = { kind: \"error\" };\n\n let encKeyBundle: ReturnType<typeof encryptForNodes> | undefined;\n if (encrypt) {\n const recipients = selectedNodesForPrivateApiEncryption(round.nodes ?? [], registryIndexes);\n\n if (verifyNodeKeys) {\n await verifyNodeKeys({\n sourceId,\n registryVersion,\n nodeIndexes: [...registryIndexes],\n nodes: recipients.map((node) => ({ ...node })),\n });\n }\n\n encKeyBundle = encryptForNodes(requestApiConfig, encrypt.secrets, recipients);\n }\n\n // Fresh authorizations per attempt: each carries a unique nonce, which is\n // what keeps one from settling twice.\n let sourcePayments: string[] | undefined;\n if (terms && sourcePayment && authorizations > 0) {\n sourcePayments = await signSourcePayments(\n terms,\n sourcePayment.signer,\n authorizations,\n );\n }\n\n const baseBody: Record<string, unknown> = {\n sourceId,\n registryVersion,\n maxAge,\n signaturesRequired,\n subscriptionOwner,\n consumerAuthority,\n apiConfig: requestApiConfig,\n };\n if (encKeyBundle) baseBody.encKeyBundle = encKeyBundle;\n if (sourcePayments) baseBody.sourcePayments = sourcePayments;\n\n /** Set when a relayed source quote makes this attempt's round obsolete. */\n let requote = false;\n /** Set when the gateway says the registry version is stale. */\n let restartForRefresh = false;\n for (const endpoint of this.endpoints) {\n try {\n // Fresh per attempt and per endpoint: the stamp is read from the local clock each time,\n // so a retry after a 409 never reuses an old one.\n let authSig: Uint8Array = ZERO_AUTH_SIG;\n let authTimestamp = authTimestampNow();\n if (authSigner) {\n const gateway = await this.resolveGatewayPda(endpoint, timeoutMs);\n authTimestamp = authTimestampNow();\n authSig = await authSigner(\n hashRequestAuth({\n programId: this.programIdBytes,\n gateway,\n sourceId: sourceIdBytes,\n signaturesRequired,\n authTimestamp,\n }),\n );\n }\n const body = { ...baseBody, authSig: bytesToHex0x(authSig), authTimestamp };\n\n const res = await this.post(\n `${endpoint.url}/v1/round/execute`,\n body,\n timeoutMs,\n );\n\n // The API source itself wants paying, so the gateway relays its quote\n // instead of a fetch failure. Payment is required, just not to Molpha.\n if (res.status === 402) {\n const quote = parseUpstreamQuote(\n await res.json().catch(() => null),\n );\n if (!quote) {\n throw new GatewayError(\n \"Gateway requires payment but returned no upstream source quote\",\n 402,\n );\n }\n if (!sourcePayment) throw new UpstreamPaymentRequiredError(quote);\n // Already funded to the quoted size and still refused: the source\n // rejected the payment material, which resigning cannot fix.\n if (terms && requoted && authorizations >= quote.eligibleSetSize) {\n throw new UpstreamPaymentRequiredError(\n quote,\n `Source payment was not accepted for ${quote.resource}: ${quote.error ?? \"no detail\"}`,\n );\n }\n requoted = true;\n if (quote.eligibleSetSize !== groupSize) {\n throw new GatewayError(\n `Gateway upstream quote eligibleSetSize ${quote.eligibleSetSize} does not match this round's selection size ${groupSize} (min(signaturesRequired + redundancyBuffer, nodeCount))`,\n 402,\n );\n }\n authorizations = groupSize;\n if (!terms) {\n // Terms we cannot sign are terminal, not transient: surface them\n // with the quote instead of re-probing once per attempt.\n try {\n terms = await probeSource(apiConfig, {\n ...(encrypt ? { secrets: encrypt.secrets } : {}),\n ...(sourcePayment.assetDomain\n ? { assetDomain: sourcePayment.assetDomain }\n : {}),\n timeoutMs,\n });\n } catch (err) {\n throw new UpstreamPaymentRequiredError(\n quote,\n `Cannot pay ${quote.resource}: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n if (!terms) {\n throw new UpstreamPaymentRequiredError(\n quote,\n `Gateway reports ${quote.resource} is paywalled but the source returned no payment terms`,\n );\n }\n // Recover in a later tick: this round is spent, so the next\n // attempt is a new round rather than a retry of the failed one.\n lastError = new UpstreamPaymentRequiredError(quote);\n requote = true;\n break;\n }\n\n const errorDetail = !res.ok ? await parseGatewayErrorDetail(res) : undefined;\n // The registry rolled since the inputs were read (a cached context, or a roll between\n // the read and the request). Read it afresh and retry once, without spending an attempt.\n if (\n res.status === 400 &&\n !refreshedOnce &&\n !restartForRefresh &&\n /registryVersion.*current version/i.test(errorDetail ?? \"\")\n ) {\n restartForRefresh = true;\n break;\n }\n // 400 and 401 are the request's fault; 403 is the subscription's (inactive, or the\n // round quota for the term is spent): none of them improves by trying again.\n if (res.status === 400 || res.status === 401 || res.status === 403) {\n throw new GatewayError(\n formatGatewayErrorMessage(\"Gateway rejected request\", res.status, errorDetail),\n res.status,\n );\n }\n if (res.status === 503 || res.status === 429) {\n lastError = new GatewayError(\n formatGatewayErrorMessage(\n res.status === 429 ? \"Gateway rate limited\" : \"Gateway unavailable\",\n res.status,\n errorDetail,\n ),\n res.status,\n );\n const wait = retryAfterMs(res);\n cause = mergeCause(cause, wait === undefined ? { kind: \"busy\" } : { kind: \"busy\", retryAfterMs: wait });\n continue; // a different gateway may already hold the AggSig\n }\n if (!res.ok) {\n lastError = new GatewayError(\n formatGatewayErrorMessage(\"Gateway error\", res.status, errorDetail),\n res.status,\n );\n // This consumer already has a round for the source in this tick: wait for the next.\n if (res.status === 409) cause = mergeCause(cause, { kind: \"conflict\" });\n continue;\n }\n const json = (await res.json()) as GatewaySignedDataResponse;\n if (json.status === \"completed\" && json.data) {\n return toResult(json.data, {\n sourceId,\n signaturesRequired,\n ...(requestApiConfig.aggregation\n ? { aggregation: requestApiConfig.aggregation }\n : {}),\n });\n }\n lastError = new Error(`Gateway returned status: ${json.status}`);\n } catch (err) {\n // An unpayable or refused source is terminal — never retried blindly.\n if (err instanceof UpstreamPaymentRequiredError) throw err;\n if (\n err instanceof GatewayError &&\n (err.status === 400 || err.status === 401 || err.status === 402 || err.status === 403)\n ) {\n throw err;\n }\n lastError = err; // timeout / network / identity lookup → next endpoint\n }\n }\n if (restartForRefresh) {\n round = await this.resolveContext(undefined, encrypt !== undefined);\n ({ registryVersion, redundancyBuffer } = round);\n nodeCount = nodeCountOf(round);\n groupSize = effectiveSelectionSize(signaturesRequired, redundancyBuffer, nodeCount);\n registryIndexes = Array.from({ length: nodeCount }, (_, index) => index);\n refreshedOnce = true;\n retryNow = true;\n attempt--; // the refreshed request is the same attempt, with the right inputs\n continue;\n }\n // A requote invalidates this attempt's body for every endpoint alike.\n if (requote) continue;\n }\n throw lastError instanceof Error\n ? lastError\n : new Error(\"Gateway round failed after retries\");\n }\n\n /**\n * Resolve the round inputs, fetching only the fields absent from `cached`.\n * Registry version, redundancy buffer and node count are treated as a unit (one\n * snapshot read). The node list is fetched only when `needNodes` (private API\n * encryption) or when nothing else can tell us the node count.\n */\n private async resolveContext(\n cached: Partial<RoundContext> | undefined,\n needNodes: boolean,\n ): Promise<ResolvedRound> {\n const hasRegistry =\n cached?.registryVersion !== undefined && cached?.redundancyBuffer !== undefined;\n const registryPromise: Promise<RegistrySelectionConfig> = hasRegistry\n ? Promise.resolve({\n registryVersion: cached.registryVersion!,\n redundancyBuffer: cached.redundancyBuffer!,\n ...(cached.nodeCount !== undefined ? { nodeCount: cached.nodeCount } : {}),\n })\n : this.getRegistrySelectionConfig();\n\n if (cached?.nodes !== undefined) {\n return { ...(await registryPromise), nodes: cached.nodes };\n }\n if (needNodes) {\n const [registry, nodes] = await Promise.all([registryPromise, this.getNodes()]);\n return { ...registry, nodes };\n }\n const registry = await registryPromise;\n if (registry.nodeCount !== undefined) return registry;\n return { ...registry, nodes: await this.getNodes() };\n }\n\n /**\n * The gateway's advertised tick grid, read once per endpoint and only when a retry needs it. Any\n * failure (an old gateway without `/v1/info`, a timeout) means \"not advertised\", so the caller\n * falls back to the default; a failure is not cached.\n */\n private async advertisedTickMs(timeoutMs: number): Promise<number | undefined> {\n for (const endpoint of this.endpoints) {\n let pending = this.advertisedInfo.get(endpoint.url);\n if (!pending) {\n pending = this.fetchGatewayInfo(endpoint, Math.min(timeoutMs, 3_000)).catch(() => undefined);\n this.advertisedInfo.set(endpoint.url, pending);\n }\n const info = await pending;\n if (info === undefined) {\n this.advertisedInfo.delete(endpoint.url);\n continue;\n }\n if (info.tickMs !== undefined) return info.tickMs;\n }\n return undefined;\n }\n\n /** Gateway PDA bytes for an endpoint, cached per URL. A failed lookup is not cached. */\n private resolveGatewayPda(\n endpoint: GatewayEndpoint,\n timeoutMs: number,\n ): Promise<Uint8Array> {\n let pending = this.gatewayPdas.get(endpoint.url);\n if (!pending) {\n pending = this.lookupGatewayPda(endpoint, timeoutMs).catch((err: unknown) => {\n this.gatewayPdas.delete(endpoint.url);\n throw err;\n });\n this.gatewayPdas.set(endpoint.url, pending);\n }\n return pending;\n }\n\n private async lookupGatewayPda(\n endpoint: GatewayEndpoint,\n timeoutMs: number,\n ): Promise<Uint8Array> {\n const authority =\n endpoint.gatewayAuthority ??\n (await this.fetchGatewayInfo(endpoint, timeoutMs)).gatewayAuthority;\n return deriveGatewayPda(authority, this.programId);\n }\n\n private async firstReachableData<T>(path: string): Promise<T> {\n let lastError: unknown;\n for (const endpoint of this.endpoints) {\n try {\n const res = await fetch(`${endpoint.url}${path}`, { method: \"GET\" });\n if (res.ok) {\n return unwrapEnvelope(await res.json(), path, res.status) as T;\n }\n lastError = new GatewayError(`GET ${path} failed (${res.status})`, res.status);\n } catch (err) {\n lastError = err;\n }\n }\n throw lastError instanceof Error ? lastError : new Error(`GET ${path} failed`);\n }\n\n private async post(\n url: string,\n body: unknown,\n timeoutMs: number,\n ): Promise<Response> {\n return this.fetchWithTimeout(\n url,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n },\n timeoutMs,\n );\n }\n\n private async fetchWithTimeout(\n url: string,\n init: RequestInit,\n timeoutMs?: number,\n ): Promise<Response> {\n if (timeoutMs === undefined) {\n return fetch(url, init);\n }\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n return await fetch(url, { ...init, signal: controller.signal });\n } finally {\n clearTimeout(timer);\n }\n }\n}\n\nfunction assertSignaturesRequired(value: number): number {\n if (!Number.isInteger(value) || value < 1 || value > 255) {\n throw new RangeError(`signaturesRequired must be an integer in 1..255, got ${value}`);\n }\n return value;\n}\n\n/** Unwrap the gateway `{ status, data }` envelope. */\nfunction unwrapEnvelope(json: unknown, path: string, status?: number): unknown {\n const wrapped = json as Partial<GatewayEnvelope<unknown>> | null;\n if (wrapped === null || typeof wrapped !== \"object\" || wrapped.data === undefined) {\n throw new GatewayError(`GET ${path} returned malformed payload`, status);\n }\n return wrapped.data;\n}\n\nfunction selectedNodesForPrivateApiEncryption(\n nodes: Node[],\n selectedIndexes: number[],\n): Node[] {\n if (!Array.isArray(nodes)) {\n throw new Error(\"Private API encryption requires a gateway node array\");\n }\n if (selectedIndexes.length === 0) {\n throw new Error(\"Private API encryption requires at least one selected node\");\n }\n\n const selectedIndexSet = new Set<number>();\n for (const index of selectedIndexes) {\n if (!Number.isInteger(index) || index < 0) {\n throw new Error(\n `Private API encryption selected index must be a non-negative integer: ${index}`,\n );\n }\n if (selectedIndexSet.has(index)) {\n throw new Error(`Private API encryption selected index is duplicated: ${index}`);\n }\n selectedIndexSet.add(index);\n }\n\n const selectedByIndex = new Map<number, Node>();\n const nodeIndexes = new Set<number>();\n for (const node of nodes) {\n if (!Number.isInteger(node.index) || node.index < 0) {\n throw new Error(`Gateway node index must be a non-negative integer: ${node.index}`);\n }\n if (node.index >= nodes.length) {\n throw new Error(\n `Gateway node index ${node.index} is outside the node list range 0..${nodes.length - 1}`,\n );\n }\n if (nodeIndexes.has(node.index)) {\n throw new Error(`Gateway returned duplicate node index: ${node.index}`);\n }\n nodeIndexes.add(node.index);\n if (!selectedIndexSet.has(node.index)) continue;\n selectedByIndex.set(node.index, node);\n }\n\n const selectedSigningKeys = new Set<string>();\n return selectedIndexes.map((index) => {\n const node = selectedByIndex.get(index);\n if (!node) {\n throw new Error(`Gateway node list is missing selected node index: ${index}`);\n }\n const signingKey = normalizeSecp256k1PublicKeyHex(\n node.signingKey,\n `Gateway selected node ${index} signingKey`,\n );\n if (selectedSigningKeys.has(signingKey)) {\n throw new Error(`Gateway returned duplicate selected node signingKey: ${index}`);\n }\n selectedSigningKeys.add(signingKey);\n return node;\n });\n}\n\nfunction formatGatewayErrorMessage(\n prefix: string,\n status: number,\n detail?: string,\n): string {\n if (!detail) return `${prefix} (${status})`;\n return `${prefix} (${status}): ${detail}`;\n}\n\nasync function parseGatewayErrorDetail(res: Response): Promise<string | undefined> {\n try {\n const text = (await res.text()).trim();\n if (!text) return undefined;\n try {\n const parsed = JSON.parse(text) as unknown;\n if (parsed && typeof parsed === \"object\") {\n const record = parsed as Record<string, unknown>;\n const message = record.error ?? record.message ?? record.detail;\n if (typeof message === \"string\" && message.trim()) return message.trim();\n }\n } catch {\n // fall back to raw body below\n }\n return text;\n } catch {\n return undefined;\n }\n}\n\nfunction normalizeHex(value: string): string {\n return (value.startsWith(\"0x\") || value.startsWith(\"0X\") ? value.slice(2) : value).toLowerCase();\n}\n\n/**\n * Lift a nested `attestation` (current gateways) into the flat field names the rest of this\n * module reads, leaving the older flat body untouched. Top-level `value`, `fresh`,\n * `configHash` and `aggregation` are the same in both shapes.\n */\nfunction flattenGatewayData(data: GatewaySignedData): GatewaySignedData {\n const nested = data.attestation;\n if (!nested) return data;\n const { attestation: _nested, ...rest } = data;\n const { payload, signature } = nested;\n const timestamp = payload?.timestamp ?? payload?.canonicalTimestamp;\n return {\n ...rest,\n ...(payload?.sourceId !== undefined ? { sourceId: payload.sourceId } : {}),\n ...(payload?.value !== undefined ? { valuePacked: payload.value } : {}),\n ...(timestamp !== undefined ? { timestamp } : {}),\n ...(payload?.registryVersion !== undefined ? { registryVersion: payload.registryVersion } : {}),\n ...(payload?.signaturesRequired !== undefined\n ? { signaturesRequired: payload.signaturesRequired }\n : {}),\n ...(signature?.signersBitmap !== undefined ? { signersBitmap: signature.signersBitmap } : {}),\n ...(signature?.signature !== undefined ? { s: signature.signature } : {}),\n ...(signature?.commitment !== undefined ? { commitmentAddr: signature.commitment } : {}),\n };\n}\n\n/**\n * Shape the gateway payload into an {@link Attestation}. `sourceId` and\n * `signaturesRequired` must echo the request (they key the feed and the signed message).\n * Everything else the verifiers recompute comes from the response and is refused when absent\n * rather than filled in locally: the gateway assigns `timestamp` (unix milliseconds), so\n * the caller cannot know it, and the signing set is whoever the nodes signed with.\n *\n * Tolerance mode: `value` is rendered from the signed `payload.value` at the source's\n * `decimals` rather than trusted as sent.\n */\nfunction toResult(\n raw: GatewaySignedData,\n ctx: {\n sourceId: string;\n signaturesRequired: number;\n aggregation?: AggregationConfig;\n },\n): Attestation {\n if (raw.attestation) {\n const { payload, signature } = raw.attestation;\n if (!payload || !signature) {\n throw new GatewayError(\"Gateway response is missing the attestation\");\n }\n }\n const data = flattenGatewayData(raw);\n if (data.sourceId !== undefined && normalizeHex(data.sourceId) !== ctx.sourceId) {\n throw new GatewayError(\n `Gateway response sourceId ${data.sourceId} does not match the requested ${ctx.sourceId}`,\n );\n }\n if (data.configHash !== undefined && normalizeHex(data.configHash) !== ctx.sourceId) {\n throw new GatewayError(\n `Gateway response configHash ${data.configHash} does not match the requested sourceId ${ctx.sourceId}`,\n );\n }\n if (\n data.signaturesRequired !== undefined &&\n data.signaturesRequired !== ctx.signaturesRequired\n ) {\n throw new GatewayError(\n `Gateway response signaturesRequired ${data.signaturesRequired} does not match the requested ${ctx.signaturesRequired}`,\n );\n }\n if (data.aggregation !== undefined && data.aggregation !== null) {\n let echoed: AggregationConfig | undefined;\n try {\n echoed = canonicalizeAggregation(data.aggregation as AggregationConfig);\n } catch (err) {\n throw new GatewayError(\n `Gateway response carries an invalid aggregation echo: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n if (!ctx.aggregation) {\n throw new GatewayError(\n \"Gateway response carries an aggregation, but the request was exact mode (no aggregation)\",\n );\n }\n if (JSON.stringify(echoed) !== JSON.stringify(ctx.aggregation)) {\n throw new GatewayError(\n `Gateway response aggregation ${JSON.stringify(echoed)} does not match the requested ${JSON.stringify(ctx.aggregation)}`,\n );\n }\n }\n const fields = {\n timestamp: data.timestamp,\n registryVersion: data.registryVersion,\n value: data.valuePacked,\n signersBitmap: data.signersBitmap,\n s: data.s,\n commitmentAddr: data.commitmentAddr,\n };\n for (const [name, field] of Object.entries(fields)) {\n if (field === undefined || field === \"\") {\n throw new GatewayError(`Gateway response is missing ${name}`);\n }\n }\n let value = data.value ?? \"\";\n if (ctx.aggregation) {\n try {\n value = formatInt256Decimal(fields.value!, ctx.aggregation.numeric.decimals);\n } catch (err) {\n throw new GatewayError(\n `Gateway tolerance response value is not an int256 word: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n return {\n payload: {\n sourceId: ctx.sourceId,\n value: fields.value!,\n timestamp: fields.timestamp!,\n registryVersion: fields.registryVersion!,\n signaturesRequired: ctx.signaturesRequired,\n },\n signature: {\n signersBitmap: fields.signersBitmap!,\n s: fields.s!,\n commitmentAddr: fields.commitmentAddr!,\n },\n value,\n fresh: data.fresh ?? true,\n };\n}\n","/**\n * Coalition key: the affine sum of the signers' secp256k1 public keys.\n *\n * `submit_attestation` takes it as untrusted instruction data and checks it projectively\n * against its own sum of the signers' `Node` keys (`X ≡ x·Z²`, `Y ≡ y·Z³`), so a wrong key\n * only fails the transaction — it can never select another key. It is a property of the\n * point, not of any library's arithmetic: summing in any order with any secp256k1\n * implementation gives the same `(x, y)`. Mirrors `molpha_verifier::coalition_key`.\n */\nimport { secp256k1 } from \"@noble/curves/secp256k1.js\";\nimport { bytesToHex, hexToBytes, u256beFromBigInt } from \"./encoding.js\";\n\n/** Affine coalition key, 32-byte big-endian coordinates (`CoalitionKey` in the program IDL). */\nexport interface CoalitionKey {\n x: Uint8Array;\n y: Uint8Array;\n}\n\n/** A signer's public key: SEC1 compressed / uncompressed (bytes or hex), or affine `(x, y)`. */\nexport type Secp256k1KeyInput =\n | Uint8Array\n | string\n | { x: Uint8Array | string; y: Uint8Array | string };\n\ntype Point = InstanceType<typeof secp256k1.Point>;\n\nfunction coordinate(value: Uint8Array | string, label: string): bigint {\n const bytes = typeof value === \"string\" ? hexToBytes(value) : value;\n if (bytes.length !== 32) {\n throw new RangeError(`${label}: expected 32 bytes, got ${bytes.length}`);\n }\n return BigInt(\"0x\" + bytesToHex(bytes));\n}\n\nfunction toPoint(key: Secp256k1KeyInput, index: number): Point {\n const label = `signer key ${index}`;\n try {\n if (typeof key === \"string\" || key instanceof Uint8Array) {\n return secp256k1.Point.fromBytes(typeof key === \"string\" ? hexToBytes(key) : key);\n }\n const point = secp256k1.Point.fromAffine({\n x: coordinate(key.x, `${label}.x`),\n y: coordinate(key.y, `${label}.y`),\n });\n point.assertValidity();\n return point;\n } catch (err) {\n throw new Error(\n `${label} is not a valid secp256k1 public key: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n}\n\n/**\n * Affine sum of `keys` as a {@link CoalitionKey}.\n *\n * @throws {Error} on an empty set, an invalid point, or a sum at infinity (the verifier\n * rejects both of the latter as `InvalidAggregateSignature`).\n */\nexport function computeCoalitionKey(keys: Iterable<Secp256k1KeyInput>): CoalitionKey {\n let sum: Point | undefined;\n let index = 0;\n for (const key of keys) {\n const point = toPoint(key, index++);\n sum = sum === undefined ? point : sum.add(point);\n }\n if (sum === undefined) throw new Error(\"coalition key needs at least one signer key\");\n if (sum.is0()) throw new Error(\"coalition key is the point at infinity\");\n const { x, y } = sum.toAffine();\n return { x: u256beFromBigInt(x), y: u256beFromBigInt(y) };\n}\n","/**\n * Account views and remaining-accounts construction for `submit_attestation`.\n *\n * `submit_attestation` (program 3d01170, `utils/attestation.rs::verify_attestation_core`)\n * takes exactly one `Node` account per set signer bit, read-only, in ascending bit order\n * (`remaining_accounts.len() == popcount(signersBitmap)`); the verifier requires\n * `account == registry.nodes[bit]` and reads each signer's secp256k1 key from it.\n */\nimport type { Address } from \"@solana/kit\";\nimport { hexToBytes } from \"../core/encoding.js\";\nimport { selectedIndices } from \"../core/selection.js\";\nimport { type SolanaAccountMeta, toPublicKey } from \"./kit.js\";\n\n/** On-chain `RegistryState` (Anchor camelCase): pointer to the current immutable snapshot. */\nexport interface RegistryStateView {\n currentVersion: number;\n nextVersion: number;\n}\n\n/**\n * Immutable, version-addressed `Registry` snapshot. `nodes` holds only the populated\n * `[..nodeCount]` entries; entry `i` is the `Node` account address for signer bit `i`.\n */\nexport interface RegistryView {\n version: number;\n nodeCount: number;\n /** Selection padding: `min(signaturesRequired + redundancyBuffer, nodeCount)`. */\n redundancyBuffer: number;\n nodes: Address[];\n /** Unix seconds until which this superseded snapshot still verifies; `0n` while current. */\n graceActiveUntil: bigint;\n /** Inclusive creation time (unix seconds): a version cannot verify a round dated before it existed. */\n activeFrom: bigint;\n}\n\n/** Set-bit indices of a 32-byte big-endian bitmap (full 256-bit scan). */\nexport function bitmapToIndices(signersBitmapHex: string): number[] {\n return selectedIndices(hexToBytes(signersBitmapHex), 256);\n}\n\n/**\n * Signer `Node` accounts for `submit_attestation`, in ascending signers-bitmap bit order.\n * Bit `i` resolves to `registry.nodes[i]` of the snapshot the round was signed against;\n * a bit at or beyond `nodeCount` can never verify, so it is rejected client-side.\n */\nexport function resolveRemainingAccounts(\n signersBitmapHex: string,\n registry: RegistryView,\n): SolanaAccountMeta[] {\n return bitmapToIndices(signersBitmapHex).map((bit) => {\n const node = registry.nodes[bit];\n if (bit >= registry.nodeCount || node === undefined) {\n throw new Error(\n `InvalidNodeIndex: signer bit ${bit} is outside registry ${registry.version} node_count ${registry.nodeCount}`,\n );\n }\n return { pubkey: toPublicKey(node), isSigner: false, isWritable: false };\n });\n}\n","/**\n * Consumer PDA derivations. Seed byte strings are cross-checked against the IDL const\n * seeds in `test/solana.test.ts` / `test/idl.test.ts`.\n */\nimport type { Address } from \"@solana/kit\";\nimport { ensureLength, u32le, utf8 } from \"../core/encoding.js\";\nimport {\n addressBytes,\n findProgramAddressSync,\n type SolanaAddress,\n} from \"./kit.js\";\n\nconst SEED_CONFIG = utf8(\"molpha_config\");\nconst SEED_REGISTRY = utf8(\"molpha_registry\");\nconst SEED_NODE = utf8(\"molpha_node\");\nconst SEED_PLAN = utf8(\"molpha_plan\");\nconst SEED_SUBSCRIPTION = utf8(\"molpha_subscription\");\nconst SEED_FEED = utf8(\"molpha_feed\");\nconst SEED_GATEWAY = utf8(\"molpha_gateway\");\n\nconst pda = (seeds: Uint8Array[], programId: SolanaAddress): Address =>\n findProgramAddressSync(seeds, programId);\n\nexport const protocolConfigPda = (programId: SolanaAddress): Address =>\n pda([SEED_CONFIG], programId);\n\n/** Mutable pointer to the current registry snapshot: `[\"molpha_registry\"]`. */\nexport const registryStatePda = (programId: SolanaAddress): Address =>\n pda([SEED_REGISTRY], programId);\n\n/** Immutable, version-addressed registry snapshot: `[\"molpha_registry\", version u32 LE]`. */\nexport const registryPda = (version: number, programId: SolanaAddress): Address =>\n pda([SEED_REGISTRY, u32le(version)], programId);\n\n/**\n * Authority-keyed `Node` account: `[\"molpha_node\", authority]` (`Node.authority`). Registry\n * snapshots store these addresses directly in `nodes[i]`, so consumers rarely need to\n * derive them.\n */\nexport const nodePda = (authority: SolanaAddress, programId: SolanaAddress): Address =>\n pda([SEED_NODE, addressBytes(authority)], programId);\n\n/** Bonded gateway account: `[\"molpha_gateway\", gatewayAuthority]` — the `gateway` bound into `RequestAuth`. */\nexport const gatewayPda = (authority: SolanaAddress, programId: SolanaAddress): Address =>\n pda([SEED_GATEWAY, addressBytes(authority)], programId);\n\n/** Plan PDA is `[b\"molpha_plan\", [planType as u8]]`. */\nexport const planPda = (planId: number, programId: SolanaAddress): Address =>\n pda([SEED_PLAN, Uint8Array.of(planId)], programId);\n\nexport const subscriptionPda = (owner: SolanaAddress, programId: SolanaAddress): Address =>\n pda([SEED_SUBSCRIPTION, addressBytes(owner)], programId);\n\n/**\n * Feed state, keyed per `(sourceId, signaturesRequired, submitter)`:\n * `[\"molpha_feed\", sourceId, [signaturesRequired], submitter]`. Created lazily by the\n * first `submit_attestation` from that submitter.\n */\nexport function feedPda(\n sourceId: Uint8Array,\n signaturesRequired: number,\n submitter: SolanaAddress,\n programId: SolanaAddress,\n): Address {\n ensureLength(sourceId, 32, \"sourceId\");\n if (!Number.isInteger(signaturesRequired) || signaturesRequired < 0 || signaturesRequired > 255) {\n throw new RangeError(`signaturesRequired out of u8 range: ${signaturesRequired}`);\n }\n return pda(\n [SEED_FEED, sourceId, Uint8Array.of(signaturesRequired), addressBytes(submitter)],\n programId,\n );\n}\n","{\n \"address\": \"chivcFQgxzwkpLvW41PV431HQ4dYpaW3povQH3AdpQt\",\n \"metadata\": {\n \"name\": \"molpha\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Molpha Oracle Solana Program - Merged from molpha-solana and molpha-feed\"\n },\n \"instructions\": [\n {\n \"name\": \"add_delegate\",\n \"discriminator\": [\n 3,\n 67,\n 128,\n 218,\n 69,\n 139,\n 53,\n 88\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"subscription\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 115,\n 117,\n 98,\n 115,\n 99,\n 114,\n 105,\n 112,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n }\n ]\n }\n },\n {\n \"name\": \"delegate_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 100,\n 101,\n 108,\n 101,\n 103,\n 97,\n 116,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"args.delegate\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"AddDelegateArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"add_plan\",\n \"discriminator\": [\n 199,\n 79,\n 170,\n 244,\n 91,\n 21,\n 110,\n 218\n ],\n \"accounts\": [\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"plan\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\n \"protocol_config\"\n ]\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"config\",\n \"type\": {\n \"defined\": {\n \"name\": \"PlanConfig\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"claim_node_rewards\",\n \"discriminator\": [\n 151,\n 201,\n 146,\n 161,\n 104,\n 100,\n 214,\n 1\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\n \"node\"\n ]\n },\n {\n \"name\": \"protocol_config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"node\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 110,\n 111,\n 100,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"authority\"\n }\n ]\n }\n },\n {\n \"name\": \"treasury\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"destination\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"authority\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"close_epoch\",\n \"discriminator\": [\n 13,\n 87,\n 7,\n 133,\n 109,\n 14,\n 83,\n 25\n ],\n \"accounts\": [\n {\n \"name\": \"epoch_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"epoch\"\n }\n ]\n }\n },\n {\n \"name\": \"open_epoch_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"open_epoch\"\n }\n ]\n }\n },\n {\n \"name\": \"rent_payer\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"open_epoch\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"close_ticket_marker\",\n \"discriminator\": [\n 26,\n 65,\n 122,\n 188,\n 125,\n 132,\n 159,\n 107\n ],\n \"accounts\": [\n {\n \"name\": \"ticket_marker\",\n \"writable\": true\n },\n {\n \"name\": \"submitter\",\n \"writable\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"credit_epoch_rewards\",\n \"discriminator\": [\n 212,\n 185,\n 139,\n 96,\n 103,\n 248,\n 140,\n 198\n ],\n \"accounts\": [\n {\n \"name\": \"protocol_config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"epoch_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"epoch\"\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"slots\",\n \"type\": {\n \"vec\": \"u16\"\n }\n }\n ]\n },\n {\n \"name\": \"deactivate_gateway\",\n \"discriminator\": [\n 2,\n 119,\n 77,\n 158,\n 3,\n 8,\n 116,\n 252\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\n \"protocol_config\"\n ]\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"gateway\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"deactivate_node\",\n \"discriminator\": [\n 242,\n 185,\n 114,\n 146,\n 22,\n 248,\n 23,\n 157\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"registry_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"current_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.current_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"new_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.next_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"node\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 110,\n 111,\n 100,\n 101\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"node_owner\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"node_owner\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"extend_subscription\",\n \"discriminator\": [\n 47,\n 230,\n 116,\n 118,\n 171,\n 228,\n 24,\n 46\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"subscription\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 115,\n 117,\n 98,\n 115,\n 99,\n 114,\n 105,\n 112,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n }\n ]\n }\n },\n {\n \"name\": \"plan\"\n },\n {\n \"name\": \"owner_usdc\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"treasury\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"finalize_epoch\",\n \"discriminator\": [\n 159,\n 93,\n 117,\n 217,\n 63,\n 44,\n 249,\n 76\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"target\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"epoch\"\n }\n ]\n }\n },\n {\n \"name\": \"next\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"epoch.saturating_add(1)\"\n }\n ]\n }\n },\n {\n \"name\": \"successor\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"epoch.saturating_add(2)\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"initialize\",\n \"discriminator\": [\n 175,\n 175,\n 109,\n 31,\n 13,\n 152,\n 155,\n 237\n ],\n \"accounts\": [\n {\n \"name\": \"protocol_config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"registry_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 0,\n 0,\n 0,\n 0\n ]\n }\n ]\n }\n },\n {\n \"name\": \"usdc_mint\"\n },\n {\n \"name\": \"treasury\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"usdc_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"node_deposit_vault\",\n \"docs\": [\n \"One vault for every node's security deposit, held apart from protocol revenue.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"registry_state\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"usdc_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"epoch0\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ]\n }\n ]\n }\n },\n {\n \"name\": \"epoch1\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"InitializeArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"register_gateway\",\n \"discriminator\": [\n 183,\n 184,\n 135,\n 228,\n 71,\n 191,\n 76,\n 222\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\n \"protocol_config\"\n ]\n },\n {\n \"name\": \"protocol_config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"gateway\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 103,\n 97,\n 116,\n 101,\n 119,\n 97,\n 121\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"args.authority\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"RegisterGatewayArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"register_node\",\n \"discriminator\": [\n 102,\n 85,\n 117,\n 114,\n 194,\n 188,\n 211,\n 168\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\n \"protocol_config\"\n ]\n },\n {\n \"name\": \"node_owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"registry_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"current_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.current_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"new_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.next_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"node\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 110,\n 111,\n 100,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"node_owner\"\n }\n ]\n }\n },\n {\n \"name\": \"secp256k1_key_claim\",\n \"writable\": true\n },\n {\n \"name\": \"owner_usdc\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"node_owner\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"node_deposit_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"registry_state\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"RegisterNodeArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"reinstate_node\",\n \"discriminator\": [\n 13,\n 253,\n 148,\n 213,\n 56,\n 50,\n 49,\n 121\n ],\n \"accounts\": [\n {\n \"name\": \"caller\",\n \"docs\": [\n \"Permissionless after `frozen_until`; authority may reinstate earlier.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"registry_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"current_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.current_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"new_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.next_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"node\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 110,\n 111,\n 100,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"node.authority\",\n \"account\": \"Node\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"remove_delegate\",\n \"discriminator\": [\n 94,\n 37,\n 16,\n 59,\n 7,\n 84,\n 97,\n 211\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"subscription\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 115,\n 117,\n 98,\n 115,\n 99,\n 114,\n 105,\n 112,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n }\n ]\n }\n },\n {\n \"name\": \"delegate_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 100,\n 101,\n 108,\n 101,\n 103,\n 97,\n 116,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"args.delegate\"\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemoveDelegateArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"slash_offence\",\n \"discriminator\": [\n 108,\n 88,\n 94,\n 69,\n 17,\n 2,\n 103,\n 124\n ],\n \"accounts\": [\n {\n \"name\": \"reporter\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"registry_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"evidence_registry\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"offence\"\n }\n ]\n }\n },\n {\n \"name\": \"current_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.current_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"new_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.next_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"punishment_case\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 112,\n 117,\n 110,\n 105,\n 115,\n 104,\n 109,\n 101,\n 110,\n 116\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"offence\"\n }\n ]\n }\n },\n {\n \"name\": \"node_deposit_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"registry_state\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"treasury\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"reporter_usdc\",\n \"docs\": [\n \"Must already exist. Creating it here would cost two more transaction slots, which the\",\n \"signer list needs more than a reporter needs the convenience.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"reporter\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"offence\",\n \"type\": {\n \"defined\": {\n \"name\": \"Offence\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"submit_attestation\",\n \"discriminator\": [\n 238,\n 220,\n 255,\n 105,\n 183,\n 211,\n 40,\n 83\n ],\n \"accounts\": [\n {\n \"name\": \"submitter\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"registry\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"args.attestation.payload.registry_version\"\n }\n ]\n }\n },\n {\n \"name\": \"feed\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 102,\n 101,\n 101,\n 100\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"args.attestation.payload.source_id\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"args.attestation.payload.signatures_required\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"submitter\"\n }\n ]\n }\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"SubmitAttestationArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"submit_ticket\",\n \"discriminator\": [\n 180,\n 57,\n 11,\n 108,\n 162,\n 36,\n 145,\n 150\n ],\n \"accounts\": [\n {\n \"name\": \"submitter\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"registry\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"attestation.payload.registry_version\"\n }\n ]\n }\n },\n {\n \"name\": \"epoch_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"epoch_index\"\n }\n ]\n }\n },\n {\n \"name\": \"gateway\",\n \"docs\": [\n \"Gateway whose authority signed the round dispatch.\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 103,\n 97,\n 116,\n 101,\n 119,\n 97,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"gateway.authority\",\n \"account\": \"Gateway\"\n }\n ]\n }\n },\n {\n \"name\": \"ticket_marker\",\n \"writable\": true\n },\n {\n \"name\": \"instructions_sysvar\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"attestation\",\n \"type\": {\n \"defined\": {\n \"name\": \"Attestation\"\n }\n }\n },\n {\n \"name\": \"roster_slots\",\n \"type\": {\n \"vec\": \"u16\"\n }\n },\n {\n \"name\": \"coalition_key\",\n \"type\": {\n \"defined\": {\n \"name\": \"CoalitionKey\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"subscribe\",\n \"discriminator\": [\n 254,\n 28,\n 191,\n 138,\n 156,\n 179,\n 183,\n 53\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"plan\"\n },\n {\n \"name\": \"subscription\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 115,\n 117,\n 98,\n 115,\n 99,\n 114,\n 105,\n 112,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n }\n ]\n }\n },\n {\n \"name\": \"owner_usdc\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"treasury\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"plan_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"PlanType\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"sweep_treasury_revenue\",\n \"discriminator\": [\n 72,\n 190,\n 138,\n 104,\n 78,\n 128,\n 112,\n 59\n ],\n \"accounts\": [\n {\n \"name\": \"protocol_config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"treasury\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"epoch_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 101,\n 112,\n 111,\n 99,\n 104\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"open_epoch\"\n }\n ]\n }\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"open_epoch\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"update_config\",\n \"discriminator\": [\n 29,\n 158,\n 252,\n 191,\n 10,\n 83,\n 219,\n 99\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\n \"protocol_config\"\n ]\n },\n {\n \"name\": \"protocol_config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"UpdateConfigArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"update_node_endpoint\",\n \"discriminator\": [\n 63,\n 119,\n 147,\n 11,\n 73,\n 81,\n 230,\n 155\n ],\n \"accounts\": [\n {\n \"name\": \"node_owner\",\n \"signer\": true\n },\n {\n \"name\": \"node\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 110,\n 111,\n 100,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"node_owner\"\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"UpdateNodeEndpointArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"update_plan\",\n \"discriminator\": [\n 119,\n 112,\n 58,\n 60,\n 76,\n 205,\n 1,\n 100\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\n \"protocol_config\"\n ]\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"plan\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"config\",\n \"type\": {\n \"defined\": {\n \"name\": \"PlanConfig\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"update_registry_policy\",\n \"discriminator\": [\n 89,\n 241,\n 118,\n 140,\n 129,\n 101,\n 42,\n 161\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\n \"protocol_config\"\n ]\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"registry_state\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"current_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.current_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"new_registry\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"registry_state.next_version\",\n \"account\": \"RegistryState\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"redundancy_buffer\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"withdraw_node_deposit\",\n \"discriminator\": [\n 53,\n 141,\n 47,\n 100,\n 83,\n 245,\n 210,\n 6\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_config\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"node\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 110,\n 111,\n 100,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"authority\"\n }\n ]\n }\n },\n {\n \"name\": \"registry_state\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"node_deposit_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"registry_state\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"destination\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"authority\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"withdraw_protocol_reserve\",\n \"discriminator\": [\n 68,\n 111,\n 180,\n 79,\n 228,\n 72,\n 116,\n 12\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"signer\": true,\n \"relations\": [\n \"protocol_config\"\n ]\n },\n {\n \"name\": \"protocol_config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 111,\n 108,\n 112,\n 104,\n 97,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"treasury\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"protocol_config.usdc_mint\",\n \"account\": \"ProtocolConfig\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"destination\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"Delegate\",\n \"discriminator\": [\n 92,\n 145,\n 166,\n 111,\n 11,\n 38,\n 38,\n 247\n ]\n },\n {\n \"name\": \"EpochState\",\n \"discriminator\": [\n 191,\n 63,\n 139,\n 237,\n 144,\n 12,\n 223,\n 210\n ]\n },\n {\n \"name\": \"Feed\",\n \"discriminator\": [\n 69,\n 191,\n 16,\n 227,\n 132,\n 187,\n 84,\n 227\n ]\n },\n {\n \"name\": \"Gateway\",\n \"discriminator\": [\n 210,\n 132,\n 162,\n 254,\n 10,\n 224,\n 45,\n 86\n ]\n },\n {\n \"name\": \"Node\",\n \"discriminator\": [\n 208,\n 53,\n 1,\n 3,\n 49,\n 122,\n 180,\n 49\n ]\n },\n {\n \"name\": \"Plan\",\n \"discriminator\": [\n 161,\n 231,\n 251,\n 119,\n 2,\n 12,\n 162,\n 2\n ]\n },\n {\n \"name\": \"ProtocolConfig\",\n \"discriminator\": [\n 207,\n 91,\n 250,\n 28,\n 152,\n 179,\n 215,\n 209\n ]\n },\n {\n \"name\": \"PunishmentCase\",\n \"discriminator\": [\n 215,\n 186,\n 32,\n 101,\n 142,\n 74,\n 46,\n 130\n ]\n },\n {\n \"name\": \"Registry\",\n \"discriminator\": [\n 47,\n 174,\n 110,\n 246,\n 184,\n 182,\n 252,\n 218\n ]\n },\n {\n \"name\": \"RegistryState\",\n \"discriminator\": [\n 29,\n 34,\n 224,\n 195,\n 175,\n 183,\n 99,\n 97\n ]\n },\n {\n \"name\": \"Secp256k1KeyClaim\",\n \"discriminator\": [\n 128,\n 160,\n 40,\n 228,\n 165,\n 251,\n 194,\n 86\n ]\n },\n {\n \"name\": \"Subscription\",\n \"discriminator\": [\n 64,\n 7,\n 26,\n 135,\n 102,\n 132,\n 98,\n 33\n ]\n },\n {\n \"name\": \"TicketMarker\",\n \"discriminator\": [\n 1,\n 117,\n 194,\n 234,\n 146,\n 15,\n 115,\n 255\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"DelegateAdded\",\n \"discriminator\": [\n 96,\n 159,\n 58,\n 144,\n 26,\n 171,\n 141,\n 70\n ]\n },\n {\n \"name\": \"DelegateRemoved\",\n \"discriminator\": [\n 91,\n 243,\n 235,\n 175,\n 109,\n 235,\n 217,\n 84\n ]\n },\n {\n \"name\": \"DelegateStatusChanged\",\n \"discriminator\": [\n 188,\n 202,\n 137,\n 41,\n 54,\n 213,\n 14,\n 92\n ]\n },\n {\n \"name\": \"EpochClosed\",\n \"discriminator\": [\n 21,\n 4,\n 48,\n 56,\n 29,\n 169,\n 77,\n 42\n ]\n },\n {\n \"name\": \"EpochCreated\",\n \"discriminator\": [\n 191,\n 150,\n 240,\n 63,\n 59,\n 212,\n 233,\n 124\n ]\n },\n {\n \"name\": \"EpochFinalized\",\n \"discriminator\": [\n 109,\n 54,\n 231,\n 81,\n 101,\n 249,\n 145,\n 107\n ]\n },\n {\n \"name\": \"EpochRewardCredited\",\n \"discriminator\": [\n 12,\n 42,\n 166,\n 244,\n 196,\n 241,\n 134,\n 186\n ]\n },\n {\n \"name\": \"FeedUpdated\",\n \"discriminator\": [\n 200,\n 60,\n 190,\n 86,\n 247,\n 9,\n 50,\n 81\n ]\n },\n {\n \"name\": \"GatewayDeactivated\",\n \"discriminator\": [\n 67,\n 206,\n 26,\n 221,\n 251,\n 18,\n 50,\n 73\n ]\n },\n {\n \"name\": \"GatewayRegistered\",\n \"discriminator\": [\n 171,\n 121,\n 170,\n 61,\n 195,\n 155,\n 35,\n 98\n ]\n },\n {\n \"name\": \"NodeDeactivated\",\n \"discriminator\": [\n 74,\n 15,\n 22,\n 250,\n 74,\n 89,\n 202,\n 244\n ]\n },\n {\n \"name\": \"NodeDepositWithdrawn\",\n \"discriminator\": [\n 144,\n 148,\n 204,\n 72,\n 127,\n 171,\n 1,\n 39\n ]\n },\n {\n \"name\": \"NodeEndpointUpdated\",\n \"discriminator\": [\n 121,\n 121,\n 209,\n 202,\n 113,\n 134,\n 46,\n 240\n ]\n },\n {\n \"name\": \"NodePunished\",\n \"discriminator\": [\n 5,\n 220,\n 63,\n 21,\n 153,\n 202,\n 80,\n 79\n ]\n },\n {\n \"name\": \"NodeRegistered\",\n \"discriminator\": [\n 15,\n 57,\n 183,\n 59,\n 93,\n 55,\n 157,\n 195\n ]\n },\n {\n \"name\": \"NodeReinstated\",\n \"discriminator\": [\n 45,\n 0,\n 72,\n 79,\n 131,\n 183,\n 198,\n 205\n ]\n },\n {\n \"name\": \"OffenceProven\",\n \"discriminator\": [\n 33,\n 127,\n 13,\n 247,\n 209,\n 98,\n 62,\n 116\n ]\n },\n {\n \"name\": \"PlanAdded\",\n \"discriminator\": [\n 253,\n 31,\n 157,\n 223,\n 171,\n 1,\n 203,\n 207\n ]\n },\n {\n \"name\": \"PlanUpdated\",\n \"discriminator\": [\n 49,\n 51,\n 198,\n 31,\n 170,\n 70,\n 253,\n 195\n ]\n },\n {\n \"name\": \"ProtocolConfigUpdated\",\n \"discriminator\": [\n 20,\n 99,\n 32,\n 237,\n 111,\n 86,\n 195,\n 199\n ]\n },\n {\n \"name\": \"ProtocolInitialized\",\n \"discriminator\": [\n 173,\n 122,\n 168,\n 254,\n 9,\n 118,\n 76,\n 132\n ]\n },\n {\n \"name\": \"ProtocolReserveWithdrawn\",\n \"discriminator\": [\n 116,\n 158,\n 232,\n 233,\n 174,\n 58,\n 218,\n 183\n ]\n },\n {\n \"name\": \"RegistryUpdated\",\n \"discriminator\": [\n 152,\n 3,\n 201,\n 176,\n 91,\n 63,\n 47,\n 83\n ]\n },\n {\n \"name\": \"RevenueSwept\",\n \"discriminator\": [\n 57,\n 110,\n 215,\n 130,\n 155,\n 53,\n 55,\n 28\n ]\n },\n {\n \"name\": \"RewardsClaimed\",\n \"discriminator\": [\n 75,\n 98,\n 88,\n 18,\n 219,\n 112,\n 88,\n 121\n ]\n },\n {\n \"name\": \"Subscribed\",\n \"discriminator\": [\n 135,\n 59,\n 105,\n 76,\n 190,\n 236,\n 138,\n 228\n ]\n },\n {\n \"name\": \"SubscriptionExtended\",\n \"discriminator\": [\n 149,\n 17,\n 152,\n 209,\n 131,\n 145,\n 5,\n 6\n ]\n },\n {\n \"name\": \"TicketMarkerClosed\",\n \"discriminator\": [\n 109,\n 122,\n 80,\n 119,\n 203,\n 4,\n 131,\n 160\n ]\n },\n {\n \"name\": \"TicketRosterOverflow\",\n \"discriminator\": [\n 147,\n 69,\n 132,\n 24,\n 191,\n 8,\n 117,\n 185\n ]\n },\n {\n \"name\": \"TicketSubmitted\",\n \"discriminator\": [\n 190,\n 48,\n 169,\n 171,\n 61,\n 217,\n 169,\n 249\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"InvalidMinSigners\",\n \"msg\": \"invalid min signers\"\n },\n {\n \"code\": 6001,\n \"name\": \"InvalidTimestamp\",\n \"msg\": \"invalid timestamp\"\n },\n {\n \"code\": 6002,\n \"name\": \"InvalidMint\",\n \"msg\": \"invalid usdc mint\"\n },\n {\n \"code\": 6003,\n \"name\": \"InvalidNodeIndex\",\n \"msg\": \"Signer index outside node_count(version)\"\n },\n {\n \"code\": 6004,\n \"name\": \"InvalidNodeAccount\",\n \"msg\": \"Node account does not match expected index/owner\"\n },\n {\n \"code\": 6005,\n \"name\": \"UnauthorizedNodeAuthority\",\n \"msg\": \"Caller is not node.owner or registry.authority\"\n },\n {\n \"code\": 6006,\n \"name\": \"NodeCapExceeded\",\n \"msg\": \"pending_node_count >= registry.node_count or node_index_hint >= registry.node_count\"\n },\n {\n \"code\": 6007,\n \"name\": \"InvalidPoP\",\n \"msg\": \"PoP Schnorr verification failed at registration\"\n },\n {\n \"code\": 6008,\n \"name\": \"NodeNotActive\",\n \"msg\": \"Instruction requires Active node status\"\n },\n {\n \"code\": 6009,\n \"name\": \"PubkeyNotOnCurve\",\n \"msg\": \"Submitted compressed pubkey does not decompress to a valid curve point\"\n },\n {\n \"code\": 6010,\n \"name\": \"InvalidRegistryVersion\",\n \"msg\": \"registry version or version-addressed registry account is invalid\"\n },\n {\n \"code\": 6011,\n \"name\": \"RegistryNotActive\",\n \"msg\": \"registry is not active\"\n },\n {\n \"code\": 6012,\n \"name\": \"InvalidSourceId\",\n \"msg\": \"source_id does not match feed.source_id\"\n },\n {\n \"code\": 6013,\n \"name\": \"RegistryPolicyUnchanged\",\n \"msg\": \"new redundancy buffer must differ from the current registry policy\"\n },\n {\n \"code\": 6014,\n \"name\": \"InvalidRedundancyBuffer\",\n \"msg\": \"redundancy buffer must be between 1 and 8\"\n },\n {\n \"code\": 6015,\n \"name\": \"InvalidGatewayEndpoint\",\n \"msg\": \"Gateway endpoint is invalid\"\n },\n {\n \"code\": 6016,\n \"name\": \"InvalidNodeEndpoint\",\n \"msg\": \"Node endpoint is invalid\"\n },\n {\n \"code\": 6017,\n \"name\": \"InvalidSignature\",\n \"msg\": \"Invalid aggregate signature\"\n },\n {\n \"code\": 6018,\n \"name\": \"GroupBitmapDerivationFailed\",\n \"msg\": \"Could not derive group bitmap\"\n },\n {\n \"code\": 6019,\n \"name\": \"InvalidSignersBitmap\",\n \"msg\": \"Signers bitmap contains out-of-range indices\"\n },\n {\n \"code\": 6020,\n \"name\": \"PlanNotActive\",\n \"msg\": \"plan exists but is_active is false\"\n },\n {\n \"code\": 6021,\n \"name\": \"InvalidPlanParams\",\n \"msg\": \"invalid plan quorum or signer parameters\"\n },\n {\n \"code\": 6022,\n \"name\": \"InvalidDelegateLimits\",\n \"msg\": \"invalid delegate limit parameters\"\n },\n {\n \"code\": 6023,\n \"name\": \"DelegateCannotBeOwner\",\n \"msg\": \"delegate cannot be the owner\"\n },\n {\n \"code\": 6024,\n \"name\": \"DelegateCapReached\",\n \"msg\": \"subscription delegate_count >= plan.max_delegates\"\n },\n {\n \"code\": 6025,\n \"name\": \"InvalidRegistrationSalt\",\n \"msg\": \"registration_salt must not be zero\"\n },\n {\n \"code\": 6026,\n \"name\": \"InsufficientSigners\",\n \"msg\": \"popcount(signers_bitmap) < signatures_required\"\n },\n {\n \"code\": 6027,\n \"name\": \"SignaturesBelowMinSigners\",\n \"msg\": \"signatures_required is below protocol min_signers\"\n },\n {\n \"code\": 6028,\n \"name\": \"SignersNotSubsetOfSelection\",\n \"msg\": \"Signer bits outside selection bitmap\"\n },\n {\n \"code\": 6029,\n \"name\": \"InvalidAggregateSignature\",\n \"msg\": \"PoP-Schnorr aggregate verification failed\"\n },\n {\n \"code\": 6030,\n \"name\": \"FeedNotNewer\",\n \"msg\": \"timestamp <= feed.timestamp\"\n },\n {\n \"code\": 6031,\n \"name\": \"SignaturesRequiredMismatch\",\n \"msg\": \"signatures_required does not match feed.signatures_required\"\n },\n {\n \"code\": 6032,\n \"name\": \"MissingSignerAccount\",\n \"msg\": \"Missing or mis-ordered signer slot version account\"\n },\n {\n \"code\": 6033,\n \"name\": \"SubscriptionNotActive\",\n \"msg\": \"subscription has expired\"\n },\n {\n \"code\": 6034,\n \"name\": \"QuorumBelowThreshold\",\n \"msg\": \"popcount(signers_bitmap) < signatures_required\"\n },\n {\n \"code\": 6035,\n \"name\": \"GatewayNotActive\",\n \"msg\": \"gateway is not active\"\n },\n {\n \"code\": 6036,\n \"name\": \"NothingToClaim\",\n \"msg\": \"no claimable rewards\"\n },\n {\n \"code\": 6037,\n \"name\": \"InvalidWithdrawalState\",\n \"msg\": \"account is not in a state that permits withdrawal\"\n },\n {\n \"code\": 6038,\n \"name\": \"NothingToWithdraw\",\n \"msg\": \"withdrawable balance is zero\"\n },\n {\n \"code\": 6039,\n \"name\": \"WithdrawalCooldownActive\",\n \"msg\": \"withdrawal cooldown has not elapsed\"\n },\n {\n \"code\": 6040,\n \"name\": \"WithdrawalArithmeticOverflow\",\n \"msg\": \"withdrawal deadline arithmetic overflow\"\n },\n {\n \"code\": 6041,\n \"name\": \"InvalidWithdrawalCooldown\",\n \"msg\": \"withdrawal cooldown must be positive and fit a slot deadline\"\n },\n {\n \"code\": 6042,\n \"name\": \"InvalidInstructionsSysvar\",\n \"msg\": \"instructions sysvar account is invalid\"\n },\n {\n \"code\": 6043,\n \"name\": \"CreditedExceedsSelection\",\n \"msg\": \"credited signer count exceeds signatures_required + redundancy_buffer\"\n },\n {\n \"code\": 6044,\n \"name\": \"InvalidRawValue\",\n \"msg\": \"raw value exceeds Feed::MAX_VALUE_LEN or does not match the hash of the attestation value\"\n },\n {\n \"code\": 6045,\n \"name\": \"EquivocationSameStatement\",\n \"msg\": \"equivocation requires two attestations for one duty with different values\"\n },\n {\n \"code\": 6046,\n \"name\": \"NotEquivocation\",\n \"msg\": \"attestations do not sign different values for one duty\"\n },\n {\n \"code\": 6047,\n \"name\": \"EvidenceHashMismatch\",\n \"msg\": \"recomputed evidence hash does not match the supplied evidence_hash\"\n },\n {\n \"code\": 6048,\n \"name\": \"GuiltySetEmpty\",\n \"msg\": \"intersection of the two signer bitmaps is empty\"\n },\n {\n \"code\": 6049,\n \"name\": \"NodeTombstoned\",\n \"msg\": \"node is permanently tombstoned\"\n },\n {\n \"code\": 6050,\n \"name\": \"NodeNotFrozen\",\n \"msg\": \"node is not Frozen\"\n },\n {\n \"code\": 6051,\n \"name\": \"NodeStillFrozen\",\n \"msg\": \"node is still inside its freeze window\"\n },\n {\n \"code\": 6052,\n \"name\": \"NodeAlreadyInRegistry\",\n \"msg\": \"node is already present in the current registry\"\n },\n {\n \"code\": 6053,\n \"name\": \"SignersFullySelected\",\n \"msg\": \"every signer was within the derived selection - no unsolicited signer\"\n },\n {\n \"code\": 6054,\n \"name\": \"NothingToPunish\",\n \"msg\": \"every guilty node is already tombstoned\"\n },\n {\n \"code\": 6055,\n \"name\": \"NonceCommitmentMismatch\",\n \"msg\": \"attestations do not share an aggregate nonce commitment\"\n },\n {\n \"code\": 6056,\n \"name\": \"RegistryVersionMismatch\",\n \"msg\": \"attestations have different registry versions, or one older than the feed's\"\n },\n {\n \"code\": 6057,\n \"name\": \"NonceReuseSameMessage\",\n \"msg\": \"attestations sign the same message\"\n },\n {\n \"code\": 6058,\n \"name\": \"PreferEquivocation\",\n \"msg\": \"same duty with different values is equivocation - file it as one\"\n },\n {\n \"code\": 6059,\n \"name\": \"AttestationTooStale\",\n \"msg\": \"timestamp is older than now - max_settlement_delay_seconds\"\n },\n {\n \"code\": 6060,\n \"name\": \"AttestationInFuture\",\n \"msg\": \"timestamp is further ahead of cluster time than the allowed drift\"\n },\n {\n \"code\": 6061,\n \"name\": \"InvalidMaxReceiptDelay\",\n \"msg\": \"max_settlement_delay_seconds must be positive and fit a timestamp deadline\"\n },\n {\n \"code\": 6062,\n \"name\": \"TreasuryInsolvent\",\n \"msg\": \"treasury balance cannot back the protocol's reward liability\"\n },\n {\n \"code\": 6063,\n \"name\": \"InvalidChallengerBounty\",\n \"msg\": \"challenger_bounty_bps must not exceed 10000\"\n },\n {\n \"code\": 6064,\n \"name\": \"RewardLiabilityUnderflow\",\n \"msg\": \"reward liability underflow\"\n },\n {\n \"code\": 6065,\n \"name\": \"DepositVaultUnderfunded\",\n \"msg\": \"node deposit vault does not cover the recorded total deposits\"\n },\n {\n \"code\": 6066,\n \"name\": \"TranscriptContextsEqual\",\n \"msg\": \"both transcripts carry the same (b, c) challenge pair\"\n },\n {\n \"code\": 6067,\n \"name\": \"NonCanonicalScalar\",\n \"msg\": \"scalar is zero or not below the secp256k1 curve order\"\n },\n {\n \"code\": 6068,\n \"name\": \"MerkleProofTooDeep\",\n \"msg\": \"merkle proof exceeds the maximum accepted depth\"\n },\n {\n \"code\": 6069,\n \"name\": \"InvalidMerkleProof\",\n \"msg\": \"merkle proof does not connect the leaf to the signed batch root\"\n },\n {\n \"code\": 6070,\n \"name\": \"InvalidBatchSignature\",\n \"msg\": \"commitment batch signature does not verify against the node key\"\n },\n {\n \"code\": 6071,\n \"name\": \"InvalidPartialSignature\",\n \"msg\": \"partial signature does not satisfy the nonce equation\"\n },\n {\n \"code\": 6072,\n \"name\": \"InvalidNoncePoint\",\n \"msg\": \"committed nonce is not a valid secp256k1 point\"\n },\n {\n \"code\": 6073,\n \"name\": \"InvalidMinimumNodeDeposit\",\n \"msg\": \"minimum node deposit must be positive\"\n },\n {\n \"code\": 6074,\n \"name\": \"InvalidRoundPrice\",\n \"msg\": \"base price plus rewards for the maximum signer count must fit u64\"\n },\n {\n \"code\": 6075,\n \"name\": \"RewardOverflow\",\n \"msg\": \"reward or reward liability arithmetic overflowed\"\n },\n {\n \"code\": 6076,\n \"name\": \"UnexpectedSignerAccounts\",\n \"msg\": \"signer account list must contain exactly one account per signer\"\n },\n {\n \"code\": 6077,\n \"name\": \"InvalidCoalitionKey\",\n \"msg\": \"coalition key is not the sum of the signer keys\"\n },\n {\n \"code\": 6078,\n \"name\": \"InvalidEpochLength\",\n \"msg\": \"epoch_len_seconds is outside the allowed bounds\"\n },\n {\n \"code\": 6079,\n \"name\": \"InvalidTicketGrace\",\n \"msg\": \"ticket_grace_seconds must be positive and shorter than the epoch\"\n },\n {\n \"code\": 6080,\n \"name\": \"InvalidTicketTarget\",\n \"msg\": \"target_tickets_per_epoch is outside the allowed bounds\"\n },\n {\n \"code\": 6081,\n \"name\": \"InvalidAvailabilityFloor\",\n \"msg\": \"availability floor must not exceed 10000 bps and needs a positive sample minimum\"\n },\n {\n \"code\": 6082,\n \"name\": \"InvalidProtocolFee\",\n \"msg\": \"protocol_fee_bps must not exceed 10000\"\n },\n {\n \"code\": 6083,\n \"name\": \"EpochNotOpen\",\n \"msg\": \"epoch is not open at the current cluster time\"\n },\n {\n \"code\": 6084,\n \"name\": \"TicketWindowClosed\",\n \"msg\": \"epoch no longer accepts tickets\"\n },\n {\n \"code\": 6085,\n \"name\": \"RoundOutsideEpoch\",\n \"msg\": \"timestamp is outside the epoch window\"\n },\n {\n \"code\": 6086,\n \"name\": \"NotATicket\",\n \"msg\": \"round does not fall under the epoch ticket threshold\"\n },\n {\n \"code\": 6087,\n \"name\": \"DispatchSigInvalid\",\n \"msg\": \"gateway dispatch signature missing or invalid\"\n },\n {\n \"code\": 6088,\n \"name\": \"InvalidRosterSlot\",\n \"msg\": \"roster slot hint does not match the epoch roster\"\n },\n {\n \"code\": 6089,\n \"name\": \"TicketCapReached\",\n \"msg\": \"epoch ticket cap reached\"\n },\n {\n \"code\": 6090,\n \"name\": \"TicketMarkerNotExpired\",\n \"msg\": \"ticket marker is still inside its epoch ticket window\"\n },\n {\n \"code\": 6091,\n \"name\": \"EpochNotFinalizable\",\n \"msg\": \"epoch ticket window has not ended\"\n },\n {\n \"code\": 6092,\n \"name\": \"EpochNotFinalized\",\n \"msg\": \"epoch is not finalized\"\n },\n {\n \"code\": 6093,\n \"name\": \"InvalidEpochSequence\",\n \"msg\": \"next epoch account does not follow the finalized epoch\"\n },\n {\n \"code\": 6094,\n \"name\": \"NothingToCredit\",\n \"msg\": \"roster slot has no weight or was already credited\"\n },\n {\n \"code\": 6095,\n \"name\": \"EpochNotClosable\",\n \"msg\": \"epoch still has uncredited nodes or is inside its evidence window\"\n },\n {\n \"code\": 6096,\n \"name\": \"NothingToSweep\",\n \"msg\": \"treasury holds no unswept income\"\n },\n {\n \"code\": 6097,\n \"name\": \"InsufficientProtocolReserve\",\n \"msg\": \"amount exceeds the protocol reserve\"\n },\n {\n \"code\": 6098,\n \"name\": \"AvailabilityAboveFloor\",\n \"msg\": \"node availability is not below the epoch payout floor\"\n },\n {\n \"code\": 6099,\n \"name\": \"InactivityAlreadyPunished\",\n \"msg\": \"node was already frozen during this epoch\"\n },\n {\n \"code\": 6100,\n \"name\": \"InvalidRentReceiver\",\n \"msg\": \"rent receiver must be the account that paid for the closed account\"\n },\n {\n \"code\": 6101,\n \"name\": \"InvalidInitialTau\",\n \"msg\": \"initial_tau is below the minimum ticket threshold\"\n }\n ],\n \"types\": [\n {\n \"name\": \"AddDelegateArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"delegate\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"max_data_requests\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Attestation\",\n \"docs\": [\n \"Payload plus aggregate Schnorr signature.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"payload\",\n \"type\": {\n \"defined\": {\n \"name\": \"AttestationPayload\"\n }\n }\n },\n {\n \"name\": \"signature\",\n \"type\": {\n \"defined\": {\n \"name\": \"SchnorrSignature\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"AttestationPayload\",\n \"docs\": [\n \"Signed oracle attestation payload.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"value\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"source_id\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"registry_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"signatures_required\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"CoalitionKey\",\n \"docs\": [\n \"Affine coalition key `Σ X_i = (x, y)`, big-endian: an untrusted verification input.\",\n \"\",\n \"Supplying it lets the verifier check its Jacobian sum against the key instead of normalizing\",\n \"the sum with a field inversion (see [`CoalitionAccumulator::compressed_pubkey_with_key`]).\",\n \"It is a property of the point, not of the verifier's arithmetic: any secp256k1 library\",\n \"computes it as the plain sum of the signers' public keys, in any order.\",\n \"\",\n \"Not part of the signed message or the cross-VM [`crate::Attestation`]; carry it next to the\",\n \"attestation, e.g. in Solana instruction data.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"x\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"y\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"CommitmentReuseEvidence\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"attestation_a\",\n \"type\": {\n \"defined\": {\n \"name\": \"Attestation\"\n }\n }\n },\n {\n \"name\": \"attestation_b\",\n \"type\": {\n \"defined\": {\n \"name\": \"Attestation\"\n }\n }\n },\n {\n \"name\": \"coalition_key_a\",\n \"docs\": [\n \"Affine sum of `attestation_a`'s signer keys. A verification input, not evidence: it is\",\n \"left out of [`Evidence::hash`], so the case PDA derives from the attestations alone.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"CoalitionKey\"\n }\n }\n },\n {\n \"name\": \"coalition_key_b\",\n \"docs\": [\n \"Affine sum of `attestation_b`'s signer keys; see `coalition_key_a`.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"CoalitionKey\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"CommittedNoncePair\",\n \"docs\": [\n \"The nonce pair committed for one slot, as affine coordinates.\",\n \"\",\n \"Points travel uncompressed so the program never pays for a field square root; both are\",\n \"re-checked on-curve during equation verification.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"r1_x\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"r1_y\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"r2_x\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"r2_y\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Delegate\",\n \"docs\": [\n \"Owner-scoped delegate authorization. `max_data_requests` is enforced by the gateway at\",\n \"admission, not on chain.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegate\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"max_data_requests\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"DelegateAdded\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegate\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegate_count\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"added_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"DelegateRemoved\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegate\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegate_count\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"removed_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"DelegateStatusChanged\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"delegate\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"old_status\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"new_status\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"updated_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"EpochClosed\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"residual\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"rolled_into\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"closed_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"EpochCreated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"start\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"end\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"ticket_grace\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"tau\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EpochFinalized\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"pool\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"tickets\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"roster_len\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"weight_total\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"weighted_count\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"finalized_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"EpochRewardCredited\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"node\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"weight\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"forfeited\",\n \"docs\": [\n \"The node was tombstoned; its share stays in the epoch residual.\"\n ],\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"EpochState\",\n \"docs\": [\n \"One epoch of the reward pool: its window, pinned ticket threshold, swept income and the\",\n \"per-node participation counters fed by tickets.\",\n \"\",\n \"Counters are keyed by an epoch-local roster of `Node` PDAs rather than by registry position,\",\n \"because registry positions move between versions (swap-remove) while one epoch spans several.\",\n \"The roster fills lazily as tickets name nodes for the first time.\",\n \"\",\n \"PDA: `[SEED_PREFIX, epoch.to_le_bytes()]`. Layout has no implicit padding.\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"start\",\n \"docs\": [\n \"Inclusive window start (unix seconds). Equals the previous epoch's `end`.\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"end\",\n \"docs\": [\n \"Exclusive window end (unix seconds).\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"ticket_grace\",\n \"docs\": [\n \"Snapshot of `ticket_grace_seconds` at creation.\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"tau\",\n \"docs\": [\n \"A round is a ticket when the big-endian `u64` prefix of its ticket hash is below this.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"pool\",\n \"docs\": [\n \"USDC swept into this epoch while it was open.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"paid\",\n \"docs\": [\n \"Sum of payouts credited to nodes.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"weight_total\",\n \"docs\": [\n \"`Σ weight(slot)`, frozen at finalization.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"tickets\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"sum_signed\",\n \"docs\": [\n \"`Σ signed`, maintained per ticket.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"sum_selected\",\n \"docs\": [\n \"`Σ selected`, maintained per ticket.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"min_availability_bps\",\n \"docs\": [\n \"Snapshot: availability floor relative to the network inclusion rate, in bps.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"min_samples\",\n \"docs\": [\n \"Snapshot: samples below which the availability floor does not apply.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"roster_len\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"weighted_count\",\n \"docs\": [\n \"Roster slots with non-zero weight, frozen at finalization.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"credited_count\",\n \"docs\": [\n \"Weighted slots already processed by `credit_epoch_rewards`.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"finalized\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"rent_payer\",\n \"docs\": [\n \"Receives this account's rent when the epoch is closed.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"credited\",\n \"docs\": [\n \"Bitmap over roster slots already credited.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"signed\",\n \"type\": {\n \"array\": [\n \"u16\",\n 256\n ]\n }\n },\n {\n \"name\": \"selected\",\n \"type\": {\n \"array\": [\n \"u16\",\n 256\n ]\n }\n },\n {\n \"name\": \"roster\",\n \"type\": {\n \"array\": [\n {\n \"array\": [\n \"u8\",\n 32\n ]\n },\n 256\n ]\n }\n },\n {\n \"name\": \"min_signers\",\n \"docs\": [\n \"Snapshot of the admission quorum floor for rounds counted in this epoch.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_reserved\",\n \"type\": {\n \"array\": [\n \"u8\",\n 7\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"EquivocationEvidence\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"attestation_a\",\n \"type\": {\n \"defined\": {\n \"name\": \"Attestation\"\n }\n }\n },\n {\n \"name\": \"attestation_b\",\n \"type\": {\n \"defined\": {\n \"name\": \"Attestation\"\n }\n }\n },\n {\n \"name\": \"coalition_key_a\",\n \"docs\": [\n \"Affine sum of `attestation_a`'s signer keys. A verification input, not evidence: it is\",\n \"left out of [`Evidence::hash`], so the case PDA derives from the attestations alone.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"CoalitionKey\"\n }\n }\n },\n {\n \"name\": \"coalition_key_b\",\n \"docs\": [\n \"Affine sum of `attestation_b`'s signer keys; see `coalition_key_a`.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"CoalitionKey\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"Feed\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"source_id\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"value\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"value_kind\",\n \"type\": {\n \"defined\": {\n \"name\": \"FeedValueKind\"\n }\n }\n },\n {\n \"name\": \"submitter\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"signatures_required\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"signers_bitmap\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"registry_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"FeedUpdated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"source_id\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"registry_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"value\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"value_kind\",\n \"type\": {\n \"defined\": {\n \"name\": \"FeedValueKind\"\n }\n }\n },\n {\n \"name\": \"signers_bitmap\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"last_updated_slot\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"FeedValueKind\",\n \"docs\": [\n \"How to read [`Feed::value`], which is always the signed `AttestationPayload::value`.\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Value\"\n },\n {\n \"name\": \"Hash\"\n }\n ]\n }\n },\n {\n \"name\": \"Gateway\",\n \"docs\": [\n \"Protocol-authorized gateway identified by its Solana authority.\",\n \"\",\n \"Holds endpoint metadata and activation status. Keyed by the gateway's authority key, which\",\n \"signs the round dispatches tickets must carry. Gateways hold no funds: x402 payers pay the\",\n \"protocol treasury directly.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"ip\",\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"port\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"status\",\n \"type\": {\n \"defined\": {\n \"name\": \"GatewayStatus\"\n }\n }\n },\n {\n \"name\": \"registered_at\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"GatewayDeactivated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"gateway\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"deactivated_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"GatewayRegistered\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"ip\",\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"port\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"registered_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"GatewayStatus\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Active\"\n },\n {\n \"name\": \"Deactivated\"\n }\n ]\n }\n },\n {\n \"name\": \"InactivityEvidence\",\n \"docs\": [\n \"A node whose availability in a finalized epoch fell below that epoch's payout floor.\",\n \"\",\n \"Proven from the epoch's own counters; `registry_version` / `node_index` locate the node in the\",\n \"current registry so it can be removed. The case hash covers only `(epoch, roster_slot)`, so a\",\n \"node can be punished at most once per epoch, including after reinstatement.\",\n \"\",\n \"Remaining accounts: `[node, epoch_state]`.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"roster_slot\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"registry_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"node_index\",\n \"type\": \"u32\"\n }\n ]\n }\n },\n {\n \"name\": \"InitializeArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"withdrawal_cooldown_slots\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"redundancy_buffer\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"minimum_node_deposit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"reward_per_signature\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_settlement_delay_seconds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"challenger_bounty_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"usdc_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"x402_round_base\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_signers\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"epoch_len_seconds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"ticket_grace_seconds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"target_tickets_per_epoch\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"min_availability_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"min_availability_samples\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"protocol_fee_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"initial_tau\",\n \"docs\": [\n \"Ticket threshold of the two genesis epochs: a round is a ticket when the 64-bit prefix of its\",\n \"ticket hash is below it, so the sampling probability is `initial_tau / 2^64`. Size it as\",\n \"`2^64 * target_tickets_per_epoch / expected_rounds_per_epoch`. `u64::MAX` samples every round\",\n \"(every round then costs a ticket transaction until the controller, which moves the\",\n \"threshold at most 8x per epoch with a two-epoch lag, brings it down). Must be at least\",\n \"`TAU_MIN`.\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Node\",\n \"docs\": [\n \"Permanent node identity and reward account; never closed or re-keyed.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"secp256k1_pubkey_x\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"secp256k1_pubkey_y\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"status\",\n \"type\": {\n \"defined\": {\n \"name\": \"NodeStatus\"\n }\n }\n },\n {\n \"name\": \"ip\",\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"port\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"locked_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"claimable_rewards\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"registered_at\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"withdrawable_slot\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"frozen_until\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"NodeDeactivated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"node\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"node_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_registry_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"deactivated_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"NodeDepositWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"node\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"node_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"destination\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"withdrawn_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"NodeEndpointUpdated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"node\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"node_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"ip\",\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"port\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"updated_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"NodePunished\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"node\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"offence\",\n \"type\": {\n \"defined\": {\n \"name\": \"OffenceKind\"\n }\n }\n },\n {\n \"name\": \"slashed_locked\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"slashed_rewards\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"new_status\",\n \"type\": {\n \"defined\": {\n \"name\": \"NodeStatus\"\n }\n }\n },\n {\n \"name\": \"punished_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"NodeRegistered\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"node\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"index\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"registry_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"ip\",\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"port\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"security_deposit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"registered_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"NodeReinstated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"node\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"node_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"index\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"registry_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"reinstated_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"NodeStatus\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Active\"\n },\n {\n \"name\": \"Deactivated\"\n },\n {\n \"name\": \"Frozen\"\n },\n {\n \"name\": \"Tombstoned\"\n }\n ]\n }\n },\n {\n \"name\": \"NonceReuseEvidence\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"registry_version\",\n \"docs\": [\n \"Registry version that `node_index` indexes into; also bound into the batch signature.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"node_index\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"batch_meta\",\n \"docs\": [\n \"Opaque batch header bytes, covered by the signature but not interpreted on-chain.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"batch_root\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"batch_sig_s\",\n \"docs\": [\n \"Single-key EVM-Schnorr signature over the batch message.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"batch_commitment_addr\",\n \"type\": {\n \"array\": [\n \"u8\",\n 20\n ]\n }\n },\n {\n \"name\": \"slot\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"nonces\",\n \"type\": {\n \"defined\": {\n \"name\": \"CommittedNoncePair\"\n }\n }\n },\n {\n \"name\": \"merkle_proof\",\n \"type\": {\n \"vec\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n },\n {\n \"name\": \"transcript_a\",\n \"type\": {\n \"defined\": {\n \"name\": \"PartialTranscript\"\n }\n }\n },\n {\n \"name\": \"transcript_b\",\n \"type\": {\n \"defined\": {\n \"name\": \"PartialTranscript\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"Offence\",\n \"docs\": [\n \"Node-fault offence types. Each carries a fixed [`Penalty`] — see [`OffenceKind::penalty`].\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Equivocation\",\n \"fields\": [\n {\n \"defined\": {\n \"name\": \"EquivocationEvidence\"\n }\n }\n ]\n },\n {\n \"name\": \"UnsolicitedSigning\",\n \"fields\": [\n {\n \"defined\": {\n \"name\": \"UnsolicitedSigningEvidence\"\n }\n }\n ]\n },\n {\n \"name\": \"CommitmentReuse\",\n \"fields\": [\n {\n \"defined\": {\n \"name\": \"CommitmentReuseEvidence\"\n }\n }\n ]\n },\n {\n \"name\": \"NonceReuse\",\n \"fields\": [\n {\n \"defined\": {\n \"name\": \"NonceReuseEvidence\"\n }\n }\n ]\n },\n {\n \"name\": \"Inactivity\",\n \"fields\": [\n {\n \"defined\": {\n \"name\": \"InactivityEvidence\"\n }\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"OffenceKind\",\n \"docs\": [\n \"Fieldless offence identity stored on `PunishmentCase` and in events.\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Equivocation\"\n },\n {\n \"name\": \"UnsolicitedSigning\"\n },\n {\n \"name\": \"CommitmentReuse\"\n },\n {\n \"name\": \"NonceReuse\"\n },\n {\n \"name\": \"Inactivity\"\n }\n ]\n }\n },\n {\n \"name\": \"OffenceProven\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"offence\",\n \"type\": {\n \"defined\": {\n \"name\": \"OffenceKind\"\n }\n }\n },\n {\n \"name\": \"guilty_bitmap\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"evidence_hash\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"reporter\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"slashed_total\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bounty_paid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"proven_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"PartialTranscript\",\n \"docs\": [\n \"One partial-signature transcript: the challenge scalars and the resulting share.\",\n \"\",\n \"The program never recomputes `b` or `c` from a signing context — the offence is defined purely\",\n \"by the equation `s*G == R1 + b*R2 + c*X`, which is why message transport and commitment lists\",\n \"stay off-chain.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"b\",\n \"docs\": [\n \"Binding factor.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"c\",\n \"docs\": [\n \"Challenge.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"s\",\n \"docs\": [\n \"The node's partial signature scalar.\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Plan\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"plan_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"PlanType\"\n }\n }\n },\n {\n \"name\": \"subscription_price\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_signers\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"max_delegates\",\n \"docs\": [\n \"Max delegates/agents an owner on this plan may provision.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"max_rounds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"private_api_enabled\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"is_active\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"PlanAdded\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"plan_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"subscription_price\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_signers\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"max_delegates\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"private_api_enabled\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"is_active\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"PlanConfig\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"plan_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"PlanType\"\n }\n }\n },\n {\n \"name\": \"subscription_price\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_signers\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"max_delegates\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"max_rounds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"private_api_enabled\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"is_active\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"PlanType\",\n \"repr\": {\n \"kind\": \"rust\"\n },\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Basic\"\n },\n {\n \"name\": \"Standard\"\n },\n {\n \"name\": \"Professional\"\n },\n {\n \"name\": \"Enterprise\"\n }\n ]\n }\n },\n {\n \"name\": \"PlanUpdated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"plan_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"subscription_price\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_signers\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"max_delegates\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"private_api_enabled\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"is_active\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"ProtocolConfig\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"usdc_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_per_signature\",\n \"docs\": [\n \"Published x402 pricing input: `x402_round_base + (k + b) · reward_per_signature`.\",\n \"Not read on chain; payouts come from the epoch pool.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_settlement_delay_seconds\",\n \"docs\": [\n \"Max age in seconds of `timestamp` relative to cluster time at attestation\",\n \"ingress, and the grace period of a superseded registry version.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"challenger_bounty_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"minimum_node_deposit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"withdrawal_cooldown_slots\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"x402_round_base\",\n \"docs\": [\n \"Published x402 pricing input; see `reward_per_signature`.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"reward_liability\",\n \"docs\": [\n \"Sum of every `Node.claimable_rewards`.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_signers\",\n \"docs\": [\n \"Current feed-admission floor; copied into each new epoch for ticket verification.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"epoch_len_seconds\",\n \"docs\": [\n \"Length of epochs created from now on.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"ticket_grace_seconds\",\n \"docs\": [\n \"Late-ticket window after an epoch ends, for epochs created from now on.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"target_tickets_per_epoch\",\n \"docs\": [\n \"Ticket count per epoch the threshold controller aims for.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"min_availability_bps\",\n \"docs\": [\n \"Payout floor relative to the network inclusion rate, in bps, for new epochs.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"min_availability_samples\",\n \"docs\": [\n \"Selections below which the availability floor does not apply, for new epochs.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"protocol_fee_bps\",\n \"docs\": [\n \"Share of all swept income kept by the protocol; the rest joins the epoch pool.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"pool_liability\",\n \"docs\": [\n \"Sum of `pool - paid` over every epoch not yet closed.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_reserved\",\n \"docs\": [\n \"Protocol fees and slashing proceeds held in the treasury.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"ProtocolConfigUpdated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"reward_per_signature\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_settlement_delay_seconds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"challenger_bounty_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"minimum_node_deposit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"withdrawal_cooldown_slots\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"x402_round_base\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_signers\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"epoch_len_seconds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"ticket_grace_seconds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"target_tickets_per_epoch\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"min_availability_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"min_availability_samples\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"protocol_fee_bps\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"ProtocolInitialized\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"protocol_config\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"registry_state\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"registry\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"treasury\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"node_deposit_vault\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"usdc_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"initialized_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"ProtocolReserveWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"destination\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"withdrawn_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"PunishmentCase\",\n \"docs\": [\n \"Permanent, on-chain record of an executed node punishment.\",\n \"\",\n \"The PDA is seeded by `evidence_hash`, so `init` doubles as the anti-replay guard: the same\",\n \"evidence can only ever be submitted once, independent of any per-offence terminal-status guard.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"offence\",\n \"type\": {\n \"defined\": {\n \"name\": \"OffenceKind\"\n }\n }\n },\n {\n \"name\": \"reporter\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"registry_version\",\n \"docs\": [\n \"Registry version the guilty bitmap indexes into.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"guilty_bitmap\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"guilty_count\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"slashed_total\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bounty_paid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"evidence_hash\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"executed_slot\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"RegisterGatewayArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"ip\",\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"port\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"RegisterNodeArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"registration_salt\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"ip\",\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"port\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"secp256k1_pubkey_compressed\",\n \"type\": {\n \"array\": [\n \"u8\",\n 33\n ]\n }\n },\n {\n \"name\": \"pop_sig_r\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"pop_sig_s\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Registry\",\n \"docs\": [\n \"Immutable, version-addressed snapshot of the ordered node set and selection policy.\",\n \"\",\n \"Only `nodes[..node_count]` is populated. Node addresses are stored as bytes to keep the\",\n \"zero-copy layout POD-safe. `SPACE` includes the Anchor discriminator.\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"node_count\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"redundancy_buffer\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"nodes\",\n \"type\": {\n \"array\": [\n {\n \"array\": [\n \"u8\",\n 32\n ]\n },\n 256\n ]\n }\n },\n {\n \"name\": \"grace_active_until\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"active_from\",\n \"docs\": [\n \"Inclusive creation time. A version cannot verify a round dated before it existed.\"\n ],\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"RegistryState\",\n \"docs\": [\n \"Mutable pointer to the current immutable registry snapshot.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"current_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"next_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"RegistryUpdated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"new_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"node_count\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"redundancy_buffer\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"reason\",\n \"type\": {\n \"defined\": {\n \"name\": \"RegistryVersionReason\"\n }\n }\n },\n {\n \"name\": \"updated_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"RegistryVersionReason\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"NodeAdded\"\n },\n {\n \"name\": \"NodeRemoved\"\n },\n {\n \"name\": \"PolicyChanged\"\n },\n {\n \"name\": \"NodePunished\"\n },\n {\n \"name\": \"NodeReinstated\"\n }\n ]\n }\n },\n {\n \"name\": \"RemoveDelegateArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"delegate\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"RevenueSwept\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"gross\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"pool_share\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"swept_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"RewardsClaimed\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"beneficiary\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"claimed_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"SchnorrSignature\",\n \"docs\": [\n \"Aggregate Schnorr signature material.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"agg_sig_s\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"commitment\",\n \"type\": {\n \"array\": [\n \"u8\",\n 20\n ]\n }\n },\n {\n \"name\": \"signers_bitmap\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Secp256k1KeyClaim\",\n \"docs\": [\n \"Permanent reservation for a secp256k1 node key.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"node_pubkey\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"SubmitAttestationArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"attestation\",\n \"type\": {\n \"defined\": {\n \"name\": \"Attestation\"\n }\n }\n },\n {\n \"name\": \"raw_value\",\n \"docs\": [\n \"Preimage of `attestation.payload.value` for values longer than 32 bytes. When present the\",\n \"signed value must be `keccak256(raw_value)` and the feed stores it as\",\n \"[`FeedValueKind::Hash`].\"\n ],\n \"type\": {\n \"option\": \"bytes\"\n }\n },\n {\n \"name\": \"coalition_key\",\n \"docs\": [\n \"Affine sum of the signers' secp256k1 keys (`molpha_verifier::coalition_key`, or any\",\n \"library's point sum over their `Node` accounts). Unsigned and untrusted: the verifier\",\n \"checks it projectively against its own sum instead of inverting. A wrong key only fails\",\n \"the instruction.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"CoalitionKey\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"Subscribed\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"plan_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"prepaid_usdc\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"price_snapshot\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"subscribed_at\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"valid_until\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"Subscription\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"plan_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"PlanType\"\n }\n }\n },\n {\n \"name\": \"valid_until\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"max_rounds\",\n \"docs\": [\n \"Round quota per plan snapshot. Enforced by the gateway at admission, not on chain.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"delegate_count\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"max_delegates\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"max_signers\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"SubscriptionExtended\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"plan_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"extended_at\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"valid_until\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"TicketMarker\",\n \"docs\": [\n \"Existence marker for a submitted ticket; blocks resubmitting the same round.\",\n \"\",\n \"PDA: `[SEED_PREFIX, ticket_id]`. Once the round's epoch stops accepting tickets the round can\",\n \"never be submitted again, so the marker becomes closable and returns its rent.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"closable_after\",\n \"docs\": [\n \"The round's epoch ticket deadline (`end + ticket_grace`).\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"submitter\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"TicketMarkerClosed\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"ticket_marker\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"submitter\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"closed_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"TicketRosterOverflow\",\n \"docs\": [\n \"Selected nodes left uncounted because the epoch roster was full.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"ticket_id\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"uncounted\",\n \"type\": \"u32\"\n }\n ]\n }\n },\n {\n \"name\": \"TicketSubmitted\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"epoch\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"ticket_id\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"gateway\",\n \"docs\": [\n \"Gateway PDA whose authority signed the round dispatch.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"submitter\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"registry_version\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"signers_bitmap\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"UnsolicitedSigningEvidence\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"attestation\",\n \"type\": {\n \"defined\": {\n \"name\": \"Attestation\"\n }\n }\n },\n {\n \"name\": \"coalition_key\",\n \"docs\": [\n \"Affine sum of the attestation's signer keys, intruders included. A verification input,\",\n \"not evidence: it is left out of [`Evidence::hash`], so the case PDA derives from the\",\n \"attestation alone.\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"CoalitionKey\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"UpdateConfigArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"withdrawal_cooldown_slots\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"minimum_node_deposit\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"reward_per_signature\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_settlement_delay_seconds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"challenger_bounty_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"x402_round_base\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_signers\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"epoch_len_seconds\",\n \"docs\": [\n \"Epoch parameters apply to epochs created after this update, never to existing ones.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"ticket_grace_seconds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"target_tickets_per_epoch\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"min_availability_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"min_availability_samples\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"protocol_fee_bps\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"UpdateNodeEndpointArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"ip\",\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"port\",\n \"type\": \"u16\"\n }\n ]\n }\n }\n ]\n}","import type { Idl } from \"@anchor-lang/core\";\nimport idlJson from \"./molpha.json\" with { type: \"json\" };\n\n/**\n * Vendored Molpha Anchor IDL (`target/idl/molpha.json` from the program repo).\n *\n * Re-exported as `MOLPHA_IDL` and used as the default in `MolphaSDK` /\n * `MolphaSolanaClient.create`. Pass `idl` / `programId` only when pinning a\n * different deployment. Keep this copy aligned with the on-chain program you target.\n */\nexport const MOLPHA_IDL = idlJson as Idl;\n\n/** Program address baked into the vendored IDL. */\nexport const MOLPHA_PROGRAM_ADDRESS: string = idlJson.address;\n","/** On-chain subscription plan (`PlanType` in the Molpha program IDL). */\nexport enum PlanType {\n Basic = 0,\n Standard = 1,\n Professional = 2,\n Enterprise = 3,\n}\n\n/** Numeric plan index used for PDA derivation and on-chain reads. */\nexport type PlanId = 0 | 1 | 2 | 3;\n\nconst PLAN_VARIANTS = [\n { basic: {} },\n { standard: {} },\n { professional: {} },\n { enterprise: {} },\n] as const;\n\nexport function planVariant(planId: PlanId): (typeof PLAN_VARIANTS)[number] {\n return PLAN_VARIANTS[planId];\n}\n\nexport function planIdFromVariant(variant: Record<string, unknown>): PlanId {\n const key = Object.keys(variant)[0]?.toLowerCase();\n const idx = [\"basic\", \"standard\", \"professional\", \"enterprise\"].indexOf(key ?? \"\");\n if (idx < 0) throw new Error(`Unknown plan variant: ${JSON.stringify(variant)}`);\n return idx as PlanId;\n}\n","/**\n * `MolphaSolanaClient` — consumer on-chain surface only (subscribe, extend,\n * submitAttestation, readFeed/readPlan/readSubscription/readRegistry,\n * getRegistrySelectionConfig, verifyNodeKeysForPrivateApi). Built from an Anchor\n * `Program` over the vendored IDL (program `3d01170`, \"Epoch settlements\").\n */\nimport {\n AnchorProvider,\n Program,\n type Idl,\n type Wallet,\n web3,\n} from \"@anchor-lang/core\";\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport BN from \"bn.js\";\nimport type { Address } from \"@solana/kit\";\nimport { type CoalitionKey, computeCoalitionKey } from \"../core/coalition.js\";\nimport { bytesToHex, toFixedBytes } from \"../core/encoding.js\";\nimport {\n normalizeSecp256k1PublicKeyHex,\n secp256k1PublicKeyFromCoordinates,\n} from \"../core/nodeKeys.js\";\nimport type {\n Attestation,\n Node,\n NodeKeyVerifierArgs,\n RegistrySelectionConfig,\n} from \"../core/types.js\";\nimport {\n type RegistryStateView,\n type RegistryView,\n resolveRemainingAccounts,\n} from \"./accounts.js\";\nimport {\n addressFromBytes,\n getAssociatedTokenAddressSync,\n setComputeUnitLimit,\n setComputeUnitPrice,\n SYSTEM_PROGRAM_ADDRESS,\n TOKEN_PROGRAM_ADDRESS,\n toSolanaAddress,\n type SolanaAccountMeta,\n type SolanaAddress,\n type SolanaConnection,\n} from \"./kit.js\";\nimport {\n feedPda,\n planPda,\n protocolConfigPda,\n registryPda,\n registryStatePda,\n subscriptionPda,\n} from \"./pdas.js\";\nimport { MOLPHA_IDL, MOLPHA_PROGRAM_ADDRESS } from \"../../idl/index.js\";\nimport { PlanType, planIdFromVariant, planVariant, type PlanId } from \"./plans.js\";\n\nexport { PlanType, type PlanId } from \"./plans.js\";\n\n/** The most a transaction may request; the fallback when the signer count is unknown. */\nconst MAX_COMPUTE_UNIT_LIMIT = 1_400_000;\n\n/**\n * Compute units to request for a `submit_attestation` carrying `signerCount` signatures.\n *\n * The program's LiteSVM benchmark measures the whole transaction at about `43k + 9.1k` units per\n * signer (119k at 8 signers, 155k at 12, 208k at 18), so the old flat 1.4M request was 7-10 times\n * what a typical aggregate uses. That matters once a priority fee is attached, because it is\n * priced per requested unit, and for how the scheduler packs blocks. The estimate adds 15% and a\n * fixed 10k: the program's selection check costs a little more on some registries than the\n * benchmark's, and a limit that is hit fails the transaction for good.\n */\nexport function estimateSubmitComputeUnits(signerCount: number): number {\n if (!Number.isInteger(signerCount) || signerCount < 1) return MAX_COMPUTE_UNIT_LIMIT;\n const measured = 43_000 + 9_200 * signerCount;\n return Math.min(Math.round(measured * 1.15) + 10_000, MAX_COMPUTE_UNIT_LIMIT);\n}\n\n/** How long a registry read is reused. A registry version's node list never changes. */\nconst REGISTRY_CACHE_MS = 30_000;\n/** Cap on remembered node keys / coalition keys, so a long-lived client stays bounded. */\nconst KEY_CACHE_LIMIT = 8_192;\n/** How long a recent-prioritization-fee read is reused. */\nconst PRIORITY_FEE_CACHE_MS = 5_000;\n/** Percentile of recent fees for `priorityFeeMicroLamports: \"auto\"`, and the most it will pay. */\nconst AUTO_FEE_PERCENTILE = 0.75;\nconst AUTO_FEE_CAP_MICRO_LAMPORTS = 1_000_000;\ntype Commitment = NonNullable<ConstructorParameters<typeof AnchorProvider>[2]>[\"commitment\"];\n\nexport interface SubscribeResult {\n signature: string;\n /** USDC base units actually debited from the owner for this subscription. */\n pricePaid: bigint;\n}\n\nexport interface PlanInfo {\n planType: PlanType;\n /** Subscription price in USDC base units (raw u64, e.g. 1_000_000 = 1 USDC at 6 decimals). */\n subscriptionPrice: bigint;\n maxSigners: number;\n maxDelegates: number;\n /** Rounds a subscription on this plan may settle per period. */\n maxRounds: bigint;\n privateApiEnabled: boolean;\n isActive: boolean;\n}\n\n/**\n * On-chain `Subscription`. The program does not track usage (round quota is counted by the\n * gateway's off-chain outbox), so there is no on-chain \"rounds used\" figure to read.\n */\nexport interface SubscriptionInfo {\n owner: Address;\n planType: PlanType;\n /** Unix timestamp (seconds) until which the subscription is valid. */\n validUntil: bigint;\n /** Round quota per plan snapshot — enforced by the gateway at admission, not on chain. */\n maxRounds: bigint;\n delegateCount: number;\n maxDelegates: number;\n maxSigners: number;\n}\n\nexport interface SubmitResult {\n signature: string;\n /** Feed PDA written by this submit (`[\"molpha_feed\", sourceId, [signaturesRequired], submitter]`). */\n feed: Address;\n}\n\n/**\n * On-chain `Feed` (Anchor-decoded). `value` is always the signed\n * `AttestationPayload.value` (32 bytes): the oracle value itself when `valueKind` is\n * `value`, or `keccak256(rawValue)` when it is `hash` (the preimage travelled in the\n * submitting instruction). For a tolerance-mode source it is a two's-complement `int256`\n * (see `decodeInt256` / `formatInt256Decimal`).\n */\nexport interface FeedAccount {\n sourceId: number[];\n value: Uint8Array | number[];\n valueKind: { value: Record<string, never> } | { hash: Record<string, never> };\n submitter: Address;\n /** u64 unix MILLISECONDS (the round's gateway-assigned timestamp). */\n timestamp: BN;\n signaturesRequired: number;\n signersBitmap: number[];\n registryVersion: number;\n bump: number;\n}\n\n /** Anchor-encoded `SubmitAttestationArgs` (camelCase field names). */\nexport interface SubmitAttestationArgs {\n attestation: {\n payload: {\n value: number[];\n sourceId: number[];\n registryVersion: number;\n signaturesRequired: number;\n timestamp: BN;\n };\n signature: {\n aggSigS: number[];\n commitment: number[];\n signersBitmap: number[];\n };\n };\n /** Optional preimage when `payload.value` is `keccak256(rawValue)`. */\n rawValue: Uint8Array | null;\n coalitionKey: { x: number[]; y: number[] };\n}\n\nexport interface SubmitAttestationOptions {\n /**\n * Compute-unit limit. Defaults to {@link estimateSubmitComputeUnits} for the aggregate's signer\n * count, not the 1.4M maximum.\n */\n computeUnitLimit?: number;\n /**\n * Priority fee in micro-lamports per compute unit. A number is used as given; `\"auto\"` takes the\n * 75th percentile of the fees recently paid by transactions that wrote the feed, capped at 1\n * lamport per unit. Omitted: no priority fee, which is right on a quiet cluster. Raise it (or\n * use `\"auto\"`) when submits are dropped under load.\n */\n priorityFeeMicroLamports?: number | \"auto\";\n /**\n * Precomputed signer coalition key. When omitted, the client fetches signer `Node`\n * accounts and sums their secp256k1 keys ({@link computeCoalitionKey}).\n */\n coalitionKey?: CoalitionKey;\n /**\n * Optional value preimage (maximum 256 bytes). Its keccak256 digest must equal\n * `attestation.payload.value`; the program stores that digest with `valueKind.hash`.\n */\n rawValue?: Uint8Array;\n}\n\ninterface NodeAccount {\n secp256k1PubkeyX?: Uint8Array | number[];\n secp256k1PubkeyY?: Uint8Array | number[];\n secp256k1_pubkey_x?: Uint8Array | number[];\n secp256k1_pubkey_y?: Uint8Array | number[];\n}\n\ninterface CreateClientOpts {\n connection: SolanaConnection;\n wallet: Wallet;\n programId?: SolanaAddress;\n idl?: Idl;\n commitment?: Commitment;\n}\n\nexport class MolphaSolanaClient {\n // Registry reads and signer keys are shared by every submit that names the same registry\n // version, so a fleet of feeds reads them once. Promises are cached, so concurrent submits\n // coalesce; a failed read is dropped and retried by the next call.\n private readonly registryCache = new Map<number, { at: number; value: Promise<RegistryView> }>();\n private readonly nodeKeyCache = new Map<string, { x: Uint8Array; y: Uint8Array }>();\n private readonly coalitionCache = new Map<string, Promise<CoalitionKey>>();\n private priorityFeeCache?: { at: number; value: Promise<number> };\n\n private constructor(\n private readonly program: Program,\n private readonly provider: AnchorProvider,\n readonly programId: Address,\n ) {}\n\n static create(opts: CreateClientOpts): MolphaSolanaClient {\n const programId = toSolanaAddress(opts.programId ?? MOLPHA_PROGRAM_ADDRESS);\n const provider = new AnchorProvider(opts.connection, opts.wallet, {\n commitment: opts.commitment ?? \"confirmed\",\n });\n // Anchor reads the program id from `idl.address`; override it so the\n // caller-supplied programId always wins without mutating the vendored copy.\n const idl: Idl = { ...(opts.idl ?? MOLPHA_IDL), address: programId };\n const program = new Program(idl, provider);\n return new MolphaSolanaClient(program, provider, programId);\n }\n\n private get wallet(): Address {\n return toSolanaAddress(this.provider.wallet.publicKey);\n }\n\n /** Anchor's method/account namespaces are untyped without an IDL type param. */\n private get methods(): any {\n return this.program.methods;\n }\n private get accounts(): any {\n return this.program.account;\n }\n\n /**\n * Current registry version plus the selection inputs of that snapshot\n * (`redundancy_buffer`, `node_count`). Two account reads: `RegistryState`, then the\n * version-addressed `Registry`. Prefer this over {@link getRegistryVersion} when\n * deriving gateway selection bitmaps.\n */\n async getRegistrySelectionConfig(): Promise<Required<RegistrySelectionConfig>> {\n const state = await this.fetchRegistryState();\n const registry = await this.fetchRegistry(state.currentVersion);\n return {\n registryVersion: state.currentVersion,\n redundancyBuffer: registry.redundancyBuffer,\n nodeCount: registry.nodeCount,\n };\n }\n\n async getRegistryVersion(): Promise<number> {\n return (await this.fetchRegistryState()).currentVersion;\n }\n\n /** Read an immutable registry snapshot; defaults to the current version. */\n async readRegistry(version?: number): Promise<RegistryView> {\n const target = version ?? (await this.fetchRegistryState()).currentVersion;\n return this.fetchRegistry(target);\n }\n\n /** Fetch a plan's on-chain terms, including the USDC `subscriptionPrice` charged on `subscribe`. */\n async getPlan(plan: PlanType): Promise<PlanInfo> {\n const info = await this.readPlan(plan);\n if (!info) {\n throw new Error(`plan account not found for ${PlanType[plan] ?? plan}`);\n }\n return info;\n }\n\n /** Read a plan account, or `null` if it has not been initialized. */\n async readPlan(plan: PlanType): Promise<PlanInfo | null> {\n const account = await this.accounts.plan.fetchNullable(planPda(plan as PlanId, this.programId));\n return account ? this.decodePlan(account) : null;\n }\n\n /** Read an owner's subscription, or `null` if they have not subscribed. */\n async readSubscription(owner: SolanaAddress = this.wallet): Promise<SubscriptionInfo | null> {\n const account = await this.accounts.subscription.fetchNullable(\n subscriptionPda(owner, this.programId),\n );\n if (!account) return null;\n return {\n owner: toSolanaAddress(account.owner),\n planType: planIdFromVariant(account.planType) as unknown as PlanType,\n validUntil: BigInt(account.validUntil.toString()),\n maxRounds: BigInt(account.maxRounds.toString()),\n delegateCount: account.delegateCount,\n maxDelegates: account.maxDelegates,\n maxSigners: account.maxSigners,\n };\n }\n\n /**\n * Subscribe to a plan. This **debits USDC** from the owner: the plan's\n * `subscriptionPrice` is transferred to the protocol treasury on-chain.\n *\n * Payment is explicit and must be confirmed: pass `maxPriceUsdc` (USDC base\n * units) as the most you agree to pay. The SDK reads the live on-chain price\n * and aborts before sending the transaction if it exceeds that amount, so a\n * price change between display and confirmation can never silently overcharge.\n * The amount actually paid is returned as `pricePaid`.\n *\n * Use {@link getPlan} to display the current price to the user beforehand.\n */\n async subscribe(\n plan: PlanType,\n opts: { maxPriceUsdc: bigint | number | BN; ownerUsdc?: SolanaAddress },\n ): Promise<SubscribeResult> {\n const planId = plan as PlanId;\n const owner = this.wallet;\n const { usdcMint, treasury } = await this.fetchProtocolTokens();\n const price = await this.confirmPlanPrice(planId, opts.maxPriceUsdc, \"subscribe\");\n const ownerUsdc = opts.ownerUsdc ?? getAssociatedTokenAddressSync(usdcMint, owner);\n\n const signature = await this.methods\n .subscribe(planVariant(planId))\n .accountsPartial({\n owner,\n protocolConfig: protocolConfigPda(this.programId),\n plan: planPda(planId, this.programId),\n subscription: subscriptionPda(owner, this.programId),\n ownerUsdc,\n treasury,\n systemProgram: SYSTEM_PROGRAM_ADDRESS,\n tokenProgram: TOKEN_PROGRAM_ADDRESS,\n })\n .rpc();\n return { signature, pricePaid: price };\n }\n\n /**\n * Extend the current subscription for another period. Like {@link subscribe}\n * this **debits USDC** (the plan's `subscriptionPrice`) and requires explicit\n * payment confirmation via `maxPriceUsdc`.\n */\n async extendSubscription(\n opts: { maxPriceUsdc: bigint | number | BN; ownerUsdc?: SolanaAddress },\n ): Promise<SubscribeResult> {\n const owner = this.wallet;\n const subscription = subscriptionPda(owner, this.programId);\n const sub = await this.accounts.subscription.fetch(subscription);\n const planId = planIdFromVariant(sub.planType);\n const { usdcMint, treasury } = await this.fetchProtocolTokens();\n const price = await this.confirmPlanPrice(planId, opts.maxPriceUsdc, \"extendSubscription\");\n const ownerUsdc = opts.ownerUsdc ?? getAssociatedTokenAddressSync(usdcMint, owner);\n\n const signature = await this.methods\n .extendSubscription()\n .accountsPartial({\n owner,\n protocolConfig: protocolConfigPda(this.programId),\n subscription,\n plan: planPda(planId, this.programId),\n ownerUsdc,\n treasury,\n tokenProgram: TOKEN_PROGRAM_ADDRESS,\n })\n .rpc();\n return { signature, pricePaid: price };\n }\n\n /**\n * Read the live on-chain plan price and verify it does not exceed the amount\n * the caller agreed to pay. Returns the price (USDC base units) on success.\n */\n private async confirmPlanPrice(\n planId: PlanId,\n maxPriceUsdc: bigint | number | BN,\n method: string,\n ): Promise<bigint> {\n const max = toUsdcBaseUnits(maxPriceUsdc, \"maxPriceUsdc\");\n const plan = await this.accounts.plan.fetch(planPda(planId, this.programId));\n const price = BigInt(plan.subscriptionPrice.toString());\n if (price > max) {\n throw new Error(\n `${method}: plan price ${price} USDC base units exceeds the confirmed maximum ${max}. ` +\n \"The on-chain price may have changed — re-confirm the current price before paying.\",\n );\n }\n return price;\n }\n\n /**\n * Submit a gateway attestation via `submit_attestation`. The feed account for\n * `(sourceId, signaturesRequired, submitter)` is created on first use.\n *\n * Per the program, the instruction takes one read-only `Node` account per signer bit\n * (ascending bit order, resolved from the registry snapshot the round was signed\n * against) and a {@link CoalitionKey} argument. Unless `opts.coalitionKey` is given the\n * SDK fetches those `Node` accounts and sums their secp256k1 keys client-side\n * (`computeCoalitionKey`); the program only checks the key, so a wrong one fails the\n * transaction and nothing else.\n *\n * `opts.rawValue` is for values longer than 32 bytes: the signed `payload.value` must be\n * `keccak256(rawValue)`; {@link buildSubmitAttestationArgs} validates that before send.\n */\n async submitAttestation(\n attestation: Attestation,\n opts?: SubmitAttestationOptions,\n ): Promise<SubmitResult> {\n const { payload, signature: schnorr } = attestation;\n const sourceId = toFixedBytes(payload.sourceId, 32, \"sourceId\");\n const submitter = this.wallet;\n const registry = await this.fetchRegistryCached(payload.registryVersion);\n const remaining = resolveRemainingAccounts(schnorr.signersBitmap, registry);\n assertSignerCount(remaining.length, payload.signaturesRequired, registry);\n const coalitionKey =\n opts?.coalitionKey ??\n (await this.computeSignerCoalitionKey(remaining, registry, schnorr.signersBitmap));\n const feed = feedPda(sourceId, payload.signaturesRequired, submitter, this.programId);\n const preInstructions = [\n setComputeUnitLimit(opts?.computeUnitLimit ?? estimateSubmitComputeUnits(remaining.length)),\n ];\n const price = await this.resolvePriorityFee(opts?.priorityFeeMicroLamports, feed);\n if (price > 0) preInstructions.push(setComputeUnitPrice(price));\n\n const signature = await this.methods\n .submitAttestation(\n buildSubmitAttestationArgs(attestation, coalitionKey, opts?.rawValue),\n )\n .accountsPartial({\n submitter,\n registry: registryPda(payload.registryVersion, this.programId),\n feed,\n protocolConfig: protocolConfigPda(this.programId),\n systemProgram: SYSTEM_PROGRAM_ADDRESS,\n })\n .remainingAccounts(remaining)\n .preInstructions(preInstructions)\n .rpc();\n return { signature, feed };\n }\n\n /** The registry for `version`, reused for {@link REGISTRY_CACHE_MS}. */\n private fetchRegistryCached(version: number): Promise<RegistryView> {\n const now = Date.now();\n const hit = this.registryCache.get(version);\n if (hit && now - hit.at < REGISTRY_CACHE_MS) return hit.value;\n const value = this.fetchRegistry(version);\n this.registryCache.set(version, { at: now, value });\n value.catch(() => {\n if (this.registryCache.get(version)?.value === value) this.registryCache.delete(version);\n });\n return value;\n }\n\n private async resolvePriorityFee(\n option: number | \"auto\" | undefined,\n feed: SolanaAddress,\n ): Promise<number> {\n if (option === undefined) return 0;\n if (option !== \"auto\") {\n if (!Number.isFinite(option) || option < 0) {\n throw new Error(\"priorityFeeMicroLamports must be a non-negative number or \\\"auto\\\"\");\n }\n return Math.floor(option);\n }\n const now = Date.now();\n if (!this.priorityFeeCache || now - this.priorityFeeCache.at >= PRIORITY_FEE_CACHE_MS) {\n const value = (async () => {\n try {\n const recent = await this.provider.connection.getRecentPrioritizationFees({\n lockedWritableAccounts: [new web3.PublicKey(feed)],\n });\n const fees = recent.map((r) => r.prioritizationFee).sort((a, b) => a - b);\n if (fees.length === 0) return 0;\n const fee = fees[Math.min(fees.length - 1, Math.floor(fees.length * AUTO_FEE_PERCENTILE))]!;\n return Math.min(fee, AUTO_FEE_CAP_MICRO_LAMPORTS);\n } catch {\n return 0; // an unreadable fee market must not stop a submit\n }\n })();\n this.priorityFeeCache = { at: now, value };\n }\n return this.priorityFeeCache.value;\n }\n\n /** Sum of the signers' keys, read from their on-chain `Node` accounts (one batched fetch). */\n private computeSignerCoalitionKey(\n remaining: SolanaAccountMeta[],\n registry: RegistryView,\n signersBitmap: string,\n ): Promise<CoalitionKey> {\n // A node's key never changes, so the sum for one (registry, signer set) is reusable, and\n // each Node account is read at most once however many signer sets include it. The promise is\n // cached, so concurrent submits of one signer set share a single read.\n const setKey = `${registry.version}:${signersBitmap}`;\n const known = this.coalitionCache.get(setKey);\n if (known) return known;\n if (this.coalitionCache.size >= KEY_CACHE_LIMIT) this.coalitionCache.clear();\n const pending = this.sumSignerKeys(remaining, registry);\n this.coalitionCache.set(setKey, pending);\n pending.catch(() => {\n if (this.coalitionCache.get(setKey) === pending) this.coalitionCache.delete(setKey);\n });\n return pending;\n }\n\n private async sumSignerKeys(\n remaining: SolanaAccountMeta[],\n registry: RegistryView,\n ): Promise<CoalitionKey> {\n const addresses = remaining.map((meta) => meta.pubkey);\n const missing = addresses.filter((a) => !this.nodeKeyCache.has(a.toBase58()));\n if (missing.length > 0) {\n const accounts: Array<NodeAccount | null> = await this.accounts.node.fetchMultiple(missing);\n if (this.nodeKeyCache.size + missing.length > KEY_CACHE_LIMIT) this.nodeKeyCache.clear();\n accounts.forEach((account, i) => {\n if (!account) {\n throw new Error(\n `Node account ${missing[i]!.toBase58()} (registry ${registry.version}) does not exist`,\n );\n }\n this.nodeKeyCache.set(missing[i]!.toBase58(), {\n x: nodeCoordinate(account, \"secp256k1PubkeyX\", \"secp256k1_pubkey_x\"),\n y: nodeCoordinate(account, \"secp256k1PubkeyY\", \"secp256k1_pubkey_y\"),\n });\n });\n }\n return computeCoalitionKey(addresses.map((a) => this.nodeKeyCache.get(a.toBase58())!));\n }\n\n /**\n * Read the feed written by `submitter` (default: this wallet) for\n * `(sourceId, signaturesRequired)`, or `null` before its first submit.\n */\n async readFeed(\n sourceId: string,\n signaturesRequired: number,\n submitter: SolanaAddress = this.wallet,\n ): Promise<FeedAccount | null> {\n const feed = feedPda(\n toFixedBytes(sourceId, 32, \"sourceId\"),\n signaturesRequired,\n submitter,\n this.programId,\n );\n return (await this.accounts.feed.fetchNullable(feed)) as FeedAccount | null;\n }\n\n /**\n * Authenticate gateway-provided private API encryption keys against the\n * on-chain Node accounts of the round's registry snapshot (`registry.nodes[index]`).\n */\n async verifyNodeKeysForPrivateApi(args: NodeKeyVerifierArgs): Promise<void> {\n const registry = await this.fetchRegistry(args.registryVersion);\n const selectedNodes = selectedNodesForVerifier(args);\n\n await Promise.all(\n selectedNodes.map(async (node) => {\n const nodeAddress = registry.nodes[node.index];\n if (node.index >= registry.nodeCount || nodeAddress === undefined) {\n throw new Error(\n `Gateway selected node ${node.index} is outside registry ${registry.version} node_count ${registry.nodeCount}`,\n );\n }\n const account = await this.fetchNodeAccount(nodeAddress, node.index);\n const onChainKey = secp256k1PublicKeyFromCoordinates(\n nodeCoordinate(account, \"secp256k1PubkeyX\", \"secp256k1_pubkey_x\"),\n nodeCoordinate(account, \"secp256k1PubkeyY\", \"secp256k1_pubkey_y\"),\n `Node(${nodeAddress}) secp256k1 public key`,\n );\n const gatewayKey = normalizeSecp256k1PublicKeyHex(\n node.signingKey,\n `Gateway selected node ${node.index} signingKey`,\n );\n if (gatewayKey !== onChainKey) {\n throw new Error(\n `Gateway selected node ${node.index} signingKey does not match on-chain Node(${nodeAddress})`,\n );\n }\n }),\n );\n }\n\n private decodePlan(account: {\n planType: Record<string, unknown>;\n subscriptionPrice: { toString(): string };\n maxSigners: number;\n maxDelegates: number;\n maxRounds: { toString(): string };\n privateApiEnabled: boolean;\n isActive: boolean;\n }): PlanInfo {\n return {\n planType: planIdFromVariant(account.planType) as unknown as PlanType,\n subscriptionPrice: BigInt(account.subscriptionPrice.toString()),\n maxSigners: account.maxSigners,\n maxDelegates: account.maxDelegates,\n maxRounds: BigInt(account.maxRounds.toString()),\n privateApiEnabled: account.privateApiEnabled,\n isActive: account.isActive,\n };\n }\n\n private async fetchRegistryState(): Promise<RegistryStateView> {\n const state = await this.accounts.registryState.fetch(registryStatePda(this.programId));\n return {\n currentVersion: state.currentVersion,\n nextVersion: state.nextVersion,\n };\n }\n\n private async fetchRegistry(version: number): Promise<RegistryView> {\n const registry = await this.accounts.registry.fetch(registryPda(version, this.programId));\n const nodeCount: number = registry.nodeCount;\n const nodes = (registry.nodes as Array<Uint8Array | number[]>)\n .slice(0, nodeCount)\n .map((entry) => addressFromBytes(Uint8Array.from(entry)));\n return {\n version: registry.version,\n nodeCount,\n redundancyBuffer: registry.redundancyBuffer,\n nodes,\n graceActiveUntil: BigInt(registry.graceActiveUntil.toString()),\n activeFrom: BigInt(registry.activeFrom.toString()),\n };\n }\n\n private async fetchNodeAccount(\n nodeAddress: Address,\n selectedNodeIndex: number,\n ): Promise<NodeAccount> {\n try {\n return await this.accounts.node.fetch(nodeAddress);\n } catch (err) {\n const detail = err instanceof Error ? err.message : String(err);\n throw new Error(\n `Failed to fetch on-chain Node(${nodeAddress}) for selected node ${selectedNodeIndex}: ${detail}`,\n );\n }\n }\n\n /** `usdc_mint` from `ProtocolConfig`; the treasury is its ATA owned by the config PDA. */\n private async fetchProtocolTokens(): Promise<{ usdcMint: Address; treasury: Address }> {\n const protocolConfig = protocolConfigPda(this.programId);\n const config = await this.accounts.protocolConfig.fetch(protocolConfig);\n const usdcMint = toSolanaAddress(config.usdcMint);\n return {\n usdcMint,\n treasury: getAssociatedTokenAddressSync(usdcMint, protocolConfig),\n };\n }\n}\n\n/**\n * Build the Anchor `SubmitAttestationArgs` for a gateway result: `{ attestation: { payload,\n * signature }, rawValue, coalitionKey }`. `coalitionKey` is the affine sum of the signers'\n * keys (see `computeCoalitionKey`).\n */\nexport function buildSubmitAttestationArgs(\n attestation: Attestation,\n coalitionKey: CoalitionKey,\n rawValue?: Uint8Array | null,\n): SubmitAttestationArgs {\n const { payload, signature } = attestation;\n const value = toFixedBytes(payload.value, 32, \"payload.value\");\n if (rawValue && rawValue.length > 256) {\n throw new RangeError(`rawValue must be at most 256 bytes, got ${rawValue.length}`);\n }\n if (rawValue && bytesToHex(keccak_256(rawValue)) !== bytesToHex(value)) {\n throw new Error(\"rawValue keccak256 digest does not match attestation.payload.value\");\n }\n return {\n attestation: {\n payload: {\n value: Array.from(toFixedBytes(payload.value, 32, \"payload.value\")),\n sourceId: Array.from(toFixedBytes(payload.sourceId, 32, \"sourceId\")),\n registryVersion: payload.registryVersion,\n signaturesRequired: payload.signaturesRequired,\n timestamp: new BN(payload.timestamp),\n },\n signature: {\n aggSigS: Array.from(toFixedBytes(signature.s, 32, \"signature.s\")),\n commitment: Array.from(toFixedBytes(signature.commitmentAddr, 20, \"signature.commitmentAddr\")),\n signersBitmap: Array.from(toFixedBytes(signature.signersBitmap, 32, \"signature.signersBitmap\")),\n },\n },\n rawValue: rawValue ? toAnchorBytes(rawValue) : null,\n coalitionKey: {\n x: Array.from(toFixedBytes(coalitionKey.x, 32, \"coalitionKey.x\")),\n y: Array.from(toFixedBytes(coalitionKey.y, 32, \"coalitionKey.y\")),\n },\n };\n}\n\n/**\n * Mirror the program's signer-count bounds (`verify_attestation_core`):\n * `signaturesRequired <= popcount <= signaturesRequired + redundancyBuffer`.\n */\nfunction assertSignerCount(\n signerCount: number,\n signaturesRequired: number,\n registry: RegistryView,\n): void {\n if (signerCount < signaturesRequired) {\n throw new Error(\n `QuorumBelowThreshold: ${signerCount} signers < signaturesRequired ${signaturesRequired}`,\n );\n }\n if (signerCount > signaturesRequired + registry.redundancyBuffer) {\n throw new Error(\n `CreditedExceedsSelection: ${signerCount} signers > signaturesRequired ${signaturesRequired} + redundancy buffer ${registry.redundancyBuffer} of registry ${registry.version}`,\n );\n }\n}\n\n/** Browser-safe byte array accepted by Anchor's Buffer-oriented `bytes` Borsh layout. */\nfunction toAnchorBytes(bytes: Uint8Array): Uint8Array {\n const out = Uint8Array.from(bytes) as Uint8Array & {\n copy(target: Uint8Array, targetStart?: number): number;\n };\n out.copy = (target, targetStart = 0) => {\n target.set(out, targetStart);\n return out.length;\n };\n return out;\n}\n\n/** Normalize a confirmed USDC amount (base units) to `bigint`, rejecting non-integers. */\nfunction toUsdcBaseUnits(amount: bigint | number | BN, label: string): bigint {\n if (typeof amount === \"bigint\") {\n if (amount < 0n) throw new Error(`${label} must be non-negative, got ${amount}`);\n return amount;\n }\n if (typeof amount === \"number\") {\n if (!Number.isInteger(amount) || amount < 0) {\n throw new Error(`${label} must be a non-negative integer of USDC base units, got ${amount}`);\n }\n return BigInt(amount);\n }\n return BigInt(amount.toString());\n}\n\nfunction nodeCoordinate(\n account: NodeAccount,\n camelCaseField: \"secp256k1PubkeyX\" | \"secp256k1PubkeyY\",\n snakeCaseField: \"secp256k1_pubkey_x\" | \"secp256k1_pubkey_y\",\n): Uint8Array {\n const value = account[camelCaseField] ?? account[snakeCaseField];\n if (!(value instanceof Uint8Array) && !Array.isArray(value)) {\n throw new Error(`Node account is missing ${camelCaseField}`);\n }\n return toFixedBytes(Uint8Array.from(value), 32, `Node.${camelCaseField}`);\n}\n\nfunction selectedNodesForVerifier(args: NodeKeyVerifierArgs): Node[] {\n if (args.nodeIndexes.length === 0) {\n throw new Error(\"Private API node-key verification requires at least one selected index\");\n }\n if (args.nodes.length !== args.nodeIndexes.length) {\n throw new Error(\n `Private API node-key verification expected ${args.nodeIndexes.length} selected nodes, got ${args.nodes.length}`,\n );\n }\n\n const expected = new Set<number>();\n for (const index of args.nodeIndexes) {\n if (!Number.isInteger(index) || index < 0) {\n throw new Error(`Private API selected index must be a non-negative integer: ${index}`);\n }\n if (expected.has(index)) {\n throw new Error(`Private API selected index is duplicated: ${index}`);\n }\n expected.add(index);\n }\n\n const byIndex = new Map<number, Node>();\n for (const node of args.nodes) {\n if (!Number.isInteger(node.index) || node.index < 0) {\n throw new Error(\n `Private API selected node index must be a non-negative integer: ${node.index}`,\n );\n }\n if (!expected.has(node.index)) {\n throw new Error(`Private API selected node ${node.index} was not requested`);\n }\n if (byIndex.has(node.index)) {\n throw new Error(`Private API selected node index is duplicated: ${node.index}`);\n }\n byIndex.set(node.index, node);\n }\n\n return args.nodeIndexes.map((index) => {\n const node = byIndex.get(index);\n if (!node) {\n throw new Error(`Private API selected node is missing for index: ${index}`);\n }\n return node;\n });\n}\n","/**\n * Unified wallet surface: Anchor txs + gateway request-auth signing.\n */\nimport type { Wallet } from \"@anchor-lang/core\";\nimport { ed25519 } from \"@noble/curves/ed25519.js\";\nimport type { Signer } from \"./core/types.js\";\nimport type { SolanaKeypair } from \"./solana/kit.js\";\n\n/** Anchor `Wallet` plus optional gateway auth override. */\nexport type MolphaWallet = Wallet & {\n /**\n * Signs gateway request-auth hashes (`hashRequestAuth`). When omitted, derived from Anchor\n * `Wallet.payer` when the keypair secret is available (Node `Wallet`, etc.).\n */\n signAuthMessage?: Signer;\n};\n\nconst isKeypair = (value: unknown): value is SolanaKeypair =>\n typeof value === \"object\" &&\n value !== null &&\n \"secretKey\" in value &&\n value.secretKey instanceof Uint8Array;\n\n/** ed25519 gateway signer from a Solana keypair's 32-byte seed. */\nexport function signerFromKeypair(keypair: SolanaKeypair): Signer {\n const seed = keypair.secretKey.slice(0, 32);\n return async (message: Uint8Array): Promise<Uint8Array> => ed25519.sign(message, seed);\n}\n\n/** Resolve the gateway auth signer for a Molpha wallet, if available. */\nexport function gatewaySignerFromWallet(wallet: Wallet): Signer | undefined {\n const molpha = wallet as MolphaWallet;\n if (molpha.signAuthMessage) return molpha.signAuthMessage;\n if (\"payer\" in wallet && isKeypair(wallet.payer)) return signerFromKeypair(wallet.payer);\n return undefined;\n}\n","/**\n * Attestation message hash — the digest the node coalition Schnorr-signs and every verifier\n * (Solana program, EVM `VerifierLib.constructMessage`, Starknet) recomputes:\n *\n * message = keccak256(\n * keccak256(\"MOLPHA_MESSAGE_V1\") || value || sourceId || u32be(registryVersion) ||\n * u8(signaturesRequired) || u64be(timestamp) || signersBitmap\n * )\n *\n * `timestamp` is unix MILLISECONDS, assigned by the gateway. The preimage is 141 bytes.\n * Widths follow the Rust, Solidity, Solana, and node encoders.\n */\nimport { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { concatBytes, toFixedBytes, u8, u32be, u64be, utf8 } from \"./encoding.js\";\nimport type { Attestation } from \"./types.js\";\n\n/** `keccak256(\"MOLPHA_MESSAGE_V1\")` domain separator. */\nexport const MESSAGE_PREFIX: Uint8Array = keccak_256(utf8(\"MOLPHA_MESSAGE_V1\"));\n\nexport interface AttestationMessageFields {\n /** 32-byte source id (hex or bytes). */\n sourceId: string | Uint8Array;\n registryVersion: number;\n /** Encoded as a single byte (`uint8`); throws `RangeError` outside `0..255`. */\n signaturesRequired: number;\n /** 32-byte big-endian signers bitmap (hex or bytes). */\n signersBitmap: string | Uint8Array;\n /** 32-byte packed value (hex or bytes). */\n value: string | Uint8Array;\n /** Unix milliseconds (u64), assigned by the gateway. */\n timestamp: number | bigint;\n}\n\n/** Compute the attestation message hash (32 bytes). */\nexport function attestationMessageHash(fields: AttestationMessageFields): Uint8Array {\n if (!Number.isInteger(fields.signaturesRequired) || fields.signaturesRequired < 0 || fields.signaturesRequired > 255) {\n throw new RangeError(`signaturesRequired out of u8 range: ${fields.signaturesRequired}`);\n }\n return keccak_256(\n concatBytes(\n MESSAGE_PREFIX,\n toFixedBytes(fields.value, 32, \"value\"),\n toFixedBytes(fields.sourceId, 32, \"sourceId\"),\n u32be(fields.registryVersion),\n u8(fields.signaturesRequired),\n u64be(fields.timestamp),\n toFixedBytes(fields.signersBitmap, 32, \"signersBitmap\"),\n ),\n );\n}\n\n/** Message hash of a completed gateway attestation (`payload.value` is the signed word). */\nexport function attestationMessageHashFromAttestation(attestation: Attestation): Uint8Array {\n const { payload, signature } = attestation;\n return attestationMessageHash({\n sourceId: payload.sourceId,\n registryVersion: payload.registryVersion,\n signaturesRequired: payload.signaturesRequired,\n signersBitmap: signature.signersBitmap,\n value: payload.value,\n timestamp: payload.timestamp,\n });\n}\n","/**\n * `timestamp` is unix MILLISECONDS, assigned by the gateway. Chain clocks (Solana `Clock`,\n * EVM `block.timestamp`), epoch windows and `maxAge`/staleness are measured in SECONDS, so\n * anything that compares the two must go through {@link timestampSeconds}.\n */\n\n/** `timestamp` (unix ms) as whole unix seconds, floored. */\nexport function timestampSeconds(timestamp: number | bigint): number {\n const ms = typeof timestamp === \"bigint\" ? timestamp : BigInt(timestamp);\n if (ms < 0n) throw new RangeError(\"timestamp must not be negative\");\n return Number(ms / 1000n);\n}\n\n/**\n * Age in whole seconds of a timestamp against `nowSeconds`, saturating at 0 so a\n * timestamp slightly ahead of the local clock never goes negative.\n */\nexport function timestampAgeSeconds(\n timestamp: number | bigint,\n nowSeconds: number,\n): number {\n return Math.max(0, nowSeconds - timestampSeconds(timestamp));\n}\n","/**\n * Result codes returned by Molpha's stateless verifier contracts (`verify` on EVM and\n * Starknet). Shared across VMs: the same attestation yields the same code on every chain.\n *\n * Append-only — never renumber. Mirrors `VerifyCodes.sol` in `molpha-core-contracts` and\n * `verify_codes.cairo` in `molpha-starknet`. Two codes belong to mechanisms the verifiers\n * do not implement; they are kept so the numbering can never shift under them.\n */\nexport const VERIFY_CODES = {\n OK: 0,\n /** Reserved. Never returned. */\n FEED_WITNESS: 1,\n /** The payload's `registryVersion` does not exist on this verifier. */\n BAD_REGISTRY_VERSION: 2,\n /** Structurally invalid input, or a `timestamp` in the future when `maxAge != 0`. */\n MALFORMED: 3,\n /** `timestamp` predates the registry version's activation. */\n NOT_YET_ACTIVE: 4,\n /** The registry version was superseded more than the grace window before `timestamp`. */\n VERSION_EXPIRED: 5,\n /** Reserved. Never returned. */\n COMPROMISED_QUORUM: 6,\n /** The signer set is not within the round's derived selection group. */\n BAD_QUORUM: 7,\n /** The signers' aggregate public key is the point at infinity. */\n BAD_AGGREGATE: 8,\n /** The aggregate Schnorr signature does not verify. */\n BAD_SIGNATURE: 9,\n /** Older than the caller's `maxAge`. */\n STALE: 10,\n} as const;\n\nexport type VerifyCodeName = keyof typeof VERIFY_CODES;\nexport type VerifyCode = (typeof VERIFY_CODES)[VerifyCodeName];\n\nconst NAMES_BY_CODE: ReadonlyMap<number, VerifyCodeName> = new Map(\n (Object.entries(VERIFY_CODES) as [VerifyCodeName, VerifyCode][]).map(([name, code]) => [\n code,\n name,\n ]),\n);\n\n/**\n * Name of a verifier result code, or `undefined` for a code this SDK version does not know.\n * Codes are append-only, so an unknown code is a newer verifier, not a malformed response.\n */\nexport function verifyCodeName(code: number): VerifyCodeName | undefined {\n return NAMES_BY_CODE.get(code);\n}\n","/**\n * Molpha EVM verifier ABI: `verify(Attestation, uint64 maxAge) -> (bool, uint8)` plus every\n * read-only registry view on `IVerifier`. Owner-only mutators (`addNode`, `removeNode`,\n * `setRedundancyBuffer`) and `Ownable` plumbing are deliberately left out.\n *\n * Mirrors `IVerifier.sol` in `molpha-core-contracts`. Struct member order is ABI-significant\n * and equals the signed message order, so it is not the flat gateway field order on `Attestation`.\n */\nexport const MOLPHA_VERIFIER_ABI = [\n {\n type: \"function\",\n name: \"verify\",\n stateMutability: \"view\",\n inputs: [\n {\n name: \"attestation\",\n type: \"tuple\",\n internalType: \"struct IVerifier.Attestation\",\n components: [\n {\n name: \"payload\",\n type: \"tuple\",\n internalType: \"struct IVerifier.AttestationPayload\",\n components: [\n { name: \"value\", type: \"bytes32\", internalType: \"bytes32\" },\n { name: \"sourceId\", type: \"bytes32\", internalType: \"bytes32\" },\n { name: \"registryVersion\", type: \"uint32\", internalType: \"uint32\" },\n { name: \"signaturesRequired\", type: \"uint8\", internalType: \"uint8\" },\n { name: \"timestamp\", type: \"uint64\", internalType: \"uint64\" },\n ],\n },\n {\n name: \"signature\",\n type: \"tuple\",\n internalType: \"struct IVerifier.SchnorrSignature\",\n components: [\n { name: \"signature\", type: \"bytes32\", internalType: \"bytes32\" },\n { name: \"commitment\", type: \"address\", internalType: \"address\" },\n { name: \"signersBitmap\", type: \"uint256\", internalType: \"uint256\" },\n ],\n },\n ],\n },\n { name: \"maxAge\", type: \"uint64\", internalType: \"uint64\" },\n ],\n outputs: [\n { name: \"success\", type: \"bool\", internalType: \"bool\" },\n { name: \"code\", type: \"uint8\", internalType: \"uint8\" },\n ],\n },\n {\n type: \"function\",\n name: \"getRegistryVersion\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [{ name: \"registryVersion\", type: \"uint256\", internalType: \"uint256\" }],\n },\n {\n type: \"function\",\n name: \"getTotalNodes\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [{ name: \"totalNodes\", type: \"uint256\", internalType: \"uint256\" }],\n },\n {\n type: \"function\",\n name: \"redundancyBuffer\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [{ name: \"\", type: \"uint256\", internalType: \"uint256\" }],\n },\n {\n type: \"function\",\n name: \"getRegistryRoot\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [{ name: \"root\", type: \"bytes32\", internalType: \"bytes32\" }],\n },\n {\n type: \"function\",\n name: \"getRegistryRoot\",\n stateMutability: \"view\",\n inputs: [{ name: \"registryVersion\", type: \"uint256\", internalType: \"uint256\" }],\n outputs: [{ name: \"root\", type: \"bytes32\", internalType: \"bytes32\" }],\n },\n {\n type: \"function\",\n name: \"getRegistryPointer\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [{ name: \"registryPointer\", type: \"address\", internalType: \"address\" }],\n },\n {\n type: \"function\",\n name: \"getRegistryPointer\",\n stateMutability: \"view\",\n inputs: [{ name: \"registryVersion\", type: \"uint256\", internalType: \"uint256\" }],\n outputs: [{ name: \"registryPointer\", type: \"address\", internalType: \"address\" }],\n },\n {\n type: \"function\",\n name: \"activatesAt\",\n stateMutability: \"view\",\n inputs: [{ name: \"registryVersion\", type: \"uint256\", internalType: \"uint256\" }],\n outputs: [{ name: \"ts\", type: \"uint256\", internalType: \"uint256\" }],\n },\n {\n type: \"function\",\n name: \"retiredAt\",\n stateMutability: \"view\",\n inputs: [{ name: \"registryVersion\", type: \"uint256\", internalType: \"uint256\" }],\n outputs: [{ name: \"ts\", type: \"uint256\", internalType: \"uint256\" }],\n },\n {\n type: \"function\",\n name: \"isLatestVersion\",\n stateMutability: \"view\",\n inputs: [{ name: \"registryVersion\", type: \"uint256\", internalType: \"uint256\" }],\n outputs: [{ name: \"latest\", type: \"bool\", internalType: \"bool\" }],\n },\n {\n type: \"function\",\n name: \"nodeStatus\",\n stateMutability: \"view\",\n inputs: [{ name: \"node\", type: \"address\", internalType: \"address\" }],\n outputs: [{ name: \"\", type: \"uint8\", internalType: \"uint8\" }],\n },\n {\n type: \"function\",\n name: \"isNode\",\n stateMutability: \"view\",\n inputs: [{ name: \"node\", type: \"address\", internalType: \"address\" }],\n outputs: [{ name: \"\", type: \"bool\", internalType: \"bool\" }],\n },\n /** Thrown by the per-version views for a version that was never published. `verify` never reverts. */\n { type: \"error\", name: \"InvalidRegistryVersion\", inputs: [] },\n] as const;\n","/**\n * EVM verifier helpers — framework-agnostic builders for\n * `verify(Attestation attestation, uint64 maxAge) returns (bool success, uint8 code)` on\n * deployed Molpha verifier contracts, plus a raw calldata encoder and a result decoder.\n *\n * Nothing here depends on ethers or viem. The struct objects use the Solidity member names\n * and viem's primitive types (`uint64`/`uint256` as `bigint`, `uint32`/`uint8` as `number`),\n * so they pass straight into `readContract` with `MOLPHA_VERIFIER_ABI` or into an ethers\n * `Contract`; `encodeEvmVerifyCalldata` produces the bytes for a raw `eth_call`.\n */\nimport {\n bigIntFromBytesBe,\n bytesToHex,\n concatBytes,\n hexToBytes,\n toFixedBytes,\n u256beFromBigInt,\n} from \"../core/encoding.js\";\nimport type { Attestation } from \"../core/types.js\";\nimport { VERIFY_CODES, verifyCodeName, type VerifyCodeName } from \"../core/verifyCodes.js\";\n\n/**\n * `IVerifier.AttestationPayload` — the signed half of an attestation.\n *\n * Member order is the order of the signed message preimage and of the ABI tuple, so it is\n * load bearing — it is not the flat gateway field order on {@link Attestation}.\n */\nexport interface EvmAttestationPayload {\n /** `bytes32` packed value. */\n value: `0x${string}`;\n /** `bytes32` source id. */\n sourceId: `0x${string}`;\n /** `uint32`. */\n registryVersion: number;\n /** `uint8`. */\n signaturesRequired: number;\n /** `uint64`, unix MILLISECONDS (`timestamp / 1000` is the seconds the verifier's `maxAge` uses). */\n timestamp: bigint;\n}\n\n/** `IVerifier.SchnorrSignature`. */\nexport interface EvmSchnorrSignature {\n /** `bytes32` Schnorr scalar `s`. */\n signature: `0x${string}`;\n /** `address` of the nonce point `R`. */\n commitment: `0x${string}`;\n /** `uint256` signers bitmap; bit `i` is node `i` of the registry version. */\n signersBitmap: bigint;\n}\n\n/** `IVerifier.Attestation`. */\nexport interface EvmAttestation {\n payload: EvmAttestationPayload;\n signature: EvmSchnorrSignature;\n}\n\n/** Positional arguments for `verify(attestation, maxAge)`. */\nexport interface EvmVerifierArgs {\n attestation: EvmAttestation;\n /** Freshness window in seconds (`uint64`). `0n` disables the check. */\n maxAge: bigint;\n}\n\nexport interface BuildEvmVerifierArgsOptions {\n /**\n * Freshness window in seconds. The verifier rejects the attestation with `STALE` when it\n * is older than this, and as `MALFORMED` when it is dated in the future.\n *\n * Required on purpose. `0` disables the check entirely, and that is not a neutral\n * default: the verifier is stateless, so without a window it accepts a correctly signed\n * attestation forever. Pass `0` only when the consuming contract enforces freshness or\n * ordering itself.\n */\n maxAge: number | bigint;\n}\n\n/** Decoded `verify` return value. */\nexport interface EvmVerifyResult {\n success: boolean;\n /** Raw result code — see `VERIFY_CODES`. */\n code: number;\n /** Name of `code`, or `\"UNKNOWN\"` for a code newer than this SDK. */\n reason: VerifyCodeName | \"UNKNOWN\";\n}\n\n/**\n * `bytes4(keccak256(\"verify(((bytes32,bytes32,uint32,uint8,uint64),(bytes32,address,uint256)),uint64)\"))`.\n */\nconst VERIFY_SELECTOR = hexToBytes(\"67e2907b\");\n\nconst U8_MAX = 0xffn;\nconst U32_MAX = 0xffff_ffffn;\nconst U64_MAX = 0xffff_ffff_ffff_ffffn;\nconst U256_MAX = (1n << 256n) - 1n;\n\nfunction strip0x(value: string): string {\n return value.startsWith(\"0x\") || value.startsWith(\"0X\") ? value.slice(2) : value;\n}\n\nfunction stripOuterQuotes(value: string): string {\n const trimmed = value.trim();\n if (\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\")) ||\n (trimmed.startsWith('\"') && trimmed.endsWith('\"'))\n ) {\n return trimmed.slice(1, -1);\n }\n return trimmed;\n}\n\n/**\n * Normalize hex to a fixed-size `0x`-prefixed value.\n * Accepts optional `0x` prefix and surrounding quotes.\n */\nexport function toFixedHex(value: string, bytes: number, label: string): `0x${string}` {\n const clean = strip0x(stripOuterQuotes(value)).toLowerCase();\n if (clean.length !== bytes * 2) {\n throw new RangeError(\n `${label}: expected ${bytes} bytes (${bytes * 2} hex chars), got ${clean.length / 2}`,\n );\n }\n return `0x${clean}`;\n}\n\n/** Convert a 32-byte hex bitmap to a `uint256` bigint (big-endian). */\nexport function signersBitmapToUint256(value: string): bigint {\n const bytes = toFixedBytes(toFixedHex(value, 32, \"signersBitmap\"), 32, \"signersBitmap\");\n return bigIntFromBytesBe(bytes);\n}\n\n/** Decimal string form of the signers bitmap — useful for JSON logging. */\nexport function signersBitmapToDecimal(value: string): string {\n return signersBitmapToUint256(value).toString();\n}\n\n/**\n * Checks an integer fits its Solidity type. Out-of-range calldata does not reach `verify`\n * at all: the ABI decoder reverts on dirty high bits instead of returning a result code.\n * Catching it here keeps that failure in the caller's process.\n */\nfunction assertUint(value: number, max: bigint, label: string): number {\n if (!Number.isSafeInteger(value) || value < 0 || BigInt(value) > max) {\n throw new RangeError(`${label}: expected an integer in 0..${max}, got ${value}`);\n }\n return value;\n}\n\nfunction assertBigUint(value: number | bigint, max: bigint, label: string): bigint {\n if (typeof value === \"number\" && !Number.isSafeInteger(value)) {\n throw new RangeError(`${label}: expected an integer in 0..${max}, got ${value}`);\n }\n const n = BigInt(value);\n if (n < 0n || n > max) {\n throw new RangeError(`${label}: expected an integer in 0..${max}, got ${value}`);\n }\n return n;\n}\n\n/** Left-pad a fixed-width value into one 32-byte ABI word. */\nfunction word(value: string, bytes: number, label: string): Uint8Array {\n const out = new Uint8Array(32);\n out.set(toFixedBytes(toFixedHex(value, bytes, label), bytes, label), 32 - bytes);\n return out;\n}\n\n/**\n * Build the `verify(attestation, maxAge)` arguments from a gateway result.\n *\n * ```ts\n * const { attestation, maxAge } = buildEvmVerifierArgs(result, { maxAge: 300 });\n * await client.readContract({ abi: MOLPHA_VERIFIER_ABI, functionName: \"verify\", args: [attestation, maxAge], ... });\n * ```\n */\nexport function buildEvmVerifierArgs(\n attestation: Attestation,\n options: BuildEvmVerifierArgsOptions,\n): EvmVerifierArgs {\n const { payload: signed, signature: sig } = attestation;\n const payload: EvmAttestationPayload = {\n value: toFixedHex(signed.value, 32, \"payload.value\"),\n sourceId: toFixedHex(signed.sourceId, 32, \"sourceId\"),\n registryVersion: assertUint(signed.registryVersion, U32_MAX, \"registryVersion\"),\n signaturesRequired: assertUint(signed.signaturesRequired, U8_MAX, \"signaturesRequired\"),\n timestamp: assertBigUint(signed.timestamp, U64_MAX, \"timestamp\"),\n };\n\n const signature: EvmSchnorrSignature = {\n signature: toFixedHex(sig.s, 32, \"signature\"),\n commitment: toFixedHex(sig.commitmentAddr, 20, \"commitment\"),\n signersBitmap: signersBitmapToUint256(sig.signersBitmap),\n };\n\n return {\n attestation: { payload, signature },\n maxAge: assertBigUint(options.maxAge, U64_MAX, \"maxAge\"),\n };\n}\n\n/**\n * ABI calldata for `verify(attestation, maxAge)`: the 4-byte selector followed by nine\n * 32-byte words. Both structs are static, so they encode inline with no offsets:\n *\n * `value, sourceId, registryVersion, signaturesRequired, timestamp, signature,\n * commitment, signersBitmap, maxAge`\n *\n * For a raw `eth_call` (`{ to: verifier, data }`).\n */\nexport function encodeEvmVerifyCalldata(args: EvmVerifierArgs): `0x${string}` {\n const { payload, signature } = args.attestation;\n const data = concatBytes(\n VERIFY_SELECTOR,\n word(payload.value, 32, \"value\"),\n word(payload.sourceId, 32, \"sourceId\"),\n u256beFromBigInt(BigInt(assertUint(payload.registryVersion, U32_MAX, \"registryVersion\"))),\n u256beFromBigInt(\n BigInt(assertUint(payload.signaturesRequired, U8_MAX, \"signaturesRequired\")),\n ),\n u256beFromBigInt(assertBigUint(payload.timestamp, U64_MAX, \"timestamp\")),\n word(signature.signature, 32, \"signature\"),\n word(signature.commitment, 20, \"commitment\"),\n u256beFromBigInt(assertBigUint(signature.signersBitmap, U256_MAX, \"signersBitmap\")),\n u256beFromBigInt(assertBigUint(args.maxAge, U64_MAX, \"maxAge\")),\n );\n return `0x${bytesToHex(data)}`;\n}\n\n/**\n * Decode the `(bool, uint8)` returned by `verify`.\n *\n * Accepts the raw 64-byte return data from `eth_call`, or the tuple an ABI-aware client\n * decodes (viem `readContract` returns `[true, 0]`; an ethers `Result` indexes the same way).\n * Throws when the two halves disagree (`success` with a non-zero code, or failure with\n * `OK`), which means the call did not reach a Molpha verifier of this interface.\n */\nexport function parseEvmVerifyResult(\n result:\n | string\n | { readonly 0: boolean | number | bigint; readonly 1: number | bigint },\n): EvmVerifyResult {\n let successWord: bigint;\n let codeWord: bigint;\n\n if (typeof result === \"string\") {\n const clean = strip0x(result.trim());\n if (!/^[0-9a-fA-F]*$/.test(clean) || clean.length !== 128) {\n throw new RangeError(\n `verify result: expected 64 bytes of return data, got ${JSON.stringify(result)}`,\n );\n }\n successWord = BigInt(`0x${clean.slice(0, 64)}`);\n codeWord = BigInt(`0x${clean.slice(64)}`);\n } else {\n const success = result[0];\n const code = result[1];\n successWord = typeof success === \"boolean\" ? (success ? 1n : 0n) : BigInt(success);\n if (typeof code === \"number\" && !Number.isSafeInteger(code)) {\n throw new RangeError(`verify result: code must fit uint8, got ${code}`);\n }\n codeWord = BigInt(code);\n }\n\n if (successWord !== 0n && successWord !== 1n) {\n throw new RangeError(`verify result: success must be 0 or 1, got ${successWord}`);\n }\n if (codeWord < 0n || codeWord > U8_MAX) {\n throw new RangeError(`verify result: code must fit uint8, got ${codeWord}`);\n }\n\n const success = successWord === 1n;\n const code = Number(codeWord);\n if (success !== (code === VERIFY_CODES.OK)) {\n throw new Error(\n `verify result is inconsistent: success=${success} with code ${code}; ` +\n \"the call did not reach a Molpha verifier with this interface\",\n );\n }\n\n return { success, code, reason: verifyCodeName(code) ?? \"UNKNOWN\" };\n}\n","/**\n * Deployed Molpha verifier contract addresses on Starknet testnets.\n *\n * Address comes from the active deployment profile (`config/deployments.json`).\n * When `MOLPHA_DEV_VERIFIERS_PROVISIONAL` is true, the value is a stable fallback\n * and should not be treated as the live Attestation-interface deployment.\n */\n\nexport { MOLPHA_VERIFIER_STARKNET_SEPOLIA } from \"../deployment.generated.js\";\n\nimport { MOLPHA_VERIFIER_STARKNET_SEPOLIA } from \"../deployment.generated.js\";\n\n/** Supported Starknet testnet identifiers. */\nexport type MolphaStarknetNetwork = \"starknet-sepolia\";\n\n/** Network id -> deployed verifier address. */\nexport const MOLPHA_VERIFIER_STARKNET_ADDRESSES: Record<\n MolphaStarknetNetwork,\n `0x${string}`\n> = {\n \"starknet-sepolia\": MOLPHA_VERIFIER_STARKNET_SEPOLIA,\n};\n\n/** Resolve the deployed verifier address for a supported Starknet network. */\nexport function getMolphaStarknetVerifierAddress(\n network: MolphaStarknetNetwork,\n): `0x${string}` {\n return MOLPHA_VERIFIER_STARKNET_ADDRESSES[network];\n}\n","/**\n * Starknet verifier helpers — framework-agnostic builders for\n * `verify(attestation: Attestation, max_age: u64) -> (bool, u8)` on deployed Molpha\n * verifier contracts, plus a raw calldata encoder and a result decoder.\n *\n * Nothing here depends on `starknet.js`. The struct objects use the Cairo member names, so\n * an ABI-aware client can pass them straight through; `encodeStarknetVerifyCalldata`\n * produces the flat felt array for a raw `starknet_call`.\n */\nimport { bigIntFromBytesBe, toFixedBytes } from \"../core/encoding.js\";\nimport type { Attestation } from \"../core/types.js\";\nimport { VERIFY_CODES, verifyCodeName, type VerifyCodeName } from \"../core/verifyCodes.js\";\n\n/**\n * Starknet calldata shape for `AttestationPayload`.\n *\n * Member order is the order of the signed message preimage and of Cairo `Serde`, so it is\n * load bearing — it is not the flat gateway field order on {@link Attestation}.\n */\nexport interface StarknetAttestationPayload {\n /** 32-byte packed value as `u256`. */\n value: bigint;\n /** 32-byte source id as `u256`. */\n source_id: bigint;\n /** `u32`. */\n registry_version: number;\n /** `u8`. */\n signatures_required: number;\n /** `u64`, unix MILLISECONDS (`/ 1000` is the seconds the verifier's `max_age` uses). */\n timestamp: number;\n}\n\n/** Starknet calldata shape for `SchnorrSignature`. */\nexport interface StarknetSchnorrSignature {\n /** Schnorr scalar `s` as `u256`. */\n signature: bigint;\n /** Ethereum-style 20-byte address of the nonce point `R`, as a `felt252`. */\n commitment: bigint;\n /** Big-endian signers bitmap as `u256`; bit `i` is node `i` of the registry version. */\n signers_bitmap: bigint;\n}\n\n/** Starknet calldata shape for `Attestation`. */\nexport interface StarknetAttestation {\n payload: StarknetAttestationPayload;\n signature: StarknetSchnorrSignature;\n}\n\n/** Positional arguments for `verify(attestation, max_age)`. */\nexport interface StarknetVerifierArgs {\n attestation: StarknetAttestation;\n /** Freshness window in seconds (`u64`). `0` disables the check. */\n maxAge: number;\n}\n\nexport interface BuildStarknetVerifierArgsOptions {\n /**\n * Freshness window in seconds. The verifier rejects the attestation with `STALE` when it\n * is older than this, and as `MALFORMED` when it is dated in the future.\n *\n * Required on purpose. `0` disables the check entirely, and that is not a neutral\n * default: the verifier is stateless, so without a window it accepts a correctly signed\n * attestation forever. Pass `0` only when the consuming contract enforces freshness or\n * ordering itself.\n */\n maxAge: number;\n}\n\n/** Decoded `verify` return value. */\nexport interface StarknetVerifyResult {\n success: boolean;\n /** Raw result code — see `VERIFY_CODES`. */\n code: number;\n /** Name of `code`, or `\"UNKNOWN\"` for a code newer than this SDK. */\n reason: VerifyCodeName | \"UNKNOWN\";\n}\n\n/** A felt as returned by `starknet_call` (hex or decimal string) or by an ABI-aware client. */\nexport type StarknetFeltLike = string | number | bigint | boolean;\n\nconst U8_MAX = 0xffn;\nconst U32_MAX = 0xffff_ffffn;\nconst U64_MAX = 0xffff_ffff_ffff_ffffn;\nconst U128_MASK = (1n << 128n) - 1n;\nconst U256_MAX = (1n << 256n) - 1n;\nconst ADDRESS_MAX = (1n << 160n) - 1n;\n\nfunction strip0x(value: string): string {\n return value.startsWith(\"0x\") || value.startsWith(\"0X\") ? value.slice(2) : value;\n}\n\nfunction stripOuterQuotes(value: string): string {\n const trimmed = value.trim();\n if (\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\")) ||\n (trimmed.startsWith('\"') && trimmed.endsWith('\"'))\n ) {\n return trimmed.slice(1, -1);\n }\n return trimmed;\n}\n\nfunction toStrictHex(value: string, bytes: number, label: string): `0x${string}` {\n const clean = strip0x(stripOuterQuotes(value)).toLowerCase();\n if (clean.length !== bytes * 2) {\n throw new RangeError(\n `${label}: expected ${bytes} bytes (${bytes * 2} hex chars), got ${clean.length / 2}`,\n );\n }\n return `0x${clean}`;\n}\n\nfunction fixedHexToBigInt(value: string, bytes: number, label: string): bigint {\n const hex = toStrictHex(value, bytes, label);\n const raw = toFixedBytes(hex, bytes, label);\n return bigIntFromBytesBe(raw);\n}\n\n/**\n * Checks an integer fits its Cairo type. Out-of-range calldata does not reach `verify` at\n * all: Cairo `Serde` fails while decoding the arguments, and the call reverts instead of\n * returning a result code. Catching it here keeps that failure in the caller's process.\n */\nfunction assertUint(value: number, max: bigint, label: string): number {\n if (!Number.isSafeInteger(value) || value < 0 || BigInt(value) > max) {\n throw new RangeError(`${label}: expected an integer in 0..${max}, got ${value}`);\n }\n return value;\n}\n\nfunction assertBigUint(value: bigint, max: bigint, label: string): bigint {\n if (value < 0n || value > max) {\n throw new RangeError(`${label}: expected an integer in 0..${max}, got ${value}`);\n }\n return value;\n}\n\nfunction toFelt(value: bigint | number): `0x${string}` {\n return `0x${BigInt(value).toString(16)}`;\n}\n\n/** Cairo `u256` serializes as two felts, low limb first. */\nfunction u256Felts(value: bigint, label: string): [`0x${string}`, `0x${string}`] {\n assertBigUint(value, U256_MAX, label);\n return [toFelt(value & U128_MASK), toFelt(value >> 128n)];\n}\n\nfunction feltToBigInt(value: StarknetFeltLike, label: string): bigint {\n if (typeof value === \"boolean\") return value ? 1n : 0n;\n if (typeof value === \"bigint\") return value;\n if (typeof value === \"number\") {\n if (!Number.isSafeInteger(value)) throw new RangeError(`${label}: not an integer: ${value}`);\n return BigInt(value);\n }\n const text = value.trim();\n if (!/^(0x[0-9a-fA-F]+|[0-9]+)$/.test(text)) {\n throw new RangeError(`${label}: not a felt: ${JSON.stringify(value)}`);\n }\n return BigInt(text);\n}\n\n/** Convert a 20-byte commitment address hex to a Starknet felt-compatible bigint. */\nexport function commitmentAddressToStarknetFelt(value: string): bigint {\n return fixedHexToBigInt(value, 20, \"commitment\");\n}\n\n/** Convert a 32-byte bitmap hex to a Starknet/Cairo `u256` bigint. */\nexport function signersBitmapToStarknetUint256(value: string): bigint {\n return fixedHexToBigInt(value, 32, \"signersBitmap\");\n}\n\n/**\n * Build the `verify(attestation, max_age)` arguments from a gateway result.\n *\n * ```ts\n * const { attestation, maxAge } = buildStarknetVerifierArgs(result, { maxAge: 300 });\n * ```\n */\nexport function buildStarknetVerifierArgs(\n attestation: Attestation,\n options: BuildStarknetVerifierArgsOptions,\n): StarknetVerifierArgs {\n const { payload: signed, signature: sig } = attestation;\n const payload: StarknetAttestationPayload = {\n value: fixedHexToBigInt(signed.value, 32, \"payload.value\"),\n source_id: fixedHexToBigInt(signed.sourceId, 32, \"sourceId\"),\n registry_version: assertUint(signed.registryVersion, U32_MAX, \"registryVersion\"),\n signatures_required: assertUint(signed.signaturesRequired, U8_MAX, \"signaturesRequired\"),\n timestamp: assertUint(signed.timestamp, U64_MAX, \"timestamp\"),\n };\n\n const signature: StarknetSchnorrSignature = {\n signature: fixedHexToBigInt(sig.s, 32, \"signature\"),\n commitment: commitmentAddressToStarknetFelt(sig.commitmentAddr),\n signers_bitmap: signersBitmapToStarknetUint256(sig.signersBitmap),\n };\n\n return {\n attestation: { payload, signature },\n maxAge: assertUint(options.maxAge, U64_MAX, \"maxAge\"),\n };\n}\n\n/**\n * Flat felt calldata for `verify(attestation, max_age)`, in Cairo `Serde` order — 13 felts:\n *\n * `value.low, value.high, source_id.low, source_id.high, registry_version,\n * signatures_required, timestamp, signature.low, signature.high, commitment,\n * signers_bitmap.low, signers_bitmap.high, max_age`\n *\n * For a raw `starknet_call` with `entry_point_selector = selector(\"verify\")`.\n */\nexport function encodeStarknetVerifyCalldata(args: StarknetVerifierArgs): `0x${string}`[] {\n const { payload, signature } = args.attestation;\n return [\n ...u256Felts(payload.value, \"value\"),\n ...u256Felts(payload.source_id, \"source_id\"),\n toFelt(assertUint(payload.registry_version, U32_MAX, \"registry_version\")),\n toFelt(assertUint(payload.signatures_required, U8_MAX, \"signatures_required\")),\n toFelt(assertUint(payload.timestamp, U64_MAX, \"timestamp\")),\n ...u256Felts(signature.signature, \"signature\"),\n // An Ethereum-style address, so it must fit 160 bits (the verifier reports a wider one\n // as `MALFORMED`; one past the field prime would not even deserialize).\n toFelt(assertBigUint(signature.commitment, ADDRESS_MAX, \"commitment\")),\n ...u256Felts(signature.signers_bitmap, \"signers_bitmap\"),\n toFelt(assertUint(args.maxAge, U64_MAX, \"maxAge\")),\n ];\n}\n\n/**\n * Decode the `(bool, u8)` returned by `verify`.\n *\n * Accepts the raw two-felt array from `starknet_call` (e.g. `[\"0x1\", \"0x0\"]`) or the tuple\n * an ABI-aware client decodes (e.g. `{ 0: true, 1: 0n }`). Throws when the two halves\n * disagree (`success` with a non-zero code, or failure with `OK`), which means the call did\n * not reach a Molpha verifier of this interface.\n */\nexport function parseStarknetVerifyResult(\n result:\n | readonly StarknetFeltLike[]\n | { readonly 0: StarknetFeltLike; readonly 1: StarknetFeltLike },\n): StarknetVerifyResult {\n if (Array.isArray(result) && result.length !== 2) {\n throw new RangeError(`verify result: expected 2 felts, got ${result.length}`);\n }\n const tuple = result as { readonly 0: StarknetFeltLike; readonly 1: StarknetFeltLike };\n\n const successFelt = feltToBigInt(tuple[0], \"verify result success\");\n if (successFelt !== 0n && successFelt !== 1n) {\n throw new RangeError(`verify result: success must be 0 or 1, got ${successFelt}`);\n }\n const codeFelt = feltToBigInt(tuple[1], \"verify result code\");\n if (codeFelt < 0n || codeFelt > U8_MAX) {\n throw new RangeError(`verify result: code must fit u8, got ${codeFelt}`);\n }\n\n const success = successFelt === 1n;\n const code = Number(codeFelt);\n if (success !== (code === VERIFY_CODES.OK)) {\n throw new Error(\n `verify result is inconsistent: success=${success} with code ${code}; ` +\n \"the call did not reach a Molpha verifier with this interface\",\n );\n }\n\n return { success, code, reason: verifyCodeName(code) ?? \"UNKNOWN\" };\n}\n","/**\n * Drive many feeds through the gateway (and optionally on to Solana) without overloading it.\n *\n * The consumer is the party that pushes updates and pays for them, so the cost and the burst\n * behaviour of a large set of feeds is the consumer's to control. {@link requestMany} does the parts\n * that matter at volume:\n *\n * - the registry inputs are read once and shared by every request, not once per feed;\n * - concurrency is bounded and adapts: it starts from the gateway's advertised capacity, halves\n * when the gateway answers busy (503/429) and creeps back up while requests succeed (AIMD);\n * - request starts are spread over a window by a hash of each feed's source id, so feeds that fall\n * due together do not arrive together, and the same feed always lands at the same offset;\n * - submitting to Solana runs on its own, smaller limiter, pipelined behind the requests;\n * - a failed submit never discards the signed attestation the gateway returned (and quota paid for).\n *\n * Each request still has the single-request retry policy (backoff with jitter, `Retry-After`, a stale\n * registry refreshed once; see {@link retryDelayMs}).\n */\nimport type { Address } from \"@solana/kit\";\nimport type { APIConfig, Attestation } from \"./core/types.js\";\nimport { deriveSourceIdString } from \"./core/apiconfig.js\";\nimport { GatewayError, type RequestSignedDataOptions } from \"./gateway/index.js\";\nimport type { MolphaSDK } from \"./index.js\";\n\n/** One feed to update. */\nexport interface BulkFeed {\n apiConfig: APIConfig;\n signaturesRequired: number;\n /** Echoed in the result; for the caller's own bookkeeping. */\n label?: string;\n}\n\nexport interface BulkOptions {\n /**\n * Most gateway requests in flight. The limit adapts below this ceiling. Default: half the gateway's\n * advertised `maxInflightRounds` (at most 64), or 32 when it advertises none.\n */\n concurrency?: number;\n /**\n * Spread request starts over this many ms by a hash of the feed's source id. Feeds that are due on\n * the same tick otherwise arrive together and queue at the gateway. Default 0 (no spreading).\n */\n spreadMs?: number;\n /** Submit each attestation to Solana after its round. Default true. */\n submit?: boolean;\n /** Most Solana submits in flight. Default 8. */\n submitConcurrency?: number;\n /**\n * Options applied to every request (subscription owner, signer, `maxRetries`, `timeoutMs`, ...).\n * `apiConfig`, `signaturesRequired` and `context` are set per feed.\n */\n request?: Omit<RequestSignedDataOptions, \"apiConfig\" | \"signaturesRequired\" | \"context\">;\n /** Called as each feed finishes, in completion order. */\n onResult?: (result: BulkResult) => void;\n /** Stops starting new feeds; those already started finish. */\n signal?: AbortSignal;\n}\n\nexport interface BulkResult {\n /** Position in the input array. */\n index: number;\n label?: string;\n /** The gateway round succeeded (submitting is reported separately in `submitError`). */\n ok: boolean;\n /** The signed attestation, whenever the round succeeded, including when the submit failed. */\n attestation?: Attestation;\n /** Transaction signature and feed account, when submitted. */\n signature?: string;\n feedAddress?: Address;\n /** Why the round failed. */\n error?: unknown;\n /** Why submitting failed after a successful round; `attestation` is still valid. */\n submitError?: unknown;\n}\n\nconst DEFAULT_CONCURRENCY = 32;\nconst MAX_DEFAULT_CONCURRENCY = 64;\nconst DEFAULT_SUBMIT_CONCURRENCY = 8;\n/** Shortest interval between two halvings, so a burst of busy answers cuts the limit once, not to 1. */\nconst BACKOFF_COOLDOWN_MS = 1_000;\n\n/**\n * An adaptive concurrency limit: additive increase on success, multiplicative decrease on a busy\n * answer. Waiters are served in arrival order.\n */\nexport class AdaptiveLimiter {\n private limit_: number;\n private inFlight = 0;\n private successes = 0;\n private lastCut = -Infinity;\n private readonly waiters: Array<() => void> = [];\n\n constructor(\n initial: number,\n private readonly max: number,\n private readonly now: () => number = Date.now,\n ) {\n this.max = Math.max(1, max);\n this.limit_ = Math.min(Math.max(1, Math.floor(initial)), this.max);\n }\n\n get limit(): number {\n return this.limit_;\n }\n\n async acquire(): Promise<void> {\n if (this.inFlight < this.limit_) {\n this.inFlight++;\n return;\n }\n await new Promise<void>((resolve) => this.waiters.push(resolve));\n }\n\n /** Release a slot. `busy` reports that the gateway answered at capacity. */\n release(outcome: \"ok\" | \"busy\" | \"other\"): void {\n this.inFlight--;\n if (outcome === \"busy\") {\n this.successes = 0;\n const t = this.now();\n if (t - this.lastCut >= BACKOFF_COOLDOWN_MS) {\n this.limit_ = Math.max(1, Math.floor(this.limit_ / 2));\n this.lastCut = t;\n }\n } else if (outcome === \"ok\") {\n // One more slot after a full window of successes at the current limit.\n if (++this.successes >= this.limit_ && this.limit_ < this.max) {\n this.limit_++;\n this.successes = 0;\n }\n }\n while (this.waiters.length > 0 && this.inFlight < this.limit_) {\n this.inFlight++;\n this.waiters.shift()!();\n }\n }\n}\n\n/** Deterministic start offset for a feed: the same source id always lands at the same point. */\nexport function spreadOffsetMs(sourceIdHex: string, spreadMs: number): number {\n if (spreadMs <= 0) return 0;\n return Number.parseInt(sourceIdHex.slice(0, 8), 16) % spreadMs;\n}\n\nconst isBusy = (err: unknown): boolean =>\n err instanceof GatewayError && (err.status === 503 || err.status === 429);\n\n/**\n * Update many feeds. Results are returned in input order; a feed that fails does not stop the others.\n */\nexport async function requestMany(\n sdk: MolphaSDK,\n feeds: BulkFeed[],\n opts: BulkOptions = {},\n): Promise<BulkResult[]> {\n const results = new Array<BulkResult>(feeds.length);\n if (feeds.length === 0) return results;\n\n // What the gateway advertises is advisory; an old gateway without it just gets the default.\n const advertised = await sdk.gateway\n .fetchGatewayInfo(sdkFirstEndpoint(sdk))\n .catch(() => undefined);\n const ceiling =\n opts.concurrency ??\n (advertised?.maxInflightRounds\n ? Math.min(Math.max(1, Math.floor(advertised.maxInflightRounds / 2)), MAX_DEFAULT_CONCURRENCY)\n : DEFAULT_CONCURRENCY);\n const requests = new AdaptiveLimiter(ceiling, ceiling);\n const submits = new AdaptiveLimiter(\n opts.submitConcurrency ?? DEFAULT_SUBMIT_CONCURRENCY,\n opts.submitConcurrency ?? DEFAULT_SUBMIT_CONCURRENCY,\n );\n // One read of the registry inputs for the whole batch.\n const context = await sdk.gateway.prepareContext();\n const submit = opts.submit ?? true;\n const started = Date.now();\n\n const one = async (index: number): Promise<void> => {\n const feed = feeds[index]!;\n const result: BulkResult = { index, ok: false, ...(feed.label !== undefined ? { label: feed.label } : {}) };\n results[index] = result;\n try {\n const wait = spreadOffsetMs(deriveSourceIdString(feed.apiConfig), opts.spreadMs ?? 0) - (Date.now() - started);\n if (wait > 0) await new Promise((resolve) => setTimeout(resolve, wait));\n if (opts.signal?.aborted) {\n result.error = new Error(\"aborted before the feed was started\");\n return;\n }\n\n await requests.acquire();\n let outcome: \"ok\" | \"busy\" | \"other\" = \"other\";\n try {\n result.attestation = await sdk.gateway.requestSignedData({\n ...opts.request,\n apiConfig: feed.apiConfig,\n signaturesRequired: feed.signaturesRequired,\n context,\n });\n result.ok = true;\n outcome = \"ok\";\n } catch (err) {\n result.error = err;\n outcome = isBusy(err) ? \"busy\" : \"other\";\n } finally {\n requests.release(outcome);\n }\n\n if (result.ok && submit && result.attestation) {\n await submits.acquire();\n try {\n const sent = await sdk.solana.submitAttestation(result.attestation);\n result.signature = sent.signature;\n result.feedAddress = sent.feed;\n } catch (err) {\n result.submitError = err; // the round succeeded: keep the attestation\n } finally {\n submits.release(\"other\");\n }\n }\n } finally {\n opts.onResult?.(result);\n }\n };\n\n await Promise.all(feeds.map((_, index) => one(index)));\n return results;\n}\n\n/** The first configured gateway endpoint (the one `fetchGatewayInfo` should ask). */\nfunction sdkFirstEndpoint(sdk: MolphaSDK): string {\n return sdk.gateway.endpointUrls()[0]!;\n}\n","/**\n * `@molpha/sdk` — Consumer SDK public surface.\n *\n * The `MolphaSDK` facade wires the gateway and Solana clients together; consumers\n * who only read or only run gateway rounds can use `sdk.gateway` / `sdk.solana`\n * directly (or import `MolphaGateway` / `MolphaSolanaClient` standalone).\n */\nimport { address, type Address } from \"@solana/kit\";\nimport type { AnchorProvider, Idl } from \"@anchor-lang/core\";\nimport {\n type GatewayEndpointInput,\n type RequestSignedDataOptions,\n MolphaGateway,\n} from \"./gateway/index.js\";\nimport { MolphaSolanaClient } from \"./solana/client.js\";\nimport type { Attestation } from \"./core/types.js\";\nimport { MOLPHA_IDL, MOLPHA_PROGRAM_ADDRESS } from \"../idl/index.js\";\nimport { gatewaySignerFromWallet, type MolphaWallet } from \"./wallet.js\";\nimport type { SolanaConnection } from \"./solana/kit.js\";\ntype Commitment = NonNullable<ConstructorParameters<typeof AnchorProvider>[2]>[\"commitment\"];\n\n// Public re-exports.\nexport * from \"./core/index.js\";\nexport * from \"./gateway/index.js\";\nexport * from \"./evm/index.js\";\nexport * from \"./starknet/index.js\";\nexport * from \"./solana/index.js\";\nexport * from \"./bulk.js\";\nexport { MOLPHA_IDL, MOLPHA_PROGRAM_ADDRESS } from \"../idl/index.js\";\nexport { gatewaySignerFromWallet, signerFromKeypair, type MolphaWallet } from \"./wallet.js\";\n\nexport interface MolphaSDKOptions {\n /**\n * Defaults to `DEFAULT_GATEWAY_ENDPOINT`. Pass multiple entries for failover. Each\n * entry is a URL or `{ url, gatewayAuthority }`; when the authority is omitted it is\n * discovered from the gateway's `GET /v1/info`.\n */\n endpoints?: GatewayEndpointInput | GatewayEndpointInput[];\n connection: SolanaConnection;\n /** On-chain txs + gateway auth (see `MolphaWallet`). */\n wallet: MolphaWallet;\n /** Defaults to the vendored IDL's program address. Bound into gateway request auth. */\n programId?: Address | string;\n /** Defaults to `MOLPHA_IDL`. Override when pinning a different deployment. */\n idl?: Idl;\n commitment?: Commitment;\n}\n\n/**\n * Thrown by {@link MolphaSDK.requestAndSubmit} when the gateway round succeeded but submitting the\n * attestation to Solana failed. The round consumed subscription quota and the signed attestation is\n * valid, so it is carried here: submit `error.result` again (it stays valid until its freshness\n * window passes, and re-submitting it is safe) instead of requesting, and paying for, a new round.\n */\nexport class SubmitFailedError extends Error {\n constructor(\n /** The signed attestation the gateway returned. */\n readonly result: Attestation,\n override readonly cause: unknown,\n ) {\n super(\n `Gateway round succeeded but submitting the attestation failed: ${\n cause instanceof Error ? cause.message : String(cause)\n }`,\n );\n this.name = \"SubmitFailedError\";\n }\n}\n\nexport class MolphaSDK {\n readonly gateway: MolphaGateway;\n readonly solana: MolphaSolanaClient;\n\n constructor(opts: MolphaSDKOptions) {\n const programId = address(String(opts.programId ?? MOLPHA_PROGRAM_ADDRESS));\n this.solana = MolphaSolanaClient.create({\n connection: opts.connection,\n wallet: opts.wallet,\n programId,\n idl: opts.idl ?? MOLPHA_IDL,\n ...(opts.commitment ? { commitment: opts.commitment } : {}),\n });\n this.gateway = new MolphaGateway(\n opts.endpoints,\n () => this.solana.getRegistrySelectionConfig(),\n gatewaySignerFromWallet(opts.wallet),\n {\n defaultSubscriptionOwner: opts.wallet.publicKey.toBase58(),\n programId,\n verifyNodeKeys: (args) => this.solana.verifyNodeKeysForPrivateApi(args),\n },\n );\n }\n\n /**\n * Request a threshold-signed data update from the gateway (against the current\n * on-chain registry version) and submit it via `submit_attestation`.\n */\n async requestAndSubmit(\n opts: RequestSignedDataOptions,\n ): Promise<{ result: Attestation; signature: string; feed: Address }> {\n const result = await this.gateway.requestSignedData(opts);\n try {\n const { signature, feed } = await this.solana.submitAttestation(result);\n return { result, signature, feed };\n } catch (cause) {\n // The round is already paid for and signed: do not lose it with the failed submit.\n throw new SubmitFailedError(result, cause);\n }\n }\n}\n"]}
|