@cypher-zk/sdk 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/buffer/index.js","../node_modules/safe-buffer/index.js","../node_modules/base-x/src/index.js","../node_modules/bs58/index.js","../src/idl/index.ts","../src/config.ts","../src/pda.ts","../src/wallet.ts","../src/fees.ts","../src/deadlines.ts","../src/errors.ts","../src/accounts/globalState.ts","../src/accounts/filter.ts","../src/accounts/layout.ts","../src/accounts/market.ts","../src/accounts/position.ts","../src/accounts/lpPosition.ts","../src/instructions/common.ts","../src/instructions/admin.ts","../src/arcium/offsets.ts","../src/instructions/compDef.ts","../src/instructions/market.ts","../src/arcium/accounts.ts","../src/instructions/bet.ts","../src/instructions/resolve.ts","../src/instructions/claim.ts","../src/instructions/resolution.ts","../src/arcium/callbacks.ts","../src/actions/common.ts","../src/actions/createMarket.ts","../src/arcium/cipher.ts","../src/arcium/encoding.ts","../src/actions/placeBet.ts","../src/actions/resolveMarket.ts","../src/actions/claim.ts","../src/actions/resolution.ts","../src/events/parser.ts","../src/events/subscribe.ts","../src/client.ts"],"names":["len","i","len2","Buffer","byteLength","j","decode","PublicKey","bs58","facade","BN","getMXEAccAddress","getCompDefAccAddress","getArciumProgramId","AnchorEventParser","opts"],"mappings":"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","file":"index.js","sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n// @ts-ignore\nvar _Buffer = require('safe-buffer').Buffer\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256)\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i)\n var xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n if (Array.isArray(source) || source instanceof Uint8Array) { source = _Buffer.from(source) }\n if (!_Buffer.isBuffer(source)) { throw new TypeError('Expected Buffer') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0\n var length = 0\n var pbegin = 0\n var pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n var b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return _Buffer.alloc(0) }\n var psz = 0\n // Skip and count leading '1's.\n var zeroes = 0\n var length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size)\n // Process the characters.\n while (psz < source.length) {\n // Find code of next character\n var charCode = source.charCodeAt(psz)\n // Base map can not be indexed using char code\n if (charCode > 255) { return }\n // Decode character\n var carry = BASE_MAP[charCode]\n // Invalid character\n if (carry === 255) { return }\n var i = 0\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip leading zeroes in b256.\n var it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n var vch = _Buffer.allocUnsafe(zeroes + (size - it4))\n vch.fill(0x00, 0, zeroes)\n var j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nmodule.exports = base\n","var basex = require('base-x')\nvar ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\nmodule.exports = basex(ALPHABET)\n","import idlJson from \"./cypher.json\" with { type: \"json\" };\nimport type { Cypher } from \"./cypher.ts\";\n\nexport type { Cypher };\n\nexport const IDL: Cypher = idlJson as unknown as Cypher;\n\nexport const IDL_PROGRAM_ID = IDL.address;\n","import { PublicKey } from \"@solana/web3.js\";\nimport { IDL } from \"./idl/index.ts\";\n\n/**\n * Cypher program ID. Sourced from the synced IDL so it can never drift\n * from the deployed contract — the address field is the single source of\n * truth.\n */\nexport const PROGRAM_ID = new PublicKey(IDL.address);\n\n/**\n * Known SPL token mints used by the protocol per cluster.\n *\n * cypher-main pins the accepted mint at build time via `CYPHER_CLUSTER`:\n * - `mainnet` → Circle USDC (`EPjFWdd5…`)\n * - anything else (dev) → Cypher Coin / CSDC (`8AF9BABN…`)\n *\n * The SDK is cluster-agnostic — at runtime it reads\n * `GlobalState.accepted_mint` (see `accounts/globalState`) instead of\n * hard-coding either of these. These constants are kept here purely as\n * documentation + helpers for tests and admin scripts that need to assert\n * the on-chain mint matches what the cluster build was supposed to pin.\n */\nexport const KNOWN_MINTS = {\n /** Cypher Coin (CSDC) — accepted mint on devnet builds. */\n devnetCSDC: new PublicKey(\"8AF9BABNWwEhipRxtXPYoWSZW24SKjUn6YqbKd9ZqhwB\"),\n /** Circle USDC — accepted mint on mainnet builds. */\n mainnetUSDC: new PublicKey(\"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\"),\n} as const;\n\n/** Stable identifier for each supported Solana cluster. */\nexport type ClusterName = \"devnet\" | \"mainnet\" | \"localnet\";\n\n/**\n * Runtime configuration for a single deployment target.\n *\n * `arciumClusterOffset` selects which Arcium cluster handles MPC for this\n * deployment. cypher-main uses `456` on devnet (see `Arcium.toml`); mainnet\n * and the local Docker stack each get their own offsets. The default\n * `expectedMint` is informational only — the SDK always trusts\n * `GlobalState.accepted_mint` at runtime.\n */\nexport interface ClusterConfig {\n name: ClusterName;\n rpc: string;\n arciumClusterOffset: number;\n /** Informational: the mint we expect the deployed `GlobalState` to pin. */\n expectedMint: PublicKey;\n}\n\n/**\n * Default cluster presets. Override `rpc` (e.g., for a Helius URL) when\n * constructing the `CypherClient` if you need a different endpoint.\n */\nexport const CLUSTERS: Record<ClusterName, ClusterConfig> = {\n devnet: {\n name: \"devnet\",\n rpc: \"https://api.devnet.solana.com\",\n arciumClusterOffset: 456,\n expectedMint: KNOWN_MINTS.devnetCSDC,\n },\n mainnet: {\n name: \"mainnet\",\n rpc: \"https://api.mainnet-beta.solana.com\",\n arciumClusterOffset: 0,\n expectedMint: KNOWN_MINTS.mainnetUSDC,\n },\n localnet: {\n name: \"localnet\",\n rpc: \"http://localhost:8899\",\n arciumClusterOffset: 1116522022,\n expectedMint: KNOWN_MINTS.devnetCSDC,\n },\n} as const;\n\n/* ----------------------------------------------------------------------- *\n * On-chain protocol constants *\n * *\n * Sourced from cypher-main/programs/cypher_main/src/states.rs. Any change *\n * to these values upstream MUST be mirrored here — pinned in unit tests. *\n * ----------------------------------------------------------------------- */\n\n/** Discriminator size (8 bytes) prepended to every Anchor account. */\nexport const ACCOUNT_DISCRIMINATOR_SIZE = 8;\n\n/** Minimum bet size: $1 USDC in lamports (1e6 micro-units). */\nexport const MIN_BET_USDC = 1_000_000n;\n\n/** Creator bond required to open a market: $10 USDC. */\nexport const CREATOR_BOND = 10_000_000n;\n\n/**\n * Window after `close_time` during which the designated resolver may submit\n * an outcome. After this elapses, the market is eligible for refunds.\n */\nexport const DEFAULT_RESOLUTION_WINDOW_SECS = 7 * 24 * 3600; // 7 days\n\n/**\n * Window after a market resolves during which winners may claim payout.\n * After this elapses, the admin may sweep remaining vault funds.\n */\nexport const DEFAULT_CLAIM_PERIOD_SECS = 14 * 24 * 3600; // 14 days\n\n/**\n * Window after `resolution_deadline` during which bettors may claim refunds\n * on unresolved markets. After this elapses, the admin may sweep.\n */\nexport const DEFAULT_REFUND_PERIOD_SECS = 14 * 24 * 3600; // 14 days\n\n/**\n * Minimum challenge / dispute window per market (seconds). Set at create-time;\n * the contract rejects any `challenge_period` below this floor.\n */\nexport const MIN_CHALLENGE_PERIOD_SECS = 24 * 3600; // 24 hours\n\n/**\n * Maximum challenge / dispute window per market (seconds). Set at create-time;\n * the contract rejects any `challenge_period` above this ceiling.\n */\nexport const MAX_CHALLENGE_PERIOD_SECS = 48 * 3600; // 48 hours\n\n/** Maximum protocol fee rate (basis points). 1% absolute ceiling. */\nexport const MAX_PROTOCOL_FEE_BPS = 100;\n\n/** Maximum LP fee rate (basis points). 5% absolute ceiling. */\nexport const MAX_LP_FEE_BPS = 500;\n\n/** Basis-points denominator used by on-chain fee math. */\nexport const BPS_DENOMINATOR = 10_000n;\n\n/** Fixed-point scale on `Market.payout_ratio` and `entry_odds`. */\nexport const ODDS_SCALE = 1_000_000_000n; // 1e9\n\n/* ----------------------------------------------------------------------- *\n * Enums *\n * ----------------------------------------------------------------------- */\n\n/**\n * Lifecycle states for a market.\n *\n * `PendingResolution` (v0.2+): the reveal callback ran and outcome/pools are\n * now plaintext on the Market account, but the market is still in the\n * challenge window. `claim_deadline` / `refund_deadline` are NOT set yet\n * — `finalize_resolution` (anyone, after window) or\n * `admin_override_resolution` (admin, when disputed) flips to `Resolved`.\n */\nexport const MarketState = {\n Active: 0,\n Closed: 1,\n Resolved: 2,\n Unresolved: 3,\n PendingResolution: 4,\n} as const;\nexport type MarketStateValue = (typeof MarketState)[keyof typeof MarketState];\n\n/** Market type: simple YES/NO vs 2–4 outcome. */\nexport const MarketType = {\n YesNo: 0,\n MultiOutcome: 1,\n} as const;\nexport type MarketTypeValue = (typeof MarketType)[keyof typeof MarketType];\n\n/** Predefined market categories (kept in sync with `states.rs`). */\nexport const MarketCategory = {\n Crypto: 0,\n Politics: 1,\n Sports: 2,\n Tech: 3,\n Economy: 4,\n Culture: 5,\n Beyond: 6,\n} as const;\nexport type MarketCategoryValue =\n (typeof MarketCategory)[keyof typeof MarketCategory];\n\n/**\n * Maximum byte length of the `question` field on a Market account.\n * Enforced by the program as a hard constraint.\n */\nexport const MAX_QUESTION_BYTES = 200;\n\n/** Inclusive bounds on number of outcomes for a MultiOutcome market. */\nexport const MIN_OUTCOMES_MULTI = 2;\nexport const MAX_OUTCOMES_MULTI = 4;\n","import { PublicKey } from \"@solana/web3.js\";\nimport { PROGRAM_ID } from \"./config.ts\";\n\n/**\n * PDA derivation helpers for every account the Cypher program creates.\n *\n * Seeds mirror `programs/cypher_main/src/lib.rs` exactly — verified\n * against the synced IDL in `pda.test.ts`. Always call these helpers\n * rather than re-deriving inline; on-chain seed changes will then show\n * up in one place.\n *\n * Every helper accepts an optional `programId` argument so callers can\n * derive against a non-default deployment (e.g., the `arcium localnet`\n * harness occasionally redeploys under a fresh keypair).\n */\n\n/** Accepts bigint, number, or any BN-like (anything with .toString → u64 string). */\ntype U64Like = bigint | number | { toString(): string };\n\nfunction u64LeBytes(n: U64Like): Buffer {\n const buf = Buffer.alloc(8);\n const asBig = typeof n === \"bigint\" ? n : BigInt(n.toString());\n buf.writeBigUInt64LE(asBig);\n return buf;\n}\n\n/** `[b\"global_state\"]` — singleton config PDA. */\nexport function globalStatePda(programId: PublicKey = PROGRAM_ID): [PublicKey, number] {\n return PublicKey.findProgramAddressSync([Buffer.from(\"global_state\")], programId);\n}\n\n/** `[b\"market\", market_id u64 LE]` — one per market. Accepts BN-like. */\nexport function marketPda(\n marketId: U64Like,\n programId: PublicKey = PROGRAM_ID,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"market\"), u64LeBytes(marketId)],\n programId,\n );\n}\n\n/** `[b\"market_vault\", market]` — PDA-owned SPL token account holding stakes. */\nexport function marketVaultPda(\n market: PublicKey,\n programId: PublicKey = PROGRAM_ID,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"market_vault\"), market.toBuffer()],\n programId,\n );\n}\n\n/** `[b\"position\", market, user]` — encrypted bet position per user per market. */\nexport function positionPda(\n market: PublicKey,\n user: PublicKey,\n programId: PublicKey = PROGRAM_ID,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"position\"), market.toBuffer(), user.toBuffer()],\n programId,\n );\n}\n\n/** `[b\"lp-position\", market, creator]` — bond + LP fee accounting. */\nexport function lpPositionPda(\n market: PublicKey,\n creator: PublicKey,\n programId: PublicKey = PROGRAM_ID,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"lp-position\"), market.toBuffer(), creator.toBuffer()],\n programId,\n );\n}\n\n/**\n * `[b\"ArciumSignerAccount\"]` — Arcium-side signer PDA used as the queue-time\n * CPI authority for callback verification. The seed literal is dictated by\n * the Arcium macro `derive_sign_pda!()`; see arcium SKILL.md.\n */\nexport function arciumSignerPda(\n programId: PublicKey = PROGRAM_ID,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"ArciumSignerAccount\")],\n programId,\n );\n}\n","import {\n Keypair,\n PublicKey,\n type Transaction,\n type VersionedTransaction,\n} from \"@solana/web3.js\";\n\n/**\n * Structural Wallet interface — compatible with Anchor's `Wallet` interface\n * AND with every `@solana/wallet-adapter` adapter we've checked. We define\n * it ourselves rather than re-exporting `@anchor-lang/core`'s `Wallet`\n * because the top-level `Wallet` export there is the concrete `NodeWallet`\n * class (which requires a `payer: Keypair`), not the interface — using the\n * class as a type signature would lock browser wallets out.\n */\nexport interface Wallet {\n publicKey: PublicKey;\n signTransaction<T extends Transaction | VersionedTransaction>(tx: T): Promise<T>;\n signAllTransactions<T extends Transaction | VersionedTransaction>(\n txs: T[],\n ): Promise<T[]>;\n /** Optional — only set by Node-style wallets that hold the keypair locally. */\n payer?: Keypair;\n}\n\n/**\n * Wrap a raw `Keypair` so it implements Anchor's `Wallet` interface.\n *\n * Intended for Node / scripts / tests — browser apps should use\n * `@solana/wallet-adapter` (its adapters already implement `Wallet`) and\n * pass them straight into `CypherClient`.\n */\nexport function keypairToWallet(keypair: Keypair): Wallet {\n return {\n publicKey: keypair.publicKey,\n payer: keypair,\n async signTransaction<T extends Transaction | VersionedTransaction>(\n tx: T,\n ): Promise<T> {\n if (\"version\" in tx) {\n (tx as VersionedTransaction).sign([keypair]);\n } else {\n (tx as Transaction).partialSign(keypair);\n }\n return tx;\n },\n async signAllTransactions<T extends Transaction | VersionedTransaction>(\n txs: T[],\n ): Promise<T[]> {\n for (const tx of txs) {\n if (\"version\" in tx) {\n (tx as VersionedTransaction).sign([keypair]);\n } else {\n (tx as Transaction).partialSign(keypair);\n }\n }\n return txs;\n },\n };\n}\n\n/**\n * Read-only wallet — never produces a signature. Useful for getProgramAccounts\n * queries from a browser without prompting the user's wallet adapter.\n *\n * Calling `signTransaction` / `signAllTransactions` throws.\n */\nexport function readonlyWallet(publicKey: PublicKey): Wallet {\n return {\n publicKey,\n async signTransaction(): Promise<never> {\n throw new Error(\"readonlyWallet cannot sign transactions\");\n },\n async signAllTransactions(): Promise<never> {\n throw new Error(\"readonlyWallet cannot sign transactions\");\n },\n };\n}\n","import { BPS_DENOMINATOR, MIN_BET_USDC } from \"./config.ts\";\n\n/**\n * Snapshot of the on-chain fee configuration the user needs to compute\n * exact pre-trade values without a `getAccountInfo` round-trip.\n *\n * Populate `protocolFeeRateBps` / `lpFeeRateBps` from `GlobalState`.\n */\nexport interface FeeRates {\n /** Protocol fee in basis points (max 100 = 1%). */\n protocolFeeRateBps: number;\n /** LP fee in basis points (max 500 = 5%). */\n lpFeeRateBps: number;\n}\n\n/**\n * Breakdown of the on-chain math applied to a bet of `amount` micro-USDC.\n *\n * Mirrors the program exactly (see `place_private_bet_yesno` in\n * `cypher-main/programs/cypher_main/src/lib.rs`):\n *\n * protocolFee = floor(amount * protocolFeeRateBps / 10_000)\n * lpFee = floor(amount * lpFeeRateBps / 10_000)\n * netAmount = amount - protocolFee - lpFee\n *\n * The circuit asserts `netAmount` matches what the client encrypted, so\n * surfacing it here is critical for UX previews and equally critical for\n * the place-bet action helper that gets built in a later phase.\n */\nexport interface FeeBreakdown {\n /** Original bet, unchanged (just echoed back for symmetry). */\n amount: bigint;\n /** Protocol fee that leaves the market vault → treasury. */\n protocolFee: bigint;\n /** LP fee credited to `market.accumulated_lp_fees`. */\n lpFee: bigint;\n /**\n * Net stake that ends up in the encrypted position and is shielded\n * by the circuit (`net_amount_plaintext` argument to the bet circuit).\n */\n netAmount: bigint;\n}\n\n/**\n * Compute the fee split for a single bet, matching on-chain math exactly.\n *\n * Uses `bigint` end-to-end to mirror Solana's `u64` overflow semantics.\n * Throws if any value would exceed `u64`.\n */\nexport function computeFees(amount: bigint, rates: FeeRates): FeeBreakdown {\n if (amount < 0n) throw new Error(\"computeFees: amount must be >= 0\");\n assertBps(rates.protocolFeeRateBps, \"protocolFeeRateBps\");\n assertBps(rates.lpFeeRateBps, \"lpFeeRateBps\");\n\n const protocolFee =\n (amount * BigInt(rates.protocolFeeRateBps)) / BPS_DENOMINATOR;\n const lpFee = (amount * BigInt(rates.lpFeeRateBps)) / BPS_DENOMINATOR;\n const netAmount = amount - protocolFee - lpFee;\n\n if (netAmount < 0n) {\n // Defensive: should be impossible if rates are within their on-chain\n // ceilings (max 100 + 500 bps = 6% < 100%), but keep the guard for\n // forward-compatibility.\n throw new Error(\"computeFees: net amount went negative\");\n }\n return { amount, protocolFee, lpFee, netAmount };\n}\n\n/**\n * Returns `true` if `amount` satisfies `market.min_bet` *and* leaves a\n * non-zero `netAmount` after fees. The on-chain check is just the first\n * half — but a bet that nets to zero would create a useless position, so\n * we surface the stronger condition here.\n */\nexport function isBetAmountValid(\n amount: bigint,\n rates: FeeRates,\n minBet: bigint = MIN_BET_USDC,\n): boolean {\n if (amount < minBet) return false;\n const { netAmount } = computeFees(amount, rates);\n return netAmount > 0n;\n}\n\nfunction assertBps(bps: number, name: string): void {\n if (!Number.isInteger(bps) || bps < 0 || bps > 10_000) {\n throw new Error(`computeFees: ${name} must be an integer in [0, 10000]`);\n }\n}\n","import {\n DEFAULT_RESOLUTION_WINDOW_SECS,\n DEFAULT_CLAIM_PERIOD_SECS,\n DEFAULT_REFUND_PERIOD_SECS,\n MarketState,\n type MarketStateValue,\n} from \"./config.ts\";\n\n/**\n * High-level lifecycle phase of a market — what action (if any) is\n * available *right now* to which user.\n *\n * Mirrors the on-chain require!() guards across the program so a frontend\n * doesn't have to keep them in sync separately.\n */\nexport type MarketPhase =\n /** Market is open for bets (state=Active, now < close_time). */\n | \"betting\"\n /** Bets closed, resolver may submit an outcome (now in resolution window). */\n | \"awaitingResolve\"\n /** v0.2+: reveal callback ran, awaiting end of challenge window (anyone may flag). */\n | \"pendingResolution\"\n /** v0.2+: dispute window elapsed undisputed; anyone may call `finalize_resolution`. */\n | \"awaitingFinalize\"\n /** v0.2+: a flag was raised during the challenge window; admin override required. */\n | \"disputed\"\n /** Resolved + within claim window → winners can claim payouts. */\n | \"claimable\"\n /** Unresolved + past resolution deadline → bettors can claim refunds. */\n | \"refundable\"\n /** Resolution claim period expired; admin sweep eligible. */\n | \"expired\"\n /** Creator cancelled before any bets were placed. */\n | \"cancelled\";\n\n/**\n * The fields off `Market` the deadline math depends on. Kept as a minimal\n * interface so callers can pass either a fully-decoded `Market` account or\n * a hand-built record (e.g., from a draft create-market form).\n */\nexport interface MarketDeadlineInputs {\n state: number;\n closeTime: bigint;\n resolutionDeadline: bigint;\n claimDeadline: bigint;\n refundDeadline: bigint;\n totalBetsCount?: bigint;\n /** v0.2+: set by reveal callback to `resolution_time + challenge_period`. */\n challengeDeadline?: bigint;\n /** v0.2+: set true by `flag_resolution`. */\n disputed?: boolean;\n}\n\nfunction unixNowSecs(): bigint {\n return BigInt(Math.floor(Date.now() / 1000));\n}\n\n/**\n * Compute the phase of `market` at `nowSec` (defaults to wall-clock now).\n *\n * Returns one of the `MarketPhase` literals — see its docs for what each\n * means. Pure: no chain access.\n */\nexport function marketPhase(\n market: MarketDeadlineInputs,\n nowSec: bigint = unixNowSecs(),\n): MarketPhase {\n if (market.state === MarketState.Closed) {\n // The program sets Closed via `cancel_market` (no bets) — there is no\n // other path to this state. Surface as a distinct phase so the UI can\n // show \"cancelled\" rather than \"betting\".\n return \"cancelled\";\n }\n\n if (market.state === MarketState.PendingResolution) {\n if (market.disputed) return \"disputed\";\n if (market.challengeDeadline && nowSec <= market.challengeDeadline) {\n return \"pendingResolution\";\n }\n return \"awaitingFinalize\";\n }\n\n if (market.state === MarketState.Resolved) {\n if (market.claimDeadline > 0n && nowSec <= market.claimDeadline) {\n return \"claimable\";\n }\n return \"expired\";\n }\n\n // state is Active (or the unused Unresolved sentinel).\n if (nowSec < market.closeTime) return \"betting\";\n if (nowSec <= market.resolutionDeadline) return \"awaitingResolve\";\n if (market.refundDeadline > 0n && nowSec <= market.refundDeadline) {\n return \"refundable\";\n }\n return \"expired\";\n}\n\n/**\n * For a draft market with only `closeTime` decided, derive the four\n * deadlines the program will set on creation (`resolution_deadline`,\n * `claim_deadline` / `refund_deadline` are zeroed at create-time and\n * filled in on resolve, but this helper projects the intended values so a\n * UI can preview them).\n */\nexport function projectDeadlines(closeTime: bigint): {\n closeTime: bigint;\n resolutionDeadline: bigint;\n projectedClaimDeadline: bigint;\n projectedRefundDeadline: bigint;\n} {\n const resolutionDeadline = closeTime + BigInt(DEFAULT_RESOLUTION_WINDOW_SECS);\n return {\n closeTime,\n resolutionDeadline,\n // Both downstream deadlines anchor on the resolution event, not on\n // close_time, so the projections assume \"resolved exactly at the\n // resolution deadline\" — the worst-case window for winners/bettors.\n projectedClaimDeadline: resolutionDeadline + BigInt(DEFAULT_CLAIM_PERIOD_SECS),\n projectedRefundDeadline: resolutionDeadline + BigInt(DEFAULT_REFUND_PERIOD_SECS),\n };\n}\n\n/**\n * Returns `true` iff `closeTime` is at least 60 seconds in the future.\n *\n * The on-chain check is `close_time > now`, but a 60-second cushion makes\n * the dapp robust against clock skew between the user, the RPC, and the\n * validator.\n */\nexport function isValidCloseTime(\n closeTime: bigint,\n nowSec: bigint = unixNowSecs(),\n): boolean {\n return closeTime >= nowSec + 60n;\n}\n","import { IDL } from \"./idl/index.ts\";\n\n/**\n * Numeric error codes as declared by the `#[error_code] pub enum CypherError`\n * block in `cypher-main/programs/cypher_main/src/lib.rs`. Synced via the\n * shared IDL — any new error in the contract automatically becomes a new\n * entry on this map as long as `bun run sync:idl` is rerun.\n *\n * Codes start at Anchor's default `6000` offset.\n */\nexport const CypherErrorCode = {\n MarketNotActive: 6000,\n MarketClosed: 6001,\n MarketStillOpen: 6002,\n AlreadyResolved: 6003,\n NotResolved: 6004,\n UnauthorizedResolver: 6005,\n UnauthorizedAdmin: 6006,\n AlreadyClaimed: 6007,\n PositionLost: 6008,\n BetTooSmall: 6009,\n InsufficientVaultBalance: 6010,\n NoFeesToClaim: 6011,\n LiquidityTooLow: 6012,\n InvalidCloseTime: 6013,\n EmptyQuestion: 6014,\n QuestionTooLong: 6015,\n Overflow: 6016,\n InvalidOutcome: 6017,\n InvalidFeeRate: 6018,\n InvalidTreasury: 6019,\n BondAlreadyWithdrawn: 6020,\n NotMarketCreator: 6021,\n MarketHasBets: 6022,\n ResolutionDeadlinePassed: 6023,\n MarketNotUnresolved: 6024,\n ResolutionDeadlineNotReached: 6025,\n ClaimPeriodExpired: 6026,\n RefundPeriodExpired: 6027,\n AbortedComputation: 6028,\n ComputationVerificationFailed: 6029,\n CannotWithdrawFromUnresolved: 6030,\n AdminAlreadyClaimed: 6031,\n WrongMarketType: 6032,\n WrongMint: 6033,\n NotAcceptedMint: 6034,\n InvalidCategory: 6035,\n InvalidChallengePeriod: 6036,\n NotPendingResolution: 6037,\n ChallengePeriodNotElapsed: 6038,\n ChallengePeriodElapsed: 6039,\n MarketDisputed: 6040,\n MarketNotDisputed: 6041,\n} as const;\n\nexport type CypherErrorName = keyof typeof CypherErrorCode;\nexport type CypherErrorCodeValue =\n (typeof CypherErrorCode)[keyof typeof CypherErrorCode];\n\n/** Human-readable description for every code, sourced from the IDL `msg`. */\nexport const CYPHER_ERROR_MESSAGES: Readonly<Record<CypherErrorName, string>> =\n Object.freeze(\n Object.fromEntries(\n IDL.errors.map((e) => [e.name as CypherErrorName, e.msg]),\n ) as Record<CypherErrorName, string>,\n );\n\nconst codeToName: Record<number, CypherErrorName> = Object.fromEntries(\n Object.entries(CypherErrorCode).map(([name, code]) => [\n code,\n name as CypherErrorName,\n ]),\n);\n\n/** Look up a Cypher error name by its numeric code. */\nexport function cypherErrorName(code: number): CypherErrorName | undefined {\n return codeToName[code];\n}\n\n/** Structured result of parsing an Anchor error. */\nexport interface ParsedCypherError {\n code: CypherErrorCodeValue;\n name: CypherErrorName;\n msg: string;\n}\n\ninterface MaybeAnchorError {\n error?: {\n errorCode?: { code?: string; number?: number };\n errorMessage?: string;\n };\n errorLogs?: string[];\n logs?: string[];\n message?: string;\n}\n\n/**\n * Walk a thrown value and extract a CypherError if one is present.\n *\n * Anchor wraps program errors several different ways depending on whether\n * the call went through `.rpc()`, `.simulate()`, or a raw transaction\n * send; this helper handles every shape we've seen in the wild:\n *\n * - Direct `AnchorError` instances with `.error.errorCode.number`.\n * - Plain `Error.message` strings that contain `custom program error: 0xNNNN`.\n * - `SendTransactionError.logs` containing the same log line.\n *\n * Returns `null` if the input is not a Cypher error (e.g., a network\n * timeout or a different program's error).\n */\nexport function parseCypherError(input: unknown): ParsedCypherError | null {\n if (input == null) return null;\n const err = input as MaybeAnchorError;\n\n const fromAnchor = err.error?.errorCode?.number;\n if (typeof fromAnchor === \"number\") {\n return materialize(fromAnchor);\n }\n\n const namedCode = err.error?.errorCode?.code as CypherErrorName | undefined;\n if (namedCode && namedCode in CypherErrorCode) {\n return materialize(CypherErrorCode[namedCode]);\n }\n\n // Scan log lines for `custom program error: 0xNNN` or\n // `Error Number: NNNN. Error Message: …`. The first match wins.\n const logCandidates: string[] = [];\n if (Array.isArray(err.errorLogs)) logCandidates.push(...err.errorLogs);\n if (Array.isArray(err.logs)) logCandidates.push(...err.logs);\n if (typeof err.message === \"string\") logCandidates.push(err.message);\n\n for (const line of logCandidates) {\n const hex = line.match(/custom program error:\\s*0x([0-9a-fA-F]+)/);\n if (hex && hex[1]) {\n const parsed = parseInt(hex[1], 16);\n const out = materialize(parsed);\n if (out) return out;\n }\n const dec = line.match(/Error Number:\\s*(\\d+)/);\n if (dec && dec[1]) {\n const parsed = parseInt(dec[1], 10);\n const out = materialize(parsed);\n if (out) return out;\n }\n }\n\n return null;\n}\n\nfunction materialize(code: number): ParsedCypherError | null {\n const name = codeToName[code];\n if (!name) return null;\n return {\n code: code as CypherErrorCodeValue,\n name,\n msg: CYPHER_ERROR_MESSAGES[name],\n };\n}\n","import type { PublicKey } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport { globalStatePda } from \"../pda.ts\";\n\n/**\n * Decoded `GlobalState` account. Field types mirror the on-chain layout —\n * numerics are `bigint` to keep u64 precision in JS without surprise\n * `Number` truncation.\n */\nexport interface GlobalStateAccount {\n marketCounter: bigint;\n protocolFeeRate: number; // u16\n lpFeeRate: number; // u16\n protocolTreasury: PublicKey;\n acceptedMint: PublicKey;\n admin: PublicKey;\n bump: number;\n}\n\n/** Anchor's `program.account.globalState.fetch` returns BN-typed numerics. */\ninterface RawGlobalState {\n marketCounter: { toString(): string };\n protocolFeeRate: number;\n lpFeeRate: number;\n protocolTreasury: PublicKey;\n acceptedMint: PublicKey;\n admin: PublicKey;\n bump: number;\n}\n\nfunction decode(raw: RawGlobalState): GlobalStateAccount {\n return {\n marketCounter: BigInt(raw.marketCounter.toString()),\n protocolFeeRate: raw.protocolFeeRate,\n lpFeeRate: raw.lpFeeRate,\n protocolTreasury: raw.protocolTreasury,\n acceptedMint: raw.acceptedMint,\n admin: raw.admin,\n bump: raw.bump,\n };\n}\n\n/** Fetch and decode the singleton `GlobalState`. */\nexport async function fetchGlobalState(client: CypherClient): Promise<GlobalStateAccount> {\n const [pda] = globalStatePda(client.programId);\n const acc = (client.program.account as unknown as Record<string, {\n fetch: (pk: PublicKey) => Promise<RawGlobalState>;\n }>).globalState as { fetch: (pk: PublicKey) => Promise<RawGlobalState> };\n const raw = await acc.fetch(pda);\n return decode(raw);\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport type { GetProgramAccountsFilter } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport {\n ACCOUNT_DISCRIMINATOR_SIZE,\n MARKET_OFFSETS,\n ENCRYPTED_POSITION_OFFSETS,\n LP_POSITION_OFFSETS,\n} from \"./layout.ts\";\nimport { IDL } from \"../idl/index.ts\";\n\n/**\n * Convenience constructors for the memcmp filters used by every\n * `getProgramAccounts` query in the SDK. Each helper prepends the 8-byte\n * Anchor discriminator offset automatically.\n *\n * The discriminator filters (`discriminatorFilter`) are computed from the\n * synced IDL at module load — there is no copy-paste of the 8-byte arrays.\n *\n * IMPORTANT: memcmp filter `bytes` must be the base58 of the *exact* byte\n * sequence being compared — not a 32-byte `PublicKey` representation.\n * For pubkey filters we use `pubkey.toBase58()` directly (already 32-byte\n * base58); for shorter values we encode with `bs58.encode` to avoid\n * zero-padding that would produce a 32-byte memcmp instead of a 1-byte\n * one.\n */\n\nconst DISCRIMINATORS: Record<string, Uint8Array> = Object.fromEntries(\n IDL.accounts.map((a) => [\n a.name as string,\n Uint8Array.from(a.discriminator as number[]),\n ]),\n);\n\nfunction memcmp(offset: number, value: string): GetProgramAccountsFilter {\n return { memcmp: { offset, bytes: value } };\n}\n\n/** Filter matching the 8-byte Anchor discriminator of `accountName`. */\nexport function discriminatorFilter(accountName: string): GetProgramAccountsFilter {\n const disc = DISCRIMINATORS[accountName];\n if (!disc) throw new Error(`discriminatorFilter: unknown account '${accountName}'`);\n return memcmp(0, bs58.encode(disc));\n}\n\n/** Single-byte memcmp filter (state, market_type, category, …). */\nfunction byteFilter(offset: number, value: number): GetProgramAccountsFilter {\n if (!Number.isInteger(value) || value < 0 || value > 0xff) {\n throw new Error(`byteFilter: value must be a u8, got ${value}`);\n }\n return memcmp(offset, bs58.encode(Uint8Array.from([value])));\n}\n\n/* ----------------------------------------------------------------------- *\n * Market filters *\n * ----------------------------------------------------------------------- */\n\nexport const marketFilters = {\n discriminator: () => discriminatorFilter(\"Market\"),\n byCreator: (creator: PublicKey): GetProgramAccountsFilter =>\n memcmp(ACCOUNT_DISCRIMINATOR_SIZE + MARKET_OFFSETS.creator, creator.toBase58()),\n byResolver: (resolver: PublicKey): GetProgramAccountsFilter =>\n memcmp(ACCOUNT_DISCRIMINATOR_SIZE + MARKET_OFFSETS.resolver, resolver.toBase58()),\n byState: (state: number): GetProgramAccountsFilter =>\n byteFilter(ACCOUNT_DISCRIMINATOR_SIZE + MARKET_OFFSETS.state, state),\n byCategory: (category: number): GetProgramAccountsFilter =>\n byteFilter(ACCOUNT_DISCRIMINATOR_SIZE + MARKET_OFFSETS.category, category),\n byMarketType: (mt: number): GetProgramAccountsFilter =>\n byteFilter(ACCOUNT_DISCRIMINATOR_SIZE + MARKET_OFFSETS.marketType, mt),\n};\n\n/* ----------------------------------------------------------------------- *\n * EncryptedPosition filters *\n * ----------------------------------------------------------------------- */\n\nexport const positionFilters = {\n discriminator: () => discriminatorFilter(\"EncryptedPosition\"),\n byUser: (user: PublicKey): GetProgramAccountsFilter =>\n memcmp(ACCOUNT_DISCRIMINATOR_SIZE + ENCRYPTED_POSITION_OFFSETS.user, user.toBase58()),\n byMarket: (market: PublicKey): GetProgramAccountsFilter =>\n memcmp(ACCOUNT_DISCRIMINATOR_SIZE + ENCRYPTED_POSITION_OFFSETS.market, market.toBase58()),\n};\n\n/* ----------------------------------------------------------------------- *\n * LPPosition filters *\n * ----------------------------------------------------------------------- */\n\nexport const lpPositionFilters = {\n discriminator: () => discriminatorFilter(\"LPPosition\"),\n byProvider: (lpProvider: PublicKey): GetProgramAccountsFilter =>\n memcmp(ACCOUNT_DISCRIMINATOR_SIZE + LP_POSITION_OFFSETS.lpProvider, lpProvider.toBase58()),\n byMarket: (market: PublicKey): GetProgramAccountsFilter =>\n memcmp(ACCOUNT_DISCRIMINATOR_SIZE + LP_POSITION_OFFSETS.market, market.toBase58()),\n};\n","import { ACCOUNT_DISCRIMINATOR_SIZE } from \"../config.ts\";\n\n/**\n * Hard-coded byte offsets (post-discriminator) for memcmp filters on every\n * `getProgramAccounts` query the SDK runs.\n *\n * These mirror the field order in `cypher-main/programs/cypher_main/src/states.rs`.\n * `accounts/filter.test.ts` recomputes them dynamically from the synced IDL\n * type layout and asserts equality — so if a contributor reorders a field\n * upstream, the SDK build fails on the next `bun run sync:idl`.\n *\n * Offsets here are *relative to the account body*. Helpers in `filter.ts`\n * add `ACCOUNT_DISCRIMINATOR_SIZE` (8) when emitting memcmp filters.\n */\n\nexport const MARKET_OFFSETS = {\n marketId: 0,\n question: 8,\n questionLen: 208,\n marketType: 209,\n numOutcomes: 210,\n category: 211,\n creator: 212,\n resolver: 244,\n creatorBond: 276,\n bondWithdrawn: 284,\n totalBetsCount: 285,\n encryptedPool0: 293,\n encryptedPool1: 325,\n encryptedPool2: 357,\n encryptedPool3: 389,\n mxeNonce: 421,\n revealedPool0: 437,\n revealedPool1: 445,\n revealedPool2: 453,\n revealedPool3: 461,\n state: 469,\n outcome: 470,\n pendingOutcome: 471,\n closeTime: 472,\n resolutionTime: 480,\n payoutRatio: 488,\n accumulatedLpFees: 496,\n accumulatedProtocolFees: 504,\n minBet: 512,\n totalPayoutsClaimed: 520,\n totalRefundsClaimed: 528,\n adminClaimedRemaining: 536,\n resolutionDeadline: 537,\n claimDeadline: 545,\n refundDeadline: 553,\n challengePeriod: 561,\n challengeDeadline: 569,\n disputed: 577,\n bump: 578,\n vaultBump: 579,\n} as const;\n\nexport const ENCRYPTED_POSITION_OFFSETS = {\n user: 0,\n market: 32,\n encryptedAmount: 64,\n encryptedSide: 96,\n userPubkey: 128,\n nonce: 160,\n entryOdds: 176,\n netAmount: 184,\n claimed: 192,\n bump: 193,\n} as const;\n\nexport const LP_POSITION_OFFSETS = {\n lpProvider: 0,\n market: 32,\n liquidityProvided: 64,\n feesEarned: 72,\n feesClaimed: 80,\n feesClaimedAmount: 81,\n bump: 89,\n} as const;\n\nexport const GLOBAL_STATE_OFFSETS = {\n marketCounter: 0,\n protocolFeeRate: 8,\n lpFeeRate: 10,\n protocolTreasury: 12,\n acceptedMint: 44,\n admin: 76,\n bump: 108,\n} as const;\n\n/**\n * Layout type used by the drift-protection test. Maps the *type-graph*\n * literal in the IDL to a byte size; matches Anchor's Borsh layout exactly.\n *\n * - All `pubkey` → 32 bytes\n * - `u8` / `bool` → 1, `u16` → 2, `u32` → 4, `u64` / `i64` → 8, `u128` → 16\n * - `{ array: [T, N] }` → N * sizeof(T)\n */\nexport const PRIMITIVE_SIZES: Record<string, number> = {\n bool: 1,\n u8: 1,\n i8: 1,\n u16: 2,\n i16: 2,\n u32: 4,\n i32: 4,\n u64: 8,\n i64: 8,\n u128: 16,\n i128: 16,\n pubkey: 32,\n};\n\nexport type IdlFieldType =\n | string\n | { array: [IdlFieldType, number] }\n | { defined: { name: string } };\n\nexport function sizeOfIdlType(t: IdlFieldType): number {\n if (typeof t === \"string\") {\n const size = PRIMITIVE_SIZES[t];\n if (size === undefined) {\n throw new Error(`sizeOfIdlType: unknown primitive '${t}'`);\n }\n return size;\n }\n if (\"array\" in t) {\n const [inner, n] = t.array;\n return sizeOfIdlType(inner) * n;\n }\n // Defined types could nest fixed-size structs; our accounts don't use\n // any so we throw to surface the unsupported case explicitly.\n throw new Error(\n `sizeOfIdlType: unsupported nested type ${JSON.stringify(t)}`,\n );\n}\n\n/**\n * Build an offset map by walking the field list in order. Returns the\n * offsets keyed by Rust field name (snake_case), matching the IDL.\n */\nexport function buildOffsetMap(\n fields: Array<{ name: string; type: IdlFieldType }>,\n): Record<string, number> {\n const out: Record<string, number> = {};\n let cursor = 0;\n for (const f of fields) {\n out[f.name] = cursor;\n cursor += sizeOfIdlType(f.type);\n }\n return out;\n}\n\nexport { ACCOUNT_DISCRIMINATOR_SIZE };\n","import { PublicKey } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport { marketPda } from \"../pda.ts\";\nimport { marketFilters } from \"./filter.ts\";\n\n/**\n * Decoded `Market` account. Encrypted-pool ciphertexts stay as raw\n * `Uint8Array` (32 bytes each); the question is decoded to a UTF-8 string\n * trimmed to `questionLen` bytes for ergonomic display.\n */\nexport interface MarketAccount {\n marketId: bigint;\n question: string;\n questionLen: number;\n marketType: number;\n numOutcomes: number;\n category: number;\n creator: PublicKey;\n resolver: PublicKey;\n creatorBond: bigint;\n bondWithdrawn: boolean;\n totalBetsCount: bigint;\n encryptedPool0: Uint8Array;\n encryptedPool1: Uint8Array;\n encryptedPool2: Uint8Array;\n encryptedPool3: Uint8Array;\n mxeNonce: bigint;\n revealedPool0: bigint;\n revealedPool1: bigint;\n revealedPool2: bigint;\n revealedPool3: bigint;\n state: number;\n outcome: number;\n pendingOutcome: number;\n closeTime: bigint;\n resolutionTime: bigint;\n payoutRatio: bigint;\n accumulatedLpFees: bigint;\n accumulatedProtocolFees: bigint;\n minBet: bigint;\n totalPayoutsClaimed: bigint;\n totalRefundsClaimed: bigint;\n adminClaimedRemaining: boolean;\n resolutionDeadline: bigint;\n claimDeadline: bigint;\n refundDeadline: bigint;\n /** Configurable dispute window (24–48h), set at create time. (v0.2+) */\n challengePeriod: bigint;\n /** `resolution_time + challenge_period` — set by the reveal callback. (v0.2+) */\n challengeDeadline: bigint;\n /** Set true by `flag_resolution`; blocks `finalize_resolution`. (v0.2+) */\n disputed: boolean;\n bump: number;\n vaultBump: number;\n}\n\ninterface BNLike {\n toString(): string;\n}\n\ninterface RawMarket {\n marketId: BNLike;\n question: number[];\n questionLen: number;\n marketType: number;\n numOutcomes: number;\n category: number;\n creator: PublicKey;\n resolver: PublicKey;\n creatorBond: BNLike;\n bondWithdrawn: boolean;\n totalBetsCount: BNLike;\n encryptedPool0: number[];\n encryptedPool1: number[];\n encryptedPool2: number[];\n encryptedPool3: number[];\n mxeNonce: BNLike;\n revealedPool0: BNLike;\n revealedPool1: BNLike;\n revealedPool2: BNLike;\n revealedPool3: BNLike;\n state: number;\n outcome: number;\n pendingOutcome: number;\n closeTime: BNLike;\n resolutionTime: BNLike;\n payoutRatio: BNLike;\n accumulatedLpFees: BNLike;\n accumulatedProtocolFees: BNLike;\n minBet: BNLike;\n totalPayoutsClaimed: BNLike;\n totalRefundsClaimed: BNLike;\n adminClaimedRemaining: boolean;\n resolutionDeadline: BNLike;\n claimDeadline: BNLike;\n refundDeadline: BNLike;\n challengePeriod: BNLike;\n challengeDeadline: BNLike;\n disputed: boolean;\n bump: number;\n vaultBump: number;\n}\n\nfunction decode(raw: RawMarket): MarketAccount {\n const questionLen = raw.questionLen;\n const question = Buffer.from(raw.question.slice(0, questionLen)).toString(\"utf8\");\n return {\n marketId: BigInt(raw.marketId.toString()),\n question,\n questionLen,\n marketType: raw.marketType,\n numOutcomes: raw.numOutcomes,\n category: raw.category,\n creator: raw.creator,\n resolver: raw.resolver,\n creatorBond: BigInt(raw.creatorBond.toString()),\n bondWithdrawn: raw.bondWithdrawn,\n totalBetsCount: BigInt(raw.totalBetsCount.toString()),\n encryptedPool0: Uint8Array.from(raw.encryptedPool0),\n encryptedPool1: Uint8Array.from(raw.encryptedPool1),\n encryptedPool2: Uint8Array.from(raw.encryptedPool2),\n encryptedPool3: Uint8Array.from(raw.encryptedPool3),\n mxeNonce: BigInt(raw.mxeNonce.toString()),\n revealedPool0: BigInt(raw.revealedPool0.toString()),\n revealedPool1: BigInt(raw.revealedPool1.toString()),\n revealedPool2: BigInt(raw.revealedPool2.toString()),\n revealedPool3: BigInt(raw.revealedPool3.toString()),\n state: raw.state,\n outcome: raw.outcome,\n pendingOutcome: raw.pendingOutcome,\n closeTime: BigInt(raw.closeTime.toString()),\n resolutionTime: BigInt(raw.resolutionTime.toString()),\n payoutRatio: BigInt(raw.payoutRatio.toString()),\n accumulatedLpFees: BigInt(raw.accumulatedLpFees.toString()),\n accumulatedProtocolFees: BigInt(raw.accumulatedProtocolFees.toString()),\n minBet: BigInt(raw.minBet.toString()),\n totalPayoutsClaimed: BigInt(raw.totalPayoutsClaimed.toString()),\n totalRefundsClaimed: BigInt(raw.totalRefundsClaimed.toString()),\n adminClaimedRemaining: raw.adminClaimedRemaining,\n resolutionDeadline: BigInt(raw.resolutionDeadline.toString()),\n claimDeadline: BigInt(raw.claimDeadline.toString()),\n refundDeadline: BigInt(raw.refundDeadline.toString()),\n challengePeriod: BigInt(raw.challengePeriod.toString()),\n challengeDeadline: BigInt(raw.challengeDeadline.toString()),\n disputed: raw.disputed,\n bump: raw.bump,\n vaultBump: raw.vaultBump,\n };\n}\n\ninterface MarketAccountFacade {\n fetch: (pk: PublicKey) => Promise<RawMarket>;\n fetchNullable: (pk: PublicKey) => Promise<RawMarket | null>;\n all: (filters?: unknown[]) => Promise<Array<{ publicKey: PublicKey; account: RawMarket }>>;\n}\n\nfunction marketAccountFacade(client: CypherClient): MarketAccountFacade {\n return (client.program.account as unknown as Record<string, MarketAccountFacade>)\n .market as MarketAccountFacade;\n}\n\n/**\n * Fetch a single market by id or by PDA. Returns `null` if the account\n * doesn't exist (rather than throwing) — useful for the common\n * \"does this exist?\" check.\n */\nexport async function fetchMarket(\n client: CypherClient,\n idOrPda: bigint | number | PublicKey,\n): Promise<MarketAccount | null> {\n const pda = idOrPda instanceof PublicKey ? idOrPda : marketPda(idOrPda, client.programId)[0];\n const raw = await marketAccountFacade(client).fetchNullable(pda);\n return raw ? decode(raw) : null;\n}\n\n/** Fetch every market on the program. Expensive — prefer filtered variants. */\nexport async function fetchAllMarkets(\n client: CypherClient,\n): Promise<Array<{ publicKey: PublicKey; account: MarketAccount }>> {\n const raw = await marketAccountFacade(client).all();\n return raw.map(({ publicKey, account }) => ({ publicKey, account: decode(account) }));\n}\n\n/** Fetch markets created by `creator` via a single memcmp filter. */\nexport async function fetchMarketsByCreator(\n client: CypherClient,\n creator: PublicKey,\n): Promise<Array<{ publicKey: PublicKey; account: MarketAccount }>> {\n const raw = await marketAccountFacade(client).all([marketFilters.byCreator(creator)]);\n return raw.map(({ publicKey, account }) => ({ publicKey, account: decode(account) }));\n}\n\n/** Fetch markets in a specific lifecycle state. */\nexport async function fetchMarketsByState(\n client: CypherClient,\n state: number,\n): Promise<Array<{ publicKey: PublicKey; account: MarketAccount }>> {\n const raw = await marketAccountFacade(client).all([marketFilters.byState(state)]);\n return raw.map(({ publicKey, account }) => ({ publicKey, account: decode(account) }));\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport { positionPda } from \"../pda.ts\";\nimport { positionFilters } from \"./filter.ts\";\n\n/** Decoded `EncryptedPosition` account. */\nexport interface EncryptedPositionAccount {\n user: PublicKey;\n market: PublicKey;\n /** 32-byte ciphertext of the user's bet amount. */\n encryptedAmount: Uint8Array;\n /** 32-byte ciphertext of the user's chosen outcome side. */\n encryptedSide: Uint8Array;\n /** User's x25519 public key — needed to re-derive the shared secret. */\n userPubkey: Uint8Array;\n /** Encryption nonce reused for both ciphertexts (per RescueCipher API). */\n nonce: bigint;\n /** Locked-in odds at bet time (scaled by `ODDS_SCALE` = 1e9). */\n entryOdds: bigint;\n /** Plaintext net stake after on-chain fees — checked by circuit. */\n netAmount: bigint;\n claimed: boolean;\n bump: number;\n}\n\ninterface BNLike { toString(): string; }\ninterface RawPosition {\n user: PublicKey;\n market: PublicKey;\n encryptedAmount: number[];\n encryptedSide: number[];\n userPubkey: number[];\n nonce: BNLike;\n entryOdds: BNLike;\n netAmount: BNLike;\n claimed: boolean;\n bump: number;\n}\n\nfunction decode(raw: RawPosition): EncryptedPositionAccount {\n return {\n user: raw.user,\n market: raw.market,\n encryptedAmount: Uint8Array.from(raw.encryptedAmount),\n encryptedSide: Uint8Array.from(raw.encryptedSide),\n userPubkey: Uint8Array.from(raw.userPubkey),\n nonce: BigInt(raw.nonce.toString()),\n entryOdds: BigInt(raw.entryOdds.toString()),\n netAmount: BigInt(raw.netAmount.toString()),\n claimed: raw.claimed,\n bump: raw.bump,\n };\n}\n\ninterface PositionAccountFacade {\n fetchNullable: (pk: PublicKey) => Promise<RawPosition | null>;\n all: (filters?: unknown[]) => Promise<Array<{ publicKey: PublicKey; account: RawPosition }>>;\n}\n\nfunction facade(client: CypherClient): PositionAccountFacade {\n return (client.program.account as unknown as Record<string, PositionAccountFacade>)\n .encryptedPosition as PositionAccountFacade;\n}\n\n/** Fetch a single `EncryptedPosition` by `(market, user)`. */\nexport async function fetchPosition(\n client: CypherClient,\n market: PublicKey,\n user: PublicKey,\n): Promise<EncryptedPositionAccount | null> {\n const [pda] = positionPda(market, user, client.programId);\n const raw = await facade(client).fetchNullable(pda);\n return raw ? decode(raw) : null;\n}\n\n/** Fetch every position belonging to `user` across all markets. */\nexport async function fetchUserPositions(\n client: CypherClient,\n user: PublicKey,\n): Promise<Array<{ publicKey: PublicKey; account: EncryptedPositionAccount }>> {\n const raw = await facade(client).all([positionFilters.byUser(user)]);\n return raw.map(({ publicKey, account }) => ({ publicKey, account: decode(account) }));\n}\n\n/** Fetch every position on a single market — useful for resolution dashboards. */\nexport async function fetchPositionsForMarket(\n client: CypherClient,\n market: PublicKey,\n): Promise<Array<{ publicKey: PublicKey; account: EncryptedPositionAccount }>> {\n const raw = await facade(client).all([positionFilters.byMarket(market)]);\n return raw.map(({ publicKey, account }) => ({ publicKey, account: decode(account) }));\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport { lpPositionPda } from \"../pda.ts\";\nimport { lpPositionFilters } from \"./filter.ts\";\n\n/**\n * Decoded `LPPosition` account.\n *\n * The contract currently leaves `feesEarned` zeroed — it tracks LP fees on\n * `Market.accumulated_lp_fees` instead. `feesClaimedAmount` is the\n * authoritative payout figure when `withdraw_creator_funds` runs.\n */\nexport interface LpPositionAccount {\n lpProvider: PublicKey;\n market: PublicKey;\n liquidityProvided: bigint;\n feesEarned: bigint;\n feesClaimed: boolean;\n feesClaimedAmount: bigint;\n bump: number;\n}\n\ninterface BNLike { toString(): string; }\ninterface RawLpPosition {\n lpProvider: PublicKey;\n market: PublicKey;\n liquidityProvided: BNLike;\n feesEarned: BNLike;\n feesClaimed: boolean;\n feesClaimedAmount: BNLike;\n bump: number;\n}\n\nfunction decode(raw: RawLpPosition): LpPositionAccount {\n return {\n lpProvider: raw.lpProvider,\n market: raw.market,\n liquidityProvided: BigInt(raw.liquidityProvided.toString()),\n feesEarned: BigInt(raw.feesEarned.toString()),\n feesClaimed: raw.feesClaimed,\n feesClaimedAmount: BigInt(raw.feesClaimedAmount.toString()),\n bump: raw.bump,\n };\n}\n\ninterface LpPositionAccountFacade {\n fetchNullable: (pk: PublicKey) => Promise<RawLpPosition | null>;\n all: (filters?: unknown[]) => Promise<Array<{ publicKey: PublicKey; account: RawLpPosition }>>;\n}\n\nfunction facade(client: CypherClient): LpPositionAccountFacade {\n return (client.program.account as unknown as Record<string, LpPositionAccountFacade>)\n .lpPosition as LpPositionAccountFacade;\n}\n\nexport async function fetchLpPosition(\n client: CypherClient,\n market: PublicKey,\n creator: PublicKey,\n): Promise<LpPositionAccount | null> {\n const [pda] = lpPositionPda(market, creator, client.programId);\n const raw = await facade(client).fetchNullable(pda);\n return raw ? decode(raw) : null;\n}\n\nexport async function fetchLpPositionsByProvider(\n client: CypherClient,\n provider: PublicKey,\n): Promise<Array<{ publicKey: PublicKey; account: LpPositionAccount }>> {\n const raw = await facade(client).all([lpPositionFilters.byProvider(provider)]);\n return raw.map(({ publicKey, account }) => ({ publicKey, account: decode(account) }));\n}\n","import { BN } from \"@anchor-lang/core\";\nimport {\n AddressLookupTableProgram,\n PublicKey,\n type TransactionInstruction,\n} from \"@solana/web3.js\";\nimport {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport type { CypherClient } from \"../client.ts\";\n\n/* ----------------------------------------------------------------------- *\n * Re-exports — the SDK is the single import surface for end users so they *\n * don't have to know about spl-token or web3.js internals. *\n * ----------------------------------------------------------------------- */\n\nexport {\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n};\nexport { SystemProgram } from \"@solana/web3.js\";\n\n/** Address Lookup Table program ID — required by `init_*_comp_def` ixs. */\nexport const ADDRESS_LOOKUP_TABLE_PROGRAM_ID =\n AddressLookupTableProgram.programId;\n\n/* ----------------------------------------------------------------------- *\n * Type helpers *\n * ----------------------------------------------------------------------- */\n\n/**\n * Anchor method-builder shape exposed by `program.methods.fooBar(...)`.\n *\n * Typed loosely on purpose — each per-instruction builder constrains its\n * own argument shape before delegating, so the loose typing here doesn't\n * leak into user-facing APIs.\n */\nexport interface AnchorMethodBuilder {\n (...args: unknown[]): {\n accountsPartial: (accounts: Record<string, PublicKey>) => {\n instruction: () => Promise<TransactionInstruction>;\n };\n };\n}\n\n/**\n * Look up `methodName` on the Anchor `program.methods` object and assert\n * it exists. Centralizes the unsafe cast (Anchor's tagged-union typing\n * narrows by method name in ways that conflict with our generic builders)\n * so callsites stay clean.\n */\nexport function method(\n client: CypherClient,\n methodName: string,\n): AnchorMethodBuilder {\n const m = (client.program.methods as unknown as Record<string, AnchorMethodBuilder>)[\n methodName\n ];\n if (!m) {\n throw new Error(\n `instructions: unknown program method '${methodName}' — IDL out of sync?`,\n );\n }\n return m;\n}\n\n/** Convert `bigint | number | BN` → `BN`. Idempotent. */\nexport function toBN(v: bigint | number | BN): BN {\n if (v instanceof BN) return v;\n return new BN(typeof v === \"bigint\" ? v.toString() : v);\n}\n\n/** The default ATA derivation for `(owner, mint)`. */\nexport function userAta(owner: PublicKey, mint: PublicKey): PublicKey {\n return getAssociatedTokenAddressSync(mint, owner, true);\n}\n","import type { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport { globalStatePda, marketPda, marketVaultPda } from \"../pda.ts\";\nimport { MAX_PROTOCOL_FEE_BPS, MAX_LP_FEE_BPS } from \"../config.ts\";\nimport { SystemProgram, TOKEN_PROGRAM_ID, method, toBN } from \"./common.ts\";\n\n/** Arguments accepted by `initialize`. */\nexport interface InitializeParams {\n /** Protocol fee in basis points (max 100 = 1%). */\n protocolFeeRateBps: number;\n /** LP fee in basis points (max 500 = 5%). */\n lpFeeRateBps: number;\n /** Admin (also the fee-payer); usually `client.wallet.publicKey`. */\n admin: PublicKey;\n /** SPL token account that will receive protocol fees. */\n protocolTreasury: PublicKey;\n /** SPL mint (CSDC on devnet, USDC on mainnet) the protocol will accept. */\n acceptedMint: PublicKey;\n}\n\n/**\n * One-time setup: create the singleton `GlobalState` PDA, fix the\n * protocol/LP fee rates, and pin the protocol treasury + accepted mint.\n *\n * Throws if either fee rate exceeds the on-chain hard cap so a frontend\n * sees the failure synchronously instead of waiting for an `InvalidFeeRate`\n * tx error.\n */\nexport async function initializeIx(\n client: CypherClient,\n params: InitializeParams,\n): Promise<TransactionInstruction> {\n if (\n !Number.isInteger(params.protocolFeeRateBps) ||\n params.protocolFeeRateBps < 0 ||\n params.protocolFeeRateBps > MAX_PROTOCOL_FEE_BPS\n ) {\n throw new Error(\n `initializeIx: protocolFeeRateBps must be in [0, ${MAX_PROTOCOL_FEE_BPS}]`,\n );\n }\n if (\n !Number.isInteger(params.lpFeeRateBps) ||\n params.lpFeeRateBps < 0 ||\n params.lpFeeRateBps > MAX_LP_FEE_BPS\n ) {\n throw new Error(\n `initializeIx: lpFeeRateBps must be in [0, ${MAX_LP_FEE_BPS}]`,\n );\n }\n const [gsPda] = globalStatePda(client.programId);\n return method(client, \"initialize\")(params.protocolFeeRateBps, params.lpFeeRateBps)\n .accountsPartial({\n admin: params.admin,\n globalState: gsPda,\n protocolTreasury: params.protocolTreasury,\n acceptedMint: params.acceptedMint,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n}\n\n/** Arguments accepted by `update_accepted_mint`. */\nexport interface UpdateAcceptedMintParams {\n admin: PublicKey;\n newMint: PublicKey;\n newTreasury: PublicKey;\n}\n\n/** Admin-only: rotate the accepted SPL mint and the treasury. */\nexport async function updateAcceptedMintIx(\n client: CypherClient,\n params: UpdateAcceptedMintParams,\n): Promise<TransactionInstruction> {\n const [gsPda] = globalStatePda(client.programId);\n return method(client, \"updateAcceptedMint\")()\n .accountsPartial({\n admin: params.admin,\n globalState: gsPda,\n newMint: params.newMint,\n newTreasury: params.newTreasury,\n })\n .instruction();\n}\n\n/** Arguments accepted by `admin_claim_remaining`. */\nexport interface AdminClaimRemainingParams {\n admin: PublicKey;\n /** Specific market the admin is sweeping. */\n marketId: bigint | number;\n /** SPL account that will receive the swept tokens (the treasury). */\n protocolTreasury: PublicKey;\n}\n\n/**\n * Admin-only: sweep leftover vault balance after all deadlines lapse.\n *\n * The contract guards against early sweeps (state-aware check on\n * `refund_deadline` / `resolution_deadline + DEFAULT_REFUND_PERIOD`), so\n * a UX layer should only expose this once `marketPhase` returns \"expired\".\n */\nexport async function adminClaimRemainingIx(\n client: CypherClient,\n params: AdminClaimRemainingParams,\n): Promise<TransactionInstruction> {\n const [gsPda] = globalStatePda(client.programId);\n const [marketPdaKey] = marketPda(toBN(params.marketId), client.programId);\n const [vaultPda] = marketVaultPda(marketPdaKey, client.programId);\n return method(client, \"adminClaimRemaining\")()\n .accountsPartial({\n admin: params.admin,\n globalState: gsPda,\n market: marketPdaKey,\n marketVault: vaultPda,\n protocolTreasury: params.protocolTreasury,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .instruction();\n}\n","import { getCompDefAccOffset } from \"@arcium-hq/client\";\n\n/**\n * Canonical circuit names defined in\n * `cypher-main/encrypted-ixs/src/lib.rs`. Every Arcium queue/callback\n * mapping (program-side macros, `init_*_comp_def` instructions, client\n * ArgBuilder calls) keys off these strings — keep them in lockstep with\n * the upstream `#[instruction] fn NAME` declarations.\n */\nexport const CIRCUITS = {\n placePrivateBetYesno: \"place_private_bet_yesno\",\n revealMarketOutcomeYesno: \"reveal_market_outcome_yesno\",\n computeYesnoPayout: \"compute_yesno_payout\",\n computeYesnoRefund: \"compute_yesno_refund\",\n placePrivateBetMulti: \"place_private_bet_multi\",\n revealMarketOutcomeMulti: \"reveal_market_outcome_multi\",\n computeMultiPayout: \"compute_multi_payout\",\n computeMultiRefund: \"compute_multi_refund\",\n} as const;\n\nexport type CircuitName = (typeof CIRCUITS)[keyof typeof CIRCUITS];\n\n/** Tuple of every circuit name — handy for iterating during admin init. */\nexport const ALL_CIRCUITS = Object.values(CIRCUITS) as CircuitName[];\n\n/**\n * Raw 4-byte LE comp-def offset for `circuit`. Matches the byte format\n * stored on-chain and used as a PDA seed by Arcium.\n */\nexport function compDefOffsetBytes(circuit: CircuitName): Uint8Array {\n return getCompDefAccOffset(circuit);\n}\n\n/**\n * `compDefOffsetBytes` reinterpreted as a `u32` (little-endian).\n *\n * `getCompDefAccAddress` takes this u32 form, so callers building Arcium\n * account contexts use this helper — it avoids a Buffer round-trip on\n * every queue invocation.\n */\nexport function compDefOffsetU32(circuit: CircuitName): number {\n const bytes = compDefOffsetBytes(circuit);\n return Buffer.from(bytes).readUInt32LE(0);\n}\n","import type { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { getCompDefAccAddress, getMXEAccAddress, getArciumProgramId } from \"@arcium-hq/client\";\nimport type { CypherClient } from \"../client.ts\";\nimport { CIRCUITS, compDefOffsetU32, type CircuitName } from \"../arcium/offsets.ts\";\nimport { ADDRESS_LOOKUP_TABLE_PROGRAM_ID, SystemProgram, method } from \"./common.ts\";\n\n/**\n * Map from Anchor `init_*_comp_def` instruction → the circuit it registers.\n *\n * The Anchor method name and the circuit name are NOT aligned (e.g.\n * `init_reveal_yesno_comp_def` registers `reveal_market_outcome_yesno`),\n * so we keep an explicit table rather than guess.\n */\nexport const INIT_COMP_DEF_INSTRUCTIONS = {\n initPlaceBetYesnoCompDef: CIRCUITS.placePrivateBetYesno,\n initRevealYesnoCompDef: CIRCUITS.revealMarketOutcomeYesno,\n initPayoutYesnoCompDef: CIRCUITS.computeYesnoPayout,\n initRefundYesnoCompDef: CIRCUITS.computeYesnoRefund,\n initPlaceBetMultiCompDef: CIRCUITS.placePrivateBetMulti,\n initRevealMultiCompDef: CIRCUITS.revealMarketOutcomeMulti,\n initPayoutMultiCompDef: CIRCUITS.computeMultiPayout,\n initRefundMultiCompDef: CIRCUITS.computeMultiRefund,\n} as const;\n\nexport type InitCompDefMethodName = keyof typeof INIT_COMP_DEF_INSTRUCTIONS;\n\nexport interface InitCompDefParams {\n /** Tx signer + rent payer; usually the admin or deployer. */\n payer: PublicKey;\n /** The address lookup table previously registered for this MXE. */\n addressLookupTable: PublicKey;\n}\n\n/**\n * Build a generic `init_*_comp_def` instruction for `methodName`.\n *\n * Admin-only; runs once per circuit per deployment. Production frontends\n * should never call this — it's used by deploy scripts (see\n * `cypher-main/scripts/init_comp_defs.ts`).\n */\nexport async function initCompDefIx(\n client: CypherClient,\n methodName: InitCompDefMethodName,\n params: InitCompDefParams,\n): Promise<TransactionInstruction> {\n const circuit = INIT_COMP_DEF_INSTRUCTIONS[methodName];\n if (!circuit) {\n throw new Error(`initCompDefIx: unknown method '${methodName}'`);\n }\n const mxeAccount = getMXEAccAddress(client.programId);\n const compDefAccount = getCompDefAccAddress(\n client.programId,\n compDefOffsetU32(circuit),\n );\n return method(client, methodName)()\n .accountsPartial({\n payer: params.payer,\n mxeAccount,\n compDefAccount,\n addressLookupTable: params.addressLookupTable,\n lutProgram: ADDRESS_LOOKUP_TABLE_PROGRAM_ID,\n arciumProgram: getArciumProgramId(),\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n}\n\n/** Sugar — produce all 8 init-comp-def instructions in source order. */\nexport async function buildAllInitCompDefIx(\n client: CypherClient,\n params: InitCompDefParams,\n): Promise<Array<{ circuit: CircuitName; ix: TransactionInstruction }>> {\n const out: Array<{ circuit: CircuitName; ix: TransactionInstruction }> = [];\n for (const [methodName, circuit] of Object.entries(INIT_COMP_DEF_INSTRUCTIONS) as Array<[\n InitCompDefMethodName,\n CircuitName,\n ]>) {\n const ix = await initCompDefIx(client, methodName, params);\n out.push({ circuit, ix });\n }\n return out;\n}\n","import type { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport {\n globalStatePda,\n lpPositionPda,\n marketPda,\n marketVaultPda,\n} from \"../pda.ts\";\nimport {\n MAX_OUTCOMES_MULTI,\n MAX_QUESTION_BYTES,\n MIN_OUTCOMES_MULTI,\n MIN_CHALLENGE_PERIOD_SECS,\n MAX_CHALLENGE_PERIOD_SECS,\n} from \"../config.ts\";\nimport {\n SystemProgram,\n TOKEN_PROGRAM_ID,\n method,\n toBN,\n userAta,\n} from \"./common.ts\";\n\n/** Shared validation for `createMarket` and `createMarketMulti`. */\nfunction validateMarketDraft(params: {\n question: string;\n category: number;\n closeTime: bigint | number;\n challengePeriod: bigint | number;\n}): void {\n const qBytes = new TextEncoder().encode(params.question).length;\n if (qBytes === 0) throw new Error(\"createMarketIx: question is empty\");\n if (qBytes > MAX_QUESTION_BYTES) {\n throw new Error(\n `createMarketIx: question is ${qBytes} bytes (max ${MAX_QUESTION_BYTES})`,\n );\n }\n if (\n !Number.isInteger(params.category) ||\n params.category < 0 ||\n params.category > 6\n ) {\n throw new Error(\"createMarketIx: category must be a u8 in [0, 6]\");\n }\n const cp = BigInt(params.challengePeriod);\n if (cp < BigInt(MIN_CHALLENGE_PERIOD_SECS) || cp > BigInt(MAX_CHALLENGE_PERIOD_SECS)) {\n throw new Error(\n `createMarketIx: challengePeriod must be in [${MIN_CHALLENGE_PERIOD_SECS}, ${MAX_CHALLENGE_PERIOD_SECS}] seconds`,\n );\n }\n}\n\nexport interface CreateMarketParams {\n /** Creator (and signer) — also pays the $10 bond. */\n creator: PublicKey;\n /** Pinned accepted mint — read from `GlobalState.accepted_mint`. */\n acceptedMint: PublicKey;\n /** UTF-8 question (max 200 bytes). */\n question: string;\n /** Unix timestamp the market closes at. Must be ≥ now + 60s (see `isValidCloseTime`). */\n closeTime: bigint | number;\n /** Market category (0–6). */\n category: number;\n /**\n * Market id that *will* be assigned by the contract — equals the\n * current `GlobalState.market_counter`. Callers should refetch\n * `GlobalState` (or `client.globalState.fetch({refresh:true})`) right\n * before building this instruction.\n */\n expectedMarketId: bigint | number;\n /**\n * v0.2+: configurable dispute window length in seconds.\n * Must be within [`MIN_CHALLENGE_PERIOD_SECS`, `MAX_CHALLENGE_PERIOD_SECS`]\n * (24h–48h). After the reveal callback, the market sits in\n * `PendingResolution` for this long, during which anyone can flag.\n */\n challengePeriod: bigint | number;\n}\n\n/**\n * Build a `create_market` instruction (YesNo).\n *\n * Anchor's account resolver derives the `Market` PDA from\n * `GlobalState.market_counter` at tx time — but we still pass\n * `expectedMarketId` explicitly to derive every dependent PDA (vault,\n * lp_position) the same way the contract will. If `expectedMarketId` is\n * stale by tx time (someone else created a market in between), the tx\n * fails with an Anchor PDA-mismatch error and the caller can retry.\n */\nexport async function createMarketIx(\n client: CypherClient,\n params: CreateMarketParams,\n): Promise<TransactionInstruction> {\n validateMarketDraft(params);\n const [gsPda] = globalStatePda(client.programId);\n const [marketPdaKey] = marketPda(toBN(params.expectedMarketId), client.programId);\n const [vaultPda] = marketVaultPda(marketPdaKey, client.programId);\n const [lpPda] = lpPositionPda(marketPdaKey, params.creator, client.programId);\n const creatorAta = userAta(params.creator, params.acceptedMint);\n return method(client, \"createMarket\")(\n params.question,\n toBN(params.closeTime),\n params.category,\n toBN(params.challengePeriod),\n )\n .accountsPartial({\n creator: params.creator,\n globalState: gsPda,\n market: marketPdaKey,\n lpPosition: lpPda,\n marketVault: vaultPda,\n creatorTokenAccount: creatorAta,\n acceptedMint: params.acceptedMint,\n tokenProgram: TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n}\n\nexport interface CreateMarketMultiParams extends CreateMarketParams {\n /** Number of outcomes (2–4). */\n numOutcomes: number;\n}\n\n/** Multi-outcome variant of `create_market`. */\nexport async function createMarketMultiIx(\n client: CypherClient,\n params: CreateMarketMultiParams,\n): Promise<TransactionInstruction> {\n validateMarketDraft(params);\n if (\n !Number.isInteger(params.numOutcomes) ||\n params.numOutcomes < MIN_OUTCOMES_MULTI ||\n params.numOutcomes > MAX_OUTCOMES_MULTI\n ) {\n throw new Error(\n `createMarketMultiIx: numOutcomes must be in [${MIN_OUTCOMES_MULTI}, ${MAX_OUTCOMES_MULTI}]`,\n );\n }\n const [gsPda] = globalStatePda(client.programId);\n const [marketPdaKey] = marketPda(toBN(params.expectedMarketId), client.programId);\n const [vaultPda] = marketVaultPda(marketPdaKey, client.programId);\n const [lpPda] = lpPositionPda(marketPdaKey, params.creator, client.programId);\n const creatorAta = userAta(params.creator, params.acceptedMint);\n return method(client, \"createMarketMulti\")(\n params.question,\n toBN(params.closeTime),\n params.category,\n params.numOutcomes,\n toBN(params.challengePeriod),\n )\n .accountsPartial({\n creator: params.creator,\n globalState: gsPda,\n market: marketPdaKey,\n lpPosition: lpPda,\n marketVault: vaultPda,\n creatorTokenAccount: creatorAta,\n acceptedMint: params.acceptedMint,\n tokenProgram: TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n}\n\nexport interface CancelMarketParams {\n creator: PublicKey;\n marketId: bigint | number;\n acceptedMint: PublicKey;\n}\n\n/** `cancel_market` — creator-only, only valid when zero bets placed. */\nexport async function cancelMarketIx(\n client: CypherClient,\n params: CancelMarketParams,\n): Promise<TransactionInstruction> {\n const [marketPdaKey] = marketPda(toBN(params.marketId), client.programId);\n const [vaultPda] = marketVaultPda(marketPdaKey, client.programId);\n const [lpPda] = lpPositionPda(marketPdaKey, params.creator, client.programId);\n const creatorAta = userAta(params.creator, params.acceptedMint);\n return method(client, \"cancelMarket\")()\n .accountsPartial({\n creator: params.creator,\n market: marketPdaKey,\n marketVault: vaultPda,\n lpPosition: lpPda,\n creatorTokenAccount: creatorAta,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .instruction();\n}\n\nexport interface WithdrawCreatorFundsParams {\n creator: PublicKey;\n marketId: bigint | number;\n acceptedMint: PublicKey;\n}\n\n/** `withdraw_creator_funds` — creator pulls bond + accumulated LP fees after resolve. */\nexport async function withdrawCreatorFundsIx(\n client: CypherClient,\n params: WithdrawCreatorFundsParams,\n): Promise<TransactionInstruction> {\n const [marketPdaKey] = marketPda(toBN(params.marketId), client.programId);\n const [vaultPda] = marketVaultPda(marketPdaKey, client.programId);\n const [lpPda] = lpPositionPda(marketPdaKey, params.creator, client.programId);\n const creatorAta = userAta(params.creator, params.acceptedMint);\n return method(client, \"withdrawCreatorFunds\")()\n .accountsPartial({\n creator: params.creator,\n market: marketPdaKey,\n lpPosition: lpPda,\n marketVault: vaultPda,\n creatorTokenAccount: creatorAta,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .instruction();\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { BN } from \"@anchor-lang/core\";\nimport {\n getMXEAccAddress,\n getMempoolAccAddress,\n getExecutingPoolAccAddress,\n getComputationAccAddress,\n getClusterAccAddress,\n getCompDefAccAddress,\n getFeePoolAccAddress,\n getClockAccAddress,\n getLookupTableAddress,\n getArciumProgramId,\n} from \"@arcium-hq/client\";\nimport type { CypherClient } from \"../client.ts\";\nimport { arciumSignerPda } from \"../pda.ts\";\nimport { compDefOffsetU32, type CircuitName } from \"./offsets.ts\";\n\n/**\n * The bundle of Arcium-side accounts every `queue_*` Anchor instruction\n * expects. Each field corresponds to one entry in the on-chain\n * `#[queue_computation_accounts(...)]` macro in `cypher-main/src/lib.rs`.\n *\n * Naming matches the Anchor account context fields in cypher-main so\n * spread-into-`.accountsPartial(...)` works cleanly.\n */\nexport interface ArciumQueueAccounts {\n /** The per-computation PDA derived from `(clusterOffset, computationOffset)`. */\n computationAccount: PublicKey;\n /** Cluster PDA on the chosen Arcium cluster. */\n clusterAccount: PublicKey;\n /** MXE PDA for the Cypher program — the on-chain metadata holder. */\n mxeAccount: PublicKey;\n /** Mempool that buffers computations before assignment to executors. */\n mempoolAccount: PublicKey;\n /** Currently-executing pool on the cluster. */\n executingPool: PublicKey;\n /** Comp-def PDA holding the compiled circuit bytecode + verifier key. */\n compDefAccount: PublicKey;\n /** Shared Arcium fee-pool PDA. */\n poolAccount: PublicKey;\n /** Shared Arcium clock PDA — used to enforce monotonic ordering. */\n clockAccount: PublicKey;\n /** Cypher program-side signer PDA (`b\"ArciumSignerAccount\"`). */\n signPdaAccount: PublicKey;\n /** Arcium executable program ID — included for the program CPI. */\n arciumProgram: PublicKey;\n /** v0 lookup table containing the MXE's heavy accounts. */\n addressLookupTable: PublicKey;\n}\n\n/**\n * Derive every Arcium account the Cypher program expects for a single\n * `queue_*` invocation. Pure: only reads from the `client` config and a\n * caller-supplied `computationOffset`.\n *\n * `computationOffset` is the random u64 the caller picks per request —\n * the on-chain `place_private_bet_*`, `resolve_market_*`, `claim_*`\n * instructions all take it as their first argument and use it as the PDA\n * seed for the computation account.\n */\nexport function buildArciumQueueAccounts(\n client: CypherClient,\n params: {\n circuit: CircuitName;\n computationOffset: bigint | BN;\n /** Lookup table address; if omitted, derived from the MXE account. */\n addressLookupTable?: PublicKey;\n /** Optional MXE LUT offset slot — needed only if you pre-fetched the MXE. */\n lutOffsetSlot?: BN;\n },\n): ArciumQueueAccounts {\n const clusterOffset = client.cluster.arciumClusterOffset;\n const offsetBN =\n params.computationOffset instanceof BN\n ? params.computationOffset\n : new BN(params.computationOffset.toString());\n\n const mxeAccount = getMXEAccAddress(client.programId);\n const addressLookupTable =\n params.addressLookupTable ??\n (params.lutOffsetSlot\n ? getLookupTableAddress(client.programId, params.lutOffsetSlot)\n : // The LUT offset slot is stored on the MXE account; callers that\n // don't have it cached can pre-fetch via `fetchMxeLut(client)` or\n // pass it through after the first call. Throwing here forces them\n // to be explicit rather than silently submitting a tx with a stale\n // LUT.\n (() => {\n throw new Error(\n \"buildArciumQueueAccounts: pass addressLookupTable or lutOffsetSlot\",\n );\n })());\n\n return {\n computationAccount: getComputationAccAddress(clusterOffset, offsetBN),\n clusterAccount: getClusterAccAddress(clusterOffset),\n mxeAccount,\n mempoolAccount: getMempoolAccAddress(clusterOffset),\n executingPool: getExecutingPoolAccAddress(clusterOffset),\n compDefAccount: getCompDefAccAddress(\n client.programId,\n compDefOffsetU32(params.circuit),\n ),\n poolAccount: getFeePoolAccAddress(),\n clockAccount: getClockAccAddress(),\n signPdaAccount: arciumSignerPda(client.programId)[0],\n arciumProgram: getArciumProgramId(),\n addressLookupTable,\n };\n}\n\n/**\n * Fetch the MXE account once to learn its `lutOffsetSlot` and derive the\n * lookup-table address. Cached on `client` so a frontend that places many\n * bets doesn't repeatedly hit RPC.\n */\nconst _mxeLutCache = new WeakMap<CypherClient, { lut: PublicKey; slot: BN }>();\nexport async function fetchMxeLookupTable(\n client: CypherClient,\n): Promise<{ lut: PublicKey; slot: BN }> {\n const cached = _mxeLutCache.get(client);\n if (cached) return cached;\n\n const mxe = getMXEAccAddress(client.programId);\n // The arcium client typing is loose; we just need lutOffsetSlot.\n const arciumProgram =\n // dynamic import keeps this off the import graph for browser-only\n // surface that never queues a computation\n (await import(\"@arcium-hq/client\")).getArciumProgram(client.provider);\n const facade = (arciumProgram.account as unknown as Record<string, {\n fetch: (pk: PublicKey) => Promise<{ lutOffsetSlot: BN }>;\n }>).mxeAccount as { fetch: (pk: PublicKey) => Promise<{ lutOffsetSlot: BN }> };\n const mxeAcc = await facade.fetch(mxe);\n\n const slot = mxeAcc.lutOffsetSlot;\n const lut = getLookupTableAddress(client.programId, slot);\n const result = { lut, slot };\n _mxeLutCache.set(client, result);\n return result;\n}\n","import { PublicKey, type TransactionInstruction } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport {\n globalStatePda,\n marketPda,\n marketVaultPda,\n positionPda,\n} from \"../pda.ts\";\nimport { buildArciumQueueAccounts } from \"../arcium/accounts.ts\";\nimport { CIRCUITS, type CircuitName } from \"../arcium/offsets.ts\";\nimport {\n SystemProgram,\n TOKEN_PROGRAM_ID,\n method,\n toBN,\n userAta,\n} from \"./common.ts\";\n\nfunction assertU8(name: string, v: number): void {\n if (!Number.isInteger(v) || v < 0 || v > 0xff) {\n throw new Error(`placePrivateBet*Ix: ${name} must be a u8`);\n }\n}\n\nfunction assertCiphertext(name: string, v: Uint8Array): void {\n if (v.length !== 32) {\n throw new Error(`placePrivateBet*Ix: ${name} must be exactly 32 bytes`);\n }\n}\n\n/** Arguments common to YesNo and MultiOutcome bet placement. */\nexport interface PlacePrivateBetParams {\n /** Tx payer + signer; usually the user. Often equal to `user`. */\n payer: PublicKey;\n /** The user placing the bet (signer; the position is keyed by this pubkey). */\n user: PublicKey;\n /** Market id. */\n marketId: bigint | number;\n /** Accepted mint — read from `GlobalState.accepted_mint`. */\n acceptedMint: PublicKey;\n /** Protocol treasury SPL token account — from `GlobalState.protocol_treasury`. */\n protocolTreasury: PublicKey;\n /** Random `u64` per request — use `randomComputationOffset()`. */\n computationOffset: bigint | number;\n /** Gross bet amount (micro-USDC). On-chain net is computed via fee math. */\n betAmountUsdc: bigint | number;\n /** 32-byte ciphertext of net amount (from `encryptBetInput`). */\n encryptedAmount: Uint8Array;\n /** 32-byte ciphertext of outcome side. */\n encryptedSide: Uint8Array;\n /** User's x25519 public key (32 bytes). */\n userX25519Pubkey: Uint8Array;\n /** u128 nonce that produced the two ciphertexts. */\n nonce: bigint;\n /** Address lookup table for the MXE (pass `fetchMxeLookupTable(client).lut`). */\n addressLookupTable: PublicKey;\n}\n\nasync function buildPlaceBetIx(\n client: CypherClient,\n circuit: CircuitName,\n methodName: \"placePrivateBetYesno\" | \"placePrivateBetMulti\",\n params: PlacePrivateBetParams,\n): Promise<TransactionInstruction> {\n assertCiphertext(\"encryptedAmount\", params.encryptedAmount);\n assertCiphertext(\"encryptedSide\", params.encryptedSide);\n assertCiphertext(\"userX25519Pubkey\", params.userX25519Pubkey);\n assertU8(\"(amount sanity)\", 0); // no-op guard; kept for symmetry\n\n const [gsPda] = globalStatePda(client.programId);\n const [marketPdaKey] = marketPda(toBN(params.marketId), client.programId);\n const [vaultPda] = marketVaultPda(marketPdaKey, client.programId);\n const [positionPdaKey] = positionPda(marketPdaKey, params.user, client.programId);\n const userTokenAccount = userAta(params.user, params.acceptedMint);\n\n const arcium = buildArciumQueueAccounts(client, {\n circuit,\n computationOffset: toBN(params.computationOffset),\n addressLookupTable: params.addressLookupTable,\n });\n\n return method(client, methodName)(\n toBN(params.computationOffset),\n toBN(params.betAmountUsdc),\n Array.from(params.encryptedAmount),\n Array.from(params.encryptedSide),\n Array.from(params.userX25519Pubkey),\n toBN(params.nonce),\n )\n .accountsPartial({\n payer: params.payer,\n signPdaAccount: arcium.signPdaAccount,\n mxeAccount: arcium.mxeAccount,\n mempoolAccount: arcium.mempoolAccount,\n executingPool: arcium.executingPool,\n computationAccount: arcium.computationAccount,\n compDefAccount: arcium.compDefAccount,\n clusterAccount: arcium.clusterAccount,\n poolAccount: arcium.poolAccount,\n clockAccount: arcium.clockAccount,\n systemProgram: SystemProgram.programId,\n arciumProgram: arcium.arciumProgram,\n user: params.user,\n globalState: gsPda,\n market: marketPdaKey,\n marketVault: vaultPda,\n userTokenAccount,\n protocolTreasury: params.protocolTreasury,\n position: positionPdaKey,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .instruction();\n}\n\n/** `place_private_bet_yesno` — encrypted bet on a YES/NO market. */\nexport function placePrivateBetYesnoIx(\n client: CypherClient,\n params: PlacePrivateBetParams,\n): Promise<TransactionInstruction> {\n return buildPlaceBetIx(\n client,\n CIRCUITS.placePrivateBetYesno,\n \"placePrivateBetYesno\",\n params,\n );\n}\n\n/** `place_private_bet_multi` — encrypted bet on a multi-outcome market. */\nexport function placePrivateBetMultiIx(\n client: CypherClient,\n params: PlacePrivateBetParams,\n): Promise<TransactionInstruction> {\n return buildPlaceBetIx(\n client,\n CIRCUITS.placePrivateBetMulti,\n \"placePrivateBetMulti\",\n params,\n );\n}\n\n// PublicKey export keeps `import type` chains tidy for downstream callers.\nexport { PublicKey };\n","import type { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport { marketPda } from \"../pda.ts\";\nimport { buildArciumQueueAccounts } from \"../arcium/accounts.ts\";\nimport { CIRCUITS, type CircuitName } from \"../arcium/offsets.ts\";\nimport { SystemProgram, method, toBN } from \"./common.ts\";\n\n/** Shared shape of `resolve_market_yesno` and `resolve_market_multi`. */\nexport interface ResolveMarketParams {\n payer: PublicKey;\n resolver: PublicKey;\n marketId: bigint | number;\n computationOffset: bigint | number;\n /**\n * Outcome value — YesNo: 0 (NO) or 1 (YES); Multi: 0..numOutcomes-1.\n *\n * The contract enforces that resolver != creator + matches the address\n * the creator originally pinned on the market.\n */\n outcomeValue: number;\n addressLookupTable: PublicKey;\n}\n\nasync function buildResolveIx(\n client: CypherClient,\n circuit: CircuitName,\n methodName: \"resolveMarketYesno\" | \"resolveMarketMulti\",\n params: ResolveMarketParams,\n): Promise<TransactionInstruction> {\n if (\n !Number.isInteger(params.outcomeValue) ||\n params.outcomeValue < 0 ||\n params.outcomeValue > 0xff\n ) {\n throw new Error(\"resolveMarketIx: outcomeValue must be a u8\");\n }\n const [marketPdaKey] = marketPda(toBN(params.marketId), client.programId);\n const arcium = buildArciumQueueAccounts(client, {\n circuit,\n computationOffset: toBN(params.computationOffset),\n addressLookupTable: params.addressLookupTable,\n });\n return method(client, methodName)(toBN(params.computationOffset), params.outcomeValue)\n .accountsPartial({\n payer: params.payer,\n signPdaAccount: arcium.signPdaAccount,\n mxeAccount: arcium.mxeAccount,\n mempoolAccount: arcium.mempoolAccount,\n executingPool: arcium.executingPool,\n computationAccount: arcium.computationAccount,\n compDefAccount: arcium.compDefAccount,\n clusterAccount: arcium.clusterAccount,\n poolAccount: arcium.poolAccount,\n clockAccount: arcium.clockAccount,\n systemProgram: SystemProgram.programId,\n arciumProgram: arcium.arciumProgram,\n resolver: params.resolver,\n market: marketPdaKey,\n })\n .instruction();\n}\n\n/** `resolve_market_yesno` — submit outcome for a YES/NO market. */\nexport function resolveMarketYesnoIx(\n client: CypherClient,\n params: ResolveMarketParams,\n): Promise<TransactionInstruction> {\n return buildResolveIx(\n client,\n CIRCUITS.revealMarketOutcomeYesno,\n \"resolveMarketYesno\",\n params,\n );\n}\n\n/** `resolve_market_multi` — submit outcome for a multi-outcome market. */\nexport function resolveMarketMultiIx(\n client: CypherClient,\n params: ResolveMarketParams,\n): Promise<TransactionInstruction> {\n return buildResolveIx(\n client,\n CIRCUITS.revealMarketOutcomeMulti,\n \"resolveMarketMulti\",\n params,\n );\n}\n","import type { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport { marketPda, marketVaultPda, positionPda } from \"../pda.ts\";\nimport { buildArciumQueueAccounts } from \"../arcium/accounts.ts\";\nimport { CIRCUITS, type CircuitName } from \"../arcium/offsets.ts\";\nimport {\n SystemProgram,\n TOKEN_PROGRAM_ID,\n method,\n toBN,\n userAta,\n} from \"./common.ts\";\n\n/** Shared params for both claim variants. */\nexport interface ClaimParams {\n payer: PublicKey;\n user: PublicKey;\n marketId: bigint | number;\n acceptedMint: PublicKey;\n computationOffset: bigint | number;\n addressLookupTable: PublicKey;\n}\n\ntype ClaimMethod =\n | \"claimPayoutYesno\"\n | \"claimPayoutMulti\"\n | \"claimRefundYesno\"\n | \"claimRefundMulti\";\n\nasync function buildClaimIx(\n client: CypherClient,\n circuit: CircuitName,\n methodName: ClaimMethod,\n params: ClaimParams,\n): Promise<TransactionInstruction> {\n const [marketPdaKey] = marketPda(toBN(params.marketId), client.programId);\n const [vaultPda] = marketVaultPda(marketPdaKey, client.programId);\n const [positionPdaKey] = positionPda(marketPdaKey, params.user, client.programId);\n const userTokenAccount = userAta(params.user, params.acceptedMint);\n\n const arcium = buildArciumQueueAccounts(client, {\n circuit,\n computationOffset: toBN(params.computationOffset),\n addressLookupTable: params.addressLookupTable,\n });\n\n return method(client, methodName)(toBN(params.computationOffset))\n .accountsPartial({\n payer: params.payer,\n signPdaAccount: arcium.signPdaAccount,\n mxeAccount: arcium.mxeAccount,\n mempoolAccount: arcium.mempoolAccount,\n executingPool: arcium.executingPool,\n computationAccount: arcium.computationAccount,\n compDefAccount: arcium.compDefAccount,\n clusterAccount: arcium.clusterAccount,\n poolAccount: arcium.poolAccount,\n clockAccount: arcium.clockAccount,\n systemProgram: SystemProgram.programId,\n arciumProgram: arcium.arciumProgram,\n user: params.user,\n market: marketPdaKey,\n position: positionPdaKey,\n marketVault: vaultPda,\n userTokenAccount,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .instruction();\n}\n\n/** `claim_payout_yesno` — winner pulls payout from a resolved YesNo market. */\nexport function claimPayoutYesnoIx(\n client: CypherClient,\n params: ClaimParams,\n): Promise<TransactionInstruction> {\n return buildClaimIx(\n client,\n CIRCUITS.computeYesnoPayout,\n \"claimPayoutYesno\",\n params,\n );\n}\n\n/** `claim_payout_multi` — winner pulls payout from a resolved multi market. */\nexport function claimPayoutMultiIx(\n client: CypherClient,\n params: ClaimParams,\n): Promise<TransactionInstruction> {\n return buildClaimIx(\n client,\n CIRCUITS.computeMultiPayout,\n \"claimPayoutMulti\",\n params,\n );\n}\n\n/** `claim_refund_yesno` — refund on a YesNo market that never resolved. */\nexport function claimRefundYesnoIx(\n client: CypherClient,\n params: ClaimParams,\n): Promise<TransactionInstruction> {\n return buildClaimIx(\n client,\n CIRCUITS.computeYesnoRefund,\n \"claimRefundYesno\",\n params,\n );\n}\n\n/** `claim_refund_multi` — refund on a multi market that never resolved. */\nexport function claimRefundMultiIx(\n client: CypherClient,\n params: ClaimParams,\n): Promise<TransactionInstruction> {\n return buildClaimIx(\n client,\n CIRCUITS.computeMultiRefund,\n \"claimRefundMulti\",\n params,\n );\n}\n","import type { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport { globalStatePda, marketPda } from \"../pda.ts\";\nimport { method, toBN } from \"./common.ts\";\n\n/* ----------------------------------------------------------------------- *\n * Dispute / challenge window instructions (v0.2+) *\n * *\n * After the reveal callback fires, the market sits in *\n * `PendingResolution` for `challenge_period` seconds. During this window: *\n * *\n * - any user may `flagResolution` to dispute the outcome *\n * - after the window elapses undisputed, any user may `finalizeResolution`*\n * - the admin may always `adminOverrideResolution` on a disputed market *\n * *\n * None of these involve Arcium computation — pools and outcome are *\n * already plaintext on the Market account by this point. *\n * ----------------------------------------------------------------------- */\n\nexport interface FlagResolutionParams {\n /** The user flagging the resolution (signer). Permissionless. */\n flagger: PublicKey;\n marketId: bigint | number;\n}\n\n/** `flag_resolution` — anyone can flag a pending resolution during the window. */\nexport async function flagResolutionIx(\n client: CypherClient,\n params: FlagResolutionParams,\n): Promise<TransactionInstruction> {\n const [marketPdaKey] = marketPda(toBN(params.marketId), client.programId);\n return method(client, \"flagResolution\")()\n .accountsPartial({\n flagger: params.flagger,\n market: marketPdaKey,\n })\n .instruction();\n}\n\nexport interface FinalizeResolutionParams {\n /** The user calling finalize (signer). Permissionless. */\n caller: PublicKey;\n marketId: bigint | number;\n}\n\n/**\n * `finalize_resolution` — anyone can call once the challenge window has\n * elapsed undisputed. Flips the market from `PendingResolution` → `Resolved`\n * and sets the `claim_deadline` / `refund_deadline`.\n */\nexport async function finalizeResolutionIx(\n client: CypherClient,\n params: FinalizeResolutionParams,\n): Promise<TransactionInstruction> {\n const [marketPdaKey] = marketPda(toBN(params.marketId), client.programId);\n return method(client, \"finalizeResolution\")()\n .accountsPartial({\n caller: params.caller,\n market: marketPdaKey,\n })\n .instruction();\n}\n\nexport interface AdminOverrideResolutionParams {\n /** Admin signer — must match `GlobalState.admin`. */\n admin: PublicKey;\n marketId: bigint | number;\n /**\n * Corrected outcome. YesNo: 0 or 1. Multi: in `[0, numOutcomes)`.\n * Recomputes `payout_ratio` from the on-chain revealed pools.\n */\n outcomeValue: number;\n}\n\n/**\n * `admin_override_resolution` — admin-only escape hatch for disputed markets.\n * Recomputes payout_ratio from already-revealed plaintext pools and flips\n * the market to `Resolved` (no Arcium computation involved).\n */\nexport async function adminOverrideResolutionIx(\n client: CypherClient,\n params: AdminOverrideResolutionParams,\n): Promise<TransactionInstruction> {\n if (!Number.isInteger(params.outcomeValue) || params.outcomeValue < 0 || params.outcomeValue > 0xff) {\n throw new Error(\"adminOverrideResolutionIx: outcomeValue must be a u8\");\n }\n const [marketPdaKey] = marketPda(toBN(params.marketId), client.programId);\n const [gsPda] = globalStatePda(client.programId);\n return method(client, \"adminOverrideResolution\")(params.outcomeValue)\n .accountsPartial({\n admin: params.admin,\n globalState: gsPda,\n market: marketPdaKey,\n })\n .instruction();\n}\n","import { BN } from \"@anchor-lang/core\";\nimport type { Finality } from \"@solana/web3.js\";\nimport { awaitComputationFinalization } from \"@arcium-hq/client\";\nimport type { CypherClient } from \"../client.ts\";\n\n/** Outcome returned by `awaitComputation`. */\nexport interface ComputationResult {\n /** Always `\"finalized\"` on success (we throw otherwise). */\n status: \"finalized\";\n /** Solana signature of the finalization tx (the callback ix). */\n signature: string;\n /** Wall-clock time spent polling, in milliseconds. */\n durationMs: number;\n}\n\nexport interface AwaitComputationOptions {\n /** How long to poll before giving up. Defaults to 120 seconds. */\n timeoutMs?: number;\n /** Commitment for the underlying RPC reads. Defaults to \"confirmed\". */\n commitment?: Finality;\n}\n\n/**\n * Block until the Arcium MPC nodes finalize the queued computation\n * identified by `computationOffset`, returning the finalization\n * signature.\n *\n * Thin wrapper over `@arcium-hq/client/awaitComputationFinalization` —\n * present in the SDK so consumers can `await client.arcium.await(...)`\n * without importing the lower-level package directly.\n *\n * Throws if the cluster doesn't finalize within `timeoutMs`. Action\n * helpers in `src/actions/` wrap this with a \"computation aborted\" check\n * that maps to a clean error before bubbling.\n */\nexport async function awaitComputation(\n client: CypherClient,\n computationOffset: bigint | BN,\n opts: AwaitComputationOptions = {},\n): Promise<ComputationResult> {\n const started = Date.now();\n const offsetBN =\n computationOffset instanceof BN\n ? computationOffset\n : new BN(computationOffset.toString());\n\n const signature = await awaitComputationFinalization(\n client.provider,\n offsetBN,\n client.programId,\n opts.commitment ?? \"confirmed\",\n opts.timeoutMs ?? 120_000,\n );\n return { status: \"finalized\", signature, durationMs: Date.now() - started };\n}\n\n/**\n * Generate a random u64 `computationOffset` for a queue request.\n *\n * Collisions are extraordinarily unlikely with full u64 entropy but the\n * helper rejects 0 (an Arcium reserved sentinel value).\n */\nexport function randomComputationOffset(): bigint {\n const buf = crypto.getRandomValues(new Uint8Array(8));\n let v = 0n;\n for (let i = 7; i >= 0; i--) v = (v << 8n) | BigInt(buf[i] as number);\n return v === 0n ? 1n : v;\n}\n","import {\n Transaction,\n type ConfirmOptions,\n type Signer,\n type TransactionInstruction,\n} from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport { awaitComputation, type ComputationResult } from \"../arcium/callbacks.ts\";\nimport { parseCypherError } from \"../errors.ts\";\n\n/**\n * Lifecycle stages that an end-to-end action passes through. Surfaces via\n * the optional `onProgress` callback on every multi-step action helper so\n * frontends can render fine-grained progress UI (\"Encrypting your bet…\",\n * \"Submitting transaction…\", \"Waiting for MPC nodes…\", \"Confirmed!\").\n */\nexport type ActionStage =\n | \"validating\"\n | \"fetching-state\"\n | \"encrypting\"\n | \"submitting\"\n | \"awaiting-callback\"\n | \"refetching\"\n | \"done\";\n\n/**\n * Progress event payload. The shape stays minimal on purpose — frontends\n * typically map `stage` to a copy string and use `signature` /\n * `computationOffset` as the \"we've reached the chain\" handoff for any\n * progress-bar logic.\n */\nexport interface ActionProgressEvent {\n stage: ActionStage;\n /** Optional human-friendly message — populated for noteworthy stages. */\n message?: string;\n /** Signature once the queue tx lands (\"submitting\" → \"awaiting-callback\"). */\n signature?: string;\n /** Random u64 used for the Arcium computation, available after submit. */\n computationOffset?: bigint;\n}\n\nexport type ProgressCallback = (event: ActionProgressEvent) => void;\n\n/** Internal helper: invoke an optional progress callback safely. */\nexport function emitProgress(\n cb: ProgressCallback | undefined,\n stage: ActionStage,\n extra?: Omit<ActionProgressEvent, \"stage\">,\n): void {\n if (!cb) return;\n try {\n cb({ stage, ...extra });\n } catch {\n // Never let a UI logging callback bring down an on-chain flow.\n }\n}\n\nexport interface SendIxOptions {\n /** Additional Keypair signers (most flows only need the wallet's signer). */\n signers?: Signer[];\n /** Anchor confirmation options override. */\n confirmOptions?: ConfirmOptions;\n}\n\n/**\n * Wrap a single instruction in a legacy `Transaction`, sign with the\n * provider's wallet (plus any extra `signers`), and send via the Anchor\n * provider. Returns the confirmed signature.\n *\n * Errors are reshaped through `parseCypherError` so the caller gets a\n * `ParsedCypherError` (when the program rejected the call) instead of\n * Anchor's nested error objects.\n */\nexport async function sendIx(\n client: CypherClient,\n ix: TransactionInstruction,\n opts: SendIxOptions = {},\n): Promise<string> {\n const tx = new Transaction().add(ix);\n try {\n return await client.provider.sendAndConfirm(\n tx,\n opts.signers ?? [],\n opts.confirmOptions,\n );\n } catch (err) {\n rethrowCypher(err);\n }\n}\n\n/**\n * Send an instruction that queues an Arcium computation, then block until\n * the MPC nodes finalize the callback. Returns both the queue tx\n * signature and the computation finalization details.\n *\n * Used by every action that touches the bet / resolve / claim path.\n */\nexport async function sendIxAndAwaitArcium(\n client: CypherClient,\n ix: TransactionInstruction,\n params: {\n computationOffset: bigint;\n timeoutMs?: number;\n signers?: Signer[];\n confirmOptions?: ConfirmOptions;\n },\n): Promise<{ signature: string; computation: ComputationResult }> {\n const signature = await sendIx(client, ix, {\n signers: params.signers,\n confirmOptions: params.confirmOptions,\n });\n const computation = await awaitComputation(\n client,\n params.computationOffset,\n { timeoutMs: params.timeoutMs },\n );\n return { signature, computation };\n}\n\nfunction rethrowCypher(err: unknown): never {\n const parsed = parseCypherError(err);\n if (parsed) {\n const wrapped = new Error(`${parsed.name}: ${parsed.msg}`);\n (wrapped as Error & { cause?: unknown }).cause = err;\n (wrapped as Error & { cypherError?: typeof parsed }).cypherError = parsed;\n throw wrapped;\n }\n throw err;\n}\n","import type { PublicKey } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport {\n createMarketIx,\n createMarketMultiIx,\n cancelMarketIx,\n withdrawCreatorFundsIx,\n type CreateMarketParams,\n type CreateMarketMultiParams,\n type CancelMarketParams,\n type WithdrawCreatorFundsParams,\n} from \"../instructions/index.ts\";\nimport { marketPda } from \"../pda.ts\";\nimport { isValidCloseTime } from \"../deadlines.ts\";\nimport { MIN_CHALLENGE_PERIOD_SECS } from \"../config.ts\";\nimport type { MarketAccount } from \"../accounts/market.ts\";\nimport { sendIx, emitProgress, type ProgressCallback } from \"./common.ts\";\n\n/**\n * Result returned by the `createMarket` action.\n *\n * `market` will only be populated if the post-create refetch succeeded —\n * a freshly-created market is *usually* visible at \"confirmed\" but\n * occasionally needs another commitment bump.\n */\nexport interface CreateMarketResult {\n signature: string;\n marketId: bigint;\n marketPda: PublicKey;\n market: MarketAccount | null;\n}\n\ntype CreateInputs =\n | (Omit<CreateMarketParams, \"expectedMarketId\" | \"acceptedMint\" | \"challengePeriod\"> & {\n kind: \"yesno\";\n acceptedMint?: PublicKey;\n /** v0.2+: defaults to MIN_CHALLENGE_PERIOD_SECS (24h) if omitted. */\n challengePeriod?: bigint | number;\n onProgress?: ProgressCallback;\n })\n | (Omit<CreateMarketMultiParams, \"expectedMarketId\" | \"acceptedMint\" | \"challengePeriod\"> & {\n kind: \"multi\";\n acceptedMint?: PublicKey;\n challengePeriod?: bigint | number;\n onProgress?: ProgressCallback;\n });\n\nasync function createMarketCommon(\n client: CypherClient,\n inputs: CreateInputs,\n): Promise<CreateMarketResult> {\n emitProgress(inputs.onProgress, \"validating\", {\n message: \"Validating market draft\",\n });\n if (!isValidCloseTime(BigInt(inputs.closeTime as bigint | number))) {\n throw new Error(\n \"createMarket: closeTime must be at least 60 seconds in the future\",\n );\n }\n\n emitProgress(inputs.onProgress, \"fetching-state\");\n // Fetch GlobalState fresh so we can claim the next market_counter and\n // pin the accepted mint without the caller having to know it.\n const gs = await client.globalState.fetch({ refresh: true });\n const acceptedMint = inputs.acceptedMint ?? gs.acceptedMint;\n const expectedMarketId = gs.marketCounter;\n const challengePeriod = inputs.challengePeriod ?? MIN_CHALLENGE_PERIOD_SECS;\n\n const ix =\n inputs.kind === \"yesno\"\n ? await createMarketIx(client, {\n ...inputs,\n acceptedMint,\n expectedMarketId,\n challengePeriod,\n })\n : await createMarketMultiIx(client, {\n ...inputs,\n acceptedMint,\n expectedMarketId,\n challengePeriod,\n });\n\n emitProgress(inputs.onProgress, \"submitting\", {\n message: \"Submitting create-market transaction\",\n });\n const signature = await sendIx(client, ix);\n\n emitProgress(inputs.onProgress, \"refetching\");\n const [marketPdaKey] = marketPda(expectedMarketId, client.programId);\n const market = await client.markets.fetchByPda(marketPdaKey);\n\n emitProgress(inputs.onProgress, \"done\", { signature });\n return {\n signature,\n marketId: expectedMarketId,\n marketPda: marketPdaKey,\n market,\n };\n}\n\n/** Create a YES/NO market end-to-end. */\nexport async function createMarketAction(\n client: CypherClient,\n inputs: Omit<CreateMarketParams, \"expectedMarketId\" | \"acceptedMint\" | \"challengePeriod\"> & {\n acceptedMint?: PublicKey;\n /** v0.2+: defaults to MIN_CHALLENGE_PERIOD_SECS (24h) if omitted. */\n challengePeriod?: bigint | number;\n onProgress?: ProgressCallback;\n },\n): Promise<CreateMarketResult> {\n return createMarketCommon(client, { ...inputs, kind: \"yesno\" });\n}\n\n/** Create a multi-outcome market (2–4 outcomes) end-to-end. */\nexport async function createMarketMultiAction(\n client: CypherClient,\n inputs: Omit<CreateMarketMultiParams, \"expectedMarketId\" | \"acceptedMint\" | \"challengePeriod\"> & {\n acceptedMint?: PublicKey;\n challengePeriod?: bigint | number;\n onProgress?: ProgressCallback;\n },\n): Promise<CreateMarketResult> {\n return createMarketCommon(client, { ...inputs, kind: \"multi\" });\n}\n\n/** Cancel a market that has no bets. Returns the post-cancel `Market`. */\nexport async function cancelMarketAction(\n client: CypherClient,\n inputs: Omit<CancelMarketParams, \"acceptedMint\"> & { acceptedMint?: PublicKey },\n): Promise<{ signature: string; market: MarketAccount | null }> {\n const acceptedMint =\n inputs.acceptedMint ?? (await client.globalState.fetch()).acceptedMint;\n const ix = await cancelMarketIx(client, { ...inputs, acceptedMint });\n const signature = await sendIx(client, ix);\n const [pda] = marketPda(inputs.marketId, client.programId);\n return { signature, market: await client.markets.fetchByPda(pda) };\n}\n\n/** Creator pulls bond + LP fees from a resolved market. */\nexport async function withdrawCreatorFundsAction(\n client: CypherClient,\n inputs: Omit<WithdrawCreatorFundsParams, \"acceptedMint\"> & {\n acceptedMint?: PublicKey;\n },\n): Promise<{ signature: string }> {\n const acceptedMint =\n inputs.acceptedMint ?? (await client.globalState.fetch()).acceptedMint;\n const ix = await withdrawCreatorFundsIx(client, { ...inputs, acceptedMint });\n const signature = await sendIx(client, ix);\n return { signature };\n}\n","import { RescueCipher, x25519 } from \"@arcium-hq/client\";\nimport { getMXEPublicKey } from \"@arcium-hq/client\";\nimport type { CypherClient } from \"../client.ts\";\n\n/** A user's ephemeral x25519 keypair used to derive the Rescue shared secret. */\nexport interface UserCryptoKeypair {\n /** 32-byte x25519 private key — keep client-side, never put it on-chain. */\n privateKey: Uint8Array;\n /** 32-byte x25519 public key — sent on-chain as `pub_key` for callbacks. */\n publicKey: Uint8Array;\n}\n\n/**\n * Generate a fresh user x25519 keypair using Web Crypto.\n *\n * Browser-safe. Always use a new keypair per bet — reusing across bets is\n * not catastrophic (since the cipher rotates nonces) but leaks the fact\n * that two encrypted positions belong to the same wallet to anyone who\n * watches `EncryptedPosition.user_pubkey`.\n */\nexport function createUserKeypair(): UserCryptoKeypair {\n const privateKey = crypto.getRandomValues(new Uint8Array(32));\n const publicKey = x25519.getPublicKey(privateKey);\n return { privateKey, publicKey };\n}\n\n/**\n * Derive the Rescue shared secret from the user's x25519 keypair and the\n * MXE's published public key. Used by both encrypt and decrypt paths so\n * the user can later reopen their own ciphertexts to claim a payout.\n */\nexport function deriveSharedSecret(\n userPrivateKey: Uint8Array,\n mxePublicKey: Uint8Array,\n): Uint8Array {\n return x25519.getSharedSecret(userPrivateKey, mxePublicKey);\n}\n\n/**\n * Generate a fresh 16-byte nonce for RescueCipher CTR-mode encryption.\n *\n * **MUST** be unique per `cipher.encrypt(...)` call — reusing a nonce with\n * the same key garbles output (per the Arcium SKILL.md gotchas).\n */\nexport function freshNonce(): Uint8Array {\n return crypto.getRandomValues(new Uint8Array(16));\n}\n\n/**\n * Read a little-endian byte array as a u128 `bigint`. Used to convert the\n * 16-byte cipher nonce into the `u128` parameter the on-chain instructions\n * accept.\n */\nexport function leBytesToBigInt(bytes: Uint8Array): bigint {\n let n = 0n;\n for (let i = bytes.length - 1; i >= 0; i--) {\n n = (n << 8n) | BigInt(bytes[i] as number);\n }\n return n;\n}\n\n/**\n * Construct a `RescueCipher` for `(userKeypair, mxePublicKey)`.\n *\n * Single-line wrapper — exists mostly to document the construction order\n * (derive shared secret first, then instantiate cipher) and to avoid\n * leaking `@arcium-hq/client` types into the SDK's public encryption\n * helpers.\n */\nexport function createCipher(\n userPrivateKey: Uint8Array,\n mxePublicKey: Uint8Array,\n): RescueCipher {\n return new RescueCipher(deriveSharedSecret(userPrivateKey, mxePublicKey));\n}\n\n/**\n * Resolve the MXE's published x25519 public key for the program backing\n * `client`. Returns `null` if the cluster hasn't published one yet\n * (early-bootstrap state; usually only seen on localnet).\n *\n * Result is cached on `client` so the action helpers can call this on\n * every `placeBet` without paying the RPC round-trip more than once.\n */\nconst _mxePubkeyCache = new WeakMap<CypherClient, Uint8Array>();\nexport async function fetchMxePublicKey(\n client: CypherClient,\n): Promise<Uint8Array | null> {\n const cached = _mxePubkeyCache.get(client);\n if (cached) return cached;\n const key = await getMXEPublicKey(client.provider, client.programId);\n if (!key) return null;\n _mxePubkeyCache.set(client, key);\n return key;\n}\n","import type { RescueCipher } from \"@arcium-hq/client\";\nimport { freshNonce, leBytesToBigInt } from \"./cipher.ts\";\n\n/**\n * A user's plaintext bet input as the circuits expect it.\n *\n * `amount` is the **net** stake (after on-chain protocol + LP fee) — the\n * circuit asserts equality with the on-chain `net_amount` argument, so a\n * caller who encrypts the gross bet will see the queue succeed and the\n * callback hard-zero their stake (see audit finding H-1 / the\n * `net_amount_plaintext` checks in `encrypted-ixs/src/lib.rs`).\n */\nexport interface BetInput {\n /** Net stake in micro-USDC. Must equal `bet_amount - protocol_fee - lp_fee`. */\n amount: bigint;\n /** Outcome index: 0 / 1 for YesNo, 0..3 for MultiOutcome. */\n side: number;\n}\n\n/** Plaintext input to the refund circuit — the user's original net stake. */\nexport interface RefundInput {\n amount: bigint;\n}\n\n/** Encrypted form of a `BetInput`, ready for the queue instruction. */\nexport interface EncryptedBetInput {\n /** 32-byte ciphertext for `amount`. */\n encryptedAmount: Uint8Array;\n /** 32-byte ciphertext for `side`. */\n encryptedSide: Uint8Array;\n /** 16-byte nonce used for *both* ciphertexts (CTR mode, single message). */\n nonceBytes: Uint8Array;\n /** Same nonce as a `u128` `bigint` — the form the on-chain ix takes. */\n nonce: bigint;\n}\n\n/** Encrypted form of a `RefundInput` (single scalar — only the amount is private). */\nexport interface EncryptedRefundInput {\n encryptedAmount: Uint8Array;\n nonceBytes: Uint8Array;\n nonce: bigint;\n}\n\nfunction toUint8(arr: number[]): Uint8Array {\n // RescueCipher returns number[][] (each inner = 32 ints). Convert to a\n // Uint8Array for the public API — Anchor's u8;32 codec accepts either,\n // but Uint8Array is what the rest of the SDK uses.\n return Uint8Array.from(arr);\n}\n\n/**\n * Encrypt `(amount, side)` as a single Rescue message with one nonce.\n *\n * Returns **two separate 32-byte ciphertexts** — they are *not*\n * concatenated. Each scalar maps to its own ciphertext per the Arcium\n * SKILL.md gotcha (\"Combined ciphertext arrays\"): the on-chain ix expects\n * `encrypted_amount: [u8; 32]` and `encrypted_side: [u8; 32]` as\n * independent arguments.\n *\n * The caller is responsible for picking a fresh nonce per call — pass\n * `nonceBytes` if you want to control it, otherwise a 16-byte random\n * nonce is generated.\n */\nexport function encryptBetInput(\n input: BetInput,\n cipher: RescueCipher,\n nonceBytes: Uint8Array = freshNonce(),\n): EncryptedBetInput {\n if (nonceBytes.length !== 16) {\n throw new Error(\"encryptBetInput: nonce must be exactly 16 bytes\");\n }\n if (input.amount < 0n) throw new Error(\"encryptBetInput: amount must be >= 0\");\n if (!Number.isInteger(input.side) || input.side < 0 || input.side > 0xff) {\n throw new Error(\"encryptBetInput: side must be a u8\");\n }\n\n const cts = cipher.encrypt(\n [input.amount, BigInt(input.side)],\n nonceBytes,\n );\n if (cts.length !== 2 || (cts[0] as number[]).length !== 32 || (cts[1] as number[]).length !== 32) {\n // Shouldn't happen with RescueCipher v0.10.x, but fail loudly if the\n // upstream cipher ever changes its block layout.\n throw new Error(\n `encryptBetInput: unexpected ciphertext shape ${JSON.stringify(cts.map((c) => c.length))}`,\n );\n }\n\n return {\n encryptedAmount: toUint8(cts[0] as number[]),\n encryptedSide: toUint8(cts[1] as number[]),\n nonceBytes,\n nonce: leBytesToBigInt(nonceBytes),\n };\n}\n\n/**\n * Encrypt the refund input — a single scalar (the user's net stake).\n *\n * The refund circuit decrypts the amount and caps it to the on-chain\n * `net_amount_plaintext` argument before transferring, so the caller\n * must pass the same `amount` the on-chain `EncryptedPosition.net_amount`\n * already records.\n */\nexport function encryptRefundInput(\n input: RefundInput,\n cipher: RescueCipher,\n nonceBytes: Uint8Array = freshNonce(),\n): EncryptedRefundInput {\n if (nonceBytes.length !== 16) {\n throw new Error(\"encryptRefundInput: nonce must be exactly 16 bytes\");\n }\n if (input.amount < 0n) throw new Error(\"encryptRefundInput: amount must be >= 0\");\n\n const cts = cipher.encrypt([input.amount], nonceBytes);\n if (cts.length !== 1 || (cts[0] as number[]).length !== 32) {\n throw new Error(\n `encryptRefundInput: unexpected ciphertext shape ${JSON.stringify(cts.map((c) => c.length))}`,\n );\n }\n return {\n encryptedAmount: toUint8(cts[0] as number[]),\n nonceBytes,\n nonce: leBytesToBigInt(nonceBytes),\n };\n}\n\n/**\n * Decrypt a previously-encrypted `BetInput` — used by the SDK consumer\n * who held onto their x25519 private key and wants to display the stake +\n * side after fetching their `EncryptedPosition` from chain.\n *\n * The caller must hand the same 16-byte nonce the original encrypt used;\n * it lives on `EncryptedPosition.nonce` (a `u128`) so call\n * `bigIntToLeBytes(position.nonce, 16)` to round-trip.\n */\nexport function decryptBetInput(\n encrypted: { encryptedAmount: Uint8Array; encryptedSide: Uint8Array },\n cipher: RescueCipher,\n nonceBytes: Uint8Array,\n): BetInput {\n if (nonceBytes.length !== 16) {\n throw new Error(\"decryptBetInput: nonce must be exactly 16 bytes\");\n }\n const out = cipher.decrypt(\n [Array.from(encrypted.encryptedAmount), Array.from(encrypted.encryptedSide)],\n nonceBytes,\n );\n return { amount: out[0] as bigint, side: Number(out[1] as bigint) };\n}\n\n/** Round-trip helper: bigint → 16-byte LE Uint8Array (for u128 nonces). */\nexport function bigIntToLeBytes(value: bigint, byteLength: number): Uint8Array {\n if (value < 0n) throw new Error(\"bigIntToLeBytes: value must be >= 0\");\n const out = new Uint8Array(byteLength);\n let v = value;\n for (let i = 0; i < byteLength; i++) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n if (v !== 0n) {\n throw new Error(`bigIntToLeBytes: value does not fit in ${byteLength} bytes`);\n }\n return out;\n}\n","import type { PublicKey } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport {\n placePrivateBetYesnoIx,\n placePrivateBetMultiIx,\n} from \"../instructions/index.ts\";\nimport {\n createCipher,\n createUserKeypair,\n fetchMxePublicKey,\n type UserCryptoKeypair,\n} from \"../arcium/cipher.ts\";\nimport {\n encryptBetInput,\n type BetInput,\n} from \"../arcium/encoding.ts\";\nimport {\n awaitComputation,\n randomComputationOffset,\n} from \"../arcium/callbacks.ts\";\nimport { fetchMxeLookupTable } from \"../arcium/accounts.ts\";\nimport { computeFees } from \"../fees.ts\";\nimport { MarketState, MIN_BET_USDC, MarketType } from \"../config.ts\";\nimport { marketPda } from \"../pda.ts\";\nimport type { EncryptedPositionAccount } from \"../accounts/position.ts\";\nimport { sendIx, emitProgress, type ProgressCallback } from \"./common.ts\";\nimport type { ComputationResult } from \"../arcium/callbacks.ts\";\n\nexport interface PlaceBetInputs {\n /** Tx signer + rent payer; typically `client.wallet.publicKey`. */\n payer: PublicKey;\n /** The user placing the bet (signer; usually equals `payer`). */\n user: PublicKey;\n /** Target market id. */\n marketId: bigint | number;\n /** Outcome index: 0 / 1 for YesNo, 0..numOutcomes-1 for Multi. */\n side: number;\n /** Gross bet amount in micro-USDC (the SDK computes net after fees). */\n amountUsdc: bigint | number;\n /**\n * Optional caller-supplied x25519 keypair — useful if the frontend\n * generated it elsewhere (and stored it) before triggering the action.\n * If omitted, a fresh keypair is created and returned in the result.\n */\n userKeypair?: UserCryptoKeypair;\n /** Override the computation offset (otherwise random). */\n computationOffset?: bigint;\n /** Override timeout for the Arcium finalization wait. */\n timeoutMs?: number;\n /**\n * Optional fine-grained progress callback. Fires with stage events the\n * action passes through (validating → fetching-state → encrypting →\n * submitting → awaiting-callback → refetching → done). Use this to\n * drive multi-step UI (\"Encrypting…\", \"Awaiting MPC nodes…\", etc.).\n */\n onProgress?: ProgressCallback;\n}\n\nexport interface PlaceBetResult {\n signature: string;\n computation: ComputationResult;\n computationOffset: bigint;\n /**\n * The user's x25519 keypair. **The frontend MUST persist `privateKey`**\n * (typically encrypted under the wallet's key) — it's the only way to\n * later decrypt the position when claiming or displaying.\n */\n userKeypair: UserCryptoKeypair;\n /** Position PDA refetched after the callback updates entryOdds. */\n position: EncryptedPositionAccount | null;\n}\n\n/**\n * End-to-end private bet:\n *\n * 1. Validate market is `Active` and gross amount ≥ `min_bet`.\n * 2. Compute fees → net amount; assert it stays positive.\n * 3. Fetch the MXE public key (cached) and the MXE LUT (cached).\n * 4. Generate (or accept) a user x25519 keypair.\n * 5. Encrypt `(netAmount, side)` with `RescueCipher` under the derived\n * shared secret using a fresh 16-byte nonce.\n * 6. Build the `place_private_bet_{yesno,multi}` ix with a random\n * `computationOffset` (or caller-supplied one).\n * 7. Send tx, await callback finalization.\n * 8. Refetch the position so the caller sees `entryOdds` + `netAmount`.\n *\n * The on-chain circuit will reject the queue if `encrypted_amount` does\n * not equal `bet_amount - protocol_fee - lp_fee` (audit finding H-1\n * defense). We compute the same value client-side and hard-fail if the\n * fee math gives a different result.\n */\nexport async function placeBetAction(\n client: CypherClient,\n inputs: PlaceBetInputs,\n): Promise<PlaceBetResult> {\n emitProgress(inputs.onProgress, \"validating\", {\n message: \"Validating bet inputs\",\n });\n\n const market = await client.markets.fetch(inputs.marketId);\n if (!market) {\n throw new Error(`placeBet: market ${inputs.marketId} not found`);\n }\n if (market.state !== MarketState.Active) {\n throw new Error(`placeBet: market state is ${market.state}, expected Active`);\n }\n\n const grossAmount = BigInt(inputs.amountUsdc);\n if (grossAmount < market.minBet) {\n throw new Error(\n `placeBet: amount ${grossAmount} < market.minBet ${market.minBet}`,\n );\n }\n // Defensive: also enforce the protocol-wide floor in case a deployment\n // ever sets `market.min_bet` to 0.\n if (grossAmount < MIN_BET_USDC) {\n throw new Error(`placeBet: amount ${grossAmount} < protocol MIN_BET_USDC`);\n }\n\n emitProgress(inputs.onProgress, \"fetching-state\", {\n message: \"Fetching protocol state\",\n });\n const gs = await client.globalState.fetch();\n const { netAmount } = computeFees(grossAmount, {\n protocolFeeRateBps: gs.protocolFeeRate,\n lpFeeRateBps: gs.lpFeeRate,\n });\n if (netAmount <= 0n) {\n throw new Error(\"placeBet: net amount after fees would be zero or negative\");\n }\n\n // Outcome bounds depend on the market type.\n validateSide(inputs.side, market.marketType, market.numOutcomes);\n\n const mxePubkey = await fetchMxePublicKey(client);\n if (!mxePubkey) {\n throw new Error(\n \"placeBet: MXE public key not yet published; is the Arcium cluster ready?\",\n );\n }\n const { lut } = await fetchMxeLookupTable(client);\n\n emitProgress(inputs.onProgress, \"encrypting\", {\n message: \"Encrypting your bet\",\n });\n const userKeypair = inputs.userKeypair ?? createUserKeypair();\n const cipher = createCipher(userKeypair.privateKey, mxePubkey);\n const encrypted = encryptBetInput({ amount: netAmount, side: inputs.side }, cipher);\n const computationOffset =\n inputs.computationOffset ?? randomComputationOffset();\n\n const isMulti = market.marketType === MarketType.MultiOutcome;\n const builder = isMulti ? placePrivateBetMultiIx : placePrivateBetYesnoIx;\n const ix = await builder(client, {\n payer: inputs.payer,\n user: inputs.user,\n marketId: inputs.marketId,\n acceptedMint: gs.acceptedMint,\n protocolTreasury: gs.protocolTreasury,\n computationOffset,\n betAmountUsdc: grossAmount,\n encryptedAmount: encrypted.encryptedAmount,\n encryptedSide: encrypted.encryptedSide,\n userX25519Pubkey: userKeypair.publicKey,\n nonce: encrypted.nonce,\n addressLookupTable: lut,\n });\n\n emitProgress(inputs.onProgress, \"submitting\", {\n message: \"Submitting transaction\",\n computationOffset,\n });\n\n const signature = await sendIx(client, ix);\n emitProgress(inputs.onProgress, \"awaiting-callback\", {\n message: \"Waiting for Arcium MPC nodes to finalize\",\n signature,\n computationOffset,\n });\n\n const computation = await awaitComputation(client, computationOffset, {\n timeoutMs: inputs.timeoutMs,\n });\n\n emitProgress(inputs.onProgress, \"refetching\", {\n message: \"Refreshing position\",\n signature,\n computationOffset,\n });\n const [marketPdaKey] = marketPda(inputs.marketId, client.programId);\n const position = await client.positions.fetch(marketPdaKey, inputs.user);\n\n emitProgress(inputs.onProgress, \"done\", {\n message: \"Bet placed\",\n signature,\n computationOffset,\n });\n\n return {\n signature,\n computation,\n computationOffset,\n userKeypair,\n position,\n };\n}\n\nfunction validateSide(side: number, marketType: number, numOutcomes: number): void {\n if (!Number.isInteger(side) || side < 0) {\n throw new Error(`placeBet: side ${side} must be a non-negative integer`);\n }\n const ceiling = marketType === MarketType.YesNo ? 2 : numOutcomes;\n if (side >= ceiling) {\n throw new Error(\n `placeBet: side ${side} out of range — valid range for this market is [0, ${ceiling - 1}]`,\n );\n }\n}\n\n// PlaceBet uses `BetInput` indirectly; re-export the surface for callers\n// who want to construct the type without descending into `arcium/encoding`.\nexport type { BetInput };\n","import type { PublicKey } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport {\n resolveMarketYesnoIx,\n resolveMarketMultiIx,\n} from \"../instructions/index.ts\";\nimport { fetchMxeLookupTable } from \"../arcium/accounts.ts\";\nimport { awaitComputation, randomComputationOffset } from \"../arcium/callbacks.ts\";\nimport { MarketState, MarketType } from \"../config.ts\";\nimport { marketPda } from \"../pda.ts\";\nimport type { MarketAccount } from \"../accounts/market.ts\";\nimport type { ComputationResult } from \"../arcium/callbacks.ts\";\nimport { sendIx, emitProgress, type ProgressCallback } from \"./common.ts\";\n\nexport interface ResolveMarketInputs {\n payer: PublicKey;\n resolver: PublicKey;\n marketId: bigint | number;\n /** Outcome index: 0 / 1 for YesNo, 0..numOutcomes-1 for Multi. */\n outcomeValue: number;\n computationOffset?: bigint;\n timeoutMs?: number;\n /** Optional progress callback (validating → submitting → awaiting-callback → done). */\n onProgress?: ProgressCallback;\n}\n\nexport interface ResolveMarketResult {\n signature: string;\n computation: ComputationResult;\n computationOffset: bigint;\n /** Market account refetched after the reveal callback ran. */\n market: MarketAccount | null;\n}\n\n/**\n * Resolve a market end-to-end: validate state + outcome, send the queue\n * ix, await the reveal circuit's callback, refetch the market.\n *\n * The resolver address is enforced on-chain — passing the wrong key\n * surfaces as a `UnauthorizedResolver` CypherError.\n */\nexport async function resolveMarketAction(\n client: CypherClient,\n inputs: ResolveMarketInputs,\n): Promise<ResolveMarketResult> {\n emitProgress(inputs.onProgress, \"validating\", {\n message: \"Validating resolve inputs\",\n });\n const market = await client.markets.fetch(inputs.marketId);\n if (!market) throw new Error(`resolveMarket: market ${inputs.marketId} not found`);\n\n if (market.state === MarketState.Resolved) {\n throw new Error(\"resolveMarket: market already resolved\");\n }\n if (market.state === MarketState.Closed) {\n throw new Error(\"resolveMarket: market was cancelled\");\n }\n validateOutcome(inputs.outcomeValue, market.marketType, market.numOutcomes);\n\n emitProgress(inputs.onProgress, \"fetching-state\");\n const { lut } = await fetchMxeLookupTable(client);\n const computationOffset =\n inputs.computationOffset ?? randomComputationOffset();\n const isMulti = market.marketType === MarketType.MultiOutcome;\n const builder = isMulti ? resolveMarketMultiIx : resolveMarketYesnoIx;\n const ix = await builder(client, {\n payer: inputs.payer,\n resolver: inputs.resolver,\n marketId: inputs.marketId,\n computationOffset,\n outcomeValue: inputs.outcomeValue,\n addressLookupTable: lut,\n });\n\n emitProgress(inputs.onProgress, \"submitting\", {\n message: \"Submitting resolve transaction\",\n computationOffset,\n });\n const signature = await sendIx(client, ix);\n\n emitProgress(inputs.onProgress, \"awaiting-callback\", {\n message: \"Waiting for MPC nodes to reveal the outcome\",\n signature,\n computationOffset,\n });\n const computation = await awaitComputation(client, computationOffset, {\n timeoutMs: inputs.timeoutMs,\n });\n\n emitProgress(inputs.onProgress, \"refetching\");\n const [pda] = marketPda(inputs.marketId, client.programId);\n const out = {\n signature,\n computation,\n computationOffset,\n market: await client.markets.fetchByPda(pda),\n };\n emitProgress(inputs.onProgress, \"done\", { signature, computationOffset });\n return out;\n}\n\nfunction validateOutcome(\n outcome: number,\n marketType: number,\n numOutcomes: number,\n): void {\n if (!Number.isInteger(outcome) || outcome < 0) {\n throw new Error(`resolveMarket: outcome ${outcome} must be a non-negative integer`);\n }\n const ceiling = marketType === MarketType.YesNo ? 2 : numOutcomes;\n if (outcome >= ceiling) {\n throw new Error(\n `resolveMarket: outcome ${outcome} out of range — valid for this market is [0, ${ceiling - 1}]`,\n );\n }\n}\n","import type { PublicKey } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport {\n claimPayoutYesnoIx,\n claimPayoutMultiIx,\n claimRefundYesnoIx,\n claimRefundMultiIx,\n} from \"../instructions/index.ts\";\nimport { fetchMxeLookupTable } from \"../arcium/accounts.ts\";\nimport { awaitComputation, randomComputationOffset } from \"../arcium/callbacks.ts\";\nimport { MarketState, MarketType } from \"../config.ts\";\nimport { marketPda } from \"../pda.ts\";\nimport type { EncryptedPositionAccount } from \"../accounts/position.ts\";\nimport type { MarketAccount } from \"../accounts/market.ts\";\nimport type { ComputationResult } from \"../arcium/callbacks.ts\";\nimport { sendIx, emitProgress, type ProgressCallback } from \"./common.ts\";\nimport { marketPhase } from \"../deadlines.ts\";\n\nexport interface ClaimInputs {\n payer: PublicKey;\n user: PublicKey;\n marketId: bigint | number;\n computationOffset?: bigint;\n timeoutMs?: number;\n /** Optional progress callback (validating → submitting → awaiting-callback → done). */\n onProgress?: ProgressCallback;\n}\n\nexport interface ClaimResult {\n signature: string;\n computation: ComputationResult;\n computationOffset: bigint;\n position: EncryptedPositionAccount | null;\n market: MarketAccount | null;\n}\n\nasync function commonClaim(\n client: CypherClient,\n inputs: ClaimInputs,\n flavor: \"payout\" | \"refund\",\n): Promise<ClaimResult> {\n emitProgress(inputs.onProgress, \"validating\", {\n message: `Validating claim${cap(flavor)} inputs`,\n });\n const market = await client.markets.fetch(inputs.marketId);\n if (!market) throw new Error(`claim${cap(flavor)}: market not found`);\n\n const [pda] = marketPda(inputs.marketId, client.programId);\n const position = await client.positions.fetch(pda, inputs.user);\n if (!position) {\n throw new Error(\n `claim${cap(flavor)}: no position for user on market ${pda.toBase58()}`,\n );\n }\n if (position.claimed) {\n throw new Error(`claim${cap(flavor)}: position already claimed`);\n }\n\n // Refuse to drive the user into a known-bad on-chain failure.\n const phase = marketPhase(market);\n if (flavor === \"payout\" && phase !== \"claimable\") {\n if (phase === \"pendingResolution\" || phase === \"awaitingFinalize\") {\n throw new Error(\n `claimPayout: market is in '${phase}' — call finalizeResolution first (or wait for someone to)`,\n );\n }\n if (phase === \"disputed\") {\n throw new Error(\n \"claimPayout: market is disputed — awaiting admin override before payouts open\",\n );\n }\n throw new Error(\n `claimPayout: market phase is '${phase}' — payouts require 'claimable'`,\n );\n }\n if (flavor === \"refund\" && phase !== \"refundable\") {\n throw new Error(\n `claimRefund: market phase is '${phase}' — refunds require 'refundable'`,\n );\n }\n if (flavor === \"payout\" && market.state !== MarketState.Resolved) {\n throw new Error(\"claimPayout: market is not resolved\");\n }\n // v0.2+: refund is also blocked while the market is pending resolution\n // (state=4) — the contract enforces this too, but surface it client-side.\n if (flavor === \"refund\" && market.state === MarketState.PendingResolution) {\n throw new Error(\n \"claimRefund: market is pending resolution — refund not available until challenge window concludes unresolved\",\n );\n }\n\n emitProgress(inputs.onProgress, \"fetching-state\");\n const { acceptedMint } = await client.globalState.fetch();\n const { lut } = await fetchMxeLookupTable(client);\n const computationOffset =\n inputs.computationOffset ?? randomComputationOffset();\n const isMulti = market.marketType === MarketType.MultiOutcome;\n\n const builder =\n flavor === \"payout\"\n ? isMulti ? claimPayoutMultiIx : claimPayoutYesnoIx\n : isMulti ? claimRefundMultiIx : claimRefundYesnoIx;\n\n const ix = await builder(client, {\n payer: inputs.payer,\n user: inputs.user,\n marketId: inputs.marketId,\n acceptedMint,\n computationOffset,\n addressLookupTable: lut,\n });\n\n emitProgress(inputs.onProgress, \"submitting\", {\n message: `Submitting ${flavor} claim`,\n computationOffset,\n });\n const signature = await sendIx(client, ix);\n\n emitProgress(inputs.onProgress, \"awaiting-callback\", {\n message: \"Waiting for MPC nodes to compute and disburse\",\n signature,\n computationOffset,\n });\n const computation = await awaitComputation(client, computationOffset, {\n timeoutMs: inputs.timeoutMs,\n });\n\n emitProgress(inputs.onProgress, \"refetching\");\n const out = {\n signature,\n computation,\n computationOffset,\n position: await client.positions.fetch(pda, inputs.user),\n market: await client.markets.fetchByPda(pda),\n };\n emitProgress(inputs.onProgress, \"done\", { signature, computationOffset });\n return out;\n}\n\n/** Claim payout (winning bettor on a resolved market). */\nexport function claimPayoutAction(\n client: CypherClient,\n inputs: ClaimInputs,\n): Promise<ClaimResult> {\n return commonClaim(client, inputs, \"payout\");\n}\n\n/** Claim refund (any bettor on a market that never resolved). */\nexport function claimRefundAction(\n client: CypherClient,\n inputs: ClaimInputs,\n): Promise<ClaimResult> {\n return commonClaim(client, inputs, \"refund\");\n}\n\nfunction cap(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n","import type { PublicKey } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport {\n flagResolutionIx,\n finalizeResolutionIx,\n adminOverrideResolutionIx,\n} from \"../instructions/resolution.ts\";\nimport { MarketState } from \"../config.ts\";\nimport { marketPda } from \"../pda.ts\";\nimport type { MarketAccount } from \"../accounts/market.ts\";\nimport { sendIx, emitProgress, type ProgressCallback } from \"./common.ts\";\n\n/* ----------------------------------------------------------------------- *\n * Dispute / challenge window actions (v0.2+) *\n * *\n * Single-step on-chain ops (no Arcium, no callback wait). Each emits *\n * validating → submitting → refetching → done stages. *\n * ----------------------------------------------------------------------- */\n\nexport interface FlagResolutionInputs {\n flagger: PublicKey;\n marketId: bigint | number;\n onProgress?: ProgressCallback;\n}\n\nexport interface FinalizeResolutionInputs {\n caller: PublicKey;\n marketId: bigint | number;\n onProgress?: ProgressCallback;\n}\n\nexport interface AdminOverrideResolutionInputs {\n admin: PublicKey;\n marketId: bigint | number;\n outcomeValue: number;\n onProgress?: ProgressCallback;\n}\n\nexport interface ResolutionActionResult {\n signature: string;\n market: MarketAccount | null;\n}\n\n/**\n * Flag a pending resolution as disputed during the challenge window.\n * Permissionless — anyone can flag.\n */\nexport async function flagResolutionAction(\n client: CypherClient,\n inputs: FlagResolutionInputs,\n): Promise<ResolutionActionResult> {\n emitProgress(inputs.onProgress, \"validating\", {\n message: \"Validating flag inputs\",\n });\n const market = await client.markets.fetch(inputs.marketId);\n if (!market) throw new Error(`flagResolution: market ${inputs.marketId} not found`);\n if (market.state !== MarketState.PendingResolution) {\n throw new Error(\n `flagResolution: market state is ${market.state}, expected PendingResolution (4)`,\n );\n }\n if (market.disputed) {\n throw new Error(\"flagResolution: market is already disputed\");\n }\n\n emitProgress(inputs.onProgress, \"submitting\", { message: \"Submitting flag\" });\n const ix = await flagResolutionIx(client, {\n flagger: inputs.flagger,\n marketId: inputs.marketId,\n });\n const signature = await sendIx(client, ix);\n\n emitProgress(inputs.onProgress, \"refetching\");\n const [pda] = marketPda(inputs.marketId, client.programId);\n const out = { signature, market: await client.markets.fetchByPda(pda) };\n emitProgress(inputs.onProgress, \"done\", { signature });\n return out;\n}\n\n/**\n * Finalize a pending resolution after the challenge window has elapsed\n * undisputed. Permissionless — anyone can call.\n */\nexport async function finalizeResolutionAction(\n client: CypherClient,\n inputs: FinalizeResolutionInputs,\n): Promise<ResolutionActionResult> {\n emitProgress(inputs.onProgress, \"validating\", {\n message: \"Validating finalize inputs\",\n });\n const market = await client.markets.fetch(inputs.marketId);\n if (!market) throw new Error(`finalizeResolution: market ${inputs.marketId} not found`);\n if (market.state !== MarketState.PendingResolution) {\n throw new Error(\n `finalizeResolution: market state is ${market.state}, expected PendingResolution (4)`,\n );\n }\n if (market.disputed) {\n throw new Error(\"finalizeResolution: market is disputed — admin override required\");\n }\n\n emitProgress(inputs.onProgress, \"submitting\", { message: \"Submitting finalize\" });\n const ix = await finalizeResolutionIx(client, {\n caller: inputs.caller,\n marketId: inputs.marketId,\n });\n const signature = await sendIx(client, ix);\n\n emitProgress(inputs.onProgress, \"refetching\");\n const [pda] = marketPda(inputs.marketId, client.programId);\n const out = { signature, market: await client.markets.fetchByPda(pda) };\n emitProgress(inputs.onProgress, \"done\", { signature });\n return out;\n}\n\n/**\n * Admin override of a disputed resolution. Recomputes `payout_ratio` from\n * the already-revealed plaintext pools using the same formula as the\n * reveal circuits.\n */\nexport async function adminOverrideResolutionAction(\n client: CypherClient,\n inputs: AdminOverrideResolutionInputs,\n): Promise<ResolutionActionResult> {\n emitProgress(inputs.onProgress, \"validating\", {\n message: \"Validating admin override inputs\",\n });\n const market = await client.markets.fetch(inputs.marketId);\n if (!market) throw new Error(`adminOverrideResolution: market ${inputs.marketId} not found`);\n if (market.state !== MarketState.PendingResolution) {\n throw new Error(\n `adminOverrideResolution: market state is ${market.state}, expected PendingResolution (4)`,\n );\n }\n if (!market.disputed) {\n throw new Error(\"adminOverrideResolution: market is not disputed\");\n }\n\n emitProgress(inputs.onProgress, \"submitting\", { message: \"Submitting override\" });\n const ix = await adminOverrideResolutionIx(client, {\n admin: inputs.admin,\n marketId: inputs.marketId,\n outcomeValue: inputs.outcomeValue,\n });\n const signature = await sendIx(client, ix);\n\n emitProgress(inputs.onProgress, \"refetching\");\n const [pda] = marketPda(inputs.marketId, client.programId);\n const out = { signature, market: await client.markets.fetchByPda(pda) };\n emitProgress(inputs.onProgress, \"done\", { signature });\n return out;\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { BorshCoder, EventParser as AnchorEventParser } from \"@anchor-lang/core\";\nimport type { Coder } from \"@anchor-lang/core\";\nimport { IDL } from \"../idl/index.ts\";\nimport { PROGRAM_ID } from \"../config.ts\";\n\n/* -----------------------------------------------------------------------\n * Typed event interfaces — one per IDL `events[]` entry.\n *\n * Field names follow the IDL's snake_case convention (the JSON the\n * contract actually emits). Anchor's EventParser returns them as-is\n * so we type them verbatim rather than camelCasing.\n * ----------------------------------------------------------------------- */\n\nexport interface MarketCreatedEvent {\n /** Monotonically increasing counter assigned at create time. */\n marketId: bigint;\n /** 0 = YesNo, 1 = MultiOutcome. */\n marketType: number;\n /** 0–6 category enum. */\n category: number;\n /** Public key of the market creator. */\n creator: PublicKey;\n /** Market question (UTF-8 string, ≤200 bytes). */\n question: string;\n /** Unix timestamp after which betting closes. */\n closeTime: bigint;\n}\n\nexport interface BetPlacedEvent {\n /** Market PDA public key. */\n market: PublicKey;\n /** Bettor's public key. */\n user: PublicKey;\n /** Ciphertext — the encrypted bet amount (32 bytes). */\n encryptedAmount: Uint8Array;\n /** Ciphertext — the encrypted side / outcome index (32 bytes). */\n encryptedSide: Uint8Array;\n /** The u128 nonce used during encryption. */\n nonce: bigint;\n /** Entry odds computed by the MPC circuit callback. */\n entryOdds: bigint;\n}\n\nexport interface MarketResolvedEvent {\n market: PublicKey;\n /** Winning outcome index. */\n outcome: number;\n revealedPool0: bigint;\n revealedPool1: bigint;\n revealedPool2: bigint;\n revealedPool3: bigint;\n payoutRatio: bigint;\n}\n\nexport interface MarketCancelledEvent {\n market: PublicKey;\n creator: PublicKey;\n bondReturned: bigint;\n}\n\nexport interface CreatorWithdrawnEvent {\n market: PublicKey;\n creator: PublicKey;\n bond: bigint;\n lpFees: bigint;\n total: bigint;\n}\n\nexport interface PayoutClaimedEvent {\n market: PublicKey;\n user: PublicKey;\n payoutAmount: bigint;\n}\n\nexport interface RefundClaimedEvent {\n market: PublicKey;\n user: PublicKey;\n refundAmount: bigint;\n}\n\n/** v0.2+: a bettor flagged the just-revealed resolution during the challenge window. */\nexport interface ResolutionFlaggedEvent {\n market: PublicKey;\n flaggedBy: PublicKey;\n}\n\n/** v0.2+: the challenge window elapsed undisputed and the market moved to RESOLVED. */\nexport interface MarketFinalizedEvent {\n market: PublicKey;\n outcome: number;\n payoutRatio: bigint;\n}\n\n/** v0.2+: admin override on a disputed resolution. */\nexport interface ResolutionOverriddenEvent {\n market: PublicKey;\n oldOutcome: number;\n newOutcome: number;\n newPayoutRatio: bigint;\n admin: PublicKey;\n}\n\n/** Discriminated union of every Cypher program event. */\nexport type CypherEvent =\n | { name: \"MarketCreatedEvent\"; data: MarketCreatedEvent }\n | { name: \"BetPlacedEvent\"; data: BetPlacedEvent }\n | { name: \"MarketResolvedEvent\"; data: MarketResolvedEvent }\n | { name: \"MarketCancelledEvent\"; data: MarketCancelledEvent }\n | { name: \"CreatorWithdrawnEvent\"; data: CreatorWithdrawnEvent }\n | { name: \"PayoutClaimedEvent\"; data: PayoutClaimedEvent }\n | { name: \"RefundClaimedEvent\"; data: RefundClaimedEvent }\n | { name: \"ResolutionFlaggedEvent\"; data: ResolutionFlaggedEvent }\n | { name: \"MarketFinalizedEvent\"; data: MarketFinalizedEvent }\n | { name: \"ResolutionOverriddenEvent\"; data: ResolutionOverriddenEvent };\n\n/** The set of all event names the Cypher program emits. */\nexport type CypherEventName = CypherEvent[\"name\"];\n\n/**\n * All event names as a runtime set — useful for runtime filtering and\n * completeness assertions in tests.\n */\nexport const ALL_EVENT_NAMES: ReadonlySet<CypherEventName> = new Set<CypherEventName>([\n \"MarketCreatedEvent\",\n \"BetPlacedEvent\",\n \"MarketResolvedEvent\",\n \"MarketCancelledEvent\",\n \"CreatorWithdrawnEvent\",\n \"PayoutClaimedEvent\",\n \"RefundClaimedEvent\",\n \"ResolutionFlaggedEvent\",\n \"MarketFinalizedEvent\",\n \"ResolutionOverriddenEvent\",\n]);\n\n/* -----------------------------------------------------------------------\n * Parser\n *\n * Anchor's EventParser walks raw program logs and yields decoded events.\n * We wrap it with proper typing so consumers don't have to cast.\n * ----------------------------------------------------------------------- */\n\n/** Lazily created, shared Borsh coder + event parser for the Cypher IDL. */\nlet _coder: BorshCoder | null = null;\nlet _parser: AnchorEventParser | null = null;\n\nfunction getParser(): AnchorEventParser {\n if (!_parser) {\n _coder = new BorshCoder(IDL as any);\n _parser = new AnchorEventParser(PROGRAM_ID, _coder as unknown as Coder);\n }\n return _parser;\n}\n\n/**\n * Decode raw Solana program logs into typed Cypher events.\n *\n * @param logs Array of strings from a transaction's `meta.logMessages`.\n * @returns Typed events found in the logs (may be empty).\n *\n * @example\n * ```ts\n * const txInfo = await connection.getTransaction(sig, { commitment: \"confirmed\" });\n * const events = parseLogs(txInfo.meta?.logMessages ?? []);\n * for (const evt of events) {\n * if (evt.name === \"BetPlacedEvent\") console.log(evt.data.entryOdds);\n * }\n * ```\n */\n/**\n * Anchor's BorshCoder decodes event fields with their IDL names — and\n * Cypher's IDL keeps snake_case. We expose camelCase to consumers (it's\n * what the TS event interfaces declare and what every README example\n * uses), so each decoded `data` object goes through a one-level\n * snake → camel transform before it's emitted.\n */\nfunction camelizeKey(k: string): string {\n return k.replace(/_([a-z0-9])/g, (_m, c: string) => c.toUpperCase());\n}\n\n/**\n * Anchor's BorshCoder returns BN for u64/u128/i64 and `number[]` for\n * `[u8; N]` arrays. The typed event interfaces promise `bigint` and\n * `Uint8Array` respectively, so we normalize once per decoded value.\n */\nfunction normalizeValue(v: unknown): unknown {\n if (v == null) return v;\n // Detect BN duck-style — instanceof check would require importing BN\n // here and the cross-realm check is fragile.\n if (typeof v === \"object\" && \"toString\" in v && \"toArrayLike\" in (v as object)) {\n return BigInt((v as { toString(): string }).toString());\n }\n if (Array.isArray(v) && v.length > 0 && typeof v[0] === \"number\") {\n return Uint8Array.from(v as number[]);\n }\n return v;\n}\n\nfunction camelizeObject<T extends object>(obj: T): T {\n if (obj == null || typeof obj !== \"object\") return obj;\n if (Array.isArray(obj)) return obj as T;\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) {\n out[camelizeKey(k)] = normalizeValue(v);\n }\n return out as T;\n}\n\nexport function parseLogs(logs: string[]): CypherEvent[] {\n const parser = getParser();\n const results: CypherEvent[] = [];\n for (const event of parser.parseLogs(logs)) {\n // Anchor's EventParser yields { name: string, data: { snake_case... } }.\n // Camelize so the runtime shape matches the typed CypherEvent union\n // and every README example.\n const camelized = {\n name: event.name,\n data: camelizeObject(event.data as object),\n };\n results.push(camelized as unknown as CypherEvent);\n }\n return results;\n}\n\n/**\n * Filter parsed logs to a specific event name with full discriminated-union\n * narrowing. The return type is the `data` payload of the matching event,\n * not `any` — so `parseLogsFor(logs, \"BetPlacedEvent\")` returns\n * `BetPlacedEvent[]` and not a loosely-typed array.\n */\n/**\n * Internal helper: untyped filter+map. Kept separate from `parseLogsFor`\n * so the generic constraint stays at the API boundary and doesn't pollute\n * the implementation with distributive-Extract gymnastics.\n */\nfunction parseLogsForRaw(logs: string[], name: string): unknown[] {\n const out: unknown[] = [];\n for (const e of parseLogs(logs)) {\n if (e.name === name) out.push(e.data);\n }\n return out;\n}\n\ntype DataFor<N extends CypherEventName> = N extends CypherEventName\n ? Extract<CypherEvent, { name: N }>[\"data\"]\n : never;\n\nexport function parseLogsFor<N extends CypherEventName>(\n logs: string[],\n name: N,\n): Array<DataFor<N>> {\n // TS distributes `Extract<>` over the bound `N` and trips its own\n // structural check. The internal helper returns `unknown[]` so the cast\n // below is the only point where we widen — the external signature still\n // delivers `Array<BetPlacedEvent>` etc. to the caller.\n return parseLogsForRaw(logs, name) as Array<DataFor<N>>;\n}\n","import { Connection, type PublicKey } from \"@solana/web3.js\";\nimport { PROGRAM_ID } from \"../config.ts\";\nimport {\n parseLogs,\n type CypherEvent,\n type CypherEventName,\n} from \"./parser.ts\";\n\n/* -----------------------------------------------------------------------\n * Event subscription helpers\n *\n * Two modes:\n * 1. WebSocket-based `onLogs` (real-time, requires WS support).\n * 2. Poll-based `pollEvents` (works everywhere, trades latency for\n * compatibility — suited for environments without WS, like some\n * mobile wrappers or serverless functions).\n * ----------------------------------------------------------------------- */\n\n/** Callback signature for all per-event subscription helpers. */\nexport type EventCallback<T> = (data: T, raw: CypherEvent) => void;\n\n/** Options shared by all subscription helpers. */\nexport interface SubscribeOptions {\n /** Override program ID (for redeployed programs). */\n programId?: PublicKey;\n /** Commitment level for the `onLogs` subscription. */\n commitment?: \"processed\" | \"confirmed\" | \"finalized\";\n}\n\n/** Return type — call `unsubscribe()` to tear down the listener. */\nexport interface EventSubscription {\n /** Remove the WebSocket log listener. */\n unsubscribe: () => void;\n /** The underlying subscription ID from `Connection.onLogs`. */\n subscriptionId: number;\n}\n\n/**\n * Subscribe to *all* Cypher program events via `Connection.onLogs`.\n *\n * The callback fires once per decoded event. Raw events that fail to\n * decode (e.g., Anchor system logs) are silently skipped.\n *\n * @example\n * ```ts\n * const sub = subscribeAll(connection, (event) => {\n * console.log(event.name, event.data);\n * });\n * // later:\n * sub.unsubscribe();\n * ```\n */\nexport function subscribeAll(\n connection: Connection,\n callback: (event: CypherEvent) => void,\n opts: SubscribeOptions = {},\n): EventSubscription {\n const pid = opts.programId ?? PROGRAM_ID;\n const subscriptionId = connection.onLogs(\n pid,\n (logInfo) => {\n if (logInfo.err) return; // tx failed — skip\n const events = parseLogs(logInfo.logs);\n for (const evt of events) {\n callback(evt);\n }\n },\n opts.commitment ?? \"confirmed\",\n );\n return {\n subscriptionId,\n unsubscribe: () => {\n connection.removeOnLogsListener(subscriptionId);\n },\n };\n}\n\n/** Distributive helper — picks the `data` payload type for a given event name. */\ntype DataFor<N extends CypherEventName> = N extends CypherEventName\n ? Extract<CypherEvent, { name: N }>[\"data\"]\n : never;\n\n/**\n * Subscribe to a specific named event. The callback only fires for\n * events whose name matches — other events from the same tx are\n * silently dropped.\n *\n * Generic over `N extends CypherEventName` so the `data` parameter is\n * narrowed to the matching event's payload type at the callsite.\n */\nexport function subscribeEvent<N extends CypherEventName>(\n connection: Connection,\n name: N,\n callback: EventCallback<DataFor<N>>,\n opts: SubscribeOptions = {},\n): EventSubscription {\n return subscribeAll(\n connection,\n (event) => {\n if (event.name === name) {\n callback(event.data as DataFor<N>, event);\n }\n },\n opts,\n );\n}\n\n/* -----------------------------------------------------------------------\n * Convenience per-event subscription helpers\n * ----------------------------------------------------------------------- */\n\nimport type {\n MarketCreatedEvent,\n BetPlacedEvent,\n MarketResolvedEvent,\n MarketCancelledEvent,\n CreatorWithdrawnEvent,\n PayoutClaimedEvent,\n RefundClaimedEvent,\n ResolutionFlaggedEvent,\n MarketFinalizedEvent,\n ResolutionOverriddenEvent,\n} from \"./parser.ts\";\n\n/** Subscribe to `MarketCreatedEvent` emissions. */\nexport function onMarketCreated(\n connection: Connection,\n callback: EventCallback<MarketCreatedEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"MarketCreatedEvent\", callback, opts);\n}\n\n/** Subscribe to `BetPlacedEvent` emissions. */\nexport function onBetPlaced(\n connection: Connection,\n callback: EventCallback<BetPlacedEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"BetPlacedEvent\", callback, opts);\n}\n\n/** Subscribe to `MarketResolvedEvent` emissions. */\nexport function onMarketResolved(\n connection: Connection,\n callback: EventCallback<MarketResolvedEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"MarketResolvedEvent\", callback, opts);\n}\n\n/** Subscribe to `MarketCancelledEvent` emissions. */\nexport function onMarketCancelled(\n connection: Connection,\n callback: EventCallback<MarketCancelledEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"MarketCancelledEvent\", callback, opts);\n}\n\n/** Subscribe to `CreatorWithdrawnEvent` emissions. */\nexport function onCreatorWithdrawn(\n connection: Connection,\n callback: EventCallback<CreatorWithdrawnEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"CreatorWithdrawnEvent\", callback, opts);\n}\n\n/** Subscribe to `PayoutClaimedEvent` emissions. */\nexport function onPayoutClaimed(\n connection: Connection,\n callback: EventCallback<PayoutClaimedEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"PayoutClaimedEvent\", callback, opts);\n}\n\n/** Subscribe to `RefundClaimedEvent` emissions. */\nexport function onRefundClaimed(\n connection: Connection,\n callback: EventCallback<RefundClaimedEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"RefundClaimedEvent\", callback, opts);\n}\n\n/** v0.2+: subscribe to `ResolutionFlaggedEvent`. */\nexport function onResolutionFlagged(\n connection: Connection,\n callback: EventCallback<ResolutionFlaggedEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"ResolutionFlaggedEvent\", callback, opts);\n}\n\n/** v0.2+: subscribe to `MarketFinalizedEvent`. */\nexport function onMarketFinalized(\n connection: Connection,\n callback: EventCallback<MarketFinalizedEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"MarketFinalizedEvent\", callback, opts);\n}\n\n/** v0.2+: subscribe to `ResolutionOverriddenEvent`. */\nexport function onResolutionOverridden(\n connection: Connection,\n callback: EventCallback<ResolutionOverriddenEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"ResolutionOverriddenEvent\", callback, opts);\n}\n\n/* -----------------------------------------------------------------------\n * Poll-based alternative (no WebSocket required)\n * ----------------------------------------------------------------------- */\n\nexport interface PollEventsOptions {\n /** Only return events from signatures after this one (exclusive). */\n afterSignature?: string;\n /** Maximum number of signatures to scan. Defaults to 50. */\n limit?: number;\n /** Override program ID. */\n programId?: PublicKey;\n /** Commitment for `getSignaturesForAddress`. */\n commitment?: \"confirmed\" | \"finalized\";\n}\n\nexport interface PolledEvent {\n /** Transaction signature this event came from. */\n signature: string;\n /** Slot the transaction landed in. */\n slot: number;\n /** Decoded Cypher event. */\n event: CypherEvent;\n}\n\n/**\n * Fetch recent program logs and decode events from them. Use this for\n * environments that lack WebSocket support or for periodic batch jobs.\n *\n * Returns newest-first unless you reverse the result.\n */\nexport async function pollEvents(\n connection: Connection,\n opts: PollEventsOptions = {},\n): Promise<PolledEvent[]> {\n const pid = opts.programId ?? PROGRAM_ID;\n const sigs = await connection.getSignaturesForAddress(pid, {\n limit: opts.limit ?? 50,\n until: opts.afterSignature,\n }, opts.commitment ?? \"confirmed\");\n\n const results: PolledEvent[] = [];\n for (const sigInfo of sigs) {\n if (sigInfo.err) continue;\n const tx = await connection.getTransaction(sigInfo.signature, {\n commitment: opts.commitment ?? \"confirmed\",\n maxSupportedTransactionVersion: 0,\n });\n if (!tx?.meta?.logMessages) continue;\n const events = parseLogs(tx.meta.logMessages);\n for (const event of events) {\n results.push({\n signature: sigInfo.signature,\n slot: sigInfo.slot,\n event,\n });\n }\n }\n return results;\n}\n","import { AnchorProvider, Program } from \"@anchor-lang/core\";\nimport {\n Connection,\n PublicKey,\n type Commitment,\n type ConfirmOptions,\n} from \"@solana/web3.js\";\nimport { CLUSTERS, PROGRAM_ID, type ClusterConfig, type ClusterName } from \"./config.ts\";\nimport { IDL, type Cypher } from \"./idl/index.ts\";\nimport type { Wallet } from \"./wallet.ts\";\nimport {\n fetchGlobalState,\n fetchMarket,\n fetchAllMarkets,\n fetchMarketsByCreator,\n fetchMarketsByState,\n fetchPosition,\n fetchUserPositions,\n fetchPositionsForMarket,\n fetchLpPosition,\n fetchLpPositionsByProvider,\n type GlobalStateAccount,\n type MarketAccount,\n type EncryptedPositionAccount,\n type LpPositionAccount,\n} from \"./accounts/index.ts\";\nimport {\n initializeIx,\n updateAcceptedMintIx,\n adminClaimRemainingIx,\n initCompDefIx,\n buildAllInitCompDefIx,\n createMarketIx,\n createMarketMultiIx,\n cancelMarketIx,\n withdrawCreatorFundsIx,\n placePrivateBetYesnoIx,\n placePrivateBetMultiIx,\n resolveMarketYesnoIx,\n resolveMarketMultiIx,\n claimPayoutYesnoIx,\n claimPayoutMultiIx,\n claimRefundYesnoIx,\n claimRefundMultiIx,\n flagResolutionIx,\n finalizeResolutionIx,\n adminOverrideResolutionIx,\n type InitializeParams,\n type UpdateAcceptedMintParams,\n type AdminClaimRemainingParams,\n type InitCompDefParams,\n type InitCompDefMethodName,\n type CreateMarketParams,\n type CreateMarketMultiParams,\n type CancelMarketParams,\n type WithdrawCreatorFundsParams,\n type PlacePrivateBetParams,\n type ResolveMarketParams,\n type ClaimParams,\n type FlagResolutionParams,\n type FinalizeResolutionParams,\n type AdminOverrideResolutionParams,\n} from \"./instructions/index.ts\";\nimport {\n createMarketAction,\n createMarketMultiAction,\n cancelMarketAction,\n withdrawCreatorFundsAction,\n placeBetAction,\n resolveMarketAction,\n claimPayoutAction,\n claimRefundAction,\n flagResolutionAction,\n finalizeResolutionAction,\n adminOverrideResolutionAction,\n type CreateMarketResult,\n type PlaceBetInputs,\n type PlaceBetResult,\n type ResolveMarketInputs,\n type ResolveMarketResult,\n type ClaimInputs,\n type ClaimResult,\n type FlagResolutionInputs,\n type FinalizeResolutionInputs,\n type AdminOverrideResolutionInputs,\n type ResolutionActionResult,\n} from \"./actions/index.ts\";\nimport {\n subscribeAll,\n subscribeEvent,\n onMarketCreated,\n onBetPlaced,\n onMarketResolved,\n onMarketCancelled,\n onCreatorWithdrawn,\n onPayoutClaimed,\n onRefundClaimed,\n pollEvents,\n type EventSubscription,\n type SubscribeOptions,\n type PollEventsOptions,\n type PolledEvent,\n} from \"./events/subscribe.ts\";\nimport {\n parseLogs,\n type CypherEvent,\n type CypherEventName,\n} from \"./events/parser.ts\";\nimport type { TransactionInstruction } from \"@solana/web3.js\";\n\n/** Options accepted by `new CypherClient({...})`. */\nexport interface CypherClientOptions {\n /** A web3.js `Connection` already pointed at the desired cluster RPC. */\n connection: Connection;\n /** Anchor-compatible wallet (browser adapter or `keypairToWallet(kp)`). */\n wallet: Wallet;\n /**\n * Cluster preset to layer Arcium-specific config on. Pass a `ClusterName`\n * to use the built-in preset (devnet/mainnet/localnet), or a full\n * `ClusterConfig` to override.\n *\n * If omitted, the SDK infers from the connection's `rpcEndpoint`. If that\n * inference fails (e.g., custom RPC), it defaults to devnet and you can\n * override `arciumClusterOffset` later via `client.setArciumClusterOffset`.\n */\n cluster?: ClusterName | ClusterConfig;\n /** Commitment used by the underlying provider. Defaults to \"confirmed\". */\n commitment?: Commitment;\n /** Override the program ID (for redeploys with a different keypair). */\n programId?: PublicKey;\n /** Extra confirmation options forwarded to `AnchorProvider`. */\n confirmOptions?: ConfirmOptions;\n}\n\n/**\n * Main SDK entrypoint. Holds an `AnchorProvider`, the typed Cypher\n * `Program`, the Arcium cluster config, and high-level account accessor\n * namespaces.\n *\n * Construction is cheap and synchronous — no RPC calls happen until you\n * call a fetch / send method.\n */\nexport class CypherClient {\n readonly connection: Connection;\n readonly wallet: Wallet;\n readonly provider: AnchorProvider;\n readonly program: Program<Cypher>;\n readonly programId: PublicKey;\n readonly cluster: ClusterConfig;\n\n private _globalStateCache: GlobalStateAccount | null = null;\n\n /**\n * High-level account accessors. Each namespace is a thin facade over\n * the per-account fetch helpers in `./accounts/`.\n */\n readonly globalState: {\n /** Returns the cached `GlobalState`, refetching if not yet seen. */\n fetch: (opts?: { refresh?: boolean }) => Promise<GlobalStateAccount>;\n /** Invalidate the cache; next `fetch()` will hit RPC. */\n invalidate: () => void;\n };\n readonly markets: {\n fetch: (marketId: bigint | number) => Promise<MarketAccount | null>;\n fetchByPda: (pda: PublicKey) => Promise<MarketAccount | null>;\n all: () => Promise<Array<{ publicKey: PublicKey; account: MarketAccount }>>;\n byCreator: (creator: PublicKey) => Promise<Array<{ publicKey: PublicKey; account: MarketAccount }>>;\n byState: (state: number) => Promise<Array<{ publicKey: PublicKey; account: MarketAccount }>>;\n };\n readonly positions: {\n fetch: (market: PublicKey, user: PublicKey) => Promise<EncryptedPositionAccount | null>;\n byUser: (user: PublicKey) => Promise<Array<{ publicKey: PublicKey; account: EncryptedPositionAccount }>>;\n forMarket: (market: PublicKey) => Promise<Array<{ publicKey: PublicKey; account: EncryptedPositionAccount }>>;\n };\n readonly lpPositions: {\n fetch: (market: PublicKey, creator: PublicKey) => Promise<LpPositionAccount | null>;\n byProvider: (provider: PublicKey) => Promise<Array<{ publicKey: PublicKey; account: LpPositionAccount }>>;\n };\n\n /**\n * High-level action helpers. Each orchestrates a full flow:\n * encrypt → build ix → send tx → await Arcium callback → refetch.\n *\n * For raw instruction building (advanced composition), use the\n * lower-level `client.admin`, `client.bets`, etc. namespaces below.\n */\n readonly actions: {\n /** Create a YES/NO market. Fetches GlobalState for marketId + mint automatically. */\n createMarket: (\n inputs: Omit<CreateMarketParams, \"expectedMarketId\" | \"acceptedMint\" | \"challengePeriod\"> & {\n acceptedMint?: PublicKey;\n /** v0.2+: defaults to MIN_CHALLENGE_PERIOD_SECS (24h) if omitted. */\n challengePeriod?: bigint | number;\n },\n ) => Promise<CreateMarketResult>;\n /** Create a multi-outcome market (2–4 outcomes). */\n createMarketMulti: (\n inputs: Omit<CreateMarketMultiParams, \"expectedMarketId\" | \"acceptedMint\" | \"challengePeriod\"> & {\n acceptedMint?: PublicKey;\n challengePeriod?: bigint | number;\n },\n ) => Promise<CreateMarketResult>;\n /** Cancel a market with zero bets. Returns bond to creator. */\n cancelMarket: (\n inputs: Omit<CancelMarketParams, \"acceptedMint\"> & { acceptedMint?: PublicKey },\n ) => Promise<{ signature: string; market: MarketAccount | null }>;\n /** Creator withdraws bond + LP fees from a resolved market. */\n withdrawCreatorFunds: (\n inputs: Omit<WithdrawCreatorFundsParams, \"acceptedMint\"> & { acceptedMint?: PublicKey },\n ) => Promise<{ signature: string }>;\n /** End-to-end private bet: encrypt → send → await callback → refetch. */\n placeBet: (inputs: PlaceBetInputs) => Promise<PlaceBetResult>;\n /** Resolve a market: send queue ix → await reveal callback → refetch. */\n resolveMarket: (inputs: ResolveMarketInputs) => Promise<ResolveMarketResult>;\n /** Claim payout on a resolved market (winning bettor). */\n claimPayout: (inputs: ClaimInputs) => Promise<ClaimResult>;\n /** Claim refund on an unresolved market past its deadline. */\n claimRefund: (inputs: ClaimInputs) => Promise<ClaimResult>;\n /** v0.2+: flag a pending resolution as disputed (permissionless). */\n flagResolution: (inputs: FlagResolutionInputs) => Promise<ResolutionActionResult>;\n /** v0.2+: finalize a pending resolution after the challenge window elapses undisputed (permissionless). */\n finalizeResolution: (inputs: FinalizeResolutionInputs) => Promise<ResolutionActionResult>;\n /** v0.2+: admin override on a disputed market. */\n adminOverrideResolution: (inputs: AdminOverrideResolutionInputs) => Promise<ResolutionActionResult>;\n };\n\n /**\n * Event subscription helpers. Subscribe via WebSocket (`onLogs`) or\n * poll-based fetching for environments without WS.\n */\n readonly events: {\n /** Subscribe to all Cypher program events. */\n subscribeAll: (callback: (event: CypherEvent) => void, opts?: SubscribeOptions) => EventSubscription;\n /**\n * Subscribe to a specific event by name. The `data` callback parameter\n * is narrowed to the matching event's payload type via the generic.\n */\n subscribe: <N extends CypherEventName>(\n name: N,\n callback: (\n data: Extract<CypherEvent, { name: N }>[\"data\"],\n raw: CypherEvent,\n ) => void,\n opts?: SubscribeOptions,\n ) => EventSubscription;\n /** Convenience: subscribe to MarketCreatedEvent. */\n onMarketCreated: (callback: (data: import(\"./events/parser.ts\").MarketCreatedEvent) => void, opts?: SubscribeOptions) => EventSubscription;\n /** Convenience: subscribe to BetPlacedEvent. */\n onBetPlaced: (callback: (data: import(\"./events/parser.ts\").BetPlacedEvent) => void, opts?: SubscribeOptions) => EventSubscription;\n /** Convenience: subscribe to MarketResolvedEvent. */\n onMarketResolved: (callback: (data: import(\"./events/parser.ts\").MarketResolvedEvent) => void, opts?: SubscribeOptions) => EventSubscription;\n /** Convenience: subscribe to MarketCancelledEvent. */\n onMarketCancelled: (callback: (data: import(\"./events/parser.ts\").MarketCancelledEvent) => void, opts?: SubscribeOptions) => EventSubscription;\n /** Convenience: subscribe to CreatorWithdrawnEvent. */\n onCreatorWithdrawn: (callback: (data: import(\"./events/parser.ts\").CreatorWithdrawnEvent) => void, opts?: SubscribeOptions) => EventSubscription;\n /** Convenience: subscribe to PayoutClaimedEvent. */\n onPayoutClaimed: (callback: (data: import(\"./events/parser.ts\").PayoutClaimedEvent) => void, opts?: SubscribeOptions) => EventSubscription;\n /** Convenience: subscribe to RefundClaimedEvent. */\n onRefundClaimed: (callback: (data: import(\"./events/parser.ts\").RefundClaimedEvent) => void, opts?: SubscribeOptions) => EventSubscription;\n /** Poll-based event fetch (no WS needed). */\n pollEvents: (opts?: PollEventsOptions) => Promise<PolledEvent[]>;\n /** Parse raw transaction logs into typed events. */\n parseLogs: (logs: string[]) => CypherEvent[];\n };\n\n /**\n * Instruction-builder facades. Each returns a `TransactionInstruction`\n * ready to drop into a `Transaction` / `TransactionMessage`.\n *\n * For end-to-end flows (encrypt → send → await callback → decode) use\n * the higher-level `client.actions.*` helpers.\n */\n readonly admin: {\n initializeIx: (params: InitializeParams) => Promise<TransactionInstruction>;\n updateAcceptedMintIx: (params: UpdateAcceptedMintParams) => Promise<TransactionInstruction>;\n adminClaimRemainingIx: (params: AdminClaimRemainingParams) => Promise<TransactionInstruction>;\n };\n readonly compDefs: {\n initIx: (methodName: InitCompDefMethodName, params: InitCompDefParams) => Promise<TransactionInstruction>;\n buildAllInitIx: typeof buildAllInitCompDefIx extends (\n c: CypherClient,\n p: InitCompDefParams,\n ) => infer R\n ? (params: InitCompDefParams) => R\n : never;\n };\n readonly marketIx: {\n createIx: (params: CreateMarketParams) => Promise<TransactionInstruction>;\n createMultiIx: (params: CreateMarketMultiParams) => Promise<TransactionInstruction>;\n cancelIx: (params: CancelMarketParams) => Promise<TransactionInstruction>;\n withdrawCreatorFundsIx: (params: WithdrawCreatorFundsParams) => Promise<TransactionInstruction>;\n };\n readonly bets: {\n placeYesnoIx: (params: PlacePrivateBetParams) => Promise<TransactionInstruction>;\n placeMultiIx: (params: PlacePrivateBetParams) => Promise<TransactionInstruction>;\n };\n readonly resolveIx: {\n yesnoIx: (params: ResolveMarketParams) => Promise<TransactionInstruction>;\n multiIx: (params: ResolveMarketParams) => Promise<TransactionInstruction>;\n };\n readonly claimIx: {\n payoutYesnoIx: (params: ClaimParams) => Promise<TransactionInstruction>;\n payoutMultiIx: (params: ClaimParams) => Promise<TransactionInstruction>;\n refundYesnoIx: (params: ClaimParams) => Promise<TransactionInstruction>;\n refundMultiIx: (params: ClaimParams) => Promise<TransactionInstruction>;\n };\n /** v0.2+: dispute / challenge-window instruction builders. */\n readonly resolutionIx: {\n flagIx: (params: FlagResolutionParams) => Promise<TransactionInstruction>;\n finalizeIx: (params: FinalizeResolutionParams) => Promise<TransactionInstruction>;\n adminOverrideIx: (params: AdminOverrideResolutionParams) => Promise<TransactionInstruction>;\n };\n\n constructor(opts: CypherClientOptions) {\n this.connection = opts.connection;\n this.wallet = opts.wallet;\n this.programId = opts.programId ?? PROGRAM_ID;\n this.cluster = resolveCluster(opts.cluster, opts.connection.rpcEndpoint);\n\n const confirmOptions: ConfirmOptions =\n opts.confirmOptions ?? {\n commitment: opts.commitment ?? \"confirmed\",\n preflightCommitment: opts.commitment ?? \"confirmed\",\n skipPreflight: false,\n };\n\n this.provider = new AnchorProvider(this.connection, this.wallet, confirmOptions);\n // Anchor's `Program` reads the program ID from `idl.address`. If the\n // caller supplied an override (e.g., a localnet redeploy under a fresh\n // keypair), shallow-clone the IDL with the new address so both\n // `client.programId` and `client.program.programId` agree.\n const idlForProgram =\n this.programId.equals(PROGRAM_ID)\n ? (IDL as unknown as Cypher)\n : ({ ...IDL, address: this.programId.toBase58() } as unknown as Cypher);\n this.program = new Program<Cypher>(idlForProgram, this.provider);\n\n // ---- namespace facades ------------------------------------------------\n this.globalState = {\n fetch: async (o = {}) => {\n if (o.refresh || !this._globalStateCache) {\n this._globalStateCache = await fetchGlobalState(this);\n }\n return this._globalStateCache;\n },\n invalidate: () => {\n this._globalStateCache = null;\n },\n };\n\n this.markets = {\n fetch: (id) => fetchMarket(this, id),\n fetchByPda: (pda) => fetchMarket(this, pda),\n all: () => fetchAllMarkets(this),\n byCreator: (creator) => fetchMarketsByCreator(this, creator),\n byState: (state) => fetchMarketsByState(this, state),\n };\n\n this.positions = {\n fetch: (market, user) => fetchPosition(this, market, user),\n byUser: (user) => fetchUserPositions(this, user),\n forMarket: (market) => fetchPositionsForMarket(this, market),\n };\n\n this.lpPositions = {\n fetch: (market, creator) => fetchLpPosition(this, market, creator),\n byProvider: (provider) => fetchLpPositionsByProvider(this, provider),\n };\n\n // ---- high-level actions -----------------------------------------------\n this.actions = {\n createMarket: (inputs) => createMarketAction(this, inputs),\n createMarketMulti: (inputs) => createMarketMultiAction(this, inputs),\n cancelMarket: (inputs) => cancelMarketAction(this, inputs),\n withdrawCreatorFunds: (inputs) => withdrawCreatorFundsAction(this, inputs),\n placeBet: (inputs) => placeBetAction(this, inputs),\n resolveMarket: (inputs) => resolveMarketAction(this, inputs),\n claimPayout: (inputs) => claimPayoutAction(this, inputs),\n claimRefund: (inputs) => claimRefundAction(this, inputs),\n flagResolution: (inputs) => flagResolutionAction(this, inputs),\n finalizeResolution: (inputs) => finalizeResolutionAction(this, inputs),\n adminOverrideResolution: (inputs) => adminOverrideResolutionAction(this, inputs),\n };\n\n // ---- events -----------------------------------------------------------\n this.events = {\n subscribeAll: (cb, opts) => subscribeAll(this.connection, cb, opts),\n // Cast the whole wiring through `unknown` to bridge the generic\n // signature — TS can't see through `Extract<>` when `N` is bound\n // outside its own generic scope. The external client.events.subscribe\n // field still narrows the callback payload via its own <N> generic.\n subscribe: ((name: CypherEventName, cb: unknown, opts?: SubscribeOptions) =>\n subscribeEvent(\n this.connection,\n name as never,\n cb as never,\n opts,\n )) as unknown as (typeof this)[\"events\"][\"subscribe\"],\n onMarketCreated: (cb, opts) => onMarketCreated(this.connection, cb, opts),\n onBetPlaced: (cb, opts) => onBetPlaced(this.connection, cb, opts),\n onMarketResolved: (cb, opts) => onMarketResolved(this.connection, cb, opts),\n onMarketCancelled: (cb, opts) => onMarketCancelled(this.connection, cb, opts),\n onCreatorWithdrawn: (cb, opts) => onCreatorWithdrawn(this.connection, cb, opts),\n onPayoutClaimed: (cb, opts) => onPayoutClaimed(this.connection, cb, opts),\n onRefundClaimed: (cb, opts) => onRefundClaimed(this.connection, cb, opts),\n pollEvents: (opts) => pollEvents(this.connection, opts),\n parseLogs: (logs) => parseLogs(logs),\n };\n\n // ---- instruction namespaces ------------------------------------------\n this.admin = {\n initializeIx: (p) => initializeIx(this, p),\n updateAcceptedMintIx: (p) => updateAcceptedMintIx(this, p),\n adminClaimRemainingIx: (p) => adminClaimRemainingIx(this, p),\n };\n this.compDefs = {\n initIx: (name, p) => initCompDefIx(this, name, p),\n buildAllInitIx: ((p: InitCompDefParams) => buildAllInitCompDefIx(this, p)) as never,\n };\n this.marketIx = {\n createIx: (p) => createMarketIx(this, p),\n createMultiIx: (p) => createMarketMultiIx(this, p),\n cancelIx: (p) => cancelMarketIx(this, p),\n withdrawCreatorFundsIx: (p) => withdrawCreatorFundsIx(this, p),\n };\n this.bets = {\n placeYesnoIx: (p) => placePrivateBetYesnoIx(this, p),\n placeMultiIx: (p) => placePrivateBetMultiIx(this, p),\n };\n this.resolveIx = {\n yesnoIx: (p) => resolveMarketYesnoIx(this, p),\n multiIx: (p) => resolveMarketMultiIx(this, p),\n };\n this.claimIx = {\n payoutYesnoIx: (p) => claimPayoutYesnoIx(this, p),\n payoutMultiIx: (p) => claimPayoutMultiIx(this, p),\n refundYesnoIx: (p) => claimRefundYesnoIx(this, p),\n refundMultiIx: (p) => claimRefundMultiIx(this, p),\n };\n this.resolutionIx = {\n flagIx: (p) => flagResolutionIx(this, p),\n finalizeIx: (p) => finalizeResolutionIx(this, p),\n adminOverrideIx: (p) => adminOverrideResolutionIx(this, p),\n };\n }\n}\n\nfunction resolveCluster(\n cluster: ClusterName | ClusterConfig | undefined,\n rpcEndpoint: string,\n): ClusterConfig {\n if (typeof cluster === \"object\" && cluster !== null) return cluster;\n if (typeof cluster === \"string\") return CLUSTERS[cluster];\n\n // Heuristic inference from RPC URL — only used when caller didn't say.\n const lower = rpcEndpoint.toLowerCase();\n if (lower.includes(\"devnet\")) return CLUSTERS.devnet;\n if (lower.includes(\"mainnet\") || lower.includes(\"api.solana.com\")) return CLUSTERS.mainnet;\n if (lower.includes(\"localhost\") || lower.includes(\"127.0.0.1\")) return CLUSTERS.localnet;\n return CLUSTERS.devnet;\n}\n"]}
1
+ {"version":3,"sources":["../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/buffer/index.js","../node_modules/safe-buffer/index.js","../node_modules/base-x/src/index.js","../node_modules/bs58/index.js","../src/idl/index.ts","../src/config.ts","../src/pda.ts","../src/wallet.ts","../src/fees.ts","../src/deadlines.ts","../src/errors.ts","../src/accounts/globalState.ts","../src/accounts/filter.ts","../src/accounts/layout.ts","../src/accounts/market.ts","../src/accounts/position.ts","../src/accounts/lpPosition.ts","../src/instructions/common.ts","../src/instructions/admin.ts","../src/arcium/offsets.ts","../src/instructions/compDef.ts","../src/instructions/market.ts","../src/arcium/accounts.ts","../src/instructions/bet.ts","../src/instructions/resolve.ts","../src/instructions/claim.ts","../src/instructions/resolution.ts","../src/arcium/callbacks.ts","../src/actions/common.ts","../src/actions/createMarket.ts","../src/arcium/cipher.ts","../src/arcium/encoding.ts","../src/actions/placeBet.ts","../src/actions/resolveMarket.ts","../src/actions/claim.ts","../src/actions/resolution.ts","../src/events/parser.ts","../src/events/subscribe.ts","../src/client.ts"],"names":["len","i","len2","Buffer","byteLength","j","decode","PublicKey","bs58","facade","BN","getMXEAccAddress","getCompDefAccAddress","getArciumProgramId","AnchorEventParser","opts"],"mappings":"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","file":"index.js","sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n// @ts-ignore\nvar _Buffer = require('safe-buffer').Buffer\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256)\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i)\n var xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n if (Array.isArray(source) || source instanceof Uint8Array) { source = _Buffer.from(source) }\n if (!_Buffer.isBuffer(source)) { throw new TypeError('Expected Buffer') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0\n var length = 0\n var pbegin = 0\n var pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n var b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return _Buffer.alloc(0) }\n var psz = 0\n // Skip and count leading '1's.\n var zeroes = 0\n var length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size)\n // Process the characters.\n while (psz < source.length) {\n // Find code of next character\n var charCode = source.charCodeAt(psz)\n // Base map can not be indexed using char code\n if (charCode > 255) { return }\n // Decode character\n var carry = BASE_MAP[charCode]\n // Invalid character\n if (carry === 255) { return }\n var i = 0\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip leading zeroes in b256.\n var it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n var vch = _Buffer.allocUnsafe(zeroes + (size - it4))\n vch.fill(0x00, 0, zeroes)\n var j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nmodule.exports = base\n","var basex = require('base-x')\nvar ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\nmodule.exports = basex(ALPHABET)\n","import idlJson from \"./cypher.json\" with { type: \"json\" };\nimport type { Cypher } from \"./cypher.ts\";\n\nexport type { Cypher };\n\nexport const IDL: Cypher = idlJson as unknown as Cypher;\n\nexport const IDL_PROGRAM_ID = IDL.address;\n","import { PublicKey } from \"@solana/web3.js\";\nimport { IDL } from \"./idl/index.ts\";\n\n/**\n * Cypher program ID. Sourced from the synced IDL so it can never drift\n * from the deployed contract — the address field is the single source of\n * truth.\n */\nexport const PROGRAM_ID = new PublicKey(IDL.address);\n\n/**\n * Known SPL token mints used by the protocol per cluster.\n *\n * cypher-main pins the accepted mint at build time via `CYPHER_CLUSTER`:\n * - `mainnet` → Circle USDC (`EPjFWdd5…`)\n * - anything else (dev) → Cypher Coin / CSDC (`8AF9BABN…`)\n *\n * The SDK is cluster-agnostic — at runtime it reads\n * `GlobalState.accepted_mint` (see `accounts/globalState`) instead of\n * hard-coding either of these. These constants are kept here purely as\n * documentation + helpers for tests and admin scripts that need to assert\n * the on-chain mint matches what the cluster build was supposed to pin.\n */\nexport const KNOWN_MINTS = {\n /** Cypher Coin (CSDC) — accepted mint on devnet builds. */\n devnetCSDC: new PublicKey(\"8AF9BABNWwEhipRxtXPYoWSZW24SKjUn6YqbKd9ZqhwB\"),\n /** Circle USDC — accepted mint on mainnet builds. */\n mainnetUSDC: new PublicKey(\"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\"),\n} as const;\n\n/** Stable identifier for each supported Solana cluster. */\nexport type ClusterName = \"devnet\" | \"mainnet\" | \"localnet\";\n\n/**\n * Runtime configuration for a single deployment target.\n *\n * `arciumClusterOffset` selects which Arcium cluster handles MPC for this\n * deployment. cypher-main uses `456` on devnet (see `Arcium.toml`); mainnet\n * and the local Docker stack each get their own offsets. The default\n * `expectedMint` is informational only — the SDK always trusts\n * `GlobalState.accepted_mint` at runtime.\n */\nexport interface ClusterConfig {\n name: ClusterName;\n rpc: string;\n arciumClusterOffset: number;\n /** Informational: the mint we expect the deployed `GlobalState` to pin. */\n expectedMint: PublicKey;\n}\n\n/**\n * Default cluster presets. Override `rpc` (e.g., for a Helius URL) when\n * constructing the `CypherClient` if you need a different endpoint.\n */\nexport const CLUSTERS: Record<ClusterName, ClusterConfig> = {\n devnet: {\n name: \"devnet\",\n rpc: \"https://api.devnet.solana.com\",\n arciumClusterOffset: 456,\n expectedMint: KNOWN_MINTS.devnetCSDC,\n },\n mainnet: {\n name: \"mainnet\",\n rpc: \"https://api.mainnet-beta.solana.com\",\n arciumClusterOffset: 0,\n expectedMint: KNOWN_MINTS.mainnetUSDC,\n },\n localnet: {\n name: \"localnet\",\n rpc: \"http://localhost:8899\",\n arciumClusterOffset: 1116522022,\n expectedMint: KNOWN_MINTS.devnetCSDC,\n },\n} as const;\n\n/* ----------------------------------------------------------------------- *\n * On-chain protocol constants *\n * *\n * Sourced from cypher-main/programs/cypher_main/src/states.rs. Any change *\n * to these values upstream MUST be mirrored here — pinned in unit tests. *\n * ----------------------------------------------------------------------- */\n\n/** Discriminator size (8 bytes) prepended to every Anchor account. */\nexport const ACCOUNT_DISCRIMINATOR_SIZE = 8;\n\n/** Minimum bet size: $1 USDC in lamports (1e6 micro-units). */\nexport const MIN_BET_USDC = 1_000_000n;\n\n/**\n * Minimum creator bond: $20 USDC/CSDC.\n * The creator may deposit any amount >= this value at market creation.\n * The actual bond is stored per-market in `MarketAccount.creatorBond`.\n * @deprecated `CREATOR_BOND` (the old $10 fixed constant) is removed upstream — use `MIN_CREATOR_BOND`.\n */\nexport const MIN_CREATOR_BOND = 20_000_000n;\n\n/**\n * Window after `close_time` during which the designated resolver may submit\n * an outcome. After this elapses, the market is eligible for refunds.\n */\nexport const DEFAULT_RESOLUTION_WINDOW_SECS = 7 * 24 * 3600; // 7 days\n\n/**\n * Window after a market resolves during which winners may claim payout.\n * After this elapses, the admin may sweep remaining vault funds.\n */\nexport const DEFAULT_CLAIM_PERIOD_SECS = 14 * 24 * 3600; // 14 days\n\n/**\n * Window after `resolution_deadline` during which bettors may claim refunds\n * on unresolved markets. After this elapses, the admin may sweep.\n */\nexport const DEFAULT_REFUND_PERIOD_SECS = 14 * 24 * 3600; // 14 days\n\n/**\n * Minimum challenge / dispute window per market (seconds). Set at create-time;\n * the contract rejects any `challenge_period` below this floor.\n */\nexport const MIN_CHALLENGE_PERIOD_SECS = 24 * 3600; // 24 hours\n\n/**\n * Maximum challenge / dispute window per market (seconds). Set at create-time;\n * the contract rejects any `challenge_period` above this ceiling.\n */\nexport const MAX_CHALLENGE_PERIOD_SECS = 48 * 3600; // 48 hours\n\n/** Maximum protocol fee rate (basis points). 1% absolute ceiling. */\nexport const MAX_PROTOCOL_FEE_BPS = 100;\n\n/** Maximum LP fee rate (basis points). 5% absolute ceiling. */\nexport const MAX_LP_FEE_BPS = 500;\n\n/** Basis-points denominator used by on-chain fee math. */\nexport const BPS_DENOMINATOR = 10_000n;\n\n/** Fixed-point scale on `Market.payout_ratio` and `entry_odds`. */\nexport const ODDS_SCALE = 1_000_000_000n; // 1e9\n\n/* ----------------------------------------------------------------------- *\n * Enums *\n * ----------------------------------------------------------------------- */\n\n/**\n * Lifecycle states for a market.\n *\n * `PendingResolution` (v0.2+): the reveal callback ran and outcome/pools are\n * now plaintext on the Market account, but the market is still in the\n * challenge window. `claim_deadline` / `refund_deadline` are NOT set yet\n * — `finalize_resolution` (anyone, after window) or\n * `admin_override_resolution` (admin, when disputed) flips to `Resolved`.\n */\nexport const MarketState = {\n Active: 0,\n Closed: 1,\n Resolved: 2,\n Unresolved: 3,\n PendingResolution: 4,\n} as const;\nexport type MarketStateValue = (typeof MarketState)[keyof typeof MarketState];\n\n/** Market type: simple YES/NO vs 2–4 outcome. */\nexport const MarketType = {\n YesNo: 0,\n MultiOutcome: 1,\n} as const;\nexport type MarketTypeValue = (typeof MarketType)[keyof typeof MarketType];\n\n/** Predefined market categories (kept in sync with `states.rs`). */\nexport const MarketCategory = {\n Crypto: 0,\n Politics: 1,\n Sports: 2,\n Tech: 3,\n Economy: 4,\n Culture: 5,\n Beyond: 6,\n} as const;\nexport type MarketCategoryValue =\n (typeof MarketCategory)[keyof typeof MarketCategory];\n\n/**\n * Maximum byte length of the `question` field on a Market account.\n * Enforced by the program as a hard constraint.\n */\nexport const MAX_QUESTION_BYTES = 200;\n\n/** Inclusive bounds on number of outcomes for a MultiOutcome market. */\nexport const MIN_OUTCOMES_MULTI = 2;\nexport const MAX_OUTCOMES_MULTI = 4;\n","import { PublicKey } from \"@solana/web3.js\";\nimport { PROGRAM_ID } from \"./config.ts\";\n\n/**\n * PDA derivation helpers for every account the Cypher program creates.\n *\n * Seeds mirror `programs/cypher_main/src/lib.rs` exactly — verified\n * against the synced IDL in `pda.test.ts`. Always call these helpers\n * rather than re-deriving inline; on-chain seed changes will then show\n * up in one place.\n *\n * Every helper accepts an optional `programId` argument so callers can\n * derive against a non-default deployment (e.g., the `arcium localnet`\n * harness occasionally redeploys under a fresh keypair).\n */\n\n/** Accepts bigint, number, or any BN-like (anything with .toString → u64 string). */\ntype U64Like = bigint | number | { toString(): string };\n\nfunction u64LeBytes(n: U64Like): Buffer {\n const buf = Buffer.alloc(8);\n const asBig = typeof n === \"bigint\" ? n : BigInt(n.toString());\n buf.writeBigUInt64LE(asBig);\n return buf;\n}\n\n/** `[b\"global_state\"]` — singleton config PDA. */\nexport function globalStatePda(programId: PublicKey = PROGRAM_ID): [PublicKey, number] {\n return PublicKey.findProgramAddressSync([Buffer.from(\"global_state\")], programId);\n}\n\n/** `[b\"market\", market_id u64 LE]` — one per market. Accepts BN-like. */\nexport function marketPda(\n marketId: U64Like,\n programId: PublicKey = PROGRAM_ID,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"market\"), u64LeBytes(marketId)],\n programId,\n );\n}\n\n/** `[b\"market_vault\", market]` — PDA-owned SPL token account holding stakes. */\nexport function marketVaultPda(\n market: PublicKey,\n programId: PublicKey = PROGRAM_ID,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"market_vault\"), market.toBuffer()],\n programId,\n );\n}\n\n/** `[b\"position\", market, user]` — encrypted bet position per user per market. */\nexport function positionPda(\n market: PublicKey,\n user: PublicKey,\n programId: PublicKey = PROGRAM_ID,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"position\"), market.toBuffer(), user.toBuffer()],\n programId,\n );\n}\n\n/** `[b\"lp-position\", market, creator]` — bond + LP fee accounting. */\nexport function lpPositionPda(\n market: PublicKey,\n creator: PublicKey,\n programId: PublicKey = PROGRAM_ID,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"lp-position\"), market.toBuffer(), creator.toBuffer()],\n programId,\n );\n}\n\n/**\n * `[b\"ArciumSignerAccount\"]` — Arcium-side signer PDA used as the queue-time\n * CPI authority for callback verification. The seed literal is dictated by\n * the Arcium macro `derive_sign_pda!()`; see arcium SKILL.md.\n */\nexport function arciumSignerPda(\n programId: PublicKey = PROGRAM_ID,\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"ArciumSignerAccount\")],\n programId,\n );\n}\n","import {\n Keypair,\n PublicKey,\n type Transaction,\n type VersionedTransaction,\n} from \"@solana/web3.js\";\n\n/**\n * Structural Wallet interface — compatible with Anchor's `Wallet` interface\n * AND with every `@solana/wallet-adapter` adapter we've checked. We define\n * it ourselves rather than re-exporting `@anchor-lang/core`'s `Wallet`\n * because the top-level `Wallet` export there is the concrete `NodeWallet`\n * class (which requires a `payer: Keypair`), not the interface — using the\n * class as a type signature would lock browser wallets out.\n */\nexport interface Wallet {\n publicKey: PublicKey;\n signTransaction<T extends Transaction | VersionedTransaction>(tx: T): Promise<T>;\n signAllTransactions<T extends Transaction | VersionedTransaction>(\n txs: T[],\n ): Promise<T[]>;\n /** Optional — only set by Node-style wallets that hold the keypair locally. */\n payer?: Keypair;\n}\n\n/**\n * Wrap a raw `Keypair` so it implements Anchor's `Wallet` interface.\n *\n * Intended for Node / scripts / tests — browser apps should use\n * `@solana/wallet-adapter` (its adapters already implement `Wallet`) and\n * pass them straight into `CypherClient`.\n */\nexport function keypairToWallet(keypair: Keypair): Wallet {\n return {\n publicKey: keypair.publicKey,\n payer: keypair,\n async signTransaction<T extends Transaction | VersionedTransaction>(\n tx: T,\n ): Promise<T> {\n if (\"version\" in tx) {\n (tx as VersionedTransaction).sign([keypair]);\n } else {\n (tx as Transaction).partialSign(keypair);\n }\n return tx;\n },\n async signAllTransactions<T extends Transaction | VersionedTransaction>(\n txs: T[],\n ): Promise<T[]> {\n for (const tx of txs) {\n if (\"version\" in tx) {\n (tx as VersionedTransaction).sign([keypair]);\n } else {\n (tx as Transaction).partialSign(keypair);\n }\n }\n return txs;\n },\n };\n}\n\n/**\n * Read-only wallet — never produces a signature. Useful for getProgramAccounts\n * queries from a browser without prompting the user's wallet adapter.\n *\n * Calling `signTransaction` / `signAllTransactions` throws.\n */\nexport function readonlyWallet(publicKey: PublicKey): Wallet {\n return {\n publicKey,\n async signTransaction(): Promise<never> {\n throw new Error(\"readonlyWallet cannot sign transactions\");\n },\n async signAllTransactions(): Promise<never> {\n throw new Error(\"readonlyWallet cannot sign transactions\");\n },\n };\n}\n","import { BPS_DENOMINATOR, MIN_BET_USDC } from \"./config.ts\";\n\n/**\n * Snapshot of the on-chain fee configuration the user needs to compute\n * exact pre-trade values without a `getAccountInfo` round-trip.\n *\n * Populate `protocolFeeRateBps` / `lpFeeRateBps` from `GlobalState`.\n */\nexport interface FeeRates {\n /** Protocol fee in basis points (max 100 = 1%). */\n protocolFeeRateBps: number;\n /** LP fee in basis points (max 500 = 5%). */\n lpFeeRateBps: number;\n}\n\n/**\n * Breakdown of the on-chain math applied to a bet of `amount` micro-USDC.\n *\n * Mirrors the program exactly (see `place_private_bet_yesno` in\n * `cypher-main/programs/cypher_main/src/lib.rs`):\n *\n * protocolFee = floor(amount * protocolFeeRateBps / 10_000)\n * lpFee = floor(amount * lpFeeRateBps / 10_000)\n * netAmount = amount - protocolFee - lpFee\n *\n * The circuit asserts `netAmount` matches what the client encrypted, so\n * surfacing it here is critical for UX previews and equally critical for\n * the place-bet action helper that gets built in a later phase.\n */\nexport interface FeeBreakdown {\n /** Original bet, unchanged (just echoed back for symmetry). */\n amount: bigint;\n /** Protocol fee that leaves the market vault → treasury. */\n protocolFee: bigint;\n /** LP fee credited to `market.accumulated_lp_fees`. */\n lpFee: bigint;\n /**\n * Net stake that ends up in the encrypted position and is shielded\n * by the circuit (`net_amount_plaintext` argument to the bet circuit).\n */\n netAmount: bigint;\n}\n\n/**\n * Compute the fee split for a single bet, matching on-chain math exactly.\n *\n * Uses `bigint` end-to-end to mirror Solana's `u64` overflow semantics.\n * Throws if any value would exceed `u64`.\n */\nexport function computeFees(amount: bigint, rates: FeeRates): FeeBreakdown {\n if (amount < 0n) throw new Error(\"computeFees: amount must be >= 0\");\n assertBps(rates.protocolFeeRateBps, \"protocolFeeRateBps\");\n assertBps(rates.lpFeeRateBps, \"lpFeeRateBps\");\n\n const protocolFee =\n (amount * BigInt(rates.protocolFeeRateBps)) / BPS_DENOMINATOR;\n const lpFee = (amount * BigInt(rates.lpFeeRateBps)) / BPS_DENOMINATOR;\n const netAmount = amount - protocolFee - lpFee;\n\n if (netAmount < 0n) {\n // Defensive: should be impossible if rates are within their on-chain\n // ceilings (max 100 + 500 bps = 6% < 100%), but keep the guard for\n // forward-compatibility.\n throw new Error(\"computeFees: net amount went negative\");\n }\n return { amount, protocolFee, lpFee, netAmount };\n}\n\n/**\n * Returns `true` if `amount` satisfies `market.min_bet` *and* leaves a\n * non-zero `netAmount` after fees. The on-chain check is just the first\n * half — but a bet that nets to zero would create a useless position, so\n * we surface the stronger condition here.\n */\nexport function isBetAmountValid(\n amount: bigint,\n rates: FeeRates,\n minBet: bigint = MIN_BET_USDC,\n): boolean {\n if (amount < minBet) return false;\n const { netAmount } = computeFees(amount, rates);\n return netAmount > 0n;\n}\n\nfunction assertBps(bps: number, name: string): void {\n if (!Number.isInteger(bps) || bps < 0 || bps > 10_000) {\n throw new Error(`computeFees: ${name} must be an integer in [0, 10000]`);\n }\n}\n","import {\n DEFAULT_RESOLUTION_WINDOW_SECS,\n DEFAULT_CLAIM_PERIOD_SECS,\n DEFAULT_REFUND_PERIOD_SECS,\n MarketState,\n type MarketStateValue,\n} from \"./config.ts\";\n\n/**\n * High-level lifecycle phase of a market — what action (if any) is\n * available *right now* to which user.\n *\n * Mirrors the on-chain require!() guards across the program so a frontend\n * doesn't have to keep them in sync separately.\n */\nexport type MarketPhase =\n /** Market is open for bets (state=Active, now < close_time). */\n | \"betting\"\n /** Bets closed, resolver may submit an outcome (now in resolution window). */\n | \"awaitingResolve\"\n /** v0.2+: reveal callback ran, awaiting end of challenge window (anyone may flag). */\n | \"pendingResolution\"\n /** v0.2+: dispute window elapsed undisputed; anyone may call `finalize_resolution`. */\n | \"awaitingFinalize\"\n /** v0.2+: a flag was raised during the challenge window; admin override required. */\n | \"disputed\"\n /** Resolved + within claim window → winners can claim payouts. */\n | \"claimable\"\n /** Unresolved + past resolution deadline → bettors can claim refunds. */\n | \"refundable\"\n /** Resolution claim period expired; admin sweep eligible. */\n | \"expired\"\n /** Creator cancelled before any bets were placed. */\n | \"cancelled\";\n\n/**\n * The fields off `Market` the deadline math depends on. Kept as a minimal\n * interface so callers can pass either a fully-decoded `Market` account or\n * a hand-built record (e.g., from a draft create-market form).\n */\nexport interface MarketDeadlineInputs {\n state: number;\n closeTime: bigint;\n resolutionDeadline: bigint;\n claimDeadline: bigint;\n refundDeadline: bigint;\n totalBetsCount?: bigint;\n /** v0.2+: set by reveal callback to `resolution_time + challenge_period`. */\n challengeDeadline?: bigint;\n /** v0.2+: set true by `flag_resolution`. */\n disputed?: boolean;\n}\n\nfunction unixNowSecs(): bigint {\n return BigInt(Math.floor(Date.now() / 1000));\n}\n\n/**\n * Compute the phase of `market` at `nowSec` (defaults to wall-clock now).\n *\n * Returns one of the `MarketPhase` literals — see its docs for what each\n * means. Pure: no chain access.\n */\nexport function marketPhase(\n market: MarketDeadlineInputs,\n nowSec: bigint = unixNowSecs(),\n): MarketPhase {\n if (market.state === MarketState.Closed) {\n // The program sets Closed via `cancel_market` (no bets) — there is no\n // other path to this state. Surface as a distinct phase so the UI can\n // show \"cancelled\" rather than \"betting\".\n return \"cancelled\";\n }\n\n if (market.state === MarketState.PendingResolution) {\n if (market.disputed) return \"disputed\";\n if (market.challengeDeadline && nowSec <= market.challengeDeadline) {\n return \"pendingResolution\";\n }\n return \"awaitingFinalize\";\n }\n\n if (market.state === MarketState.Resolved) {\n if (market.claimDeadline > 0n && nowSec <= market.claimDeadline) {\n return \"claimable\";\n }\n return \"expired\";\n }\n\n // state is Active (or the unused Unresolved sentinel).\n if (nowSec < market.closeTime) return \"betting\";\n if (nowSec <= market.resolutionDeadline) return \"awaitingResolve\";\n if (market.refundDeadline > 0n && nowSec <= market.refundDeadline) {\n return \"refundable\";\n }\n return \"expired\";\n}\n\n/**\n * For a draft market with only `closeTime` decided, derive the four\n * deadlines the program will set on creation (`resolution_deadline`,\n * `claim_deadline` / `refund_deadline` are zeroed at create-time and\n * filled in on resolve, but this helper projects the intended values so a\n * UI can preview them).\n */\nexport function projectDeadlines(closeTime: bigint): {\n closeTime: bigint;\n resolutionDeadline: bigint;\n projectedClaimDeadline: bigint;\n projectedRefundDeadline: bigint;\n} {\n const resolutionDeadline = closeTime + BigInt(DEFAULT_RESOLUTION_WINDOW_SECS);\n return {\n closeTime,\n resolutionDeadline,\n // Both downstream deadlines anchor on the resolution event, not on\n // close_time, so the projections assume \"resolved exactly at the\n // resolution deadline\" — the worst-case window for winners/bettors.\n projectedClaimDeadline: resolutionDeadline + BigInt(DEFAULT_CLAIM_PERIOD_SECS),\n projectedRefundDeadline: resolutionDeadline + BigInt(DEFAULT_REFUND_PERIOD_SECS),\n };\n}\n\n/**\n * Returns `true` iff `closeTime` is at least 60 seconds in the future.\n *\n * The on-chain check is `close_time > now`, but a 60-second cushion makes\n * the dapp robust against clock skew between the user, the RPC, and the\n * validator.\n */\nexport function isValidCloseTime(\n closeTime: bigint,\n nowSec: bigint = unixNowSecs(),\n): boolean {\n return closeTime >= nowSec + 60n;\n}\n","import { IDL } from \"./idl/index.ts\";\n\n/**\n * Numeric error codes as declared by the `#[error_code] pub enum CypherError`\n * block in `cypher-main/programs/cypher_main/src/lib.rs`. Synced via the\n * shared IDL — any new error in the contract automatically becomes a new\n * entry on this map as long as `bun run sync:idl` is rerun.\n *\n * Codes start at Anchor's default `6000` offset.\n */\nexport const CypherErrorCode = {\n MarketNotActive: 6000,\n MarketClosed: 6001,\n MarketStillOpen: 6002,\n AlreadyResolved: 6003,\n NotResolved: 6004,\n UnauthorizedResolver: 6005,\n UnauthorizedAdmin: 6006,\n AlreadyClaimed: 6007,\n PositionLost: 6008,\n BetTooSmall: 6009,\n InsufficientVaultBalance: 6010,\n NoFeesToClaim: 6011,\n LiquidityTooLow: 6012,\n InvalidCloseTime: 6013,\n EmptyQuestion: 6014,\n QuestionTooLong: 6015,\n Overflow: 6016,\n InvalidOutcome: 6017,\n InvalidFeeRate: 6018,\n InvalidTreasury: 6019,\n BondAlreadyWithdrawn: 6020,\n NotMarketCreator: 6021,\n MarketHasBets: 6022,\n ResolutionDeadlinePassed: 6023,\n MarketNotUnresolved: 6024,\n ResolutionDeadlineNotReached: 6025,\n ClaimPeriodExpired: 6026,\n RefundPeriodExpired: 6027,\n AbortedComputation: 6028,\n ComputationVerificationFailed: 6029,\n CannotWithdrawFromUnresolved: 6030,\n AdminAlreadyClaimed: 6031,\n WrongMarketType: 6032,\n WrongMint: 6033,\n NotAcceptedMint: 6034,\n InvalidCategory: 6035,\n InvalidChallengePeriod: 6036,\n BondTooSmall: 6037,\n NotPendingResolution: 6038,\n ChallengePeriodNotElapsed: 6039,\n ChallengePeriodElapsed: 6040,\n MarketDisputed: 6041,\n MarketNotDisputed: 6042,\n} as const;\n\nexport type CypherErrorName = keyof typeof CypherErrorCode;\nexport type CypherErrorCodeValue =\n (typeof CypherErrorCode)[keyof typeof CypherErrorCode];\n\n/** Human-readable description for every code, sourced from the IDL `msg`. */\nexport const CYPHER_ERROR_MESSAGES: Readonly<Record<CypherErrorName, string>> =\n Object.freeze(\n Object.fromEntries(\n IDL.errors.map((e) => [e.name as CypherErrorName, e.msg]),\n ) as Record<CypherErrorName, string>,\n );\n\nconst codeToName: Record<number, CypherErrorName> = Object.fromEntries(\n Object.entries(CypherErrorCode).map(([name, code]) => [\n code,\n name as CypherErrorName,\n ]),\n);\n\n/** Look up a Cypher error name by its numeric code. */\nexport function cypherErrorName(code: number): CypherErrorName | undefined {\n return codeToName[code];\n}\n\n/** Structured result of parsing an Anchor error. */\nexport interface ParsedCypherError {\n code: CypherErrorCodeValue;\n name: CypherErrorName;\n msg: string;\n}\n\ninterface MaybeAnchorError {\n error?: {\n errorCode?: { code?: string; number?: number };\n errorMessage?: string;\n };\n errorLogs?: string[];\n logs?: string[];\n message?: string;\n}\n\n/**\n * Walk a thrown value and extract a CypherError if one is present.\n *\n * Anchor wraps program errors several different ways depending on whether\n * the call went through `.rpc()`, `.simulate()`, or a raw transaction\n * send; this helper handles every shape we've seen in the wild:\n *\n * - Direct `AnchorError` instances with `.error.errorCode.number`.\n * - Plain `Error.message` strings that contain `custom program error: 0xNNNN`.\n * - `SendTransactionError.logs` containing the same log line.\n *\n * Returns `null` if the input is not a Cypher error (e.g., a network\n * timeout or a different program's error).\n */\nexport function parseCypherError(input: unknown): ParsedCypherError | null {\n if (input == null) return null;\n const err = input as MaybeAnchorError;\n\n const fromAnchor = err.error?.errorCode?.number;\n if (typeof fromAnchor === \"number\") {\n return materialize(fromAnchor);\n }\n\n const namedCode = err.error?.errorCode?.code as CypherErrorName | undefined;\n if (namedCode && namedCode in CypherErrorCode) {\n return materialize(CypherErrorCode[namedCode]);\n }\n\n // Scan log lines for `custom program error: 0xNNN` or\n // `Error Number: NNNN. Error Message: …`. The first match wins.\n const logCandidates: string[] = [];\n if (Array.isArray(err.errorLogs)) logCandidates.push(...err.errorLogs);\n if (Array.isArray(err.logs)) logCandidates.push(...err.logs);\n if (typeof err.message === \"string\") logCandidates.push(err.message);\n\n for (const line of logCandidates) {\n const hex = line.match(/custom program error:\\s*0x([0-9a-fA-F]+)/);\n if (hex && hex[1]) {\n const parsed = parseInt(hex[1], 16);\n const out = materialize(parsed);\n if (out) return out;\n }\n const dec = line.match(/Error Number:\\s*(\\d+)/);\n if (dec && dec[1]) {\n const parsed = parseInt(dec[1], 10);\n const out = materialize(parsed);\n if (out) return out;\n }\n }\n\n return null;\n}\n\nfunction materialize(code: number): ParsedCypherError | null {\n const name = codeToName[code];\n if (!name) return null;\n return {\n code: code as CypherErrorCodeValue,\n name,\n msg: CYPHER_ERROR_MESSAGES[name],\n };\n}\n","import type { PublicKey } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport { globalStatePda } from \"../pda.ts\";\n\n/**\n * Decoded `GlobalState` account. Field types mirror the on-chain layout —\n * numerics are `bigint` to keep u64 precision in JS without surprise\n * `Number` truncation.\n */\nexport interface GlobalStateAccount {\n marketCounter: bigint;\n protocolFeeRate: number; // u16\n lpFeeRate: number; // u16\n protocolTreasury: PublicKey;\n acceptedMint: PublicKey;\n admin: PublicKey;\n bump: number;\n}\n\n/** Anchor's `program.account.globalState.fetch` returns BN-typed numerics. */\ninterface RawGlobalState {\n marketCounter: { toString(): string };\n protocolFeeRate: number;\n lpFeeRate: number;\n protocolTreasury: PublicKey;\n acceptedMint: PublicKey;\n admin: PublicKey;\n bump: number;\n}\n\nfunction decode(raw: RawGlobalState): GlobalStateAccount {\n return {\n marketCounter: BigInt(raw.marketCounter.toString()),\n protocolFeeRate: raw.protocolFeeRate,\n lpFeeRate: raw.lpFeeRate,\n protocolTreasury: raw.protocolTreasury,\n acceptedMint: raw.acceptedMint,\n admin: raw.admin,\n bump: raw.bump,\n };\n}\n\n/** Fetch and decode the singleton `GlobalState`. */\nexport async function fetchGlobalState(client: CypherClient): Promise<GlobalStateAccount> {\n const [pda] = globalStatePda(client.programId);\n const acc = (client.program.account as unknown as Record<string, {\n fetch: (pk: PublicKey) => Promise<RawGlobalState>;\n }>).globalState as { fetch: (pk: PublicKey) => Promise<RawGlobalState> };\n const raw = await acc.fetch(pda);\n return decode(raw);\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport type { GetProgramAccountsFilter } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport {\n ACCOUNT_DISCRIMINATOR_SIZE,\n MARKET_OFFSETS,\n ENCRYPTED_POSITION_OFFSETS,\n LP_POSITION_OFFSETS,\n} from \"./layout.ts\";\nimport { IDL } from \"../idl/index.ts\";\n\n/**\n * Convenience constructors for the memcmp filters used by every\n * `getProgramAccounts` query in the SDK. Each helper prepends the 8-byte\n * Anchor discriminator offset automatically.\n *\n * The discriminator filters (`discriminatorFilter`) are computed from the\n * synced IDL at module load — there is no copy-paste of the 8-byte arrays.\n *\n * IMPORTANT: memcmp filter `bytes` must be the base58 of the *exact* byte\n * sequence being compared — not a 32-byte `PublicKey` representation.\n * For pubkey filters we use `pubkey.toBase58()` directly (already 32-byte\n * base58); for shorter values we encode with `bs58.encode` to avoid\n * zero-padding that would produce a 32-byte memcmp instead of a 1-byte\n * one.\n */\n\nconst DISCRIMINATORS: Record<string, Uint8Array> = Object.fromEntries(\n IDL.accounts.map((a) => [\n a.name as string,\n Uint8Array.from(a.discriminator as number[]),\n ]),\n);\n\nfunction memcmp(offset: number, value: string): GetProgramAccountsFilter {\n return { memcmp: { offset, bytes: value } };\n}\n\n/** Filter matching the 8-byte Anchor discriminator of `accountName`. */\nexport function discriminatorFilter(accountName: string): GetProgramAccountsFilter {\n const disc = DISCRIMINATORS[accountName];\n if (!disc) throw new Error(`discriminatorFilter: unknown account '${accountName}'`);\n return memcmp(0, bs58.encode(disc));\n}\n\n/** Single-byte memcmp filter (state, market_type, category, …). */\nfunction byteFilter(offset: number, value: number): GetProgramAccountsFilter {\n if (!Number.isInteger(value) || value < 0 || value > 0xff) {\n throw new Error(`byteFilter: value must be a u8, got ${value}`);\n }\n return memcmp(offset, bs58.encode(Uint8Array.from([value])));\n}\n\n/* ----------------------------------------------------------------------- *\n * Market filters *\n * ----------------------------------------------------------------------- */\n\nexport const marketFilters = {\n discriminator: () => discriminatorFilter(\"Market\"),\n byCreator: (creator: PublicKey): GetProgramAccountsFilter =>\n memcmp(ACCOUNT_DISCRIMINATOR_SIZE + MARKET_OFFSETS.creator, creator.toBase58()),\n byResolver: (resolver: PublicKey): GetProgramAccountsFilter =>\n memcmp(ACCOUNT_DISCRIMINATOR_SIZE + MARKET_OFFSETS.resolver, resolver.toBase58()),\n byState: (state: number): GetProgramAccountsFilter =>\n byteFilter(ACCOUNT_DISCRIMINATOR_SIZE + MARKET_OFFSETS.state, state),\n byCategory: (category: number): GetProgramAccountsFilter =>\n byteFilter(ACCOUNT_DISCRIMINATOR_SIZE + MARKET_OFFSETS.category, category),\n byMarketType: (mt: number): GetProgramAccountsFilter =>\n byteFilter(ACCOUNT_DISCRIMINATOR_SIZE + MARKET_OFFSETS.marketType, mt),\n};\n\n/* ----------------------------------------------------------------------- *\n * EncryptedPosition filters *\n * ----------------------------------------------------------------------- */\n\nexport const positionFilters = {\n discriminator: () => discriminatorFilter(\"EncryptedPosition\"),\n byUser: (user: PublicKey): GetProgramAccountsFilter =>\n memcmp(ACCOUNT_DISCRIMINATOR_SIZE + ENCRYPTED_POSITION_OFFSETS.user, user.toBase58()),\n byMarket: (market: PublicKey): GetProgramAccountsFilter =>\n memcmp(ACCOUNT_DISCRIMINATOR_SIZE + ENCRYPTED_POSITION_OFFSETS.market, market.toBase58()),\n};\n\n/* ----------------------------------------------------------------------- *\n * LPPosition filters *\n * ----------------------------------------------------------------------- */\n\nexport const lpPositionFilters = {\n discriminator: () => discriminatorFilter(\"LPPosition\"),\n byProvider: (lpProvider: PublicKey): GetProgramAccountsFilter =>\n memcmp(ACCOUNT_DISCRIMINATOR_SIZE + LP_POSITION_OFFSETS.lpProvider, lpProvider.toBase58()),\n byMarket: (market: PublicKey): GetProgramAccountsFilter =>\n memcmp(ACCOUNT_DISCRIMINATOR_SIZE + LP_POSITION_OFFSETS.market, market.toBase58()),\n};\n","import { ACCOUNT_DISCRIMINATOR_SIZE } from \"../config.ts\";\n\n/**\n * Hard-coded byte offsets (post-discriminator) for memcmp filters on every\n * `getProgramAccounts` query the SDK runs.\n *\n * These mirror the field order in `cypher-main/programs/cypher_main/src/states.rs`.\n * `accounts/filter.test.ts` recomputes them dynamically from the synced IDL\n * type layout and asserts equality — so if a contributor reorders a field\n * upstream, the SDK build fails on the next `bun run sync:idl`.\n *\n * Offsets here are *relative to the account body*. Helpers in `filter.ts`\n * add `ACCOUNT_DISCRIMINATOR_SIZE` (8) when emitting memcmp filters.\n */\n\nexport const MARKET_OFFSETS = {\n marketId: 0,\n question: 8,\n questionLen: 208,\n marketType: 209,\n numOutcomes: 210,\n category: 211,\n creator: 212,\n resolver: 244,\n creatorBond: 276,\n bondWithdrawn: 284,\n totalBetsCount: 285,\n encryptedPool0: 293,\n encryptedPool1: 325,\n encryptedPool2: 357,\n encryptedPool3: 389,\n mxeNonce: 421,\n revealedPool0: 437,\n revealedPool1: 445,\n revealedPool2: 453,\n revealedPool3: 461,\n state: 469,\n outcome: 470,\n pendingOutcome: 471,\n closeTime: 472,\n resolutionTime: 480,\n payoutRatio: 488,\n accumulatedLpFees: 496,\n accumulatedProtocolFees: 504,\n minBet: 512,\n totalPayoutsClaimed: 520,\n totalRefundsClaimed: 528,\n adminClaimedRemaining: 536,\n resolutionDeadline: 537,\n claimDeadline: 545,\n refundDeadline: 553,\n challengePeriod: 561,\n challengeDeadline: 569,\n disputed: 577,\n bump: 578,\n vaultBump: 579,\n} as const;\n\nexport const ENCRYPTED_POSITION_OFFSETS = {\n user: 0,\n market: 32,\n encryptedAmount: 64,\n encryptedSide: 96,\n userPubkey: 128,\n nonce: 160,\n entryOdds: 176,\n netAmount: 184,\n claimed: 192,\n bump: 193,\n} as const;\n\nexport const LP_POSITION_OFFSETS = {\n lpProvider: 0,\n market: 32,\n liquidityProvided: 64,\n feesEarned: 72,\n feesClaimed: 80,\n feesClaimedAmount: 81,\n bump: 89,\n} as const;\n\nexport const GLOBAL_STATE_OFFSETS = {\n marketCounter: 0,\n protocolFeeRate: 8,\n lpFeeRate: 10,\n protocolTreasury: 12,\n acceptedMint: 44,\n admin: 76,\n bump: 108,\n} as const;\n\n/**\n * Layout type used by the drift-protection test. Maps the *type-graph*\n * literal in the IDL to a byte size; matches Anchor's Borsh layout exactly.\n *\n * - All `pubkey` → 32 bytes\n * - `u8` / `bool` → 1, `u16` → 2, `u32` → 4, `u64` / `i64` → 8, `u128` → 16\n * - `{ array: [T, N] }` → N * sizeof(T)\n */\nexport const PRIMITIVE_SIZES: Record<string, number> = {\n bool: 1,\n u8: 1,\n i8: 1,\n u16: 2,\n i16: 2,\n u32: 4,\n i32: 4,\n u64: 8,\n i64: 8,\n u128: 16,\n i128: 16,\n pubkey: 32,\n};\n\nexport type IdlFieldType =\n | string\n | { array: [IdlFieldType, number] }\n | { defined: { name: string } };\n\nexport function sizeOfIdlType(t: IdlFieldType): number {\n if (typeof t === \"string\") {\n const size = PRIMITIVE_SIZES[t];\n if (size === undefined) {\n throw new Error(`sizeOfIdlType: unknown primitive '${t}'`);\n }\n return size;\n }\n if (\"array\" in t) {\n const [inner, n] = t.array;\n return sizeOfIdlType(inner) * n;\n }\n // Defined types could nest fixed-size structs; our accounts don't use\n // any so we throw to surface the unsupported case explicitly.\n throw new Error(\n `sizeOfIdlType: unsupported nested type ${JSON.stringify(t)}`,\n );\n}\n\n/**\n * Build an offset map by walking the field list in order. Returns the\n * offsets keyed by Rust field name (snake_case), matching the IDL.\n */\nexport function buildOffsetMap(\n fields: Array<{ name: string; type: IdlFieldType }>,\n): Record<string, number> {\n const out: Record<string, number> = {};\n let cursor = 0;\n for (const f of fields) {\n out[f.name] = cursor;\n cursor += sizeOfIdlType(f.type);\n }\n return out;\n}\n\nexport { ACCOUNT_DISCRIMINATOR_SIZE };\n","import { PublicKey } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport { marketPda } from \"../pda.ts\";\nimport { marketFilters } from \"./filter.ts\";\n\n/**\n * Decoded `Market` account. Encrypted-pool ciphertexts stay as raw\n * `Uint8Array` (32 bytes each); the question is decoded to a UTF-8 string\n * trimmed to `questionLen` bytes for ergonomic display.\n */\nexport interface MarketAccount {\n marketId: bigint;\n question: string;\n questionLen: number;\n marketType: number;\n numOutcomes: number;\n category: number;\n creator: PublicKey;\n resolver: PublicKey;\n creatorBond: bigint;\n bondWithdrawn: boolean;\n totalBetsCount: bigint;\n encryptedPool0: Uint8Array;\n encryptedPool1: Uint8Array;\n encryptedPool2: Uint8Array;\n encryptedPool3: Uint8Array;\n mxeNonce: bigint;\n revealedPool0: bigint;\n revealedPool1: bigint;\n revealedPool2: bigint;\n revealedPool3: bigint;\n state: number;\n outcome: number;\n pendingOutcome: number;\n closeTime: bigint;\n resolutionTime: bigint;\n payoutRatio: bigint;\n accumulatedLpFees: bigint;\n accumulatedProtocolFees: bigint;\n minBet: bigint;\n totalPayoutsClaimed: bigint;\n totalRefundsClaimed: bigint;\n adminClaimedRemaining: boolean;\n resolutionDeadline: bigint;\n claimDeadline: bigint;\n refundDeadline: bigint;\n /** Configurable dispute window (24–48h), set at create time. (v0.2+) */\n challengePeriod: bigint;\n /** `resolution_time + challenge_period` — set by the reveal callback. (v0.2+) */\n challengeDeadline: bigint;\n /** Set true by `flag_resolution`; blocks `finalize_resolution`. (v0.2+) */\n disputed: boolean;\n bump: number;\n vaultBump: number;\n}\n\ninterface BNLike {\n toString(): string;\n}\n\ninterface RawMarket {\n marketId: BNLike;\n question: number[];\n questionLen: number;\n marketType: number;\n numOutcomes: number;\n category: number;\n creator: PublicKey;\n resolver: PublicKey;\n creatorBond: BNLike;\n bondWithdrawn: boolean;\n totalBetsCount: BNLike;\n encryptedPool0: number[];\n encryptedPool1: number[];\n encryptedPool2: number[];\n encryptedPool3: number[];\n mxeNonce: BNLike;\n revealedPool0: BNLike;\n revealedPool1: BNLike;\n revealedPool2: BNLike;\n revealedPool3: BNLike;\n state: number;\n outcome: number;\n pendingOutcome: number;\n closeTime: BNLike;\n resolutionTime: BNLike;\n payoutRatio: BNLike;\n accumulatedLpFees: BNLike;\n accumulatedProtocolFees: BNLike;\n minBet: BNLike;\n totalPayoutsClaimed: BNLike;\n totalRefundsClaimed: BNLike;\n adminClaimedRemaining: boolean;\n resolutionDeadline: BNLike;\n claimDeadline: BNLike;\n refundDeadline: BNLike;\n challengePeriod: BNLike;\n challengeDeadline: BNLike;\n disputed: boolean;\n bump: number;\n vaultBump: number;\n}\n\nfunction decode(raw: RawMarket): MarketAccount {\n const questionLen = raw.questionLen;\n const question = Buffer.from(raw.question.slice(0, questionLen)).toString(\"utf8\");\n return {\n marketId: BigInt(raw.marketId.toString()),\n question,\n questionLen,\n marketType: raw.marketType,\n numOutcomes: raw.numOutcomes,\n category: raw.category,\n creator: raw.creator,\n resolver: raw.resolver,\n creatorBond: BigInt(raw.creatorBond.toString()),\n bondWithdrawn: raw.bondWithdrawn,\n totalBetsCount: BigInt(raw.totalBetsCount.toString()),\n encryptedPool0: Uint8Array.from(raw.encryptedPool0),\n encryptedPool1: Uint8Array.from(raw.encryptedPool1),\n encryptedPool2: Uint8Array.from(raw.encryptedPool2),\n encryptedPool3: Uint8Array.from(raw.encryptedPool3),\n mxeNonce: BigInt(raw.mxeNonce.toString()),\n revealedPool0: BigInt(raw.revealedPool0.toString()),\n revealedPool1: BigInt(raw.revealedPool1.toString()),\n revealedPool2: BigInt(raw.revealedPool2.toString()),\n revealedPool3: BigInt(raw.revealedPool3.toString()),\n state: raw.state,\n outcome: raw.outcome,\n pendingOutcome: raw.pendingOutcome,\n closeTime: BigInt(raw.closeTime.toString()),\n resolutionTime: BigInt(raw.resolutionTime.toString()),\n payoutRatio: BigInt(raw.payoutRatio.toString()),\n accumulatedLpFees: BigInt(raw.accumulatedLpFees.toString()),\n accumulatedProtocolFees: BigInt(raw.accumulatedProtocolFees.toString()),\n minBet: BigInt(raw.minBet.toString()),\n totalPayoutsClaimed: BigInt(raw.totalPayoutsClaimed.toString()),\n totalRefundsClaimed: BigInt(raw.totalRefundsClaimed.toString()),\n adminClaimedRemaining: raw.adminClaimedRemaining,\n resolutionDeadline: BigInt(raw.resolutionDeadline.toString()),\n claimDeadline: BigInt(raw.claimDeadline.toString()),\n refundDeadline: BigInt(raw.refundDeadline.toString()),\n challengePeriod: BigInt(raw.challengePeriod.toString()),\n challengeDeadline: BigInt(raw.challengeDeadline.toString()),\n disputed: raw.disputed,\n bump: raw.bump,\n vaultBump: raw.vaultBump,\n };\n}\n\ninterface MarketAccountFacade {\n fetch: (pk: PublicKey) => Promise<RawMarket>;\n fetchNullable: (pk: PublicKey) => Promise<RawMarket | null>;\n all: (filters?: unknown[]) => Promise<Array<{ publicKey: PublicKey; account: RawMarket }>>;\n}\n\nfunction marketAccountFacade(client: CypherClient): MarketAccountFacade {\n return (client.program.account as unknown as Record<string, MarketAccountFacade>)\n .market as MarketAccountFacade;\n}\n\n/**\n * Fetch a single market by id or by PDA. Returns `null` if the account\n * doesn't exist (rather than throwing) — useful for the common\n * \"does this exist?\" check.\n */\nexport async function fetchMarket(\n client: CypherClient,\n idOrPda: bigint | number | PublicKey,\n): Promise<MarketAccount | null> {\n const pda = idOrPda instanceof PublicKey ? idOrPda : marketPda(idOrPda, client.programId)[0];\n const raw = await marketAccountFacade(client).fetchNullable(pda);\n return raw ? decode(raw) : null;\n}\n\n/** Fetch every market on the program. Expensive — prefer filtered variants. */\nexport async function fetchAllMarkets(\n client: CypherClient,\n): Promise<Array<{ publicKey: PublicKey; account: MarketAccount }>> {\n const raw = await marketAccountFacade(client).all();\n return raw.map(({ publicKey, account }) => ({ publicKey, account: decode(account) }));\n}\n\n/** Fetch markets created by `creator` via a single memcmp filter. */\nexport async function fetchMarketsByCreator(\n client: CypherClient,\n creator: PublicKey,\n): Promise<Array<{ publicKey: PublicKey; account: MarketAccount }>> {\n const raw = await marketAccountFacade(client).all([marketFilters.byCreator(creator)]);\n return raw.map(({ publicKey, account }) => ({ publicKey, account: decode(account) }));\n}\n\n/** Fetch markets in a specific lifecycle state. */\nexport async function fetchMarketsByState(\n client: CypherClient,\n state: number,\n): Promise<Array<{ publicKey: PublicKey; account: MarketAccount }>> {\n const raw = await marketAccountFacade(client).all([marketFilters.byState(state)]);\n return raw.map(({ publicKey, account }) => ({ publicKey, account: decode(account) }));\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport { positionPda } from \"../pda.ts\";\nimport { positionFilters } from \"./filter.ts\";\n\n/** Decoded `EncryptedPosition` account. */\nexport interface EncryptedPositionAccount {\n user: PublicKey;\n market: PublicKey;\n /** 32-byte ciphertext of the user's bet amount. */\n encryptedAmount: Uint8Array;\n /** 32-byte ciphertext of the user's chosen outcome side. */\n encryptedSide: Uint8Array;\n /** User's x25519 public key — needed to re-derive the shared secret. */\n userPubkey: Uint8Array;\n /** Encryption nonce reused for both ciphertexts (per RescueCipher API). */\n nonce: bigint;\n /** Locked-in odds at bet time (scaled by `ODDS_SCALE` = 1e9). */\n entryOdds: bigint;\n /** Plaintext net stake after on-chain fees — checked by circuit. */\n netAmount: bigint;\n claimed: boolean;\n bump: number;\n}\n\ninterface BNLike { toString(): string; }\ninterface RawPosition {\n user: PublicKey;\n market: PublicKey;\n encryptedAmount: number[];\n encryptedSide: number[];\n userPubkey: number[];\n nonce: BNLike;\n entryOdds: BNLike;\n netAmount: BNLike;\n claimed: boolean;\n bump: number;\n}\n\nfunction decode(raw: RawPosition): EncryptedPositionAccount {\n return {\n user: raw.user,\n market: raw.market,\n encryptedAmount: Uint8Array.from(raw.encryptedAmount),\n encryptedSide: Uint8Array.from(raw.encryptedSide),\n userPubkey: Uint8Array.from(raw.userPubkey),\n nonce: BigInt(raw.nonce.toString()),\n entryOdds: BigInt(raw.entryOdds.toString()),\n netAmount: BigInt(raw.netAmount.toString()),\n claimed: raw.claimed,\n bump: raw.bump,\n };\n}\n\ninterface PositionAccountFacade {\n fetchNullable: (pk: PublicKey) => Promise<RawPosition | null>;\n all: (filters?: unknown[]) => Promise<Array<{ publicKey: PublicKey; account: RawPosition }>>;\n}\n\nfunction facade(client: CypherClient): PositionAccountFacade {\n return (client.program.account as unknown as Record<string, PositionAccountFacade>)\n .encryptedPosition as PositionAccountFacade;\n}\n\n/** Fetch a single `EncryptedPosition` by `(market, user)`. */\nexport async function fetchPosition(\n client: CypherClient,\n market: PublicKey,\n user: PublicKey,\n): Promise<EncryptedPositionAccount | null> {\n const [pda] = positionPda(market, user, client.programId);\n const raw = await facade(client).fetchNullable(pda);\n return raw ? decode(raw) : null;\n}\n\n/** Fetch every position belonging to `user` across all markets. */\nexport async function fetchUserPositions(\n client: CypherClient,\n user: PublicKey,\n): Promise<Array<{ publicKey: PublicKey; account: EncryptedPositionAccount }>> {\n const raw = await facade(client).all([positionFilters.byUser(user)]);\n return raw.map(({ publicKey, account }) => ({ publicKey, account: decode(account) }));\n}\n\n/** Fetch every position on a single market — useful for resolution dashboards. */\nexport async function fetchPositionsForMarket(\n client: CypherClient,\n market: PublicKey,\n): Promise<Array<{ publicKey: PublicKey; account: EncryptedPositionAccount }>> {\n const raw = await facade(client).all([positionFilters.byMarket(market)]);\n return raw.map(({ publicKey, account }) => ({ publicKey, account: decode(account) }));\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport { lpPositionPda } from \"../pda.ts\";\nimport { lpPositionFilters } from \"./filter.ts\";\n\n/**\n * Decoded `LPPosition` account.\n *\n * The contract currently leaves `feesEarned` zeroed — it tracks LP fees on\n * `Market.accumulated_lp_fees` instead. `feesClaimedAmount` is the\n * authoritative payout figure when `withdraw_creator_funds` runs.\n */\nexport interface LpPositionAccount {\n lpProvider: PublicKey;\n market: PublicKey;\n liquidityProvided: bigint;\n feesEarned: bigint;\n feesClaimed: boolean;\n feesClaimedAmount: bigint;\n bump: number;\n}\n\ninterface BNLike { toString(): string; }\ninterface RawLpPosition {\n lpProvider: PublicKey;\n market: PublicKey;\n liquidityProvided: BNLike;\n feesEarned: BNLike;\n feesClaimed: boolean;\n feesClaimedAmount: BNLike;\n bump: number;\n}\n\nfunction decode(raw: RawLpPosition): LpPositionAccount {\n return {\n lpProvider: raw.lpProvider,\n market: raw.market,\n liquidityProvided: BigInt(raw.liquidityProvided.toString()),\n feesEarned: BigInt(raw.feesEarned.toString()),\n feesClaimed: raw.feesClaimed,\n feesClaimedAmount: BigInt(raw.feesClaimedAmount.toString()),\n bump: raw.bump,\n };\n}\n\ninterface LpPositionAccountFacade {\n fetchNullable: (pk: PublicKey) => Promise<RawLpPosition | null>;\n all: (filters?: unknown[]) => Promise<Array<{ publicKey: PublicKey; account: RawLpPosition }>>;\n}\n\nfunction facade(client: CypherClient): LpPositionAccountFacade {\n return (client.program.account as unknown as Record<string, LpPositionAccountFacade>)\n .lpPosition as LpPositionAccountFacade;\n}\n\nexport async function fetchLpPosition(\n client: CypherClient,\n market: PublicKey,\n creator: PublicKey,\n): Promise<LpPositionAccount | null> {\n const [pda] = lpPositionPda(market, creator, client.programId);\n const raw = await facade(client).fetchNullable(pda);\n return raw ? decode(raw) : null;\n}\n\nexport async function fetchLpPositionsByProvider(\n client: CypherClient,\n provider: PublicKey,\n): Promise<Array<{ publicKey: PublicKey; account: LpPositionAccount }>> {\n const raw = await facade(client).all([lpPositionFilters.byProvider(provider)]);\n return raw.map(({ publicKey, account }) => ({ publicKey, account: decode(account) }));\n}\n","import { BN } from \"@anchor-lang/core\";\nimport {\n AddressLookupTableProgram,\n PublicKey,\n type TransactionInstruction,\n} from \"@solana/web3.js\";\nimport {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport type { CypherClient } from \"../client.ts\";\n\n/* ----------------------------------------------------------------------- *\n * Re-exports — the SDK is the single import surface for end users so they *\n * don't have to know about spl-token or web3.js internals. *\n * ----------------------------------------------------------------------- */\n\nexport {\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n};\nexport { SystemProgram } from \"@solana/web3.js\";\n\n/** Address Lookup Table program ID — required by `init_*_comp_def` ixs. */\nexport const ADDRESS_LOOKUP_TABLE_PROGRAM_ID =\n AddressLookupTableProgram.programId;\n\n/* ----------------------------------------------------------------------- *\n * Type helpers *\n * ----------------------------------------------------------------------- */\n\n/**\n * Anchor method-builder shape exposed by `program.methods.fooBar(...)`.\n *\n * Typed loosely on purpose — each per-instruction builder constrains its\n * own argument shape before delegating, so the loose typing here doesn't\n * leak into user-facing APIs.\n */\nexport interface AnchorMethodBuilder {\n (...args: unknown[]): {\n accountsPartial: (accounts: Record<string, PublicKey>) => {\n instruction: () => Promise<TransactionInstruction>;\n };\n };\n}\n\n/**\n * Look up `methodName` on the Anchor `program.methods` object and assert\n * it exists. Centralizes the unsafe cast (Anchor's tagged-union typing\n * narrows by method name in ways that conflict with our generic builders)\n * so callsites stay clean.\n */\nexport function method(\n client: CypherClient,\n methodName: string,\n): AnchorMethodBuilder {\n const m = (client.program.methods as unknown as Record<string, AnchorMethodBuilder>)[\n methodName\n ];\n if (!m) {\n throw new Error(\n `instructions: unknown program method '${methodName}' — IDL out of sync?`,\n );\n }\n return m;\n}\n\n/** Convert `bigint | number | BN` → `BN`. Idempotent. */\nexport function toBN(v: bigint | number | BN): BN {\n if (v instanceof BN) return v;\n return new BN(typeof v === \"bigint\" ? v.toString() : v);\n}\n\n/** The default ATA derivation for `(owner, mint)`. */\nexport function userAta(owner: PublicKey, mint: PublicKey): PublicKey {\n return getAssociatedTokenAddressSync(mint, owner, true);\n}\n","import type { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport { globalStatePda, marketPda, marketVaultPda } from \"../pda.ts\";\nimport { MAX_PROTOCOL_FEE_BPS, MAX_LP_FEE_BPS } from \"../config.ts\";\nimport { SystemProgram, TOKEN_PROGRAM_ID, method, toBN } from \"./common.ts\";\n\n/** Arguments accepted by `initialize`. */\nexport interface InitializeParams {\n /** Protocol fee in basis points (max 100 = 1%). */\n protocolFeeRateBps: number;\n /** LP fee in basis points (max 500 = 5%). */\n lpFeeRateBps: number;\n /** Admin (also the fee-payer); usually `client.wallet.publicKey`. */\n admin: PublicKey;\n /** SPL token account that will receive protocol fees. */\n protocolTreasury: PublicKey;\n /** SPL mint (CSDC on devnet, USDC on mainnet) the protocol will accept. */\n acceptedMint: PublicKey;\n}\n\n/**\n * One-time setup: create the singleton `GlobalState` PDA, fix the\n * protocol/LP fee rates, and pin the protocol treasury + accepted mint.\n *\n * Throws if either fee rate exceeds the on-chain hard cap so a frontend\n * sees the failure synchronously instead of waiting for an `InvalidFeeRate`\n * tx error.\n */\nexport async function initializeIx(\n client: CypherClient,\n params: InitializeParams,\n): Promise<TransactionInstruction> {\n if (\n !Number.isInteger(params.protocolFeeRateBps) ||\n params.protocolFeeRateBps < 0 ||\n params.protocolFeeRateBps > MAX_PROTOCOL_FEE_BPS\n ) {\n throw new Error(\n `initializeIx: protocolFeeRateBps must be in [0, ${MAX_PROTOCOL_FEE_BPS}]`,\n );\n }\n if (\n !Number.isInteger(params.lpFeeRateBps) ||\n params.lpFeeRateBps < 0 ||\n params.lpFeeRateBps > MAX_LP_FEE_BPS\n ) {\n throw new Error(\n `initializeIx: lpFeeRateBps must be in [0, ${MAX_LP_FEE_BPS}]`,\n );\n }\n const [gsPda] = globalStatePda(client.programId);\n return method(client, \"initialize\")(params.protocolFeeRateBps, params.lpFeeRateBps)\n .accountsPartial({\n admin: params.admin,\n globalState: gsPda,\n protocolTreasury: params.protocolTreasury,\n acceptedMint: params.acceptedMint,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n}\n\n/** Arguments accepted by `update_accepted_mint`. */\nexport interface UpdateAcceptedMintParams {\n admin: PublicKey;\n newMint: PublicKey;\n newTreasury: PublicKey;\n}\n\n/** Admin-only: rotate the accepted SPL mint and the treasury. */\nexport async function updateAcceptedMintIx(\n client: CypherClient,\n params: UpdateAcceptedMintParams,\n): Promise<TransactionInstruction> {\n const [gsPda] = globalStatePda(client.programId);\n return method(client, \"updateAcceptedMint\")()\n .accountsPartial({\n admin: params.admin,\n globalState: gsPda,\n newMint: params.newMint,\n newTreasury: params.newTreasury,\n })\n .instruction();\n}\n\n/** Arguments accepted by `admin_claim_remaining`. */\nexport interface AdminClaimRemainingParams {\n admin: PublicKey;\n /** Specific market the admin is sweeping. */\n marketId: bigint | number;\n /** SPL account that will receive the swept tokens (the treasury). */\n protocolTreasury: PublicKey;\n}\n\n/**\n * Admin-only: sweep leftover vault balance after all deadlines lapse.\n *\n * The contract guards against early sweeps (state-aware check on\n * `refund_deadline` / `resolution_deadline + DEFAULT_REFUND_PERIOD`), so\n * a UX layer should only expose this once `marketPhase` returns \"expired\".\n */\nexport async function adminClaimRemainingIx(\n client: CypherClient,\n params: AdminClaimRemainingParams,\n): Promise<TransactionInstruction> {\n const [gsPda] = globalStatePda(client.programId);\n const [marketPdaKey] = marketPda(toBN(params.marketId), client.programId);\n const [vaultPda] = marketVaultPda(marketPdaKey, client.programId);\n return method(client, \"adminClaimRemaining\")()\n .accountsPartial({\n admin: params.admin,\n globalState: gsPda,\n market: marketPdaKey,\n marketVault: vaultPda,\n protocolTreasury: params.protocolTreasury,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .instruction();\n}\n","import { getCompDefAccOffset } from \"@arcium-hq/client\";\n\n/**\n * Canonical circuit names defined in\n * `cypher-main/encrypted-ixs/src/lib.rs`. Every Arcium queue/callback\n * mapping (program-side macros, `init_*_comp_def` instructions, client\n * ArgBuilder calls) keys off these strings — keep them in lockstep with\n * the upstream `#[instruction] fn NAME` declarations.\n */\nexport const CIRCUITS = {\n placePrivateBetYesno: \"place_private_bet_yesno\",\n revealMarketOutcomeYesno: \"reveal_market_outcome_yesno\",\n computeYesnoPayout: \"compute_yesno_payout\",\n computeYesnoRefund: \"compute_yesno_refund\",\n placePrivateBetMulti: \"place_private_bet_multi\",\n revealMarketOutcomeMulti: \"reveal_market_outcome_multi\",\n computeMultiPayout: \"compute_multi_payout\",\n computeMultiRefund: \"compute_multi_refund\",\n} as const;\n\nexport type CircuitName = (typeof CIRCUITS)[keyof typeof CIRCUITS];\n\n/** Tuple of every circuit name — handy for iterating during admin init. */\nexport const ALL_CIRCUITS = Object.values(CIRCUITS) as CircuitName[];\n\n/**\n * Raw 4-byte LE comp-def offset for `circuit`. Matches the byte format\n * stored on-chain and used as a PDA seed by Arcium.\n */\nexport function compDefOffsetBytes(circuit: CircuitName): Uint8Array {\n return getCompDefAccOffset(circuit);\n}\n\n/**\n * `compDefOffsetBytes` reinterpreted as a `u32` (little-endian).\n *\n * `getCompDefAccAddress` takes this u32 form, so callers building Arcium\n * account contexts use this helper — it avoids a Buffer round-trip on\n * every queue invocation.\n */\nexport function compDefOffsetU32(circuit: CircuitName): number {\n const bytes = compDefOffsetBytes(circuit);\n return Buffer.from(bytes).readUInt32LE(0);\n}\n","import type { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { getCompDefAccAddress, getMXEAccAddress, getArciumProgramId } from \"@arcium-hq/client\";\nimport type { CypherClient } from \"../client.ts\";\nimport { CIRCUITS, compDefOffsetU32, type CircuitName } from \"../arcium/offsets.ts\";\nimport { ADDRESS_LOOKUP_TABLE_PROGRAM_ID, SystemProgram, method } from \"./common.ts\";\n\n/**\n * Map from Anchor `init_*_comp_def` instruction → the circuit it registers.\n *\n * The Anchor method name and the circuit name are NOT aligned (e.g.\n * `init_reveal_yesno_comp_def` registers `reveal_market_outcome_yesno`),\n * so we keep an explicit table rather than guess.\n */\nexport const INIT_COMP_DEF_INSTRUCTIONS = {\n initPlaceBetYesnoCompDef: CIRCUITS.placePrivateBetYesno,\n initRevealYesnoCompDef: CIRCUITS.revealMarketOutcomeYesno,\n initPayoutYesnoCompDef: CIRCUITS.computeYesnoPayout,\n initRefundYesnoCompDef: CIRCUITS.computeYesnoRefund,\n initPlaceBetMultiCompDef: CIRCUITS.placePrivateBetMulti,\n initRevealMultiCompDef: CIRCUITS.revealMarketOutcomeMulti,\n initPayoutMultiCompDef: CIRCUITS.computeMultiPayout,\n initRefundMultiCompDef: CIRCUITS.computeMultiRefund,\n} as const;\n\nexport type InitCompDefMethodName = keyof typeof INIT_COMP_DEF_INSTRUCTIONS;\n\nexport interface InitCompDefParams {\n /** Tx signer + rent payer; usually the admin or deployer. */\n payer: PublicKey;\n /** The address lookup table previously registered for this MXE. */\n addressLookupTable: PublicKey;\n}\n\n/**\n * Build a generic `init_*_comp_def` instruction for `methodName`.\n *\n * Admin-only; runs once per circuit per deployment. Production frontends\n * should never call this — it's used by deploy scripts (see\n * `cypher-main/scripts/init_comp_defs.ts`).\n */\nexport async function initCompDefIx(\n client: CypherClient,\n methodName: InitCompDefMethodName,\n params: InitCompDefParams,\n): Promise<TransactionInstruction> {\n const circuit = INIT_COMP_DEF_INSTRUCTIONS[methodName];\n if (!circuit) {\n throw new Error(`initCompDefIx: unknown method '${methodName}'`);\n }\n const mxeAccount = getMXEAccAddress(client.programId);\n const compDefAccount = getCompDefAccAddress(\n client.programId,\n compDefOffsetU32(circuit),\n );\n return method(client, methodName)()\n .accountsPartial({\n payer: params.payer,\n mxeAccount,\n compDefAccount,\n addressLookupTable: params.addressLookupTable,\n lutProgram: ADDRESS_LOOKUP_TABLE_PROGRAM_ID,\n arciumProgram: getArciumProgramId(),\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n}\n\n/** Sugar — produce all 8 init-comp-def instructions in source order. */\nexport async function buildAllInitCompDefIx(\n client: CypherClient,\n params: InitCompDefParams,\n): Promise<Array<{ circuit: CircuitName; ix: TransactionInstruction }>> {\n const out: Array<{ circuit: CircuitName; ix: TransactionInstruction }> = [];\n for (const [methodName, circuit] of Object.entries(INIT_COMP_DEF_INSTRUCTIONS) as Array<[\n InitCompDefMethodName,\n CircuitName,\n ]>) {\n const ix = await initCompDefIx(client, methodName, params);\n out.push({ circuit, ix });\n }\n return out;\n}\n","import type { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport {\n globalStatePda,\n lpPositionPda,\n marketPda,\n marketVaultPda,\n} from \"../pda.ts\";\nimport {\n MAX_OUTCOMES_MULTI,\n MAX_QUESTION_BYTES,\n MIN_OUTCOMES_MULTI,\n MIN_CHALLENGE_PERIOD_SECS,\n MAX_CHALLENGE_PERIOD_SECS,\n MIN_CREATOR_BOND,\n} from \"../config.ts\";\nimport {\n SystemProgram,\n TOKEN_PROGRAM_ID,\n method,\n toBN,\n userAta,\n} from \"./common.ts\";\n\n/** Shared validation for `createMarket` and `createMarketMulti`. */\nfunction validateMarketDraft(params: {\n question: string;\n category: number;\n closeTime: bigint | number;\n challengePeriod: bigint | number;\n bondAmount: bigint | number;\n}): void {\n const qBytes = new TextEncoder().encode(params.question).length;\n if (qBytes === 0) throw new Error(\"createMarketIx: question is empty\");\n if (qBytes > MAX_QUESTION_BYTES) {\n throw new Error(\n `createMarketIx: question is ${qBytes} bytes (max ${MAX_QUESTION_BYTES})`,\n );\n }\n if (\n !Number.isInteger(params.category) ||\n params.category < 0 ||\n params.category > 6\n ) {\n throw new Error(\"createMarketIx: category must be a u8 in [0, 6]\");\n }\n const cp = BigInt(params.challengePeriod);\n if (cp < BigInt(MIN_CHALLENGE_PERIOD_SECS) || cp > BigInt(MAX_CHALLENGE_PERIOD_SECS)) {\n throw new Error(\n `createMarketIx: challengePeriod must be in [${MIN_CHALLENGE_PERIOD_SECS}, ${MAX_CHALLENGE_PERIOD_SECS}] seconds`,\n );\n }\n if (BigInt(params.bondAmount) < MIN_CREATOR_BOND) {\n throw new Error(\n `createMarketIx: bondAmount must be >= ${MIN_CREATOR_BOND} (MIN_CREATOR_BOND = $20 USDC)`,\n );\n }\n}\n\nexport interface CreateMarketParams {\n /** Creator (and signer) — also pays the bond. */\n creator: PublicKey;\n /** Pinned accepted mint — read from `GlobalState.accepted_mint`. */\n acceptedMint: PublicKey;\n /** UTF-8 question (max 200 bytes). */\n question: string;\n /** Unix timestamp the market closes at. Must be ≥ now + 60s (see `isValidCloseTime`). */\n closeTime: bigint | number;\n /** Market category (0–6). */\n category: number;\n /**\n * Market id that *will* be assigned by the contract — equals the\n * current `GlobalState.market_counter`. Callers should refetch\n * `GlobalState` (or `client.globalState.fetch({refresh:true})`) right\n * before building this instruction.\n */\n expectedMarketId: bigint | number;\n /**\n * v0.2+: configurable dispute window length in seconds.\n * Must be within [`MIN_CHALLENGE_PERIOD_SECS`, `MAX_CHALLENGE_PERIOD_SECS`]\n * (24h–48h). After the reveal callback, the market sits in\n * `PendingResolution` for this long, during which anyone can flag.\n */\n challengePeriod: bigint | number;\n /**\n * Creator bond in micro-USDC/CSDC (u64). Must be ≥ `MIN_CREATOR_BOND`\n * ($20 USDC). No upper bound — creators may lock more to signal\n * commitment. Stored per-market in `MarketAccount.creatorBond` and\n * returned via `withdrawCreatorFunds` after resolution.\n */\n bondAmount: bigint | number;\n}\n\n/**\n * Build a `create_market` instruction (YesNo).\n *\n * Anchor's account resolver derives the `Market` PDA from\n * `GlobalState.market_counter` at tx time — but we still pass\n * `expectedMarketId` explicitly to derive every dependent PDA (vault,\n * lp_position) the same way the contract will. If `expectedMarketId` is\n * stale by tx time (someone else created a market in between), the tx\n * fails with an Anchor PDA-mismatch error and the caller can retry.\n */\nexport async function createMarketIx(\n client: CypherClient,\n params: CreateMarketParams,\n): Promise<TransactionInstruction> {\n validateMarketDraft(params);\n const [gsPda] = globalStatePda(client.programId);\n const [marketPdaKey] = marketPda(toBN(params.expectedMarketId), client.programId);\n const [vaultPda] = marketVaultPda(marketPdaKey, client.programId);\n const [lpPda] = lpPositionPda(marketPdaKey, params.creator, client.programId);\n const creatorAta = userAta(params.creator, params.acceptedMint);\n return method(client, \"createMarket\")(\n params.question,\n toBN(params.closeTime),\n params.category,\n toBN(params.challengePeriod),\n toBN(params.bondAmount),\n )\n .accountsPartial({\n creator: params.creator,\n globalState: gsPda,\n market: marketPdaKey,\n lpPosition: lpPda,\n marketVault: vaultPda,\n creatorTokenAccount: creatorAta,\n acceptedMint: params.acceptedMint,\n tokenProgram: TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n}\n\nexport interface CreateMarketMultiParams extends CreateMarketParams {\n /** Number of outcomes (2–4). */\n numOutcomes: number;\n}\n\n/** Multi-outcome variant of `create_market`. */\nexport async function createMarketMultiIx(\n client: CypherClient,\n params: CreateMarketMultiParams,\n): Promise<TransactionInstruction> {\n validateMarketDraft(params);\n if (\n !Number.isInteger(params.numOutcomes) ||\n params.numOutcomes < MIN_OUTCOMES_MULTI ||\n params.numOutcomes > MAX_OUTCOMES_MULTI\n ) {\n throw new Error(\n `createMarketMultiIx: numOutcomes must be in [${MIN_OUTCOMES_MULTI}, ${MAX_OUTCOMES_MULTI}]`,\n );\n }\n const [gsPda] = globalStatePda(client.programId);\n const [marketPdaKey] = marketPda(toBN(params.expectedMarketId), client.programId);\n const [vaultPda] = marketVaultPda(marketPdaKey, client.programId);\n const [lpPda] = lpPositionPda(marketPdaKey, params.creator, client.programId);\n const creatorAta = userAta(params.creator, params.acceptedMint);\n return method(client, \"createMarketMulti\")(\n params.question,\n toBN(params.closeTime),\n params.category,\n params.numOutcomes,\n toBN(params.challengePeriod),\n toBN(params.bondAmount),\n )\n .accountsPartial({\n creator: params.creator,\n globalState: gsPda,\n market: marketPdaKey,\n lpPosition: lpPda,\n marketVault: vaultPda,\n creatorTokenAccount: creatorAta,\n acceptedMint: params.acceptedMint,\n tokenProgram: TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n}\n\nexport interface CancelMarketParams {\n creator: PublicKey;\n marketId: bigint | number;\n acceptedMint: PublicKey;\n}\n\n/** `cancel_market` — creator-only, only valid when zero bets placed. */\nexport async function cancelMarketIx(\n client: CypherClient,\n params: CancelMarketParams,\n): Promise<TransactionInstruction> {\n const [marketPdaKey] = marketPda(toBN(params.marketId), client.programId);\n const [vaultPda] = marketVaultPda(marketPdaKey, client.programId);\n const [lpPda] = lpPositionPda(marketPdaKey, params.creator, client.programId);\n const creatorAta = userAta(params.creator, params.acceptedMint);\n return method(client, \"cancelMarket\")()\n .accountsPartial({\n creator: params.creator,\n market: marketPdaKey,\n marketVault: vaultPda,\n lpPosition: lpPda,\n creatorTokenAccount: creatorAta,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .instruction();\n}\n\nexport interface WithdrawCreatorFundsParams {\n creator: PublicKey;\n marketId: bigint | number;\n acceptedMint: PublicKey;\n}\n\n/** `withdraw_creator_funds` — creator pulls bond + accumulated LP fees after resolve. */\nexport async function withdrawCreatorFundsIx(\n client: CypherClient,\n params: WithdrawCreatorFundsParams,\n): Promise<TransactionInstruction> {\n const [marketPdaKey] = marketPda(toBN(params.marketId), client.programId);\n const [vaultPda] = marketVaultPda(marketPdaKey, client.programId);\n const [lpPda] = lpPositionPda(marketPdaKey, params.creator, client.programId);\n const creatorAta = userAta(params.creator, params.acceptedMint);\n return method(client, \"withdrawCreatorFunds\")()\n .accountsPartial({\n creator: params.creator,\n market: marketPdaKey,\n lpPosition: lpPda,\n marketVault: vaultPda,\n creatorTokenAccount: creatorAta,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .instruction();\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { BN } from \"@anchor-lang/core\";\nimport {\n getMXEAccAddress,\n getMempoolAccAddress,\n getExecutingPoolAccAddress,\n getComputationAccAddress,\n getClusterAccAddress,\n getCompDefAccAddress,\n getFeePoolAccAddress,\n getClockAccAddress,\n getLookupTableAddress,\n getArciumProgramId,\n} from \"@arcium-hq/client\";\nimport type { CypherClient } from \"../client.ts\";\nimport { arciumSignerPda } from \"../pda.ts\";\nimport { compDefOffsetU32, type CircuitName } from \"./offsets.ts\";\n\n/**\n * The bundle of Arcium-side accounts every `queue_*` Anchor instruction\n * expects. Each field corresponds to one entry in the on-chain\n * `#[queue_computation_accounts(...)]` macro in `cypher-main/src/lib.rs`.\n *\n * Naming matches the Anchor account context fields in cypher-main so\n * spread-into-`.accountsPartial(...)` works cleanly.\n */\nexport interface ArciumQueueAccounts {\n /** The per-computation PDA derived from `(clusterOffset, computationOffset)`. */\n computationAccount: PublicKey;\n /** Cluster PDA on the chosen Arcium cluster. */\n clusterAccount: PublicKey;\n /** MXE PDA for the Cypher program — the on-chain metadata holder. */\n mxeAccount: PublicKey;\n /** Mempool that buffers computations before assignment to executors. */\n mempoolAccount: PublicKey;\n /** Currently-executing pool on the cluster. */\n executingPool: PublicKey;\n /** Comp-def PDA holding the compiled circuit bytecode + verifier key. */\n compDefAccount: PublicKey;\n /** Shared Arcium fee-pool PDA. */\n poolAccount: PublicKey;\n /** Shared Arcium clock PDA — used to enforce monotonic ordering. */\n clockAccount: PublicKey;\n /** Cypher program-side signer PDA (`b\"ArciumSignerAccount\"`). */\n signPdaAccount: PublicKey;\n /** Arcium executable program ID — included for the program CPI. */\n arciumProgram: PublicKey;\n /** v0 lookup table containing the MXE's heavy accounts. */\n addressLookupTable: PublicKey;\n}\n\n/**\n * Derive every Arcium account the Cypher program expects for a single\n * `queue_*` invocation. Pure: only reads from the `client` config and a\n * caller-supplied `computationOffset`.\n *\n * `computationOffset` is the random u64 the caller picks per request —\n * the on-chain `place_private_bet_*`, `resolve_market_*`, `claim_*`\n * instructions all take it as their first argument and use it as the PDA\n * seed for the computation account.\n */\nexport function buildArciumQueueAccounts(\n client: CypherClient,\n params: {\n circuit: CircuitName;\n computationOffset: bigint | BN;\n /** Lookup table address; if omitted, derived from the MXE account. */\n addressLookupTable?: PublicKey;\n /** Optional MXE LUT offset slot — needed only if you pre-fetched the MXE. */\n lutOffsetSlot?: BN;\n },\n): ArciumQueueAccounts {\n const clusterOffset = client.cluster.arciumClusterOffset;\n const offsetBN =\n params.computationOffset instanceof BN\n ? params.computationOffset\n : new BN(params.computationOffset.toString());\n\n const mxeAccount = getMXEAccAddress(client.programId);\n const addressLookupTable =\n params.addressLookupTable ??\n (params.lutOffsetSlot\n ? getLookupTableAddress(client.programId, params.lutOffsetSlot)\n : // The LUT offset slot is stored on the MXE account; callers that\n // don't have it cached can pre-fetch via `fetchMxeLut(client)` or\n // pass it through after the first call. Throwing here forces them\n // to be explicit rather than silently submitting a tx with a stale\n // LUT.\n (() => {\n throw new Error(\n \"buildArciumQueueAccounts: pass addressLookupTable or lutOffsetSlot\",\n );\n })());\n\n return {\n computationAccount: getComputationAccAddress(clusterOffset, offsetBN),\n clusterAccount: getClusterAccAddress(clusterOffset),\n mxeAccount,\n mempoolAccount: getMempoolAccAddress(clusterOffset),\n executingPool: getExecutingPoolAccAddress(clusterOffset),\n compDefAccount: getCompDefAccAddress(\n client.programId,\n compDefOffsetU32(params.circuit),\n ),\n poolAccount: getFeePoolAccAddress(),\n clockAccount: getClockAccAddress(),\n signPdaAccount: arciumSignerPda(client.programId)[0],\n arciumProgram: getArciumProgramId(),\n addressLookupTable,\n };\n}\n\n/**\n * Fetch the MXE account once to learn its `lutOffsetSlot` and derive the\n * lookup-table address. Cached on `client` so a frontend that places many\n * bets doesn't repeatedly hit RPC.\n */\nconst _mxeLutCache = new WeakMap<CypherClient, { lut: PublicKey; slot: BN }>();\nexport async function fetchMxeLookupTable(\n client: CypherClient,\n): Promise<{ lut: PublicKey; slot: BN }> {\n const cached = _mxeLutCache.get(client);\n if (cached) return cached;\n\n const mxe = getMXEAccAddress(client.programId);\n // The arcium client typing is loose; we just need lutOffsetSlot.\n const arciumProgram =\n // dynamic import keeps this off the import graph for browser-only\n // surface that never queues a computation\n (await import(\"@arcium-hq/client\")).getArciumProgram(client.provider);\n const facade = (arciumProgram.account as unknown as Record<string, {\n fetch: (pk: PublicKey) => Promise<{ lutOffsetSlot: BN }>;\n }>).mxeAccount as { fetch: (pk: PublicKey) => Promise<{ lutOffsetSlot: BN }> };\n const mxeAcc = await facade.fetch(mxe);\n\n const slot = mxeAcc.lutOffsetSlot;\n const lut = getLookupTableAddress(client.programId, slot);\n const result = { lut, slot };\n _mxeLutCache.set(client, result);\n return result;\n}\n","import { PublicKey, type TransactionInstruction } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport {\n globalStatePda,\n marketPda,\n marketVaultPda,\n positionPda,\n} from \"../pda.ts\";\nimport { buildArciumQueueAccounts } from \"../arcium/accounts.ts\";\nimport { CIRCUITS, type CircuitName } from \"../arcium/offsets.ts\";\nimport {\n SystemProgram,\n TOKEN_PROGRAM_ID,\n method,\n toBN,\n userAta,\n} from \"./common.ts\";\n\nfunction assertU8(name: string, v: number): void {\n if (!Number.isInteger(v) || v < 0 || v > 0xff) {\n throw new Error(`placePrivateBet*Ix: ${name} must be a u8`);\n }\n}\n\nfunction assertCiphertext(name: string, v: Uint8Array): void {\n if (v.length !== 32) {\n throw new Error(`placePrivateBet*Ix: ${name} must be exactly 32 bytes`);\n }\n}\n\n/** Arguments common to YesNo and MultiOutcome bet placement. */\nexport interface PlacePrivateBetParams {\n /** Tx payer + signer; usually the user. Often equal to `user`. */\n payer: PublicKey;\n /** The user placing the bet (signer; the position is keyed by this pubkey). */\n user: PublicKey;\n /** Market id. */\n marketId: bigint | number;\n /** Accepted mint — read from `GlobalState.accepted_mint`. */\n acceptedMint: PublicKey;\n /** Protocol treasury SPL token account — from `GlobalState.protocol_treasury`. */\n protocolTreasury: PublicKey;\n /** Random `u64` per request — use `randomComputationOffset()`. */\n computationOffset: bigint | number;\n /** Gross bet amount (micro-USDC). On-chain net is computed via fee math. */\n betAmountUsdc: bigint | number;\n /** 32-byte ciphertext of net amount (from `encryptBetInput`). */\n encryptedAmount: Uint8Array;\n /** 32-byte ciphertext of outcome side. */\n encryptedSide: Uint8Array;\n /** User's x25519 public key (32 bytes). */\n userX25519Pubkey: Uint8Array;\n /** u128 nonce that produced the two ciphertexts. */\n nonce: bigint;\n /** Address lookup table for the MXE (pass `fetchMxeLookupTable(client).lut`). */\n addressLookupTable: PublicKey;\n}\n\nasync function buildPlaceBetIx(\n client: CypherClient,\n circuit: CircuitName,\n methodName: \"placePrivateBetYesno\" | \"placePrivateBetMulti\",\n params: PlacePrivateBetParams,\n): Promise<TransactionInstruction> {\n assertCiphertext(\"encryptedAmount\", params.encryptedAmount);\n assertCiphertext(\"encryptedSide\", params.encryptedSide);\n assertCiphertext(\"userX25519Pubkey\", params.userX25519Pubkey);\n assertU8(\"(amount sanity)\", 0); // no-op guard; kept for symmetry\n\n const [gsPda] = globalStatePda(client.programId);\n const [marketPdaKey] = marketPda(toBN(params.marketId), client.programId);\n const [vaultPda] = marketVaultPda(marketPdaKey, client.programId);\n const [positionPdaKey] = positionPda(marketPdaKey, params.user, client.programId);\n const userTokenAccount = userAta(params.user, params.acceptedMint);\n\n const arcium = buildArciumQueueAccounts(client, {\n circuit,\n computationOffset: toBN(params.computationOffset),\n addressLookupTable: params.addressLookupTable,\n });\n\n return method(client, methodName)(\n toBN(params.computationOffset),\n toBN(params.betAmountUsdc),\n Array.from(params.encryptedAmount),\n Array.from(params.encryptedSide),\n Array.from(params.userX25519Pubkey),\n toBN(params.nonce),\n )\n .accountsPartial({\n payer: params.payer,\n signPdaAccount: arcium.signPdaAccount,\n mxeAccount: arcium.mxeAccount,\n mempoolAccount: arcium.mempoolAccount,\n executingPool: arcium.executingPool,\n computationAccount: arcium.computationAccount,\n compDefAccount: arcium.compDefAccount,\n clusterAccount: arcium.clusterAccount,\n poolAccount: arcium.poolAccount,\n clockAccount: arcium.clockAccount,\n systemProgram: SystemProgram.programId,\n arciumProgram: arcium.arciumProgram,\n user: params.user,\n globalState: gsPda,\n market: marketPdaKey,\n marketVault: vaultPda,\n userTokenAccount,\n protocolTreasury: params.protocolTreasury,\n position: positionPdaKey,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .instruction();\n}\n\n/** `place_private_bet_yesno` — encrypted bet on a YES/NO market. */\nexport function placePrivateBetYesnoIx(\n client: CypherClient,\n params: PlacePrivateBetParams,\n): Promise<TransactionInstruction> {\n return buildPlaceBetIx(\n client,\n CIRCUITS.placePrivateBetYesno,\n \"placePrivateBetYesno\",\n params,\n );\n}\n\n/** `place_private_bet_multi` — encrypted bet on a multi-outcome market. */\nexport function placePrivateBetMultiIx(\n client: CypherClient,\n params: PlacePrivateBetParams,\n): Promise<TransactionInstruction> {\n return buildPlaceBetIx(\n client,\n CIRCUITS.placePrivateBetMulti,\n \"placePrivateBetMulti\",\n params,\n );\n}\n\n// PublicKey export keeps `import type` chains tidy for downstream callers.\nexport { PublicKey };\n","import type { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport { marketPda } from \"../pda.ts\";\nimport { buildArciumQueueAccounts } from \"../arcium/accounts.ts\";\nimport { CIRCUITS, type CircuitName } from \"../arcium/offsets.ts\";\nimport { SystemProgram, method, toBN } from \"./common.ts\";\n\n/** Shared shape of `resolve_market_yesno` and `resolve_market_multi`. */\nexport interface ResolveMarketParams {\n payer: PublicKey;\n resolver: PublicKey;\n marketId: bigint | number;\n computationOffset: bigint | number;\n /**\n * Outcome value — YesNo: 0 (NO) or 1 (YES); Multi: 0..numOutcomes-1.\n *\n * The contract enforces that resolver != creator + matches the address\n * the creator originally pinned on the market.\n */\n outcomeValue: number;\n addressLookupTable: PublicKey;\n}\n\nasync function buildResolveIx(\n client: CypherClient,\n circuit: CircuitName,\n methodName: \"resolveMarketYesno\" | \"resolveMarketMulti\",\n params: ResolveMarketParams,\n): Promise<TransactionInstruction> {\n if (\n !Number.isInteger(params.outcomeValue) ||\n params.outcomeValue < 0 ||\n params.outcomeValue > 0xff\n ) {\n throw new Error(\"resolveMarketIx: outcomeValue must be a u8\");\n }\n const [marketPdaKey] = marketPda(toBN(params.marketId), client.programId);\n const arcium = buildArciumQueueAccounts(client, {\n circuit,\n computationOffset: toBN(params.computationOffset),\n addressLookupTable: params.addressLookupTable,\n });\n return method(client, methodName)(toBN(params.computationOffset), params.outcomeValue)\n .accountsPartial({\n payer: params.payer,\n signPdaAccount: arcium.signPdaAccount,\n mxeAccount: arcium.mxeAccount,\n mempoolAccount: arcium.mempoolAccount,\n executingPool: arcium.executingPool,\n computationAccount: arcium.computationAccount,\n compDefAccount: arcium.compDefAccount,\n clusterAccount: arcium.clusterAccount,\n poolAccount: arcium.poolAccount,\n clockAccount: arcium.clockAccount,\n systemProgram: SystemProgram.programId,\n arciumProgram: arcium.arciumProgram,\n resolver: params.resolver,\n market: marketPdaKey,\n })\n .instruction();\n}\n\n/** `resolve_market_yesno` — submit outcome for a YES/NO market. */\nexport function resolveMarketYesnoIx(\n client: CypherClient,\n params: ResolveMarketParams,\n): Promise<TransactionInstruction> {\n return buildResolveIx(\n client,\n CIRCUITS.revealMarketOutcomeYesno,\n \"resolveMarketYesno\",\n params,\n );\n}\n\n/** `resolve_market_multi` — submit outcome for a multi-outcome market. */\nexport function resolveMarketMultiIx(\n client: CypherClient,\n params: ResolveMarketParams,\n): Promise<TransactionInstruction> {\n return buildResolveIx(\n client,\n CIRCUITS.revealMarketOutcomeMulti,\n \"resolveMarketMulti\",\n params,\n );\n}\n","import type { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport { marketPda, marketVaultPda, positionPda } from \"../pda.ts\";\nimport { buildArciumQueueAccounts } from \"../arcium/accounts.ts\";\nimport { CIRCUITS, type CircuitName } from \"../arcium/offsets.ts\";\nimport {\n SystemProgram,\n TOKEN_PROGRAM_ID,\n method,\n toBN,\n userAta,\n} from \"./common.ts\";\n\n/** Shared params for both claim variants. */\nexport interface ClaimParams {\n payer: PublicKey;\n user: PublicKey;\n marketId: bigint | number;\n acceptedMint: PublicKey;\n computationOffset: bigint | number;\n addressLookupTable: PublicKey;\n}\n\ntype ClaimMethod =\n | \"claimPayoutYesno\"\n | \"claimPayoutMulti\"\n | \"claimRefundYesno\"\n | \"claimRefundMulti\";\n\nasync function buildClaimIx(\n client: CypherClient,\n circuit: CircuitName,\n methodName: ClaimMethod,\n params: ClaimParams,\n): Promise<TransactionInstruction> {\n const [marketPdaKey] = marketPda(toBN(params.marketId), client.programId);\n const [vaultPda] = marketVaultPda(marketPdaKey, client.programId);\n const [positionPdaKey] = positionPda(marketPdaKey, params.user, client.programId);\n const userTokenAccount = userAta(params.user, params.acceptedMint);\n\n const arcium = buildArciumQueueAccounts(client, {\n circuit,\n computationOffset: toBN(params.computationOffset),\n addressLookupTable: params.addressLookupTable,\n });\n\n return method(client, methodName)(toBN(params.computationOffset))\n .accountsPartial({\n payer: params.payer,\n signPdaAccount: arcium.signPdaAccount,\n mxeAccount: arcium.mxeAccount,\n mempoolAccount: arcium.mempoolAccount,\n executingPool: arcium.executingPool,\n computationAccount: arcium.computationAccount,\n compDefAccount: arcium.compDefAccount,\n clusterAccount: arcium.clusterAccount,\n poolAccount: arcium.poolAccount,\n clockAccount: arcium.clockAccount,\n systemProgram: SystemProgram.programId,\n arciumProgram: arcium.arciumProgram,\n user: params.user,\n market: marketPdaKey,\n position: positionPdaKey,\n marketVault: vaultPda,\n userTokenAccount,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .instruction();\n}\n\n/** `claim_payout_yesno` — winner pulls payout from a resolved YesNo market. */\nexport function claimPayoutYesnoIx(\n client: CypherClient,\n params: ClaimParams,\n): Promise<TransactionInstruction> {\n return buildClaimIx(\n client,\n CIRCUITS.computeYesnoPayout,\n \"claimPayoutYesno\",\n params,\n );\n}\n\n/** `claim_payout_multi` — winner pulls payout from a resolved multi market. */\nexport function claimPayoutMultiIx(\n client: CypherClient,\n params: ClaimParams,\n): Promise<TransactionInstruction> {\n return buildClaimIx(\n client,\n CIRCUITS.computeMultiPayout,\n \"claimPayoutMulti\",\n params,\n );\n}\n\n/** `claim_refund_yesno` — refund on a YesNo market that never resolved. */\nexport function claimRefundYesnoIx(\n client: CypherClient,\n params: ClaimParams,\n): Promise<TransactionInstruction> {\n return buildClaimIx(\n client,\n CIRCUITS.computeYesnoRefund,\n \"claimRefundYesno\",\n params,\n );\n}\n\n/** `claim_refund_multi` — refund on a multi market that never resolved. */\nexport function claimRefundMultiIx(\n client: CypherClient,\n params: ClaimParams,\n): Promise<TransactionInstruction> {\n return buildClaimIx(\n client,\n CIRCUITS.computeMultiRefund,\n \"claimRefundMulti\",\n params,\n );\n}\n","import type { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport { globalStatePda, marketPda } from \"../pda.ts\";\nimport { method, toBN } from \"./common.ts\";\n\n/* ----------------------------------------------------------------------- *\n * Dispute / challenge window instructions (v0.2+) *\n * *\n * After the reveal callback fires, the market sits in *\n * `PendingResolution` for `challenge_period` seconds. During this window: *\n * *\n * - any user may `flagResolution` to dispute the outcome *\n * - after the window elapses undisputed, any user may `finalizeResolution`*\n * - the admin may always `adminOverrideResolution` on a disputed market *\n * *\n * None of these involve Arcium computation — pools and outcome are *\n * already plaintext on the Market account by this point. *\n * ----------------------------------------------------------------------- */\n\nexport interface FlagResolutionParams {\n /** The user flagging the resolution (signer). Permissionless. */\n flagger: PublicKey;\n marketId: bigint | number;\n}\n\n/** `flag_resolution` — anyone can flag a pending resolution during the window. */\nexport async function flagResolutionIx(\n client: CypherClient,\n params: FlagResolutionParams,\n): Promise<TransactionInstruction> {\n const [marketPdaKey] = marketPda(toBN(params.marketId), client.programId);\n return method(client, \"flagResolution\")()\n .accountsPartial({\n flagger: params.flagger,\n market: marketPdaKey,\n })\n .instruction();\n}\n\nexport interface FinalizeResolutionParams {\n /** The user calling finalize (signer). Permissionless. */\n caller: PublicKey;\n marketId: bigint | number;\n}\n\n/**\n * `finalize_resolution` — anyone can call once the challenge window has\n * elapsed undisputed. Flips the market from `PendingResolution` → `Resolved`\n * and sets the `claim_deadline` / `refund_deadline`.\n */\nexport async function finalizeResolutionIx(\n client: CypherClient,\n params: FinalizeResolutionParams,\n): Promise<TransactionInstruction> {\n const [marketPdaKey] = marketPda(toBN(params.marketId), client.programId);\n return method(client, \"finalizeResolution\")()\n .accountsPartial({\n caller: params.caller,\n market: marketPdaKey,\n })\n .instruction();\n}\n\nexport interface AdminOverrideResolutionParams {\n /** Admin signer — must match `GlobalState.admin`. */\n admin: PublicKey;\n marketId: bigint | number;\n /**\n * Corrected outcome. YesNo: 0 or 1. Multi: in `[0, numOutcomes)`.\n * Recomputes `payout_ratio` from the on-chain revealed pools.\n */\n outcomeValue: number;\n}\n\n/**\n * `admin_override_resolution` — admin-only escape hatch for disputed markets.\n * Recomputes payout_ratio from already-revealed plaintext pools and flips\n * the market to `Resolved` (no Arcium computation involved).\n */\nexport async function adminOverrideResolutionIx(\n client: CypherClient,\n params: AdminOverrideResolutionParams,\n): Promise<TransactionInstruction> {\n if (!Number.isInteger(params.outcomeValue) || params.outcomeValue < 0 || params.outcomeValue > 0xff) {\n throw new Error(\"adminOverrideResolutionIx: outcomeValue must be a u8\");\n }\n const [marketPdaKey] = marketPda(toBN(params.marketId), client.programId);\n const [gsPda] = globalStatePda(client.programId);\n return method(client, \"adminOverrideResolution\")(params.outcomeValue)\n .accountsPartial({\n admin: params.admin,\n globalState: gsPda,\n market: marketPdaKey,\n })\n .instruction();\n}\n","import { BN } from \"@anchor-lang/core\";\nimport type { Finality } from \"@solana/web3.js\";\nimport { awaitComputationFinalization } from \"@arcium-hq/client\";\nimport type { CypherClient } from \"../client.ts\";\n\n/** Outcome returned by `awaitComputation`. */\nexport interface ComputationResult {\n /** Always `\"finalized\"` on success (we throw otherwise). */\n status: \"finalized\";\n /** Solana signature of the finalization tx (the callback ix). */\n signature: string;\n /** Wall-clock time spent polling, in milliseconds. */\n durationMs: number;\n}\n\nexport interface AwaitComputationOptions {\n /** How long to poll before giving up. Defaults to 120 seconds. */\n timeoutMs?: number;\n /** Commitment for the underlying RPC reads. Defaults to \"confirmed\". */\n commitment?: Finality;\n}\n\n/**\n * Block until the Arcium MPC nodes finalize the queued computation\n * identified by `computationOffset`, returning the finalization\n * signature.\n *\n * Thin wrapper over `@arcium-hq/client/awaitComputationFinalization` —\n * present in the SDK so consumers can `await client.arcium.await(...)`\n * without importing the lower-level package directly.\n *\n * Throws if the cluster doesn't finalize within `timeoutMs`. Action\n * helpers in `src/actions/` wrap this with a \"computation aborted\" check\n * that maps to a clean error before bubbling.\n */\nexport async function awaitComputation(\n client: CypherClient,\n computationOffset: bigint | BN,\n opts: AwaitComputationOptions = {},\n): Promise<ComputationResult> {\n const started = Date.now();\n const offsetBN =\n computationOffset instanceof BN\n ? computationOffset\n : new BN(computationOffset.toString());\n\n const signature = await awaitComputationFinalization(\n client.provider,\n offsetBN,\n client.programId,\n opts.commitment ?? \"confirmed\",\n opts.timeoutMs ?? 120_000,\n );\n return { status: \"finalized\", signature, durationMs: Date.now() - started };\n}\n\n/**\n * Generate a random u64 `computationOffset` for a queue request.\n *\n * Collisions are extraordinarily unlikely with full u64 entropy but the\n * helper rejects 0 (an Arcium reserved sentinel value).\n */\nexport function randomComputationOffset(): bigint {\n const buf = crypto.getRandomValues(new Uint8Array(8));\n let v = 0n;\n for (let i = 7; i >= 0; i--) v = (v << 8n) | BigInt(buf[i] as number);\n return v === 0n ? 1n : v;\n}\n","import {\n Transaction,\n type ConfirmOptions,\n type Signer,\n type TransactionInstruction,\n} from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport { awaitComputation, type ComputationResult } from \"../arcium/callbacks.ts\";\nimport { parseCypherError } from \"../errors.ts\";\n\n/**\n * Lifecycle stages that an end-to-end action passes through. Surfaces via\n * the optional `onProgress` callback on every multi-step action helper so\n * frontends can render fine-grained progress UI (\"Encrypting your bet…\",\n * \"Submitting transaction…\", \"Waiting for MPC nodes…\", \"Confirmed!\").\n */\nexport type ActionStage =\n | \"validating\"\n | \"fetching-state\"\n | \"encrypting\"\n | \"submitting\"\n | \"awaiting-callback\"\n | \"refetching\"\n | \"done\";\n\n/**\n * Progress event payload. The shape stays minimal on purpose — frontends\n * typically map `stage` to a copy string and use `signature` /\n * `computationOffset` as the \"we've reached the chain\" handoff for any\n * progress-bar logic.\n */\nexport interface ActionProgressEvent {\n stage: ActionStage;\n /** Optional human-friendly message — populated for noteworthy stages. */\n message?: string;\n /** Signature once the queue tx lands (\"submitting\" → \"awaiting-callback\"). */\n signature?: string;\n /** Random u64 used for the Arcium computation, available after submit. */\n computationOffset?: bigint;\n}\n\nexport type ProgressCallback = (event: ActionProgressEvent) => void;\n\n/** Internal helper: invoke an optional progress callback safely. */\nexport function emitProgress(\n cb: ProgressCallback | undefined,\n stage: ActionStage,\n extra?: Omit<ActionProgressEvent, \"stage\">,\n): void {\n if (!cb) return;\n try {\n cb({ stage, ...extra });\n } catch {\n // Never let a UI logging callback bring down an on-chain flow.\n }\n}\n\nexport interface SendIxOptions {\n /** Additional Keypair signers (most flows only need the wallet's signer). */\n signers?: Signer[];\n /** Anchor confirmation options override. */\n confirmOptions?: ConfirmOptions;\n}\n\n/**\n * Wrap a single instruction in a legacy `Transaction`, sign with the\n * provider's wallet (plus any extra `signers`), and send via the Anchor\n * provider. Returns the confirmed signature.\n *\n * Errors are reshaped through `parseCypherError` so the caller gets a\n * `ParsedCypherError` (when the program rejected the call) instead of\n * Anchor's nested error objects.\n */\nexport async function sendIx(\n client: CypherClient,\n ix: TransactionInstruction,\n opts: SendIxOptions = {},\n): Promise<string> {\n const tx = new Transaction().add(ix);\n try {\n return await client.provider.sendAndConfirm(\n tx,\n opts.signers ?? [],\n opts.confirmOptions,\n );\n } catch (err) {\n rethrowCypher(err);\n }\n}\n\n/**\n * Send an instruction that queues an Arcium computation, then block until\n * the MPC nodes finalize the callback. Returns both the queue tx\n * signature and the computation finalization details.\n *\n * Used by every action that touches the bet / resolve / claim path.\n */\nexport async function sendIxAndAwaitArcium(\n client: CypherClient,\n ix: TransactionInstruction,\n params: {\n computationOffset: bigint;\n timeoutMs?: number;\n signers?: Signer[];\n confirmOptions?: ConfirmOptions;\n },\n): Promise<{ signature: string; computation: ComputationResult }> {\n const signature = await sendIx(client, ix, {\n signers: params.signers,\n confirmOptions: params.confirmOptions,\n });\n const computation = await awaitComputation(\n client,\n params.computationOffset,\n { timeoutMs: params.timeoutMs },\n );\n return { signature, computation };\n}\n\nfunction rethrowCypher(err: unknown): never {\n const parsed = parseCypherError(err);\n if (parsed) {\n const wrapped = new Error(`${parsed.name}: ${parsed.msg}`);\n (wrapped as Error & { cause?: unknown }).cause = err;\n (wrapped as Error & { cypherError?: typeof parsed }).cypherError = parsed;\n throw wrapped;\n }\n throw err;\n}\n","import type { PublicKey } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport {\n createMarketIx,\n createMarketMultiIx,\n cancelMarketIx,\n withdrawCreatorFundsIx,\n type CreateMarketParams,\n type CreateMarketMultiParams,\n type CancelMarketParams,\n type WithdrawCreatorFundsParams,\n} from \"../instructions/index.ts\";\nimport { marketPda } from \"../pda.ts\";\nimport { isValidCloseTime } from \"../deadlines.ts\";\nimport { MIN_CHALLENGE_PERIOD_SECS, MIN_CREATOR_BOND } from \"../config.ts\";\nimport type { MarketAccount } from \"../accounts/market.ts\";\nimport { sendIx, emitProgress, type ProgressCallback } from \"./common.ts\";\n\n/**\n * Result returned by the `createMarket` action.\n *\n * `market` will only be populated if the post-create refetch succeeded —\n * a freshly-created market is *usually* visible at \"confirmed\" but\n * occasionally needs another commitment bump.\n */\nexport interface CreateMarketResult {\n signature: string;\n marketId: bigint;\n marketPda: PublicKey;\n market: MarketAccount | null;\n}\n\ntype CreateInputs =\n | (Omit<CreateMarketParams, \"expectedMarketId\" | \"acceptedMint\" | \"challengePeriod\" | \"bondAmount\"> & {\n kind: \"yesno\";\n acceptedMint?: PublicKey;\n /** v0.2+: defaults to MIN_CHALLENGE_PERIOD_SECS (24h) if omitted. */\n challengePeriod?: bigint | number;\n /** Defaults to MIN_CREATOR_BOND ($20 USDC). Pass a larger value to signal stronger commitment. */\n bondAmount?: bigint | number;\n onProgress?: ProgressCallback;\n })\n | (Omit<CreateMarketMultiParams, \"expectedMarketId\" | \"acceptedMint\" | \"challengePeriod\" | \"bondAmount\"> & {\n kind: \"multi\";\n acceptedMint?: PublicKey;\n challengePeriod?: bigint | number;\n bondAmount?: bigint | number;\n onProgress?: ProgressCallback;\n });\n\nasync function createMarketCommon(\n client: CypherClient,\n inputs: CreateInputs,\n): Promise<CreateMarketResult> {\n emitProgress(inputs.onProgress, \"validating\", {\n message: \"Validating market draft\",\n });\n if (!isValidCloseTime(BigInt(inputs.closeTime as bigint | number))) {\n throw new Error(\n \"createMarket: closeTime must be at least 60 seconds in the future\",\n );\n }\n\n emitProgress(inputs.onProgress, \"fetching-state\");\n // Fetch GlobalState fresh so we can claim the next market_counter and\n // pin the accepted mint without the caller having to know it.\n const gs = await client.globalState.fetch({ refresh: true });\n const acceptedMint = inputs.acceptedMint ?? gs.acceptedMint;\n const expectedMarketId = gs.marketCounter;\n const challengePeriod = inputs.challengePeriod ?? MIN_CHALLENGE_PERIOD_SECS;\n const bondAmount = inputs.bondAmount ?? MIN_CREATOR_BOND;\n\n const ix =\n inputs.kind === \"yesno\"\n ? await createMarketIx(client, {\n ...inputs,\n acceptedMint,\n expectedMarketId,\n challengePeriod,\n bondAmount,\n })\n : await createMarketMultiIx(client, {\n ...inputs,\n acceptedMint,\n expectedMarketId,\n challengePeriod,\n bondAmount,\n });\n\n emitProgress(inputs.onProgress, \"submitting\", {\n message: \"Submitting create-market transaction\",\n });\n const signature = await sendIx(client, ix);\n\n emitProgress(inputs.onProgress, \"refetching\");\n const [marketPdaKey] = marketPda(expectedMarketId, client.programId);\n const market = await client.markets.fetchByPda(marketPdaKey);\n\n emitProgress(inputs.onProgress, \"done\", { signature });\n return {\n signature,\n marketId: expectedMarketId,\n marketPda: marketPdaKey,\n market,\n };\n}\n\n/** Create a YES/NO market end-to-end. */\nexport async function createMarketAction(\n client: CypherClient,\n inputs: Omit<CreateMarketParams, \"expectedMarketId\" | \"acceptedMint\" | \"challengePeriod\" | \"bondAmount\"> & {\n acceptedMint?: PublicKey;\n /** v0.2+: defaults to MIN_CHALLENGE_PERIOD_SECS (24h) if omitted. */\n challengePeriod?: bigint | number;\n /** Defaults to MIN_CREATOR_BOND ($20 USDC). Pass a larger value to signal stronger commitment. */\n bondAmount?: bigint | number;\n onProgress?: ProgressCallback;\n },\n): Promise<CreateMarketResult> {\n return createMarketCommon(client, { ...inputs, kind: \"yesno\" });\n}\n\n/** Create a multi-outcome market (2–4 outcomes) end-to-end. */\nexport async function createMarketMultiAction(\n client: CypherClient,\n inputs: Omit<CreateMarketMultiParams, \"expectedMarketId\" | \"acceptedMint\" | \"challengePeriod\" | \"bondAmount\"> & {\n acceptedMint?: PublicKey;\n challengePeriod?: bigint | number;\n bondAmount?: bigint | number;\n onProgress?: ProgressCallback;\n },\n): Promise<CreateMarketResult> {\n return createMarketCommon(client, { ...inputs, kind: \"multi\" });\n}\n\n/** Cancel a market that has no bets. Returns the post-cancel `Market`. */\nexport async function cancelMarketAction(\n client: CypherClient,\n inputs: Omit<CancelMarketParams, \"acceptedMint\"> & { acceptedMint?: PublicKey },\n): Promise<{ signature: string; market: MarketAccount | null }> {\n const acceptedMint =\n inputs.acceptedMint ?? (await client.globalState.fetch()).acceptedMint;\n const ix = await cancelMarketIx(client, { ...inputs, acceptedMint });\n const signature = await sendIx(client, ix);\n const [pda] = marketPda(inputs.marketId, client.programId);\n return { signature, market: await client.markets.fetchByPda(pda) };\n}\n\n/** Creator pulls bond + LP fees from a resolved market. */\nexport async function withdrawCreatorFundsAction(\n client: CypherClient,\n inputs: Omit<WithdrawCreatorFundsParams, \"acceptedMint\"> & {\n acceptedMint?: PublicKey;\n },\n): Promise<{ signature: string }> {\n const acceptedMint =\n inputs.acceptedMint ?? (await client.globalState.fetch()).acceptedMint;\n const ix = await withdrawCreatorFundsIx(client, { ...inputs, acceptedMint });\n const signature = await sendIx(client, ix);\n return { signature };\n}\n","import { RescueCipher, x25519 } from \"@arcium-hq/client\";\nimport { getMXEPublicKey } from \"@arcium-hq/client\";\nimport type { CypherClient } from \"../client.ts\";\n\n/** A user's ephemeral x25519 keypair used to derive the Rescue shared secret. */\nexport interface UserCryptoKeypair {\n /** 32-byte x25519 private key — keep client-side, never put it on-chain. */\n privateKey: Uint8Array;\n /** 32-byte x25519 public key — sent on-chain as `pub_key` for callbacks. */\n publicKey: Uint8Array;\n}\n\n/**\n * Generate a fresh user x25519 keypair using Web Crypto.\n *\n * Browser-safe. Always use a new keypair per bet — reusing across bets is\n * not catastrophic (since the cipher rotates nonces) but leaks the fact\n * that two encrypted positions belong to the same wallet to anyone who\n * watches `EncryptedPosition.user_pubkey`.\n */\nexport function createUserKeypair(): UserCryptoKeypair {\n const privateKey = crypto.getRandomValues(new Uint8Array(32));\n const publicKey = x25519.getPublicKey(privateKey);\n return { privateKey, publicKey };\n}\n\n/**\n * Derive the Rescue shared secret from the user's x25519 keypair and the\n * MXE's published public key. Used by both encrypt and decrypt paths so\n * the user can later reopen their own ciphertexts to claim a payout.\n */\nexport function deriveSharedSecret(\n userPrivateKey: Uint8Array,\n mxePublicKey: Uint8Array,\n): Uint8Array {\n return x25519.getSharedSecret(userPrivateKey, mxePublicKey);\n}\n\n/**\n * Generate a fresh 16-byte nonce for RescueCipher CTR-mode encryption.\n *\n * **MUST** be unique per `cipher.encrypt(...)` call — reusing a nonce with\n * the same key garbles output (per the Arcium SKILL.md gotchas).\n */\nexport function freshNonce(): Uint8Array {\n return crypto.getRandomValues(new Uint8Array(16));\n}\n\n/**\n * Read a little-endian byte array as a u128 `bigint`. Used to convert the\n * 16-byte cipher nonce into the `u128` parameter the on-chain instructions\n * accept.\n */\nexport function leBytesToBigInt(bytes: Uint8Array): bigint {\n let n = 0n;\n for (let i = bytes.length - 1; i >= 0; i--) {\n n = (n << 8n) | BigInt(bytes[i] as number);\n }\n return n;\n}\n\n/**\n * Construct a `RescueCipher` for `(userKeypair, mxePublicKey)`.\n *\n * Single-line wrapper — exists mostly to document the construction order\n * (derive shared secret first, then instantiate cipher) and to avoid\n * leaking `@arcium-hq/client` types into the SDK's public encryption\n * helpers.\n */\nexport function createCipher(\n userPrivateKey: Uint8Array,\n mxePublicKey: Uint8Array,\n): RescueCipher {\n return new RescueCipher(deriveSharedSecret(userPrivateKey, mxePublicKey));\n}\n\n/**\n * Resolve the MXE's published x25519 public key for the program backing\n * `client`. Returns `null` if the cluster hasn't published one yet\n * (early-bootstrap state; usually only seen on localnet).\n *\n * Result is cached on `client` so the action helpers can call this on\n * every `placeBet` without paying the RPC round-trip more than once.\n */\nconst _mxePubkeyCache = new WeakMap<CypherClient, Uint8Array>();\nexport async function fetchMxePublicKey(\n client: CypherClient,\n): Promise<Uint8Array | null> {\n const cached = _mxePubkeyCache.get(client);\n if (cached) return cached;\n const key = await getMXEPublicKey(client.provider, client.programId);\n if (!key) return null;\n _mxePubkeyCache.set(client, key);\n return key;\n}\n","import type { RescueCipher } from \"@arcium-hq/client\";\nimport { freshNonce, leBytesToBigInt } from \"./cipher.ts\";\n\n/**\n * A user's plaintext bet input as the circuits expect it.\n *\n * `amount` is the **net** stake (after on-chain protocol + LP fee) — the\n * circuit asserts equality with the on-chain `net_amount` argument, so a\n * caller who encrypts the gross bet will see the queue succeed and the\n * callback hard-zero their stake (see audit finding H-1 / the\n * `net_amount_plaintext` checks in `encrypted-ixs/src/lib.rs`).\n */\nexport interface BetInput {\n /** Net stake in micro-USDC. Must equal `bet_amount - protocol_fee - lp_fee`. */\n amount: bigint;\n /** Outcome index: 0 / 1 for YesNo, 0..3 for MultiOutcome. */\n side: number;\n}\n\n/** Plaintext input to the refund circuit — the user's original net stake. */\nexport interface RefundInput {\n amount: bigint;\n}\n\n/** Encrypted form of a `BetInput`, ready for the queue instruction. */\nexport interface EncryptedBetInput {\n /** 32-byte ciphertext for `amount`. */\n encryptedAmount: Uint8Array;\n /** 32-byte ciphertext for `side`. */\n encryptedSide: Uint8Array;\n /** 16-byte nonce used for *both* ciphertexts (CTR mode, single message). */\n nonceBytes: Uint8Array;\n /** Same nonce as a `u128` `bigint` — the form the on-chain ix takes. */\n nonce: bigint;\n}\n\n/** Encrypted form of a `RefundInput` (single scalar — only the amount is private). */\nexport interface EncryptedRefundInput {\n encryptedAmount: Uint8Array;\n nonceBytes: Uint8Array;\n nonce: bigint;\n}\n\nfunction toUint8(arr: number[]): Uint8Array {\n // RescueCipher returns number[][] (each inner = 32 ints). Convert to a\n // Uint8Array for the public API — Anchor's u8;32 codec accepts either,\n // but Uint8Array is what the rest of the SDK uses.\n return Uint8Array.from(arr);\n}\n\n/**\n * Encrypt `(amount, side)` as a single Rescue message with one nonce.\n *\n * Returns **two separate 32-byte ciphertexts** — they are *not*\n * concatenated. Each scalar maps to its own ciphertext per the Arcium\n * SKILL.md gotcha (\"Combined ciphertext arrays\"): the on-chain ix expects\n * `encrypted_amount: [u8; 32]` and `encrypted_side: [u8; 32]` as\n * independent arguments.\n *\n * The caller is responsible for picking a fresh nonce per call — pass\n * `nonceBytes` if you want to control it, otherwise a 16-byte random\n * nonce is generated.\n */\nexport function encryptBetInput(\n input: BetInput,\n cipher: RescueCipher,\n nonceBytes: Uint8Array = freshNonce(),\n): EncryptedBetInput {\n if (nonceBytes.length !== 16) {\n throw new Error(\"encryptBetInput: nonce must be exactly 16 bytes\");\n }\n if (input.amount < 0n) throw new Error(\"encryptBetInput: amount must be >= 0\");\n if (!Number.isInteger(input.side) || input.side < 0 || input.side > 0xff) {\n throw new Error(\"encryptBetInput: side must be a u8\");\n }\n\n const cts = cipher.encrypt(\n [input.amount, BigInt(input.side)],\n nonceBytes,\n );\n if (cts.length !== 2 || (cts[0] as number[]).length !== 32 || (cts[1] as number[]).length !== 32) {\n // Shouldn't happen with RescueCipher v0.10.x, but fail loudly if the\n // upstream cipher ever changes its block layout.\n throw new Error(\n `encryptBetInput: unexpected ciphertext shape ${JSON.stringify(cts.map((c) => c.length))}`,\n );\n }\n\n return {\n encryptedAmount: toUint8(cts[0] as number[]),\n encryptedSide: toUint8(cts[1] as number[]),\n nonceBytes,\n nonce: leBytesToBigInt(nonceBytes),\n };\n}\n\n/**\n * Encrypt the refund input — a single scalar (the user's net stake).\n *\n * The refund circuit decrypts the amount and caps it to the on-chain\n * `net_amount_plaintext` argument before transferring, so the caller\n * must pass the same `amount` the on-chain `EncryptedPosition.net_amount`\n * already records.\n */\nexport function encryptRefundInput(\n input: RefundInput,\n cipher: RescueCipher,\n nonceBytes: Uint8Array = freshNonce(),\n): EncryptedRefundInput {\n if (nonceBytes.length !== 16) {\n throw new Error(\"encryptRefundInput: nonce must be exactly 16 bytes\");\n }\n if (input.amount < 0n) throw new Error(\"encryptRefundInput: amount must be >= 0\");\n\n const cts = cipher.encrypt([input.amount], nonceBytes);\n if (cts.length !== 1 || (cts[0] as number[]).length !== 32) {\n throw new Error(\n `encryptRefundInput: unexpected ciphertext shape ${JSON.stringify(cts.map((c) => c.length))}`,\n );\n }\n return {\n encryptedAmount: toUint8(cts[0] as number[]),\n nonceBytes,\n nonce: leBytesToBigInt(nonceBytes),\n };\n}\n\n/**\n * Decrypt a previously-encrypted `BetInput` — used by the SDK consumer\n * who held onto their x25519 private key and wants to display the stake +\n * side after fetching their `EncryptedPosition` from chain.\n *\n * The caller must hand the same 16-byte nonce the original encrypt used;\n * it lives on `EncryptedPosition.nonce` (a `u128`) so call\n * `bigIntToLeBytes(position.nonce, 16)` to round-trip.\n */\nexport function decryptBetInput(\n encrypted: { encryptedAmount: Uint8Array; encryptedSide: Uint8Array },\n cipher: RescueCipher,\n nonceBytes: Uint8Array,\n): BetInput {\n if (nonceBytes.length !== 16) {\n throw new Error(\"decryptBetInput: nonce must be exactly 16 bytes\");\n }\n const out = cipher.decrypt(\n [Array.from(encrypted.encryptedAmount), Array.from(encrypted.encryptedSide)],\n nonceBytes,\n );\n return { amount: out[0] as bigint, side: Number(out[1] as bigint) };\n}\n\n/** Round-trip helper: bigint → 16-byte LE Uint8Array (for u128 nonces). */\nexport function bigIntToLeBytes(value: bigint, byteLength: number): Uint8Array {\n if (value < 0n) throw new Error(\"bigIntToLeBytes: value must be >= 0\");\n const out = new Uint8Array(byteLength);\n let v = value;\n for (let i = 0; i < byteLength; i++) {\n out[i] = Number(v & 0xffn);\n v >>= 8n;\n }\n if (v !== 0n) {\n throw new Error(`bigIntToLeBytes: value does not fit in ${byteLength} bytes`);\n }\n return out;\n}\n","import type { PublicKey } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport {\n placePrivateBetYesnoIx,\n placePrivateBetMultiIx,\n} from \"../instructions/index.ts\";\nimport {\n createCipher,\n createUserKeypair,\n fetchMxePublicKey,\n type UserCryptoKeypair,\n} from \"../arcium/cipher.ts\";\nimport {\n encryptBetInput,\n type BetInput,\n} from \"../arcium/encoding.ts\";\nimport {\n awaitComputation,\n randomComputationOffset,\n} from \"../arcium/callbacks.ts\";\nimport { fetchMxeLookupTable } from \"../arcium/accounts.ts\";\nimport { computeFees } from \"../fees.ts\";\nimport { MarketState, MIN_BET_USDC, MarketType } from \"../config.ts\";\nimport { marketPda } from \"../pda.ts\";\nimport type { EncryptedPositionAccount } from \"../accounts/position.ts\";\nimport { sendIx, emitProgress, type ProgressCallback } from \"./common.ts\";\nimport type { ComputationResult } from \"../arcium/callbacks.ts\";\n\nexport interface PlaceBetInputs {\n /** Tx signer + rent payer; typically `client.wallet.publicKey`. */\n payer: PublicKey;\n /** The user placing the bet (signer; usually equals `payer`). */\n user: PublicKey;\n /** Target market id. */\n marketId: bigint | number;\n /** Outcome index: 0 / 1 for YesNo, 0..numOutcomes-1 for Multi. */\n side: number;\n /** Gross bet amount in micro-USDC (the SDK computes net after fees). */\n amountUsdc: bigint | number;\n /**\n * Optional caller-supplied x25519 keypair — useful if the frontend\n * generated it elsewhere (and stored it) before triggering the action.\n * If omitted, a fresh keypair is created and returned in the result.\n */\n userKeypair?: UserCryptoKeypair;\n /** Override the computation offset (otherwise random). */\n computationOffset?: bigint;\n /** Override timeout for the Arcium finalization wait. */\n timeoutMs?: number;\n /**\n * Optional fine-grained progress callback. Fires with stage events the\n * action passes through (validating → fetching-state → encrypting →\n * submitting → awaiting-callback → refetching → done). Use this to\n * drive multi-step UI (\"Encrypting…\", \"Awaiting MPC nodes…\", etc.).\n */\n onProgress?: ProgressCallback;\n}\n\nexport interface PlaceBetResult {\n signature: string;\n computation: ComputationResult;\n computationOffset: bigint;\n /**\n * The user's x25519 keypair. **The frontend MUST persist `privateKey`**\n * (typically encrypted under the wallet's key) — it's the only way to\n * later decrypt the position when claiming or displaying.\n */\n userKeypair: UserCryptoKeypair;\n /** Position PDA refetched after the callback updates entryOdds. */\n position: EncryptedPositionAccount | null;\n}\n\n/**\n * End-to-end private bet:\n *\n * 1. Validate market is `Active` and gross amount ≥ `min_bet`.\n * 2. Compute fees → net amount; assert it stays positive.\n * 3. Fetch the MXE public key (cached) and the MXE LUT (cached).\n * 4. Generate (or accept) a user x25519 keypair.\n * 5. Encrypt `(netAmount, side)` with `RescueCipher` under the derived\n * shared secret using a fresh 16-byte nonce.\n * 6. Build the `place_private_bet_{yesno,multi}` ix with a random\n * `computationOffset` (or caller-supplied one).\n * 7. Send tx, await callback finalization.\n * 8. Refetch the position so the caller sees `entryOdds` + `netAmount`.\n *\n * The on-chain circuit will reject the queue if `encrypted_amount` does\n * not equal `bet_amount - protocol_fee - lp_fee` (audit finding H-1\n * defense). We compute the same value client-side and hard-fail if the\n * fee math gives a different result.\n */\nexport async function placeBetAction(\n client: CypherClient,\n inputs: PlaceBetInputs,\n): Promise<PlaceBetResult> {\n emitProgress(inputs.onProgress, \"validating\", {\n message: \"Validating bet inputs\",\n });\n\n const market = await client.markets.fetch(inputs.marketId);\n if (!market) {\n throw new Error(`placeBet: market ${inputs.marketId} not found`);\n }\n if (market.state !== MarketState.Active) {\n throw new Error(`placeBet: market state is ${market.state}, expected Active`);\n }\n\n const grossAmount = BigInt(inputs.amountUsdc);\n if (grossAmount < market.minBet) {\n throw new Error(\n `placeBet: amount ${grossAmount} < market.minBet ${market.minBet}`,\n );\n }\n // Defensive: also enforce the protocol-wide floor in case a deployment\n // ever sets `market.min_bet` to 0.\n if (grossAmount < MIN_BET_USDC) {\n throw new Error(`placeBet: amount ${grossAmount} < protocol MIN_BET_USDC`);\n }\n\n emitProgress(inputs.onProgress, \"fetching-state\", {\n message: \"Fetching protocol state\",\n });\n const gs = await client.globalState.fetch();\n const { netAmount } = computeFees(grossAmount, {\n protocolFeeRateBps: gs.protocolFeeRate,\n lpFeeRateBps: gs.lpFeeRate,\n });\n if (netAmount <= 0n) {\n throw new Error(\"placeBet: net amount after fees would be zero or negative\");\n }\n\n // Outcome bounds depend on the market type.\n validateSide(inputs.side, market.marketType, market.numOutcomes);\n\n const mxePubkey = await fetchMxePublicKey(client);\n if (!mxePubkey) {\n throw new Error(\n \"placeBet: MXE public key not yet published; is the Arcium cluster ready?\",\n );\n }\n const { lut } = await fetchMxeLookupTable(client);\n\n emitProgress(inputs.onProgress, \"encrypting\", {\n message: \"Encrypting your bet\",\n });\n const userKeypair = inputs.userKeypair ?? createUserKeypair();\n const cipher = createCipher(userKeypair.privateKey, mxePubkey);\n const encrypted = encryptBetInput({ amount: netAmount, side: inputs.side }, cipher);\n const computationOffset =\n inputs.computationOffset ?? randomComputationOffset();\n\n const isMulti = market.marketType === MarketType.MultiOutcome;\n const builder = isMulti ? placePrivateBetMultiIx : placePrivateBetYesnoIx;\n const ix = await builder(client, {\n payer: inputs.payer,\n user: inputs.user,\n marketId: inputs.marketId,\n acceptedMint: gs.acceptedMint,\n protocolTreasury: gs.protocolTreasury,\n computationOffset,\n betAmountUsdc: grossAmount,\n encryptedAmount: encrypted.encryptedAmount,\n encryptedSide: encrypted.encryptedSide,\n userX25519Pubkey: userKeypair.publicKey,\n nonce: encrypted.nonce,\n addressLookupTable: lut,\n });\n\n emitProgress(inputs.onProgress, \"submitting\", {\n message: \"Submitting transaction\",\n computationOffset,\n });\n\n const signature = await sendIx(client, ix);\n emitProgress(inputs.onProgress, \"awaiting-callback\", {\n message: \"Waiting for Arcium MPC nodes to finalize\",\n signature,\n computationOffset,\n });\n\n const computation = await awaitComputation(client, computationOffset, {\n timeoutMs: inputs.timeoutMs,\n });\n\n emitProgress(inputs.onProgress, \"refetching\", {\n message: \"Refreshing position\",\n signature,\n computationOffset,\n });\n const [marketPdaKey] = marketPda(inputs.marketId, client.programId);\n const position = await client.positions.fetch(marketPdaKey, inputs.user);\n\n emitProgress(inputs.onProgress, \"done\", {\n message: \"Bet placed\",\n signature,\n computationOffset,\n });\n\n return {\n signature,\n computation,\n computationOffset,\n userKeypair,\n position,\n };\n}\n\nfunction validateSide(side: number, marketType: number, numOutcomes: number): void {\n if (!Number.isInteger(side) || side < 0) {\n throw new Error(`placeBet: side ${side} must be a non-negative integer`);\n }\n const ceiling = marketType === MarketType.YesNo ? 2 : numOutcomes;\n if (side >= ceiling) {\n throw new Error(\n `placeBet: side ${side} out of range — valid range for this market is [0, ${ceiling - 1}]`,\n );\n }\n}\n\n// PlaceBet uses `BetInput` indirectly; re-export the surface for callers\n// who want to construct the type without descending into `arcium/encoding`.\nexport type { BetInput };\n","import type { PublicKey } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport {\n resolveMarketYesnoIx,\n resolveMarketMultiIx,\n} from \"../instructions/index.ts\";\nimport { fetchMxeLookupTable } from \"../arcium/accounts.ts\";\nimport { awaitComputation, randomComputationOffset } from \"../arcium/callbacks.ts\";\nimport { MarketState, MarketType } from \"../config.ts\";\nimport { marketPda } from \"../pda.ts\";\nimport type { MarketAccount } from \"../accounts/market.ts\";\nimport type { ComputationResult } from \"../arcium/callbacks.ts\";\nimport { sendIx, emitProgress, type ProgressCallback } from \"./common.ts\";\n\nexport interface ResolveMarketInputs {\n payer: PublicKey;\n resolver: PublicKey;\n marketId: bigint | number;\n /** Outcome index: 0 / 1 for YesNo, 0..numOutcomes-1 for Multi. */\n outcomeValue: number;\n computationOffset?: bigint;\n timeoutMs?: number;\n /** Optional progress callback (validating → submitting → awaiting-callback → done). */\n onProgress?: ProgressCallback;\n}\n\nexport interface ResolveMarketResult {\n signature: string;\n computation: ComputationResult;\n computationOffset: bigint;\n /** Market account refetched after the reveal callback ran. */\n market: MarketAccount | null;\n}\n\n/**\n * Resolve a market end-to-end: validate state + outcome, send the queue\n * ix, await the reveal circuit's callback, refetch the market.\n *\n * The resolver address is enforced on-chain — passing the wrong key\n * surfaces as a `UnauthorizedResolver` CypherError.\n */\nexport async function resolveMarketAction(\n client: CypherClient,\n inputs: ResolveMarketInputs,\n): Promise<ResolveMarketResult> {\n emitProgress(inputs.onProgress, \"validating\", {\n message: \"Validating resolve inputs\",\n });\n const market = await client.markets.fetch(inputs.marketId);\n if (!market) throw new Error(`resolveMarket: market ${inputs.marketId} not found`);\n\n if (market.state === MarketState.Resolved) {\n throw new Error(\"resolveMarket: market already resolved\");\n }\n if (market.state === MarketState.Closed) {\n throw new Error(\"resolveMarket: market was cancelled\");\n }\n validateOutcome(inputs.outcomeValue, market.marketType, market.numOutcomes);\n\n emitProgress(inputs.onProgress, \"fetching-state\");\n const { lut } = await fetchMxeLookupTable(client);\n const computationOffset =\n inputs.computationOffset ?? randomComputationOffset();\n const isMulti = market.marketType === MarketType.MultiOutcome;\n const builder = isMulti ? resolveMarketMultiIx : resolveMarketYesnoIx;\n const ix = await builder(client, {\n payer: inputs.payer,\n resolver: inputs.resolver,\n marketId: inputs.marketId,\n computationOffset,\n outcomeValue: inputs.outcomeValue,\n addressLookupTable: lut,\n });\n\n emitProgress(inputs.onProgress, \"submitting\", {\n message: \"Submitting resolve transaction\",\n computationOffset,\n });\n const signature = await sendIx(client, ix);\n\n emitProgress(inputs.onProgress, \"awaiting-callback\", {\n message: \"Waiting for MPC nodes to reveal the outcome\",\n signature,\n computationOffset,\n });\n const computation = await awaitComputation(client, computationOffset, {\n timeoutMs: inputs.timeoutMs,\n });\n\n emitProgress(inputs.onProgress, \"refetching\");\n const [pda] = marketPda(inputs.marketId, client.programId);\n const out = {\n signature,\n computation,\n computationOffset,\n market: await client.markets.fetchByPda(pda),\n };\n emitProgress(inputs.onProgress, \"done\", { signature, computationOffset });\n return out;\n}\n\nfunction validateOutcome(\n outcome: number,\n marketType: number,\n numOutcomes: number,\n): void {\n if (!Number.isInteger(outcome) || outcome < 0) {\n throw new Error(`resolveMarket: outcome ${outcome} must be a non-negative integer`);\n }\n const ceiling = marketType === MarketType.YesNo ? 2 : numOutcomes;\n if (outcome >= ceiling) {\n throw new Error(\n `resolveMarket: outcome ${outcome} out of range — valid for this market is [0, ${ceiling - 1}]`,\n );\n }\n}\n","import type { PublicKey } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport {\n claimPayoutYesnoIx,\n claimPayoutMultiIx,\n claimRefundYesnoIx,\n claimRefundMultiIx,\n} from \"../instructions/index.ts\";\nimport { fetchMxeLookupTable } from \"../arcium/accounts.ts\";\nimport { awaitComputation, randomComputationOffset } from \"../arcium/callbacks.ts\";\nimport { MarketState, MarketType } from \"../config.ts\";\nimport { marketPda } from \"../pda.ts\";\nimport type { EncryptedPositionAccount } from \"../accounts/position.ts\";\nimport type { MarketAccount } from \"../accounts/market.ts\";\nimport type { ComputationResult } from \"../arcium/callbacks.ts\";\nimport { sendIx, emitProgress, type ProgressCallback } from \"./common.ts\";\nimport { marketPhase } from \"../deadlines.ts\";\n\nexport interface ClaimInputs {\n payer: PublicKey;\n user: PublicKey;\n marketId: bigint | number;\n computationOffset?: bigint;\n timeoutMs?: number;\n /** Optional progress callback (validating → submitting → awaiting-callback → done). */\n onProgress?: ProgressCallback;\n}\n\nexport interface ClaimResult {\n signature: string;\n computation: ComputationResult;\n computationOffset: bigint;\n position: EncryptedPositionAccount | null;\n market: MarketAccount | null;\n}\n\nasync function commonClaim(\n client: CypherClient,\n inputs: ClaimInputs,\n flavor: \"payout\" | \"refund\",\n): Promise<ClaimResult> {\n emitProgress(inputs.onProgress, \"validating\", {\n message: `Validating claim${cap(flavor)} inputs`,\n });\n const market = await client.markets.fetch(inputs.marketId);\n if (!market) throw new Error(`claim${cap(flavor)}: market not found`);\n\n const [pda] = marketPda(inputs.marketId, client.programId);\n const position = await client.positions.fetch(pda, inputs.user);\n if (!position) {\n throw new Error(\n `claim${cap(flavor)}: no position for user on market ${pda.toBase58()}`,\n );\n }\n if (position.claimed) {\n throw new Error(`claim${cap(flavor)}: position already claimed`);\n }\n\n // Refuse to drive the user into a known-bad on-chain failure.\n const phase = marketPhase(market);\n if (flavor === \"payout\" && phase !== \"claimable\") {\n if (phase === \"pendingResolution\" || phase === \"awaitingFinalize\") {\n throw new Error(\n `claimPayout: market is in '${phase}' — call finalizeResolution first (or wait for someone to)`,\n );\n }\n if (phase === \"disputed\") {\n throw new Error(\n \"claimPayout: market is disputed — awaiting admin override before payouts open\",\n );\n }\n throw new Error(\n `claimPayout: market phase is '${phase}' — payouts require 'claimable'`,\n );\n }\n if (flavor === \"refund\" && phase !== \"refundable\") {\n throw new Error(\n `claimRefund: market phase is '${phase}' — refunds require 'refundable'`,\n );\n }\n if (flavor === \"payout\" && market.state !== MarketState.Resolved) {\n throw new Error(\"claimPayout: market is not resolved\");\n }\n // v0.2+: refund is also blocked while the market is pending resolution\n // (state=4) — the contract enforces this too, but surface it client-side.\n if (flavor === \"refund\" && market.state === MarketState.PendingResolution) {\n throw new Error(\n \"claimRefund: market is pending resolution — refund not available until challenge window concludes unresolved\",\n );\n }\n\n emitProgress(inputs.onProgress, \"fetching-state\");\n const { acceptedMint } = await client.globalState.fetch();\n const { lut } = await fetchMxeLookupTable(client);\n const computationOffset =\n inputs.computationOffset ?? randomComputationOffset();\n const isMulti = market.marketType === MarketType.MultiOutcome;\n\n const builder =\n flavor === \"payout\"\n ? isMulti ? claimPayoutMultiIx : claimPayoutYesnoIx\n : isMulti ? claimRefundMultiIx : claimRefundYesnoIx;\n\n const ix = await builder(client, {\n payer: inputs.payer,\n user: inputs.user,\n marketId: inputs.marketId,\n acceptedMint,\n computationOffset,\n addressLookupTable: lut,\n });\n\n emitProgress(inputs.onProgress, \"submitting\", {\n message: `Submitting ${flavor} claim`,\n computationOffset,\n });\n const signature = await sendIx(client, ix);\n\n emitProgress(inputs.onProgress, \"awaiting-callback\", {\n message: \"Waiting for MPC nodes to compute and disburse\",\n signature,\n computationOffset,\n });\n const computation = await awaitComputation(client, computationOffset, {\n timeoutMs: inputs.timeoutMs,\n });\n\n emitProgress(inputs.onProgress, \"refetching\");\n const out = {\n signature,\n computation,\n computationOffset,\n position: await client.positions.fetch(pda, inputs.user),\n market: await client.markets.fetchByPda(pda),\n };\n emitProgress(inputs.onProgress, \"done\", { signature, computationOffset });\n return out;\n}\n\n/** Claim payout (winning bettor on a resolved market). */\nexport function claimPayoutAction(\n client: CypherClient,\n inputs: ClaimInputs,\n): Promise<ClaimResult> {\n return commonClaim(client, inputs, \"payout\");\n}\n\n/** Claim refund (any bettor on a market that never resolved). */\nexport function claimRefundAction(\n client: CypherClient,\n inputs: ClaimInputs,\n): Promise<ClaimResult> {\n return commonClaim(client, inputs, \"refund\");\n}\n\nfunction cap(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n","import type { PublicKey } from \"@solana/web3.js\";\nimport type { CypherClient } from \"../client.ts\";\nimport {\n flagResolutionIx,\n finalizeResolutionIx,\n adminOverrideResolutionIx,\n} from \"../instructions/resolution.ts\";\nimport { MarketState } from \"../config.ts\";\nimport { marketPda } from \"../pda.ts\";\nimport type { MarketAccount } from \"../accounts/market.ts\";\nimport { sendIx, emitProgress, type ProgressCallback } from \"./common.ts\";\n\n/* ----------------------------------------------------------------------- *\n * Dispute / challenge window actions (v0.2+) *\n * *\n * Single-step on-chain ops (no Arcium, no callback wait). Each emits *\n * validating → submitting → refetching → done stages. *\n * ----------------------------------------------------------------------- */\n\nexport interface FlagResolutionInputs {\n flagger: PublicKey;\n marketId: bigint | number;\n onProgress?: ProgressCallback;\n}\n\nexport interface FinalizeResolutionInputs {\n caller: PublicKey;\n marketId: bigint | number;\n onProgress?: ProgressCallback;\n}\n\nexport interface AdminOverrideResolutionInputs {\n admin: PublicKey;\n marketId: bigint | number;\n outcomeValue: number;\n onProgress?: ProgressCallback;\n}\n\nexport interface ResolutionActionResult {\n signature: string;\n market: MarketAccount | null;\n}\n\n/**\n * Flag a pending resolution as disputed during the challenge window.\n * Permissionless — anyone can flag.\n */\nexport async function flagResolutionAction(\n client: CypherClient,\n inputs: FlagResolutionInputs,\n): Promise<ResolutionActionResult> {\n emitProgress(inputs.onProgress, \"validating\", {\n message: \"Validating flag inputs\",\n });\n const market = await client.markets.fetch(inputs.marketId);\n if (!market) throw new Error(`flagResolution: market ${inputs.marketId} not found`);\n if (market.state !== MarketState.PendingResolution) {\n throw new Error(\n `flagResolution: market state is ${market.state}, expected PendingResolution (4)`,\n );\n }\n if (market.disputed) {\n throw new Error(\"flagResolution: market is already disputed\");\n }\n\n emitProgress(inputs.onProgress, \"submitting\", { message: \"Submitting flag\" });\n const ix = await flagResolutionIx(client, {\n flagger: inputs.flagger,\n marketId: inputs.marketId,\n });\n const signature = await sendIx(client, ix);\n\n emitProgress(inputs.onProgress, \"refetching\");\n const [pda] = marketPda(inputs.marketId, client.programId);\n const out = { signature, market: await client.markets.fetchByPda(pda) };\n emitProgress(inputs.onProgress, \"done\", { signature });\n return out;\n}\n\n/**\n * Finalize a pending resolution after the challenge window has elapsed\n * undisputed. Permissionless — anyone can call.\n */\nexport async function finalizeResolutionAction(\n client: CypherClient,\n inputs: FinalizeResolutionInputs,\n): Promise<ResolutionActionResult> {\n emitProgress(inputs.onProgress, \"validating\", {\n message: \"Validating finalize inputs\",\n });\n const market = await client.markets.fetch(inputs.marketId);\n if (!market) throw new Error(`finalizeResolution: market ${inputs.marketId} not found`);\n if (market.state !== MarketState.PendingResolution) {\n throw new Error(\n `finalizeResolution: market state is ${market.state}, expected PendingResolution (4)`,\n );\n }\n if (market.disputed) {\n throw new Error(\"finalizeResolution: market is disputed — admin override required\");\n }\n\n emitProgress(inputs.onProgress, \"submitting\", { message: \"Submitting finalize\" });\n const ix = await finalizeResolutionIx(client, {\n caller: inputs.caller,\n marketId: inputs.marketId,\n });\n const signature = await sendIx(client, ix);\n\n emitProgress(inputs.onProgress, \"refetching\");\n const [pda] = marketPda(inputs.marketId, client.programId);\n const out = { signature, market: await client.markets.fetchByPda(pda) };\n emitProgress(inputs.onProgress, \"done\", { signature });\n return out;\n}\n\n/**\n * Admin override of a disputed resolution. Recomputes `payout_ratio` from\n * the already-revealed plaintext pools using the same formula as the\n * reveal circuits.\n */\nexport async function adminOverrideResolutionAction(\n client: CypherClient,\n inputs: AdminOverrideResolutionInputs,\n): Promise<ResolutionActionResult> {\n emitProgress(inputs.onProgress, \"validating\", {\n message: \"Validating admin override inputs\",\n });\n const market = await client.markets.fetch(inputs.marketId);\n if (!market) throw new Error(`adminOverrideResolution: market ${inputs.marketId} not found`);\n if (market.state !== MarketState.PendingResolution) {\n throw new Error(\n `adminOverrideResolution: market state is ${market.state}, expected PendingResolution (4)`,\n );\n }\n if (!market.disputed) {\n throw new Error(\"adminOverrideResolution: market is not disputed\");\n }\n\n emitProgress(inputs.onProgress, \"submitting\", { message: \"Submitting override\" });\n const ix = await adminOverrideResolutionIx(client, {\n admin: inputs.admin,\n marketId: inputs.marketId,\n outcomeValue: inputs.outcomeValue,\n });\n const signature = await sendIx(client, ix);\n\n emitProgress(inputs.onProgress, \"refetching\");\n const [pda] = marketPda(inputs.marketId, client.programId);\n const out = { signature, market: await client.markets.fetchByPda(pda) };\n emitProgress(inputs.onProgress, \"done\", { signature });\n return out;\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { BorshCoder, EventParser as AnchorEventParser } from \"@anchor-lang/core\";\nimport type { Coder } from \"@anchor-lang/core\";\nimport { IDL } from \"../idl/index.ts\";\nimport { PROGRAM_ID } from \"../config.ts\";\n\n/* -----------------------------------------------------------------------\n * Typed event interfaces — one per IDL `events[]` entry.\n *\n * Field names follow the IDL's snake_case convention (the JSON the\n * contract actually emits). Anchor's EventParser returns them as-is\n * so we type them verbatim rather than camelCasing.\n * ----------------------------------------------------------------------- */\n\nexport interface MarketCreatedEvent {\n /** Monotonically increasing counter assigned at create time. */\n marketId: bigint;\n /** 0 = YesNo, 1 = MultiOutcome. */\n marketType: number;\n /** 0–6 category enum. */\n category: number;\n /** Public key of the market creator. */\n creator: PublicKey;\n /** Market question (UTF-8 string, ≤200 bytes). */\n question: string;\n /** Unix timestamp after which betting closes. */\n closeTime: bigint;\n}\n\nexport interface BetPlacedEvent {\n /** Market PDA public key. */\n market: PublicKey;\n /** Bettor's public key. */\n user: PublicKey;\n /** Ciphertext — the encrypted bet amount (32 bytes). */\n encryptedAmount: Uint8Array;\n /** Ciphertext — the encrypted side / outcome index (32 bytes). */\n encryptedSide: Uint8Array;\n /** The u128 nonce used during encryption. */\n nonce: bigint;\n /** Entry odds computed by the MPC circuit callback. */\n entryOdds: bigint;\n}\n\nexport interface MarketResolvedEvent {\n market: PublicKey;\n /** Winning outcome index. */\n outcome: number;\n revealedPool0: bigint;\n revealedPool1: bigint;\n revealedPool2: bigint;\n revealedPool3: bigint;\n payoutRatio: bigint;\n}\n\nexport interface MarketCancelledEvent {\n market: PublicKey;\n creator: PublicKey;\n bondReturned: bigint;\n}\n\nexport interface CreatorWithdrawnEvent {\n market: PublicKey;\n creator: PublicKey;\n bond: bigint;\n lpFees: bigint;\n total: bigint;\n}\n\nexport interface PayoutClaimedEvent {\n market: PublicKey;\n user: PublicKey;\n payoutAmount: bigint;\n}\n\nexport interface RefundClaimedEvent {\n market: PublicKey;\n user: PublicKey;\n refundAmount: bigint;\n}\n\n/** v0.2+: a bettor flagged the just-revealed resolution during the challenge window. */\nexport interface ResolutionFlaggedEvent {\n market: PublicKey;\n flaggedBy: PublicKey;\n}\n\n/** v0.2+: the challenge window elapsed undisputed and the market moved to RESOLVED. */\nexport interface MarketFinalizedEvent {\n market: PublicKey;\n outcome: number;\n payoutRatio: bigint;\n}\n\n/** v0.2+: admin override on a disputed resolution. */\nexport interface ResolutionOverriddenEvent {\n market: PublicKey;\n oldOutcome: number;\n newOutcome: number;\n newPayoutRatio: bigint;\n admin: PublicKey;\n}\n\n/** Discriminated union of every Cypher program event. */\nexport type CypherEvent =\n | { name: \"MarketCreatedEvent\"; data: MarketCreatedEvent }\n | { name: \"BetPlacedEvent\"; data: BetPlacedEvent }\n | { name: \"MarketResolvedEvent\"; data: MarketResolvedEvent }\n | { name: \"MarketCancelledEvent\"; data: MarketCancelledEvent }\n | { name: \"CreatorWithdrawnEvent\"; data: CreatorWithdrawnEvent }\n | { name: \"PayoutClaimedEvent\"; data: PayoutClaimedEvent }\n | { name: \"RefundClaimedEvent\"; data: RefundClaimedEvent }\n | { name: \"ResolutionFlaggedEvent\"; data: ResolutionFlaggedEvent }\n | { name: \"MarketFinalizedEvent\"; data: MarketFinalizedEvent }\n | { name: \"ResolutionOverriddenEvent\"; data: ResolutionOverriddenEvent };\n\n/** The set of all event names the Cypher program emits. */\nexport type CypherEventName = CypherEvent[\"name\"];\n\n/**\n * All event names as a runtime set — useful for runtime filtering and\n * completeness assertions in tests.\n */\nexport const ALL_EVENT_NAMES: ReadonlySet<CypherEventName> = new Set<CypherEventName>([\n \"MarketCreatedEvent\",\n \"BetPlacedEvent\",\n \"MarketResolvedEvent\",\n \"MarketCancelledEvent\",\n \"CreatorWithdrawnEvent\",\n \"PayoutClaimedEvent\",\n \"RefundClaimedEvent\",\n \"ResolutionFlaggedEvent\",\n \"MarketFinalizedEvent\",\n \"ResolutionOverriddenEvent\",\n]);\n\n/* -----------------------------------------------------------------------\n * Parser\n *\n * Anchor's EventParser walks raw program logs and yields decoded events.\n * We wrap it with proper typing so consumers don't have to cast.\n * ----------------------------------------------------------------------- */\n\n/** Lazily created, shared Borsh coder + event parser for the Cypher IDL. */\nlet _coder: BorshCoder | null = null;\nlet _parser: AnchorEventParser | null = null;\n\nfunction getParser(): AnchorEventParser {\n if (!_parser) {\n _coder = new BorshCoder(IDL as any);\n _parser = new AnchorEventParser(PROGRAM_ID, _coder as unknown as Coder);\n }\n return _parser;\n}\n\n/**\n * Decode raw Solana program logs into typed Cypher events.\n *\n * @param logs Array of strings from a transaction's `meta.logMessages`.\n * @returns Typed events found in the logs (may be empty).\n *\n * @example\n * ```ts\n * const txInfo = await connection.getTransaction(sig, { commitment: \"confirmed\" });\n * const events = parseLogs(txInfo.meta?.logMessages ?? []);\n * for (const evt of events) {\n * if (evt.name === \"BetPlacedEvent\") console.log(evt.data.entryOdds);\n * }\n * ```\n */\n/**\n * Anchor's BorshCoder decodes event fields with their IDL names — and\n * Cypher's IDL keeps snake_case. We expose camelCase to consumers (it's\n * what the TS event interfaces declare and what every README example\n * uses), so each decoded `data` object goes through a one-level\n * snake → camel transform before it's emitted.\n */\nfunction camelizeKey(k: string): string {\n return k.replace(/_([a-z0-9])/g, (_m, c: string) => c.toUpperCase());\n}\n\n/**\n * Anchor's BorshCoder returns BN for u64/u128/i64 and `number[]` for\n * `[u8; N]` arrays. The typed event interfaces promise `bigint` and\n * `Uint8Array` respectively, so we normalize once per decoded value.\n */\nfunction normalizeValue(v: unknown): unknown {\n if (v == null) return v;\n // Detect BN duck-style — instanceof check would require importing BN\n // here and the cross-realm check is fragile.\n if (typeof v === \"object\" && \"toString\" in v && \"toArrayLike\" in (v as object)) {\n return BigInt((v as { toString(): string }).toString());\n }\n if (Array.isArray(v) && v.length > 0 && typeof v[0] === \"number\") {\n return Uint8Array.from(v as number[]);\n }\n return v;\n}\n\nfunction camelizeObject<T extends object>(obj: T): T {\n if (obj == null || typeof obj !== \"object\") return obj;\n if (Array.isArray(obj)) return obj as T;\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) {\n out[camelizeKey(k)] = normalizeValue(v);\n }\n return out as T;\n}\n\nexport function parseLogs(logs: string[]): CypherEvent[] {\n const parser = getParser();\n const results: CypherEvent[] = [];\n for (const event of parser.parseLogs(logs)) {\n // Anchor's EventParser yields { name: string, data: { snake_case... } }.\n // Camelize so the runtime shape matches the typed CypherEvent union\n // and every README example.\n const camelized = {\n name: event.name,\n data: camelizeObject(event.data as object),\n };\n results.push(camelized as unknown as CypherEvent);\n }\n return results;\n}\n\n/**\n * Filter parsed logs to a specific event name with full discriminated-union\n * narrowing. The return type is the `data` payload of the matching event,\n * not `any` — so `parseLogsFor(logs, \"BetPlacedEvent\")` returns\n * `BetPlacedEvent[]` and not a loosely-typed array.\n */\n/**\n * Internal helper: untyped filter+map. Kept separate from `parseLogsFor`\n * so the generic constraint stays at the API boundary and doesn't pollute\n * the implementation with distributive-Extract gymnastics.\n */\nfunction parseLogsForRaw(logs: string[], name: string): unknown[] {\n const out: unknown[] = [];\n for (const e of parseLogs(logs)) {\n if (e.name === name) out.push(e.data);\n }\n return out;\n}\n\ntype DataFor<N extends CypherEventName> = N extends CypherEventName\n ? Extract<CypherEvent, { name: N }>[\"data\"]\n : never;\n\nexport function parseLogsFor<N extends CypherEventName>(\n logs: string[],\n name: N,\n): Array<DataFor<N>> {\n // TS distributes `Extract<>` over the bound `N` and trips its own\n // structural check. The internal helper returns `unknown[]` so the cast\n // below is the only point where we widen — the external signature still\n // delivers `Array<BetPlacedEvent>` etc. to the caller.\n return parseLogsForRaw(logs, name) as Array<DataFor<N>>;\n}\n","import { Connection, type PublicKey } from \"@solana/web3.js\";\nimport { PROGRAM_ID } from \"../config.ts\";\nimport {\n parseLogs,\n type CypherEvent,\n type CypherEventName,\n} from \"./parser.ts\";\n\n/* -----------------------------------------------------------------------\n * Event subscription helpers\n *\n * Two modes:\n * 1. WebSocket-based `onLogs` (real-time, requires WS support).\n * 2. Poll-based `pollEvents` (works everywhere, trades latency for\n * compatibility — suited for environments without WS, like some\n * mobile wrappers or serverless functions).\n * ----------------------------------------------------------------------- */\n\n/** Callback signature for all per-event subscription helpers. */\nexport type EventCallback<T> = (data: T, raw: CypherEvent) => void;\n\n/** Options shared by all subscription helpers. */\nexport interface SubscribeOptions {\n /** Override program ID (for redeployed programs). */\n programId?: PublicKey;\n /** Commitment level for the `onLogs` subscription. */\n commitment?: \"processed\" | \"confirmed\" | \"finalized\";\n}\n\n/** Return type — call `unsubscribe()` to tear down the listener. */\nexport interface EventSubscription {\n /** Remove the WebSocket log listener. */\n unsubscribe: () => void;\n /** The underlying subscription ID from `Connection.onLogs`. */\n subscriptionId: number;\n}\n\n/**\n * Subscribe to *all* Cypher program events via `Connection.onLogs`.\n *\n * The callback fires once per decoded event. Raw events that fail to\n * decode (e.g., Anchor system logs) are silently skipped.\n *\n * @example\n * ```ts\n * const sub = subscribeAll(connection, (event) => {\n * console.log(event.name, event.data);\n * });\n * // later:\n * sub.unsubscribe();\n * ```\n */\nexport function subscribeAll(\n connection: Connection,\n callback: (event: CypherEvent) => void,\n opts: SubscribeOptions = {},\n): EventSubscription {\n const pid = opts.programId ?? PROGRAM_ID;\n const subscriptionId = connection.onLogs(\n pid,\n (logInfo) => {\n if (logInfo.err) return; // tx failed — skip\n const events = parseLogs(logInfo.logs);\n for (const evt of events) {\n callback(evt);\n }\n },\n opts.commitment ?? \"confirmed\",\n );\n return {\n subscriptionId,\n unsubscribe: () => {\n connection.removeOnLogsListener(subscriptionId);\n },\n };\n}\n\n/** Distributive helper — picks the `data` payload type for a given event name. */\ntype DataFor<N extends CypherEventName> = N extends CypherEventName\n ? Extract<CypherEvent, { name: N }>[\"data\"]\n : never;\n\n/**\n * Subscribe to a specific named event. The callback only fires for\n * events whose name matches — other events from the same tx are\n * silently dropped.\n *\n * Generic over `N extends CypherEventName` so the `data` parameter is\n * narrowed to the matching event's payload type at the callsite.\n */\nexport function subscribeEvent<N extends CypherEventName>(\n connection: Connection,\n name: N,\n callback: EventCallback<DataFor<N>>,\n opts: SubscribeOptions = {},\n): EventSubscription {\n return subscribeAll(\n connection,\n (event) => {\n if (event.name === name) {\n callback(event.data as DataFor<N>, event);\n }\n },\n opts,\n );\n}\n\n/* -----------------------------------------------------------------------\n * Convenience per-event subscription helpers\n * ----------------------------------------------------------------------- */\n\nimport type {\n MarketCreatedEvent,\n BetPlacedEvent,\n MarketResolvedEvent,\n MarketCancelledEvent,\n CreatorWithdrawnEvent,\n PayoutClaimedEvent,\n RefundClaimedEvent,\n ResolutionFlaggedEvent,\n MarketFinalizedEvent,\n ResolutionOverriddenEvent,\n} from \"./parser.ts\";\n\n/** Subscribe to `MarketCreatedEvent` emissions. */\nexport function onMarketCreated(\n connection: Connection,\n callback: EventCallback<MarketCreatedEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"MarketCreatedEvent\", callback, opts);\n}\n\n/** Subscribe to `BetPlacedEvent` emissions. */\nexport function onBetPlaced(\n connection: Connection,\n callback: EventCallback<BetPlacedEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"BetPlacedEvent\", callback, opts);\n}\n\n/** Subscribe to `MarketResolvedEvent` emissions. */\nexport function onMarketResolved(\n connection: Connection,\n callback: EventCallback<MarketResolvedEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"MarketResolvedEvent\", callback, opts);\n}\n\n/** Subscribe to `MarketCancelledEvent` emissions. */\nexport function onMarketCancelled(\n connection: Connection,\n callback: EventCallback<MarketCancelledEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"MarketCancelledEvent\", callback, opts);\n}\n\n/** Subscribe to `CreatorWithdrawnEvent` emissions. */\nexport function onCreatorWithdrawn(\n connection: Connection,\n callback: EventCallback<CreatorWithdrawnEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"CreatorWithdrawnEvent\", callback, opts);\n}\n\n/** Subscribe to `PayoutClaimedEvent` emissions. */\nexport function onPayoutClaimed(\n connection: Connection,\n callback: EventCallback<PayoutClaimedEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"PayoutClaimedEvent\", callback, opts);\n}\n\n/** Subscribe to `RefundClaimedEvent` emissions. */\nexport function onRefundClaimed(\n connection: Connection,\n callback: EventCallback<RefundClaimedEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"RefundClaimedEvent\", callback, opts);\n}\n\n/** v0.2+: subscribe to `ResolutionFlaggedEvent`. */\nexport function onResolutionFlagged(\n connection: Connection,\n callback: EventCallback<ResolutionFlaggedEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"ResolutionFlaggedEvent\", callback, opts);\n}\n\n/** v0.2+: subscribe to `MarketFinalizedEvent`. */\nexport function onMarketFinalized(\n connection: Connection,\n callback: EventCallback<MarketFinalizedEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"MarketFinalizedEvent\", callback, opts);\n}\n\n/** v0.2+: subscribe to `ResolutionOverriddenEvent`. */\nexport function onResolutionOverridden(\n connection: Connection,\n callback: EventCallback<ResolutionOverriddenEvent>,\n opts?: SubscribeOptions,\n): EventSubscription {\n return subscribeEvent(connection, \"ResolutionOverriddenEvent\", callback, opts);\n}\n\n/* -----------------------------------------------------------------------\n * Poll-based alternative (no WebSocket required)\n * ----------------------------------------------------------------------- */\n\nexport interface PollEventsOptions {\n /** Only return events from signatures after this one (exclusive). */\n afterSignature?: string;\n /** Maximum number of signatures to scan. Defaults to 50. */\n limit?: number;\n /** Override program ID. */\n programId?: PublicKey;\n /** Commitment for `getSignaturesForAddress`. */\n commitment?: \"confirmed\" | \"finalized\";\n}\n\nexport interface PolledEvent {\n /** Transaction signature this event came from. */\n signature: string;\n /** Slot the transaction landed in. */\n slot: number;\n /** Decoded Cypher event. */\n event: CypherEvent;\n}\n\n/**\n * Fetch recent program logs and decode events from them. Use this for\n * environments that lack WebSocket support or for periodic batch jobs.\n *\n * Returns newest-first unless you reverse the result.\n */\nexport async function pollEvents(\n connection: Connection,\n opts: PollEventsOptions = {},\n): Promise<PolledEvent[]> {\n const pid = opts.programId ?? PROGRAM_ID;\n const sigs = await connection.getSignaturesForAddress(pid, {\n limit: opts.limit ?? 50,\n until: opts.afterSignature,\n }, opts.commitment ?? \"confirmed\");\n\n const results: PolledEvent[] = [];\n for (const sigInfo of sigs) {\n if (sigInfo.err) continue;\n const tx = await connection.getTransaction(sigInfo.signature, {\n commitment: opts.commitment ?? \"confirmed\",\n maxSupportedTransactionVersion: 0,\n });\n if (!tx?.meta?.logMessages) continue;\n const events = parseLogs(tx.meta.logMessages);\n for (const event of events) {\n results.push({\n signature: sigInfo.signature,\n slot: sigInfo.slot,\n event,\n });\n }\n }\n return results;\n}\n","import { AnchorProvider, Program } from \"@anchor-lang/core\";\nimport {\n Connection,\n PublicKey,\n type Commitment,\n type ConfirmOptions,\n} from \"@solana/web3.js\";\nimport { CLUSTERS, PROGRAM_ID, type ClusterConfig, type ClusterName } from \"./config.ts\";\nimport { IDL, type Cypher } from \"./idl/index.ts\";\nimport type { Wallet } from \"./wallet.ts\";\nimport {\n fetchGlobalState,\n fetchMarket,\n fetchAllMarkets,\n fetchMarketsByCreator,\n fetchMarketsByState,\n fetchPosition,\n fetchUserPositions,\n fetchPositionsForMarket,\n fetchLpPosition,\n fetchLpPositionsByProvider,\n type GlobalStateAccount,\n type MarketAccount,\n type EncryptedPositionAccount,\n type LpPositionAccount,\n} from \"./accounts/index.ts\";\nimport {\n initializeIx,\n updateAcceptedMintIx,\n adminClaimRemainingIx,\n initCompDefIx,\n buildAllInitCompDefIx,\n createMarketIx,\n createMarketMultiIx,\n cancelMarketIx,\n withdrawCreatorFundsIx,\n placePrivateBetYesnoIx,\n placePrivateBetMultiIx,\n resolveMarketYesnoIx,\n resolveMarketMultiIx,\n claimPayoutYesnoIx,\n claimPayoutMultiIx,\n claimRefundYesnoIx,\n claimRefundMultiIx,\n flagResolutionIx,\n finalizeResolutionIx,\n adminOverrideResolutionIx,\n type InitializeParams,\n type UpdateAcceptedMintParams,\n type AdminClaimRemainingParams,\n type InitCompDefParams,\n type InitCompDefMethodName,\n type CreateMarketParams,\n type CreateMarketMultiParams,\n type CancelMarketParams,\n type WithdrawCreatorFundsParams,\n type PlacePrivateBetParams,\n type ResolveMarketParams,\n type ClaimParams,\n type FlagResolutionParams,\n type FinalizeResolutionParams,\n type AdminOverrideResolutionParams,\n} from \"./instructions/index.ts\";\nimport {\n createMarketAction,\n createMarketMultiAction,\n cancelMarketAction,\n withdrawCreatorFundsAction,\n placeBetAction,\n resolveMarketAction,\n claimPayoutAction,\n claimRefundAction,\n flagResolutionAction,\n finalizeResolutionAction,\n adminOverrideResolutionAction,\n type CreateMarketResult,\n type PlaceBetInputs,\n type PlaceBetResult,\n type ResolveMarketInputs,\n type ResolveMarketResult,\n type ClaimInputs,\n type ClaimResult,\n type FlagResolutionInputs,\n type FinalizeResolutionInputs,\n type AdminOverrideResolutionInputs,\n type ResolutionActionResult,\n} from \"./actions/index.ts\";\nimport {\n subscribeAll,\n subscribeEvent,\n onMarketCreated,\n onBetPlaced,\n onMarketResolved,\n onMarketCancelled,\n onCreatorWithdrawn,\n onPayoutClaimed,\n onRefundClaimed,\n pollEvents,\n type EventSubscription,\n type SubscribeOptions,\n type PollEventsOptions,\n type PolledEvent,\n} from \"./events/subscribe.ts\";\nimport {\n parseLogs,\n type CypherEvent,\n type CypherEventName,\n} from \"./events/parser.ts\";\nimport type { TransactionInstruction } from \"@solana/web3.js\";\n\n/** Options accepted by `new CypherClient({...})`. */\nexport interface CypherClientOptions {\n /** A web3.js `Connection` already pointed at the desired cluster RPC. */\n connection: Connection;\n /** Anchor-compatible wallet (browser adapter or `keypairToWallet(kp)`). */\n wallet: Wallet;\n /**\n * Cluster preset to layer Arcium-specific config on. Pass a `ClusterName`\n * to use the built-in preset (devnet/mainnet/localnet), or a full\n * `ClusterConfig` to override.\n *\n * If omitted, the SDK infers from the connection's `rpcEndpoint`. If that\n * inference fails (e.g., custom RPC), it defaults to devnet and you can\n * override `arciumClusterOffset` later via `client.setArciumClusterOffset`.\n */\n cluster?: ClusterName | ClusterConfig;\n /** Commitment used by the underlying provider. Defaults to \"confirmed\". */\n commitment?: Commitment;\n /** Override the program ID (for redeploys with a different keypair). */\n programId?: PublicKey;\n /** Extra confirmation options forwarded to `AnchorProvider`. */\n confirmOptions?: ConfirmOptions;\n}\n\n/**\n * Main SDK entrypoint. Holds an `AnchorProvider`, the typed Cypher\n * `Program`, the Arcium cluster config, and high-level account accessor\n * namespaces.\n *\n * Construction is cheap and synchronous — no RPC calls happen until you\n * call a fetch / send method.\n */\nexport class CypherClient {\n readonly connection: Connection;\n readonly wallet: Wallet;\n readonly provider: AnchorProvider;\n readonly program: Program<Cypher>;\n readonly programId: PublicKey;\n readonly cluster: ClusterConfig;\n\n private _globalStateCache: GlobalStateAccount | null = null;\n\n /**\n * High-level account accessors. Each namespace is a thin facade over\n * the per-account fetch helpers in `./accounts/`.\n */\n readonly globalState: {\n /** Returns the cached `GlobalState`, refetching if not yet seen. */\n fetch: (opts?: { refresh?: boolean }) => Promise<GlobalStateAccount>;\n /** Invalidate the cache; next `fetch()` will hit RPC. */\n invalidate: () => void;\n };\n readonly markets: {\n fetch: (marketId: bigint | number) => Promise<MarketAccount | null>;\n fetchByPda: (pda: PublicKey) => Promise<MarketAccount | null>;\n all: () => Promise<Array<{ publicKey: PublicKey; account: MarketAccount }>>;\n byCreator: (creator: PublicKey) => Promise<Array<{ publicKey: PublicKey; account: MarketAccount }>>;\n byState: (state: number) => Promise<Array<{ publicKey: PublicKey; account: MarketAccount }>>;\n };\n readonly positions: {\n fetch: (market: PublicKey, user: PublicKey) => Promise<EncryptedPositionAccount | null>;\n byUser: (user: PublicKey) => Promise<Array<{ publicKey: PublicKey; account: EncryptedPositionAccount }>>;\n forMarket: (market: PublicKey) => Promise<Array<{ publicKey: PublicKey; account: EncryptedPositionAccount }>>;\n };\n readonly lpPositions: {\n fetch: (market: PublicKey, creator: PublicKey) => Promise<LpPositionAccount | null>;\n byProvider: (provider: PublicKey) => Promise<Array<{ publicKey: PublicKey; account: LpPositionAccount }>>;\n };\n\n /**\n * High-level action helpers. Each orchestrates a full flow:\n * encrypt → build ix → send tx → await Arcium callback → refetch.\n *\n * For raw instruction building (advanced composition), use the\n * lower-level `client.admin`, `client.bets`, etc. namespaces below.\n */\n readonly actions: {\n /** Create a YES/NO market. Fetches GlobalState for marketId + mint automatically. */\n createMarket: (\n inputs: Omit<CreateMarketParams, \"expectedMarketId\" | \"acceptedMint\" | \"challengePeriod\" | \"bondAmount\"> & {\n acceptedMint?: PublicKey;\n /** v0.2+: defaults to MIN_CHALLENGE_PERIOD_SECS (24h) if omitted. */\n challengePeriod?: bigint | number;\n /** Defaults to MIN_CREATOR_BOND ($20 USDC). Pass a larger amount to signal commitment. */\n bondAmount?: bigint | number;\n },\n ) => Promise<CreateMarketResult>;\n /** Create a multi-outcome market (2–4 outcomes). */\n createMarketMulti: (\n inputs: Omit<CreateMarketMultiParams, \"expectedMarketId\" | \"acceptedMint\" | \"challengePeriod\" | \"bondAmount\"> & {\n acceptedMint?: PublicKey;\n challengePeriod?: bigint | number;\n bondAmount?: bigint | number;\n },\n ) => Promise<CreateMarketResult>;\n /** Cancel a market with zero bets. Returns bond to creator. */\n cancelMarket: (\n inputs: Omit<CancelMarketParams, \"acceptedMint\"> & { acceptedMint?: PublicKey },\n ) => Promise<{ signature: string; market: MarketAccount | null }>;\n /** Creator withdraws bond + LP fees from a resolved market. */\n withdrawCreatorFunds: (\n inputs: Omit<WithdrawCreatorFundsParams, \"acceptedMint\"> & { acceptedMint?: PublicKey },\n ) => Promise<{ signature: string }>;\n /** End-to-end private bet: encrypt → send → await callback → refetch. */\n placeBet: (inputs: PlaceBetInputs) => Promise<PlaceBetResult>;\n /** Resolve a market: send queue ix → await reveal callback → refetch. */\n resolveMarket: (inputs: ResolveMarketInputs) => Promise<ResolveMarketResult>;\n /** Claim payout on a resolved market (winning bettor). */\n claimPayout: (inputs: ClaimInputs) => Promise<ClaimResult>;\n /** Claim refund on an unresolved market past its deadline. */\n claimRefund: (inputs: ClaimInputs) => Promise<ClaimResult>;\n /** v0.2+: flag a pending resolution as disputed (permissionless). */\n flagResolution: (inputs: FlagResolutionInputs) => Promise<ResolutionActionResult>;\n /** v0.2+: finalize a pending resolution after the challenge window elapses undisputed (permissionless). */\n finalizeResolution: (inputs: FinalizeResolutionInputs) => Promise<ResolutionActionResult>;\n /** v0.2+: admin override on a disputed market. */\n adminOverrideResolution: (inputs: AdminOverrideResolutionInputs) => Promise<ResolutionActionResult>;\n };\n\n /**\n * Event subscription helpers. Subscribe via WebSocket (`onLogs`) or\n * poll-based fetching for environments without WS.\n */\n readonly events: {\n /** Subscribe to all Cypher program events. */\n subscribeAll: (callback: (event: CypherEvent) => void, opts?: SubscribeOptions) => EventSubscription;\n /**\n * Subscribe to a specific event by name. The `data` callback parameter\n * is narrowed to the matching event's payload type via the generic.\n */\n subscribe: <N extends CypherEventName>(\n name: N,\n callback: (\n data: Extract<CypherEvent, { name: N }>[\"data\"],\n raw: CypherEvent,\n ) => void,\n opts?: SubscribeOptions,\n ) => EventSubscription;\n /** Convenience: subscribe to MarketCreatedEvent. */\n onMarketCreated: (callback: (data: import(\"./events/parser.ts\").MarketCreatedEvent) => void, opts?: SubscribeOptions) => EventSubscription;\n /** Convenience: subscribe to BetPlacedEvent. */\n onBetPlaced: (callback: (data: import(\"./events/parser.ts\").BetPlacedEvent) => void, opts?: SubscribeOptions) => EventSubscription;\n /** Convenience: subscribe to MarketResolvedEvent. */\n onMarketResolved: (callback: (data: import(\"./events/parser.ts\").MarketResolvedEvent) => void, opts?: SubscribeOptions) => EventSubscription;\n /** Convenience: subscribe to MarketCancelledEvent. */\n onMarketCancelled: (callback: (data: import(\"./events/parser.ts\").MarketCancelledEvent) => void, opts?: SubscribeOptions) => EventSubscription;\n /** Convenience: subscribe to CreatorWithdrawnEvent. */\n onCreatorWithdrawn: (callback: (data: import(\"./events/parser.ts\").CreatorWithdrawnEvent) => void, opts?: SubscribeOptions) => EventSubscription;\n /** Convenience: subscribe to PayoutClaimedEvent. */\n onPayoutClaimed: (callback: (data: import(\"./events/parser.ts\").PayoutClaimedEvent) => void, opts?: SubscribeOptions) => EventSubscription;\n /** Convenience: subscribe to RefundClaimedEvent. */\n onRefundClaimed: (callback: (data: import(\"./events/parser.ts\").RefundClaimedEvent) => void, opts?: SubscribeOptions) => EventSubscription;\n /** Poll-based event fetch (no WS needed). */\n pollEvents: (opts?: PollEventsOptions) => Promise<PolledEvent[]>;\n /** Parse raw transaction logs into typed events. */\n parseLogs: (logs: string[]) => CypherEvent[];\n };\n\n /**\n * Instruction-builder facades. Each returns a `TransactionInstruction`\n * ready to drop into a `Transaction` / `TransactionMessage`.\n *\n * For end-to-end flows (encrypt → send → await callback → decode) use\n * the higher-level `client.actions.*` helpers.\n */\n readonly admin: {\n initializeIx: (params: InitializeParams) => Promise<TransactionInstruction>;\n updateAcceptedMintIx: (params: UpdateAcceptedMintParams) => Promise<TransactionInstruction>;\n adminClaimRemainingIx: (params: AdminClaimRemainingParams) => Promise<TransactionInstruction>;\n };\n readonly compDefs: {\n initIx: (methodName: InitCompDefMethodName, params: InitCompDefParams) => Promise<TransactionInstruction>;\n buildAllInitIx: typeof buildAllInitCompDefIx extends (\n c: CypherClient,\n p: InitCompDefParams,\n ) => infer R\n ? (params: InitCompDefParams) => R\n : never;\n };\n readonly marketIx: {\n createIx: (params: CreateMarketParams) => Promise<TransactionInstruction>;\n createMultiIx: (params: CreateMarketMultiParams) => Promise<TransactionInstruction>;\n cancelIx: (params: CancelMarketParams) => Promise<TransactionInstruction>;\n withdrawCreatorFundsIx: (params: WithdrawCreatorFundsParams) => Promise<TransactionInstruction>;\n };\n readonly bets: {\n placeYesnoIx: (params: PlacePrivateBetParams) => Promise<TransactionInstruction>;\n placeMultiIx: (params: PlacePrivateBetParams) => Promise<TransactionInstruction>;\n };\n readonly resolveIx: {\n yesnoIx: (params: ResolveMarketParams) => Promise<TransactionInstruction>;\n multiIx: (params: ResolveMarketParams) => Promise<TransactionInstruction>;\n };\n readonly claimIx: {\n payoutYesnoIx: (params: ClaimParams) => Promise<TransactionInstruction>;\n payoutMultiIx: (params: ClaimParams) => Promise<TransactionInstruction>;\n refundYesnoIx: (params: ClaimParams) => Promise<TransactionInstruction>;\n refundMultiIx: (params: ClaimParams) => Promise<TransactionInstruction>;\n };\n /** v0.2+: dispute / challenge-window instruction builders. */\n readonly resolutionIx: {\n flagIx: (params: FlagResolutionParams) => Promise<TransactionInstruction>;\n finalizeIx: (params: FinalizeResolutionParams) => Promise<TransactionInstruction>;\n adminOverrideIx: (params: AdminOverrideResolutionParams) => Promise<TransactionInstruction>;\n };\n\n constructor(opts: CypherClientOptions) {\n this.connection = opts.connection;\n this.wallet = opts.wallet;\n this.programId = opts.programId ?? PROGRAM_ID;\n this.cluster = resolveCluster(opts.cluster, opts.connection.rpcEndpoint);\n\n const confirmOptions: ConfirmOptions =\n opts.confirmOptions ?? {\n commitment: opts.commitment ?? \"confirmed\",\n preflightCommitment: opts.commitment ?? \"confirmed\",\n skipPreflight: false,\n };\n\n this.provider = new AnchorProvider(this.connection, this.wallet, confirmOptions);\n // Anchor's `Program` reads the program ID from `idl.address`. If the\n // caller supplied an override (e.g., a localnet redeploy under a fresh\n // keypair), shallow-clone the IDL with the new address so both\n // `client.programId` and `client.program.programId` agree.\n const idlForProgram =\n this.programId.equals(PROGRAM_ID)\n ? (IDL as unknown as Cypher)\n : ({ ...IDL, address: this.programId.toBase58() } as unknown as Cypher);\n this.program = new Program<Cypher>(idlForProgram, this.provider);\n\n // ---- namespace facades ------------------------------------------------\n this.globalState = {\n fetch: async (o = {}) => {\n if (o.refresh || !this._globalStateCache) {\n this._globalStateCache = await fetchGlobalState(this);\n }\n return this._globalStateCache;\n },\n invalidate: () => {\n this._globalStateCache = null;\n },\n };\n\n this.markets = {\n fetch: (id) => fetchMarket(this, id),\n fetchByPda: (pda) => fetchMarket(this, pda),\n all: () => fetchAllMarkets(this),\n byCreator: (creator) => fetchMarketsByCreator(this, creator),\n byState: (state) => fetchMarketsByState(this, state),\n };\n\n this.positions = {\n fetch: (market, user) => fetchPosition(this, market, user),\n byUser: (user) => fetchUserPositions(this, user),\n forMarket: (market) => fetchPositionsForMarket(this, market),\n };\n\n this.lpPositions = {\n fetch: (market, creator) => fetchLpPosition(this, market, creator),\n byProvider: (provider) => fetchLpPositionsByProvider(this, provider),\n };\n\n // ---- high-level actions -----------------------------------------------\n this.actions = {\n createMarket: (inputs) => createMarketAction(this, inputs),\n createMarketMulti: (inputs) => createMarketMultiAction(this, inputs),\n cancelMarket: (inputs) => cancelMarketAction(this, inputs),\n withdrawCreatorFunds: (inputs) => withdrawCreatorFundsAction(this, inputs),\n placeBet: (inputs) => placeBetAction(this, inputs),\n resolveMarket: (inputs) => resolveMarketAction(this, inputs),\n claimPayout: (inputs) => claimPayoutAction(this, inputs),\n claimRefund: (inputs) => claimRefundAction(this, inputs),\n flagResolution: (inputs) => flagResolutionAction(this, inputs),\n finalizeResolution: (inputs) => finalizeResolutionAction(this, inputs),\n adminOverrideResolution: (inputs) => adminOverrideResolutionAction(this, inputs),\n };\n\n // ---- events -----------------------------------------------------------\n this.events = {\n subscribeAll: (cb, opts) => subscribeAll(this.connection, cb, opts),\n // Cast the whole wiring through `unknown` to bridge the generic\n // signature — TS can't see through `Extract<>` when `N` is bound\n // outside its own generic scope. The external client.events.subscribe\n // field still narrows the callback payload via its own <N> generic.\n subscribe: ((name: CypherEventName, cb: unknown, opts?: SubscribeOptions) =>\n subscribeEvent(\n this.connection,\n name as never,\n cb as never,\n opts,\n )) as unknown as (typeof this)[\"events\"][\"subscribe\"],\n onMarketCreated: (cb, opts) => onMarketCreated(this.connection, cb, opts),\n onBetPlaced: (cb, opts) => onBetPlaced(this.connection, cb, opts),\n onMarketResolved: (cb, opts) => onMarketResolved(this.connection, cb, opts),\n onMarketCancelled: (cb, opts) => onMarketCancelled(this.connection, cb, opts),\n onCreatorWithdrawn: (cb, opts) => onCreatorWithdrawn(this.connection, cb, opts),\n onPayoutClaimed: (cb, opts) => onPayoutClaimed(this.connection, cb, opts),\n onRefundClaimed: (cb, opts) => onRefundClaimed(this.connection, cb, opts),\n pollEvents: (opts) => pollEvents(this.connection, opts),\n parseLogs: (logs) => parseLogs(logs),\n };\n\n // ---- instruction namespaces ------------------------------------------\n this.admin = {\n initializeIx: (p) => initializeIx(this, p),\n updateAcceptedMintIx: (p) => updateAcceptedMintIx(this, p),\n adminClaimRemainingIx: (p) => adminClaimRemainingIx(this, p),\n };\n this.compDefs = {\n initIx: (name, p) => initCompDefIx(this, name, p),\n buildAllInitIx: ((p: InitCompDefParams) => buildAllInitCompDefIx(this, p)) as never,\n };\n this.marketIx = {\n createIx: (p) => createMarketIx(this, p),\n createMultiIx: (p) => createMarketMultiIx(this, p),\n cancelIx: (p) => cancelMarketIx(this, p),\n withdrawCreatorFundsIx: (p) => withdrawCreatorFundsIx(this, p),\n };\n this.bets = {\n placeYesnoIx: (p) => placePrivateBetYesnoIx(this, p),\n placeMultiIx: (p) => placePrivateBetMultiIx(this, p),\n };\n this.resolveIx = {\n yesnoIx: (p) => resolveMarketYesnoIx(this, p),\n multiIx: (p) => resolveMarketMultiIx(this, p),\n };\n this.claimIx = {\n payoutYesnoIx: (p) => claimPayoutYesnoIx(this, p),\n payoutMultiIx: (p) => claimPayoutMultiIx(this, p),\n refundYesnoIx: (p) => claimRefundYesnoIx(this, p),\n refundMultiIx: (p) => claimRefundMultiIx(this, p),\n };\n this.resolutionIx = {\n flagIx: (p) => flagResolutionIx(this, p),\n finalizeIx: (p) => finalizeResolutionIx(this, p),\n adminOverrideIx: (p) => adminOverrideResolutionIx(this, p),\n };\n }\n}\n\nfunction resolveCluster(\n cluster: ClusterName | ClusterConfig | undefined,\n rpcEndpoint: string,\n): ClusterConfig {\n if (typeof cluster === \"object\" && cluster !== null) return cluster;\n if (typeof cluster === \"string\") return CLUSTERS[cluster];\n\n // Heuristic inference from RPC URL — only used when caller didn't say.\n const lower = rpcEndpoint.toLowerCase();\n if (lower.includes(\"devnet\")) return CLUSTERS.devnet;\n if (lower.includes(\"mainnet\") || lower.includes(\"api.solana.com\")) return CLUSTERS.mainnet;\n if (lower.includes(\"localhost\") || lower.includes(\"127.0.0.1\")) return CLUSTERS.localnet;\n return CLUSTERS.devnet;\n}\n"]}