@bulletxyz/bullet-sdk 0.48.2 → 0.48.4

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.
@@ -9,7 +9,7 @@
9
9
  "/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { Hash, abytes, aexists, aoutput, clean, createView, toBytes } from \"./utils.js\";\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/** Choice: a ? b : c */\nexport function Chi(a, b, c) {\n return (a & b) ^ (~a & c);\n}\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a, b, c) {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport class HashMD extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n//# sourceMappingURL=_md.js.map",
10
10
  "/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from \"./_md.js\";\nimport * as u64 from \"./_u64.js\";\nimport { clean, createHasher, rotr } from \"./utils.js\";\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD {\n constructor(outputLen = 32) {\n super(64, outputLen, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = SHA256_IV[0] | 0;\n this.B = SHA256_IV[1] | 0;\n this.C = SHA256_IV[2] | 0;\n this.D = SHA256_IV[3] | 0;\n this.E = SHA256_IV[4] | 0;\n this.F = SHA256_IV[5] | 0;\n this.G = SHA256_IV[6] | 0;\n this.H = SHA256_IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n clean(SHA256_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\nexport class SHA224 extends SHA256 {\n constructor() {\n super(28);\n this.A = SHA224_IV[0] | 0;\n this.B = SHA224_IV[1] | 0;\n this.C = SHA224_IV[2] | 0;\n this.D = SHA224_IV[3] | 0;\n this.E = SHA224_IV[4] | 0;\n this.F = SHA224_IV[5] | 0;\n this.G = SHA224_IV[6] | 0;\n this.H = SHA224_IV[7] | 0;\n }\n}\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nexport class SHA512 extends HashMD {\n constructor(outputLen = 64) {\n super(128, outputLen, 16, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = SHA512_IV[0] | 0;\n this.Al = SHA512_IV[1] | 0;\n this.Bh = SHA512_IV[2] | 0;\n this.Bl = SHA512_IV[3] | 0;\n this.Ch = SHA512_IV[4] | 0;\n this.Cl = SHA512_IV[5] | 0;\n this.Dh = SHA512_IV[6] | 0;\n this.Dl = SHA512_IV[7] | 0;\n this.Eh = SHA512_IV[8] | 0;\n this.El = SHA512_IV[9] | 0;\n this.Fh = SHA512_IV[10] | 0;\n this.Fl = SHA512_IV[11] | 0;\n this.Gh = SHA512_IV[12] | 0;\n this.Gl = SHA512_IV[13] | 0;\n this.Hh = SHA512_IV[14] | 0;\n this.Hl = SHA512_IV[15] | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nexport class SHA384 extends SHA512 {\n constructor() {\n super(48);\n this.Ah = SHA384_IV[0] | 0;\n this.Al = SHA384_IV[1] | 0;\n this.Bh = SHA384_IV[2] | 0;\n this.Bl = SHA384_IV[3] | 0;\n this.Ch = SHA384_IV[4] | 0;\n this.Cl = SHA384_IV[5] | 0;\n this.Dh = SHA384_IV[6] | 0;\n this.Dl = SHA384_IV[7] | 0;\n this.Eh = SHA384_IV[8] | 0;\n this.El = SHA384_IV[9] | 0;\n this.Fh = SHA384_IV[10] | 0;\n this.Fl = SHA384_IV[11] | 0;\n this.Gh = SHA384_IV[12] | 0;\n this.Gl = SHA384_IV[13] | 0;\n this.Hh = SHA384_IV[14] | 0;\n this.Hl = SHA384_IV[15] | 0;\n }\n}\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\nexport class SHA512_224 extends SHA512 {\n constructor() {\n super(28);\n this.Ah = T224_IV[0] | 0;\n this.Al = T224_IV[1] | 0;\n this.Bh = T224_IV[2] | 0;\n this.Bl = T224_IV[3] | 0;\n this.Ch = T224_IV[4] | 0;\n this.Cl = T224_IV[5] | 0;\n this.Dh = T224_IV[6] | 0;\n this.Dl = T224_IV[7] | 0;\n this.Eh = T224_IV[8] | 0;\n this.El = T224_IV[9] | 0;\n this.Fh = T224_IV[10] | 0;\n this.Fl = T224_IV[11] | 0;\n this.Gh = T224_IV[12] | 0;\n this.Gl = T224_IV[13] | 0;\n this.Hh = T224_IV[14] | 0;\n this.Hl = T224_IV[15] | 0;\n }\n}\nexport class SHA512_256 extends SHA512 {\n constructor() {\n super(32);\n this.Ah = T256_IV[0] | 0;\n this.Al = T256_IV[1] | 0;\n this.Bh = T256_IV[2] | 0;\n this.Bl = T256_IV[3] | 0;\n this.Ch = T256_IV[4] | 0;\n this.Cl = T256_IV[5] | 0;\n this.Dh = T256_IV[6] | 0;\n this.Dl = T256_IV[7] | 0;\n this.Eh = T256_IV[8] | 0;\n this.El = T256_IV[9] | 0;\n this.Fh = T256_IV[10] | 0;\n this.Fl = T256_IV[11] | 0;\n this.Gh = T256_IV[12] | 0;\n this.Gl = T256_IV[13] | 0;\n this.Hh = T256_IV[14] | 0;\n this.Hl = T256_IV[15] | 0;\n }\n}\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexport const sha256 = /* @__PURE__ */ createHasher(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224 = /* @__PURE__ */ createHasher(() => new SHA224());\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512 = /* @__PURE__ */ createHasher(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384 = /* @__PURE__ */ createHasher(() => new SHA384());\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256 = /* @__PURE__ */ createHasher(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224 = /* @__PURE__ */ createHasher(() => new SHA512_224());\n//# sourceMappingURL=sha2.js.map",
11
11
  "// src/bank.ts\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport { bech32m } from \"bech32\";\nfunction getHolderAddress(holder) {\n if (\"user\" in holder) return holder.user;\n if (\"module\" in holder) return holder.module;\n return holder.derived;\n}\nfunction getTokenId(originator, tokenName, decimals) {\n const nameBytes = new TextEncoder().encode(tokenName);\n const buffer = new Uint8Array(originator.length + nameBytes.length + 1);\n buffer.set(originator, 0);\n buffer.set(nameBytes, originator.length);\n buffer[originator.length + nameBytes.length] = decimals;\n const hash = sha256(buffer);\n hash[31] = decimals;\n return hash;\n}\nvar Bank = class {\n /**\n * Creates a new Bank instance.\n *\n * @param rollup - The rollup instance to use for HTTP requests\n */\n // biome-ignore lint/suspicious/noExplicitAny: types arent used\n constructor(rollup) {\n this.rollup = rollup;\n }\n /**\n * Gets the balance of a specific token for a given address.\n *\n * If no token ID is provided, the gas token balance will be returned.\n *\n * @param address - The address to query the balance for\n * @param tokenId - Optional token ID. If not provided, uses the gas token\n * @returns Promise resolving to the token balance as a bigint\n * @throws {SovereignClient.APIError} When the request fails for reasons other than missing account\n * @example\n * ```typescript\n * const bank = new Bank(rollup);\n * const balance = await bank.balance(\"0x123...\");\n * console.log(`Balance: ${balance}`);\n *\n * // Query specific token balance\n * const tokenBalance = await bank.balance(\"0x123...\", \"token_123\");\n * ```\n */\n async balance(address, tokenId) {\n const token = await this.tokenIdOrElseGasTokenId(tokenId);\n try {\n const response = await this.rollup.http.get(\n `/modules/bank/tokens/${token}/balances/${address}`\n );\n return BigInt(response.amount);\n } catch (err) {\n if (this.isMissingAccountError(err)) return BigInt(0);\n throw err;\n }\n }\n /**\n * Gets the metadata of a specific token.\n *\n * If no token ID is provided, returns the metadata of the gas token.\n *\n * @param tokenId - Optional token ID. If not provided, uses the gas token\n * @returns Promise resolving to the token metadata\n * @throws {SovereignClient.APIError} When the request fails\n * @example\n * ```typescript\n * const bank = new Bank(rollup);\n * const metadata = await bank.tokenMetadata();\n * console.log(`Token name: ${metadata.name}, decimals: ${metadata.decimals}`);\n *\n * // Query specific token metadata\n * const tokenMeta = await bank.tokenMetadata(\"token_123\");\n * ```\n */\n async tokenMetadata(tokenId) {\n const token = await this.tokenIdOrElseGasTokenId(tokenId);\n const response = await this.rollup.http.get(\n `/modules/bank/state/tokens/items/${token}`\n );\n const decoded = bech32m.decode(token);\n const bytes = bech32m.fromWords(decoded.words);\n const decimals = bytes[31];\n return {\n name: response.value.name,\n decimals,\n totalSupply: BigInt(response.value.total_supply),\n supplyCap: BigInt(response.value.supply_cap),\n admins: response.value.admins.map(getHolderAddress)\n };\n }\n /**\n * Gets the gas token identifier.\n *\n * The gas token ID is cached after the first request to avoid repeated API calls.\n *\n * @returns Promise resolving to the gas token ID as a string\n * @throws {Error} When the gas token ID cannot be retrieved\n * @example\n * ```typescript\n * const bank = new Bank(rollup);\n * const gasTokenId = await bank.gasTokenId();\n * console.log(`Gas token ID: ${gasTokenId}`);\n * ```\n */\n async gasTokenId() {\n if (this._gasTokenId) return this._gasTokenId;\n const response = await this.rollup.http.get(\n \"/modules/bank/tokens/gas_token\"\n );\n this._gasTokenId = response.token_id;\n return this._gasTokenId;\n }\n async tokenIdOrElseGasTokenId(tokenId) {\n return tokenId ?? this.gasTokenId();\n }\n // biome-ignore lint/suspicious/noExplicitAny: todo\n isMissingAccountError(anyError) {\n if (anyError?.status !== 404) return false;\n const body = anyError?.error;\n return body?.message?.startsWith(\"Balance\") && body?.message?.endsWith(\"not found\");\n }\n};\nexport {\n Bank,\n getTokenId\n};\n//# sourceMappingURL=index.mjs.map",
12
- "import { getTokenId } from \"@sovereign-sdk/modules\";\nimport type { RollupSchema } from \"@sovereign-sdk/serializers\";\nimport { WasmSerializer } from \"@sovereign-sdk/serializers/wasm\";\nimport type { Transaction } from \"@sovereign-sdk/types\";\nimport {\n type Authenticator,\n createSolanaSignableRollup,\n type SolanaSignableRollup,\n type StandardRollupContext,\n type TransactionResult,\n VersionMismatchError,\n} from \"@sovereign-sdk/web3\";\nexport type { Authenticator };\n\nimport Decimal from \"decimal.js\";\nimport type { EquityType, MarginType } from \"./bullet-wasm\";\nimport { BulletWasm } from \"./bullet-wasm\";\nimport { type Endpoints, NETWORKS } from \"./constants\";\nimport { BulletError } from \"./error\";\nimport type { Orderbook } from \"./orderbook\";\nimport type { RuntimeCall } from \"./rollupTypes\";\nimport type {\n Address,\n AdminType,\n AssetId,\n AssetName,\n FeeTier,\n MarketId,\n MarketMetadata,\n MarketName,\n MarkPriceUpdateArgs,\n Network,\n NewOrderArgs,\n NewTwapOrderArgs,\n OraclePriceUpdateArgs,\n OrderType,\n Side,\n SpotCollateralTransferDirection,\n TokenId,\n TpslPair,\n} from \"./types\";\nimport {\n base58ToBytes,\n isNetwork,\n isValidHttpUrl,\n serialize,\n serializeVersioned,\n validateEndpoints,\n} from \"./utils\";\nimport type { Wallet } from \"./wallet\";\nimport { WebSocketManager } from \"./websocket\";\nimport {\n type AccountAddresses,\n BaseResponseSchemas,\n type BorrowLendPool,\n type OrderbookL2,\n type PerpMarketConfig,\n ResponseSchemas,\n type SpotMarketConfig,\n type UserAccount,\n type VersionedExchangeAssets,\n type VersionedExchangeInfo,\n type VersionedExecutionIds,\n type VersionedPerpMarket,\n type VersionedRiskEngine,\n type VersionedSpotMarket,\n type VersionedUserAccountConfig,\n} from \"./zod-types/rest\";\nimport { WasmResponseSchemas } from \"./zod-types/wasm\";\n\n// Define transaction options struct\nexport interface TransactionOpts {\n /**\n * Maximum priority fee in basis points.\n * @default 0\n */\n maxPriorityFeeBps?: number;\n /**\n * Maximum fee for the transaction.\n * @default \"10000000000\"\n */\n maxFee?: string;\n /**\n * Gas limit for the transaction.\n * @default null\n */\n gasLimit?: number[] | null;\n /**\n * The authenticator scheme for this client. Set once at construction time\n * and used for all subsequent transactions — cannot be overridden per-call.\n *\n * This also determines how Decimal values are serialized:\n * - Solana authenticators use serde (string format, e.g. \"10000\")\n * - Standard authenticator uses Borsh (SurrogateDecimal { flags, hi, lo, mid })\n *\n * Options:\n *\n * - \"solanaAuto\": Auto-detect based on signer type (recommended for Solana wallets)\n * - Uses \"solana\" for LedgerSolanaSigner (with preamble)\n * - Uses \"solanaSimple\" for other Solana signers (no preamble)\n *\n * - \"solanaSimple\": For browser wallets (Phantom, Solflare, etc.) - no preamble\n * - Signs raw JSON bytes directly\n * - Smaller message size\n *\n * - \"solana\": For Ledger hardware wallets - with preamble\n * - Adds 85-byte preamble required by Ledger's signOffchainMessage API\n * - Provides metadata for Ledger's display\n *\n * - \"standard\": Standard Sovereign SDK authentication (not Solana off-chain)\n * - Uses the rollup's native authentication scheme\n * - For non-Solana wallets or when you need standard SDK auth\n * - Uses \"/sequencer/txs\" endpoint instead of \"/sequencer/accept-solana-offchain-tx\"\n *\n * @default \"standard\"\n */\n authenticator?: Authenticator;\n}\n\n// Default transaction options\nconst DEFAULT_TRANSACTION_OPTS: Required<TransactionOpts> = {\n maxPriorityFeeBps: 0,\n maxFee: \"10000000000\",\n gasLimit: null,\n authenticator: \"standard\",\n};\n\ntype AmendOrderOptions =\n | {\n existingOrderId: bigint;\n existingClientOrderId?: never;\n newOrderArgs: NewOrderArgs;\n }\n | {\n existingOrderId?: never;\n existingClientOrderId: bigint;\n newOrderArgs: NewOrderArgs;\n };\n\ntype CancelOrderOptions =\n | {\n orderId: bigint;\n clientOrderId?: never;\n }\n | {\n orderId?: never;\n clientOrderId: bigint;\n };\n\ntype AssetInfo = {\n id: AssetId;\n name: AssetName;\n tokenId: TokenId | null;\n decimals: number;\n withdrawFee: string;\n};\n\n// Base class for read-only operations (no wallet required)\nexport class ReadOnlyClient {\n public rollup: SolanaSignableRollup<RuntimeCall>;\n public readonly endpoint: string;\n protected readonly wsManager?: WebSocketManager;\n protected assetInfoRegistry?: Map<AssetName, AssetInfo>;\n protected assetInfoRegistryReverse?: Map<AssetId, AssetInfo>;\n protected marketRegistry?: Map<MarketName, MarketMetadata>; // ID and type\n protected marketRegistryReverse?: Map<MarketId, MarketName>;\n protected generationOverride?: () => number;\n\n /**\n * @internal\n * Do not construct directly. Use Client.fromNetwork() or Client.fromEndpoints()\n */\n constructor(endpoints: Endpoints, rollup: SolanaSignableRollup<RuntimeCall>) {\n if (!isValidHttpUrl(endpoints.rest)) {\n throw new Error(`Invalid HTTP URL provided: ${endpoints.rest}`);\n }\n this.endpoint = endpoints.rest;\n this.rollup = rollup;\n if (endpoints.ws) {\n this.wsManager = new WebSocketManager(endpoints.ws);\n }\n // Initialize exchange info and registries asynchronously\n // Factory methods must await this separately\n }\n\n // Static convenience constructors (read-only, no wallet)\n public static async fromEndpoints(\n endpoints: Endpoints,\n ): Promise<ReadOnlyClient> {\n validateEndpoints(endpoints);\n console.debug(`Connecting to ${endpoints.rest}`);\n\n const rollupConfig = {\n url: endpoints.rest,\n getSerializer: (schema: RollupSchema) => new WasmSerializer(schema),\n };\n\n // This endpoint is ONLY used for Solana offchain authenticators (\"solana\", \"solanaSimple\").\n // Standard authenticator (\"standard\") uses \"/sequencer/txs\" internally via the inner StandardRollup.\n //\n // Endpoint routing by authenticator:\n // - \"standard\" → /sequencer/txs (Borsh-serialized, handled by inner StandardRollup)\n // - \"solana\" → /sequencer/solana_offchain_txs (JSON, signed with Solana spec preamble)\n // - \"solanaSimple\" → /sequencer/solana_offchain_txs (JSON, simple signature)\n const solanaEndpoint = \"/sequencer/solana_offchain_txs\";\n const rollup = await createSolanaSignableRollup<RuntimeCall>(\n rollupConfig,\n solanaEndpoint,\n );\n const client = new ReadOnlyClient(endpoints, rollup);\n await client.initializeExchangeInfo();\n return client;\n }\n\n public static async fromNetwork(network: Network): Promise<ReadOnlyClient> {\n if (!isNetwork(network)) {\n throw new Error(`Invalid network: ${network}`);\n }\n return await ReadOnlyClient.fromEndpoints(NETWORKS[network]);\n }\n\n public setGenerationOverride(generation: (() => number) | undefined) {\n this.generationOverride = generation;\n }\n\n // HTTP methods for data fetching (errors bubble up naturally from Sovereign SDK)\n private async fetchApiResource<T>(\n path: string,\n params?: Record<string, string | undefined>,\n ): Promise<T> {\n return await this.rollup.http.get<T>(path, { query: params });\n }\n\n private async fetchBulkApiResource<T>(\n path: string,\n body: Record<string, unknown>,\n params?: Record<string, string>,\n ): Promise<T> {\n return await this.rollup.http.post<T>(path, { query: params, body });\n }\n\n /**\n * @internal\n * Initializes exchange info and registries. Called automatically by factory methods.\n */\n async initializeExchangeInfo(): Promise<void> {\n const exchangeInfo = await this.getExchangeInfo();\n if (!exchangeInfo) {\n throw new Error(\"Exchange info not found\");\n }\n\n this.assetInfoRegistry = new Map();\n this.assetInfoRegistryReverse = new Map();\n\n this.marketRegistry = new Map();\n this.marketRegistryReverse = new Map();\n\n for (const info of exchangeInfo.data.assets.values()) {\n if (info && typeof info.name === \"string\") {\n const transformedInfo = {\n id: info.id,\n name: info.name,\n tokenId: info.token_id,\n decimals: info.decimals,\n withdrawFee: info.withdraw_fee.toString(),\n };\n this.assetInfoRegistry.set(info.name, transformedInfo);\n this.assetInfoRegistryReverse.set(info.id, transformedInfo);\n }\n }\n\n for (const info of exchangeInfo.data.markets.values()) {\n if (info && typeof info.name === \"string\") {\n this.marketRegistry.set(info.name, {\n id: info.id,\n kind: info.kind,\n baseAssetId: info.base_asset_id,\n name: info.name,\n });\n this.marketRegistryReverse.set(info.id, info.name);\n }\n }\n }\n\n // ========================================================================\n // Public Read Methods (work without wallet)\n // ========================================================================\n\n public async getExchangeInfo(): Promise<VersionedExchangeInfo | null> {\n const path = \"/modules/exchange/state/exchange-info\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.ExchangeInfo.parse(response);\n return parsed.value;\n }\n\n private getMarketMapping(): Map<MarketName, MarketMetadata> {\n if (!this.marketRegistry) {\n throw new Error(\"Market registry not initialized\");\n }\n return this.marketRegistry;\n }\n\n public getAssetInfo(asset: AssetName): AssetInfo {\n if (!this.assetInfoRegistry) {\n throw new Error(\"Asset registry not initialized\");\n }\n const assetInfo = this.assetInfoRegistry.get(asset);\n if (!assetInfo) {\n throw new Error(`Asset ${asset} not found`);\n }\n\n return assetInfo;\n }\n\n public getAssetId(asset: AssetName): AssetId {\n if (!this.assetInfoRegistry) {\n throw new Error(\"Asset registry not initialized\");\n }\n const assetInfo = this.assetInfoRegistry.get(asset);\n if (!assetInfo) {\n throw new Error(`Asset ${asset} not found`);\n }\n return assetInfo.id;\n }\n\n public getAssetName(assetId: AssetId): AssetName {\n if (!this.assetInfoRegistryReverse) {\n throw new Error(\"Asset registry not initialized\");\n }\n const assetInfo = this.assetInfoRegistryReverse.get(assetId);\n if (!assetInfo) {\n throw new Error(`Asset ${assetId} not found`);\n }\n return assetInfo.name;\n }\n\n public getTokenAddress(assetName: AssetName): TokenId {\n if (!this.assetInfoRegistry) {\n throw new Error(\n \"Asset registry not initialized. Call initializeRegistries() first.\",\n );\n }\n\n const assetInfo = this.assetInfoRegistry.get(assetName);\n if (!assetInfo || !assetInfo.tokenId) {\n throw new Error(`Token address not found for asset ${assetName}`);\n }\n\n return assetInfo.tokenId;\n }\n\n public getTokenAddresses(): Record<AssetName, TokenId> {\n if (!this.assetInfoRegistry) {\n throw new Error(\n \"Asset registry not initialized. Call initializeRegistries() first.\",\n );\n }\n\n const tokenAddresses: Record<AssetName, TokenId> = {};\n for (const [assetName, assetInfo] of this.assetInfoRegistry.entries()) {\n if (assetInfo.tokenId) {\n tokenAddresses[assetName] = assetInfo.tokenId;\n }\n }\n\n return tokenAddresses;\n }\n\n public getMarketId(market: MarketName): MarketId {\n return this.getMarketMeta(market).id;\n }\n\n public getMarketMeta(market: MarketName): MarketMetadata {\n const marketRegistry = this.getMarketMapping();\n const marketId = marketRegistry.get(market);\n if (marketId === undefined) {\n throw new Error(`Market ${market} not found`);\n }\n return marketId;\n }\n\n public getMarketName(marketId: MarketId): MarketName {\n if (!this.marketRegistryReverse) {\n throw new Error(\"Market registry not initialized\");\n }\n const marketName = this.marketRegistryReverse.get(marketId);\n if (marketName === undefined) {\n throw new Error(`Market ${marketId} not found`);\n }\n return marketName;\n }\n\n public async getOrderbookL2(\n market: MarketName,\n levels = 100,\n ): Promise<OrderbookL2> {\n const marketId = this.getMarketId(market);\n const path = `/modules/exchange/api/v1/orderbook-level2/${marketId}?levels=${levels}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.OrderbookL2.parse(response);\n return parsed.orderbook;\n }\n\n public async getOrderbookL2s(\n markets: MarketName[],\n levels = 100,\n ): Promise<Map<MarketId, OrderbookL2>> {\n const marketIds = markets.map((market) => {\n return this.getMarketId(market);\n });\n const path = \"/modules/exchange/api/v1/orderbook-level2/bulk\";\n const response = await this.fetchBulkApiResource(path, {\n requests: marketIds.map((marketId) => ({\n market_id: marketId,\n depth: levels,\n })),\n });\n const parsed = ResponseSchemas.OrderbookL2Bulk.parse(response);\n return parsed.found;\n }\n\n public async getChainId(): Promise<number> {\n const constants = await this.rollup.rollup.constants();\n return constants.chain_id;\n }\n\n public async getUserAccountAddresses(\n offset?: number,\n limit?: number,\n ): Promise<AccountAddresses> {\n const path = \"/modules/exchange/api/v1/account/addresses\";\n const response = await this.fetchApiResource(path, {\n offset: offset?.toString(),\n limit: limit?.toString(),\n });\n const parsed = ResponseSchemas.AccountAddresses.parse(response);\n return parsed;\n }\n\n public async getUserAccount(address: Address): Promise<UserAccount> {\n const path = `/modules/exchange/api/v1/account/${address}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.Account.parse(response);\n return parsed.account;\n }\n\n public async getUserAccounts(\n addresses: Address[],\n ): Promise<Map<Address, UserAccount>> {\n const path = \"/modules/exchange/api/v1/account/bulk\";\n const response = await this.fetchBulkApiResource(path, {\n addresses,\n });\n const parsed = ResponseSchemas.AccountBulk.parse(response);\n return parsed.found;\n }\n\n public async getUserAccountConfig(\n address: Address,\n ): Promise<VersionedUserAccountConfig> {\n const path = `/modules/exchange/api/v1/account/config/${address}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.UserAccountConfig.parse(response);\n return parsed;\n }\n\n public async getExchangeAssets(): Promise<VersionedExchangeAssets | null> {\n const path = \"/modules/exchange/state/exchange-assets\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.ExchangeAssets.parse(response);\n return parsed.value;\n }\n\n public async getRiskEngine(): Promise<VersionedRiskEngine | null> {\n const path = \"/modules/exchange/state/risk-engine\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.RiskEngine.parse(response);\n return parsed.value;\n }\n\n public async getPerpMarket(market: MarketName): Promise<VersionedPerpMarket> {\n const marketId = this.getMarketId(market);\n const path = `/modules/exchange/api/v1/perp-market/${marketId}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.PerpMarket.parse(response);\n return parsed.market;\n }\n\n public async getPerpMarketsConfig(): Promise<\n Map<MarketId, PerpMarketConfig>\n > {\n const path = \"/modules/exchange/api/v1/perp-market/configs\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.PerpMarketConfigs.parse(response);\n return parsed;\n }\n\n public async getSpotMarket(market: MarketName): Promise<VersionedSpotMarket> {\n const marketId = this.getMarketId(market);\n const path = `/modules/exchange/api/v1/spot-market/${marketId}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.SpotMarket.parse(response);\n return parsed.market;\n }\n\n public async getSpotMarketsConfig(): Promise<\n Map<MarketId, SpotMarketConfig>\n > {\n const path = \"/modules/exchange/api/v1/spot-market/configs\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.SpotMarketConfigs.parse(response);\n return parsed;\n }\n\n public async getExecutionIds(): Promise<VersionedExecutionIds | null> {\n const path = \"/modules/exchange/state/execution-ids\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.ExecutionIds.parse(response);\n return parsed.value;\n }\n\n public async getTokenBalance(\n tokenId: TokenId,\n address: Address,\n ): Promise<bigint> {\n const response = await this.fetchApiResource(\n `/modules/bank/tokens/${tokenId}/balances/${address}`,\n );\n const parsed = BaseResponseSchemas.CoinsResponse.parse(response);\n return parsed.amount;\n }\n\n public async getTotalSupply(tokenId: TokenId): Promise<bigint> {\n const response = await this.fetchApiResource(\n `/modules/bank/tokens/${tokenId}/total-supply`,\n );\n const parsed = BaseResponseSchemas.CoinsResponse.parse(response);\n return parsed.amount;\n }\n\n public async getGasTokenAddress(): Promise<TokenId> {\n const response = await this.fetchApiResource<{ token_id: TokenId }>(\n \"/modules/bank/tokens/gas_token\",\n );\n return response.token_id;\n }\n\n // ========================================================================\n // Calculation Methods\n // ========================================================================\n\n public calculateOrderbookMidpoint(\n orderbook: OrderbookL2,\n ): Decimal | undefined {\n if (orderbook.bids.length === 0 || orderbook.asks.length === 0) {\n return undefined;\n }\n const bestBid = orderbook.bids.reduce((max, bid) => {\n const keyDecimal = new Decimal(bid[0]);\n return max.greaterThan(keyDecimal) ? max : keyDecimal;\n }, new Decimal(Number.NEGATIVE_INFINITY));\n const bestAsk = orderbook.asks.reduce((min, ask) => {\n const keyDecimal = new Decimal(ask[0]);\n return min.lessThan(keyDecimal) ? min : keyDecimal;\n }, new Decimal(Number.POSITIVE_INFINITY));\n return bestBid.plus(bestAsk).div(2);\n }\n\n public calculateEntryPrice(\n market: MarketName,\n userAccount: UserAccount,\n ): Decimal {\n const marketId = this.getMarketId(market);\n const position = userAccount.perp_ledgers.get(marketId)?.position;\n if (!position) {\n throw new Error(\"No position found for asset\");\n }\n return position.cost_of_trades.div(position.size.abs());\n }\n\n public calculateTotalPerpUnrealizedPnl(\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_total_perp_unrealized_pnl(\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateAccountEquity(\n equityType: EquityType,\n conservative: boolean,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_account_equity(\n userAccountObject,\n conservative,\n equityType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateAccountLeverage(\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_account_leverage(\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateAvailableMargin(\n marginType: MarginType,\n conservative: boolean,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_available_margin(\n userAccountObject,\n conservative,\n marginType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateUsedMargin(\n withdrawal: boolean,\n marginType: MarginType,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_used_margin(\n userAccountObject,\n withdrawal,\n marginType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateUsedPerpMargin(\n userAccount: UserAccount,\n marginType: MarginType,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_used_perp_margin(\n userAccountObject,\n marginType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateUsedSpotMargin(\n userAccount: UserAccount,\n marginType: MarginType,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_used_spot_margin(\n userAccountObject,\n marginType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateEstimatedLiquidationPrice(\n market: MarketName,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const marketId = this.getMarketId(market);\n const baseAssetId = this.getMarketMeta(market).baseAssetId;\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_estimated_liquidation_price(\n userAccountObject,\n marketId,\n baseAssetId,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateLiquidationRiskPercentage(\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_liquidation_risk_percentage(\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateMarginBalance(\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_margin_balance(\n userAccountObject,\n riskEngineObject,\n );\n return WasmResponseSchemas.MarginBalanceSchema.parse(result);\n }\n\n public calculateTotalPerpMarginRequirement(\n userAccount: UserAccount,\n marginType: MarginType,\n withdrawal: boolean,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_total_perp_margin_requirement(\n userAccountObject,\n marginType,\n withdrawal,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateForceCancelRiskPercentage(\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_force_cancel_risk_percentage(\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateMaxBorrowAmount(\n asset: AssetName,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const assetId = this.getAssetId(asset);\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_max_borrow_amount(\n assetId,\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateMaxOrderSize(\n market: MarketName,\n price: Decimal,\n side: Side,\n orderType: OrderType,\n reduceOnly: boolean,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n orderbook: OrderbookL2,\n nIterations = 100,\n errorTolerance: Decimal = new Decimal(0.0001),\n ) {\n const marketId = this.getMarketId(market);\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const orderbookObject = serialize(orderbook);\n const result = BulletWasm.calculate_max_order_size(\n marketId,\n price.toFixed(),\n side,\n orderType,\n reduceOnly,\n userAccountObject,\n riskEngineObject,\n orderbookObject,\n nIterations,\n errorTolerance.toFixed(),\n );\n return new Decimal(result);\n }\n\n public calculateWithdrawableAmountOfAsset(\n asset: AssetName,\n forTransferSpotCollateral: boolean,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n exchangeInfo: VersionedExchangeInfo,\n ) {\n const assetId = this.getAssetId(asset);\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const exchangeInfoObject = serializeVersioned(exchangeInfo);\n const result = BulletWasm.calculate_withdrawable_amount_of_asset(\n assetId,\n forTransferSpotCollateral,\n userAccountObject,\n riskEngineObject,\n exchangeInfoObject,\n );\n return new Decimal(result);\n }\n\n public simulateUsedMarginOnBorrow(\n asset: AssetName,\n borrowAmount: Decimal,\n userAccount: UserAccount,\n marginType: MarginType,\n riskEngine: VersionedRiskEngine,\n ) {\n const assetId = this.getAssetId(asset);\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.simulate_used_margin_on_borrow(\n assetId,\n borrowAmount.toFixed(),\n userAccountObject,\n marginType,\n riskEngineObject,\n );\n return WasmResponseSchemas.SimulationResultSchema.parse(result);\n }\n\n public simulateUsedMarginOnOrder(\n market: MarketName,\n newOrderArgs: NewOrderArgs,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n orderbook: OrderbookL2,\n ) {\n const marketId = this.getMarketId(market);\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const orderbookObject = serialize(orderbook);\n const result = BulletWasm.simulate_used_margin_on_order(\n marketId,\n {\n price: newOrderArgs.price.toFixed(),\n size: newOrderArgs.size.toFixed(),\n side: newOrderArgs.side,\n order_type: newOrderArgs.orderType,\n reduce_only: newOrderArgs.reduceOnly,\n },\n userAccountObject,\n riskEngineObject,\n orderbookObject,\n );\n return WasmResponseSchemas.SimulationResultSchema.parse(result);\n }\n\n public simulateEstimatedLiquidationPriceOnOrder(\n market: MarketName,\n newOrderArgs: NewOrderArgs,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n orderbook: OrderbookL2,\n ) {\n const marketId = this.getMarketId(market);\n const baseAssetId = this.getMarketMeta(market).baseAssetId;\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const orderbookObject = serialize(orderbook);\n const result = BulletWasm.simulate_estimated_liquidation_price_on_order(\n marketId,\n {\n price: newOrderArgs.price.toFixed(),\n size: newOrderArgs.size.toFixed(),\n side: newOrderArgs.side,\n order_type: newOrderArgs.orderType,\n reduce_only: newOrderArgs.reduceOnly,\n },\n baseAssetId,\n userAccountObject,\n riskEngineObject,\n orderbookObject,\n );\n return WasmResponseSchemas.SimulationResultSchema.parse(result);\n }\n\n public calculatePositionsAdditionalMetadata(\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n exchangeInfo: VersionedExchangeInfo,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const exchangeInfoObject = serializeVersioned(exchangeInfo);\n\n const result = BulletWasm.calculate_positions_additional_metadata(\n userAccountObject,\n riskEngineObject,\n exchangeInfoObject,\n );\n\n return WasmResponseSchemas.PositionAdditionalMetadataSchema.parse(result);\n }\n\n public calculateBorrowLendPoolAdditionalMetadata(\n borrowLendPools: Map<AssetId, BorrowLendPool>,\n asset: AssetName,\n ) {\n const assetId = this.getAssetId(asset);\n const borrowLendPoolsObject = serialize(borrowLendPools);\n const result = BulletWasm.calculate_borrow_lend_additional_metadata(\n borrowLendPoolsObject?.get(assetId),\n );\n return WasmResponseSchemas.BorrowLendMarketAdditionalMetadataSchema.parse(\n result,\n );\n }\n\n public calculateAccountSummaryBatch(\n userAccounts: UserAccount[],\n riskEngine: VersionedRiskEngine,\n useWeightedEquity = true,\n ) {\n const userAccountsObject = serialize(userAccounts);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_account_summary_batch(\n userAccountsObject,\n riskEngineObject,\n useWeightedEquity,\n );\n return WasmResponseSchemas.AccountSummaryBatchSchema.parse(result);\n }\n\n // ========================================================================\n // WebSocket Methods\n // ========================================================================\n\n private getWebSocketManager(): WebSocketManager {\n if (!this.wsManager) {\n throw new Error(\"WebSocket connection not configured\");\n }\n return this.wsManager;\n }\n\n public async *subscribeOrderbook(\n market: MarketName,\n signal?: AbortSignal,\n ): AsyncIterable<Orderbook> {\n const marketId = this.getMarketId(market);\n yield* this.getWebSocketManager().subscribeOrderbook(marketId, signal);\n }\n\n public async unsubscribeOrderbook(market: MarketName) {\n const marketId = this.getMarketId(market);\n await this.getWebSocketManager().unsubscribeOrderbook(marketId);\n }\n\n // ========================================================================\n // Resource Management\n // ========================================================================\n\n /**\n * Dispose of all resources: WebSocket connections, Maps, and references\n * Call this when the client is no longer needed to prevent memory leaks\n */\n public dispose(): void {\n // Dispose WebSocket manager if it exists\n if (this.wsManager) {\n this.wsManager.dispose();\n }\n\n // Clear Maps\n this.assetInfoRegistry?.clear();\n this.assetInfoRegistryReverse?.clear();\n this.marketRegistry?.clear();\n this.marketRegistryReverse?.clear();\n\n // Clear references\n this.assetInfoRegistry = undefined;\n this.assetInfoRegistryReverse = undefined;\n this.marketRegistry = undefined;\n this.marketRegistryReverse = undefined;\n this.generationOverride = undefined;\n }\n}\n\n// Authenticated client - extends ReadOnlyClient and adds authenticated operations\nexport class AuthenticatedClient extends ReadOnlyClient {\n public readonly address: Address;\n private readonly wallet: Wallet;\n private readonly authenticator: Authenticator;\n private readonly useSerdePath: boolean;\n\n /**\n * @internal\n * Do not construct directly. Use Client.fromNetwork() or Client.fromEndpoints()\n */\n constructor(\n endpoints: Endpoints,\n rollup: SolanaSignableRollup<RuntimeCall>,\n wallet: Wallet,\n delegatorAddress?: Address,\n authenticator: Authenticator = \"standard\",\n ) {\n super(endpoints, rollup);\n this.wallet = wallet;\n this.address = delegatorAddress ?? wallet.address;\n this.authenticator = authenticator;\n // \"solanaAuto\" resolves to \"solana\" (Ledger) or \"solanaSimple\" (all other\n // signers) at call time — it never falls back to the standard/Borsh path.\n // See: SolanaSignableRollup.getAutoAuthenticator() in @sovereign-sdk/web3.\n this.useSerdePath =\n authenticator === \"solana\" ||\n authenticator === \"solanaSimple\" ||\n authenticator === \"solanaAuto\";\n }\n\n /**\n * Encodes a Decimal.js value for the configured authenticator:\n * - Solana auth (serde): returns string (e.g. \"10000\")\n * - Standard auth (borsh): returns SurrogateDecimal { flags, hi, lo, mid }\n */\n private encodeDecimal(d?: Decimal | null) {\n if (!d) return null;\n const fixed = d.toFixed();\n return this.useSerdePath\n ? fixed\n : BulletWasm.convert_rust_decimal_to_json(fixed);\n }\n\n // Override getUserAccount to use this.address when no address provided\n public override async getUserAccount(\n address?: Address,\n ): Promise<UserAccount> {\n const addr = address ?? this.address;\n return await super.getUserAccount(addr);\n }\n\n public override async getUserAccountConfig(\n address?: Address,\n ): Promise<VersionedUserAccountConfig> {\n const addr = address ?? this.address;\n return await super.getUserAccountConfig(addr);\n }\n\n // Override getTokenBalance to use this.address when no address provided\n public override async getTokenBalance(\n tokenId: TokenId,\n address?: Address,\n ): Promise<bigint> {\n const addr = address ?? this.address;\n return await super.getTokenBalance(tokenId, addr);\n }\n\n // Authenticated-only methods\n public async getNonce(): Promise<number> {\n const pubKey = base58ToBytes(this.wallet.address);\n const dedup = await this.rollup.dedup(pubKey);\n return dedup.nonce;\n }\n\n // ========================================================================\n // Transaction Methods (requires wallet)\n // ========================================================================\n\n public async submitTransaction(\n runtimeCall: RuntimeCall,\n ): Promise<TransactionResult<Transaction<RuntimeCall>>> {\n try {\n // Decimals are already encoded in the correct format by encodeDecimal():\n // - Solana auth (serde): string format (\"10000\")\n // - Standard auth (borsh): SurrogateDecimal { flags, hi, lo, mid }\n return await this.rollup.call(runtimeCall, {\n signer: this.wallet.getSigner(),\n authenticator: this.authenticator,\n overrides: {\n uniqueness: this.generationOverride\n ? { generation: this.generationOverride() }\n : undefined,\n },\n });\n } catch (e) {\n // Handle version mismatch with retry\n if (e instanceof VersionMismatchError && e.retryable) {\n console.warn(\"Version mismatch, retrying...\");\n return await this.submitTransaction(runtimeCall);\n }\n // Convert to BulletError for consistent error handling\n throw BulletError.from(e);\n }\n }\n\n public async createToken(\n tokenName: string,\n tokenDecimals: number | null,\n initialBalance: bigint,\n mintToAddress: Address,\n admins: Address[],\n supplyCap: bigint | null,\n ) {\n const response = await this.submitTransaction({\n bank: {\n create_token: {\n token_name: tokenName,\n token_decimals: tokenDecimals,\n initial_balance: initialBalance.toString(),\n mint_to_address: mintToAddress,\n admins: admins,\n supply_cap: supplyCap?.toString() ?? null,\n },\n },\n });\n const rawBytestokenId = getTokenId(\n base58ToBytes(this.address),\n tokenName,\n tokenDecimals ?? 8,\n );\n return {\n rawBytestokenId,\n response,\n };\n }\n\n public async transfer(to: Address, amount: bigint, tokenId: TokenId) {\n return await this.submitTransaction({\n bank: {\n transfer: {\n to: to,\n coins: {\n amount: amount.toString(),\n token_id: tokenId,\n },\n },\n },\n });\n }\n\n public async mint(to: Address, amount: bigint, tokenId: TokenId) {\n return await this.submitTransaction({\n bank: {\n mint: {\n mint_to_address: to,\n coins: {\n amount: amount.toString(),\n token_id: tokenId,\n },\n },\n },\n });\n }\n\n public async deposit(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async depositToVault(\n vaultAddress: Address,\n asset: AssetName,\n amount: Decimal,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_to_vault: {\n vault_address: vaultAddress,\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async withdraw(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n withdraw: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async borrowSpot(\n asset: AssetName,\n amount: Decimal,\n subAccountIndex?: number,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n borrow_spot: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async depositSpotCollateral(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_spot_collateral: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async withdrawSpotCollateral(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n withdraw_spot_collateral: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async transferSpotCollateral(\n direction: SpotCollateralTransferDirection,\n asset: AssetName,\n amount: Decimal,\n subAccountIndex?: number,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n transfer_spot_collateral: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n direction,\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async placeOrders(\n market: MarketName,\n newOrders: NewOrderArgs[],\n replace = false,\n subAccountIndex?: number,\n ) {\n const marketMeta = this.getMarketMeta(market);\n\n const args = newOrders.map((newOrder) => {\n return {\n price: this.encodeDecimal(newOrder.price),\n size: this.encodeDecimal(newOrder.size),\n side: newOrder.side,\n order_type: newOrder.orderType,\n reduce_only: newOrder.reduceOnly,\n client_order_id: newOrder.clientOrderId\n ? newOrder.clientOrderId.toString()\n : null,\n pending_tpsl_pair: newOrder.pendingTpslPair\n ? {\n tpsl_pair: {\n tp: newOrder.pendingTpslPair.tpslPair.tp\n ? {\n order_price: this.encodeDecimal(\n newOrder.pendingTpslPair.tpslPair.tp.orderPrice,\n ),\n trigger_price: this.encodeDecimal(\n newOrder.pendingTpslPair.tpslPair.tp.triggerPrice,\n ),\n price_condition:\n newOrder.pendingTpslPair.tpslPair.tp.priceCondition,\n order_type:\n newOrder.pendingTpslPair.tpslPair.tp.orderType,\n }\n : null,\n sl: newOrder.pendingTpslPair.tpslPair.sl\n ? {\n order_price: this.encodeDecimal(\n newOrder.pendingTpslPair.tpslPair.sl.orderPrice,\n ),\n trigger_price: this.encodeDecimal(\n newOrder.pendingTpslPair.tpslPair.sl.triggerPrice,\n ),\n price_condition:\n newOrder.pendingTpslPair.tpslPair.sl.priceCondition,\n order_type:\n newOrder.pendingTpslPair.tpslPair.sl.orderType,\n }\n : null,\n },\n dynamic_size: newOrder.pendingTpslPair.dynamicSize,\n }\n : null,\n };\n });\n\n const msgInner = {\n market_id: marketMeta.id,\n orders: args,\n replace,\n sub_account_index: subAccountIndex ?? null,\n };\n\n const msg: RuntimeCall = {\n exchange: {\n user: {\n place_orders: msgInner,\n },\n },\n };\n\n return await this.submitTransaction(msg);\n }\n\n public async createPerpPositionTpsl(\n market: MarketName,\n tpslPair: TpslPair,\n size?: Decimal,\n subAccountIndex?: number,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n create_position_tpsl: {\n market_id: marketId,\n tpsl_pair: {\n tp: tpslPair.tp\n ? {\n order_price: this.encodeDecimal(tpslPair.tp.orderPrice),\n trigger_price: this.encodeDecimal(tpslPair.tp.triggerPrice),\n price_condition: tpslPair.tp.priceCondition,\n order_type: tpslPair.tp.orderType,\n }\n : null,\n sl: tpslPair.sl\n ? {\n order_price: this.encodeDecimal(tpslPair.sl.orderPrice),\n trigger_price: this.encodeDecimal(tpslPair.sl.triggerPrice),\n price_condition: tpslPair.sl.priceCondition,\n order_type: tpslPair.sl.orderType,\n }\n : null,\n },\n size: this.encodeDecimal(size),\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async amendOrders(\n market: MarketName,\n options: AmendOrderOptions[],\n subAccountIndex?: number,\n ) {\n const marketMeta = this.getMarketMeta(market);\n const args = options.map((option) => {\n return {\n cancel: {\n order_id: option.existingOrderId?.toString() ?? null,\n client_order_id: option.existingClientOrderId?.toString() ?? null,\n },\n place: {\n price: this.encodeDecimal(option.newOrderArgs.price),\n size: this.encodeDecimal(option.newOrderArgs.size),\n side: option.newOrderArgs.side,\n order_type: option.newOrderArgs.orderType,\n reduce_only: option.newOrderArgs.reduceOnly,\n client_order_id:\n option.newOrderArgs.clientOrderId?.toString() ?? null,\n pending_tpsl_pair: option.newOrderArgs.pendingTpslPair\n ? {\n tpsl_pair: {\n tp: option.newOrderArgs.pendingTpslPair.tpslPair.tp\n ? {\n order_price: this.encodeDecimal(\n option.newOrderArgs.pendingTpslPair.tpslPair.tp\n .orderPrice,\n ),\n trigger_price: this.encodeDecimal(\n option.newOrderArgs.pendingTpslPair.tpslPair.tp\n .triggerPrice,\n ),\n price_condition:\n option.newOrderArgs.pendingTpslPair.tpslPair.tp\n .priceCondition,\n order_type:\n option.newOrderArgs.pendingTpslPair.tpslPair.tp\n .orderType,\n }\n : null,\n sl: option.newOrderArgs.pendingTpslPair.tpslPair.sl\n ? {\n order_price: this.encodeDecimal(\n option.newOrderArgs.pendingTpslPair.tpslPair.sl\n .orderPrice,\n ),\n trigger_price: this.encodeDecimal(\n option.newOrderArgs.pendingTpslPair.tpslPair.sl\n .triggerPrice,\n ),\n price_condition:\n option.newOrderArgs.pendingTpslPair.tpslPair.sl\n .priceCondition,\n order_type:\n option.newOrderArgs.pendingTpslPair.tpslPair.sl\n .orderType,\n }\n : null,\n },\n dynamic_size: option.newOrderArgs.pendingTpslPair.dynamicSize,\n }\n : null,\n },\n };\n });\n\n const msgInner = {\n market_id: marketMeta.id,\n orders: args,\n sub_account_index: subAccountIndex ?? null,\n };\n\n const msg: RuntimeCall = {\n exchange: {\n user: {\n amend_orders: msgInner,\n },\n },\n };\n\n return await this.submitTransaction(msg);\n }\n\n public async cancelTriggerOrders(\n market: MarketName,\n triggerOrderIds: bigint[],\n subAccountIndex?: number,\n ) {\n const marketMeta = this.getMarketMeta(market);\n\n const msgInner = {\n market_id: marketMeta.id,\n trigger_order_ids: triggerOrderIds.map((id) => id.toString()),\n sub_account_index: subAccountIndex ?? null,\n };\n\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_trigger_orders: msgInner,\n },\n },\n });\n }\n\n public async cancelOrders(\n market: MarketName,\n options: CancelOrderOptions[],\n subAccountIndex?: number,\n ) {\n const marketMeta = this.getMarketMeta(market);\n\n const msgInner = {\n market_id: marketMeta.id,\n orders: options.map((option) => {\n return {\n order_id: option.orderId?.toString() ?? null,\n client_order_id: option.clientOrderId?.toString() ?? null,\n };\n }),\n sub_account_index: subAccountIndex ?? null,\n };\n\n const msg: RuntimeCall = {\n exchange: {\n user: {\n cancel_orders: msgInner,\n },\n },\n };\n\n return await this.submitTransaction(msg);\n }\n\n public async adminCancelOrders(\n address: Address,\n market: MarketName,\n orderId: string,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n cancel_orders: { cancels: [[marketId, orderId, address]] },\n },\n },\n });\n }\n\n public async adminCancelTriggerOrder(\n address: Address,\n market: MarketName,\n triggerOrderId: string,\n ) {\n const marketId = this.getMarketId(market);\n\n return await this.submitTransaction({\n exchange: {\n admin: {\n cancel_trigger_orders: {\n cancels: [[marketId, triggerOrderId, address]],\n },\n },\n },\n });\n }\n\n public async updateAdmin(adminType: AdminType, newAdmin: Address) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_admin: {\n admin_type: adminType,\n new_admin: newAdmin,\n },\n },\n },\n });\n }\n\n public async adminAddTradingCredits(address: Address, amount: Decimal) {\n return await this.submitTransaction({\n exchange: {\n keeper: {\n add_trading_credits: {\n user_address: address,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async adminRemoveTradingCredits(address: Address, amount: Decimal) {\n return await this.submitTransaction({\n exchange: {\n keeper: {\n remove_trading_credits: {\n user_address: address,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async adminSetCumulativeReferralRewards(\n address: Address,\n asset: AssetName,\n amount: Decimal,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n keeper: {\n set_cumulative_referral_rewards: {\n address,\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async adminUpdateUserFeeDiscountBps(\n address: Address,\n feeDiscountBps: number,\n ) {\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_user_fee_discount_bps: {\n address,\n fee_discount_bps: feeDiscountBps,\n },\n },\n },\n });\n }\n\n public async adminUpdateUserFeeTier(address: Address, feeTier: FeeTier) {\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_user_fee_tier: {\n address,\n fee_tier: feeTier,\n },\n },\n },\n });\n }\n\n public async cancelMarketOrders(\n market: MarketName,\n subAccountIndex?: number,\n ) {\n const meta = this.getMarketMeta(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_market_orders: {\n market_id: meta.id,\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async cancelAllOrders(subAccountIndex?: number) {\n const msgInner = {\n sub_account_index: subAccountIndex ?? null,\n };\n\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_all_orders: msgInner,\n },\n },\n });\n }\n\n public async updateOraclePrices(\n pricesToUpdate: OraclePriceUpdateArgs[],\n publishTimestamp?: number,\n ) {\n // set publish_timestamp to current timestamp if not provided\n const timestamp = publishTimestamp || Math.floor(Date.now() * 1000);\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_oracle_prices: {\n prices: await Promise.all(\n pricesToUpdate.map(async ({ asset, oraclePrice }) => ({\n asset_id: this.getAssetId(asset),\n oracle_price: this.encodeDecimal(oraclePrice),\n })),\n ),\n publish_timestamp: timestamp,\n },\n },\n },\n });\n }\n\n public async updateMarkPrices(\n pricesToUpdate: MarkPriceUpdateArgs[],\n publishTimestamp?: number,\n ) {\n // set publish_timestamp to current timestamp if not provided\n const timestamp = publishTimestamp || Math.floor(Date.now() * 1000);\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_mark_prices: {\n prices: await Promise.all(\n pricesToUpdate.map(\n async ({ market, medianCexPrice, diffEma }) => ({\n market_id: this.getMarketId(market),\n median_cex_price: this.encodeDecimal(medianCexPrice),\n diff_ema: this.encodeDecimal(diffEma),\n }),\n ),\n ),\n publish_timestamp: timestamp,\n },\n },\n },\n });\n }\n\n public async updateMaxLeverageForMarket(\n market: MarketName,\n maxLeverage: number,\n subAccountIndex?: number,\n ) {\n if (!Number.isInteger(maxLeverage)) {\n throw Error(\"Max leverage must be set to an integer\");\n }\n\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n update_max_leverage: {\n market_id: marketId,\n max_leverage: maxLeverage,\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async claimReferralRewards(asset: AssetName) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n claim_referral_rewards: {\n asset_id: assetId,\n },\n },\n },\n });\n }\n\n public async updatePremiumIndexes(markets: MarketName[]) {\n const marketIds = await Promise.all(\n markets.map(async (market) => {\n return this.getMarketId(market);\n }),\n );\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_premium_indexes: { market_ids: marketIds },\n },\n },\n });\n }\n\n public async executeTriggerOrders(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n public: {\n execute_trigger_orders: { market_id: marketId },\n },\n },\n });\n }\n\n public async createTwapOrder(\n market: MarketName,\n twapOrderArgs: NewTwapOrderArgs,\n subAccountIndex?: number,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n create_twap_order: {\n market_id: marketId,\n twap_order_args: {\n side: twapOrderArgs.side,\n total_size: this.encodeDecimal(twapOrderArgs.totalSize),\n reduce_only: twapOrderArgs.reduceOnly,\n total_duration_seconds: twapOrderArgs.totalDurationSeconds,\n },\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async executeTwapOrders(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n public: {\n execute_twap_orders: { market_id: marketId },\n },\n },\n });\n }\n\n public async cancelTwapOrder(\n market: MarketName,\n twapId: bigint,\n subAccountIndex?: number,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_twap_order: {\n market_id: marketId,\n twap_id: twapId.toString(),\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async activateTwapOrders(markets: MarketName[]) {\n const marketIds = markets.map((market) => this.getMarketId(market));\n return await this.submitTransaction({\n exchange: {\n public: {\n activate_twap_orders: { market_ids: marketIds },\n },\n },\n });\n }\n\n public async updateFunding(markets: MarketName[]) {\n const marketIds = await Promise.all(\n markets.map(async (market) => {\n return this.getMarketId(market);\n }),\n );\n return await this.submitTransaction({\n exchange: { keeper: { update_funding: { market_ids: marketIds } } },\n });\n }\n\n public async applyFunding(addresses: Address[]) {\n return await this.submitTransaction({\n exchange: {\n public: {\n apply_funding: {\n addresses: addresses,\n },\n },\n },\n });\n }\n\n public async accrueBorrowLendInterest() {\n return await this.submitTransaction({\n exchange: {\n public: {\n accrue_borrow_lend_interest: {},\n },\n },\n });\n }\n\n public async forceCancelOrders(address: Address) {\n return await this.submitTransaction({\n exchange: {\n public: {\n force_cancel_orders: {\n user_address: address,\n },\n },\n },\n });\n }\n\n public async liquidatePerpPositions(address: Address) {\n return await this.submitTransaction({\n exchange: {\n public: {\n liquidate_perp_positions: {\n address: address,\n },\n },\n },\n });\n }\n\n public async backstopLiquidatePerpPositions(\n address: Address,\n positions?: { market: MarketName; size: Decimal }[],\n subAccountIndex?: number,\n ) {\n const positionsWithIds = positions\n ? await Promise.all(\n positions.map(async ({ market, size }) => ({\n market_id: this.getMarketId(market),\n size: this.encodeDecimal(size),\n })),\n )\n : null;\n\n return await this.submitTransaction({\n exchange: {\n user: {\n backstop_liquidate_perp_positions: {\n address: address,\n positions: positionsWithIds,\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async liquidateBorrowLendLiability(\n address: Address,\n liabilityAsset: AssetName,\n collateralAsset: AssetName,\n liabilityAmount: Decimal,\n subAccountIndex?: number,\n ) {\n const liabilityAssetId = this.getAssetId(liabilityAsset);\n const collateralAssetId = this.getAssetId(collateralAsset);\n return await this.submitTransaction({\n exchange: {\n user: {\n liquidate_borrow_lend_liability: {\n liquidatee_address: address,\n liability_asset_id: liabilityAssetId,\n collateral_asset_id: collateralAssetId,\n liability_amount: this.encodeDecimal(liabilityAmount),\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async depositToUsdcPnlPool(amount: Decimal) {\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_to_pnl_pool: {\n usdc_amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async depositToInsuranceFund(amount: Decimal) {\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_to_insurance_fund: {\n usdc_amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async initAssetInfo(\n assetId: AssetId,\n assetName: AssetName,\n tokenId: TokenId | null,\n decimals: number,\n withdrawFee: Decimal,\n ) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n init_asset_info: {\n args: {\n asset_id: assetId,\n asset_name: assetName,\n token_id: tokenId,\n decimals: decimals,\n withdraw_fee: this.encodeDecimal(withdrawFee),\n },\n },\n },\n },\n });\n }\n\n public async updateAssetInfo(asset: AssetName, withdrawFee: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_asset_info: {\n args: {\n asset_id: assetId,\n withdraw_fee: this.encodeDecimal(withdrawFee),\n },\n },\n },\n },\n });\n }\n\n public async updateGlobalConfig(options: {\n maxOrdersPerUser?: number;\n maxTriggerOrdersPerUser?: number;\n maxOrdersPerBatchMsg?: number;\n maxTriggerOrdersToExecutePerMsg?: number;\n minNotionalTwapValue?: Decimal;\n minNotionalTwapValuePerOrder?: Decimal;\n twapExecutionIntervalSeconds?: number;\n depositLimitsPerUser?: [AssetId, Decimal][];\n whitelistedUsersForDeposit?: Address[];\n }) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_global_config: {\n args: {\n max_orders_per_user: options.maxOrdersPerUser ?? null,\n max_trigger_orders_per_user:\n options.maxTriggerOrdersPerUser ?? null,\n max_orders_per_batch_msg: options.maxOrdersPerBatchMsg ?? null,\n max_trigger_orders_to_execute_per_msg:\n options.maxTriggerOrdersToExecutePerMsg ?? null,\n min_notional_twap_value: this.encodeDecimal(\n options.minNotionalTwapValue,\n ),\n min_notional_twap_value_per_order: this.encodeDecimal(\n options.minNotionalTwapValuePerOrder,\n ),\n twap_execution_interval_seconds:\n options.twapExecutionIntervalSeconds ?? null,\n deposit_limits_per_user:\n options.depositLimitsPerUser?.map(([assetId, amount]) => [\n assetId,\n this.encodeDecimal(amount),\n ]) ?? null,\n whitelisted_users_for_deposit:\n options.whitelistedUsersForDeposit ?? null,\n },\n },\n },\n },\n });\n }\n\n public async createVault(\n name: string,\n description: string,\n leader: Address,\n depositAssets: AssetName[],\n withdrawAsset: AssetName,\n withdrawLockupPeriodHours: number,\n whitelistDeposits: boolean,\n profitSharePercentage: number,\n withdrawalFeeBps: number,\n depositLimit: Decimal,\n ) {\n const depositAssetIds = depositAssets.map((asset) =>\n this.getAssetId(asset),\n );\n const withdrawAssetId = this.getAssetId(withdrawAsset);\n return await this.submitTransaction({\n exchange: {\n user: {\n create_vault: {\n args: {\n name,\n description,\n leader,\n deposit_asset_ids: depositAssetIds,\n withdraw_asset_id: withdrawAssetId,\n withdraw_lockup_period_hours: withdrawLockupPeriodHours,\n whitelist_deposits: whitelistDeposits,\n profit_share_percentage: profitSharePercentage,\n withdrawal_fee_bps: withdrawalFeeBps,\n deposit_limit: this.encodeDecimal(depositLimit),\n },\n },\n },\n },\n });\n }\n\n public async initSpotMarket(\n marketId: MarketId,\n baseAssetId: AssetId,\n quoteAssetId: AssetId,\n baseMinLotSize: Decimal,\n quoteMinLotSize: Decimal,\n maxOrdersPerSide: number,\n maxOrdersPerUser: number,\n maxTriggerOrdersPerUser: number,\n takerFeesTenthBps: number[],\n makerFeesTenthBps: number[],\n maxOrderToTriggerPriceDeviationRatio: Decimal,\n name: string,\n ) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n init_spot_market: {\n args: {\n market_id: marketId,\n base_asset_id: baseAssetId,\n quote_asset_id: quoteAssetId,\n base_min_lot_size: this.encodeDecimal(baseMinLotSize),\n quote_min_lot_size: this.encodeDecimal(quoteMinLotSize),\n max_orders_per_side: maxOrdersPerSide,\n max_orders_per_user: maxOrdersPerUser,\n max_trigger_orders_per_user: maxTriggerOrdersPerUser,\n taker_fees_tenth_bps: takerFeesTenthBps,\n maker_fees_tenth_bps: makerFeesTenthBps,\n name: name,\n max_order_to_trigger_price_deviation_ratio: this.encodeDecimal(\n maxOrderToTriggerPriceDeviationRatio,\n ),\n },\n },\n },\n },\n });\n }\n\n public async updateSpotMarket(\n market: MarketName,\n options: {\n baseMinLotSize?: Decimal;\n quoteMinLotSize?: Decimal;\n maxOrdersPerSide?: number;\n maxOrdersPerUser?: number;\n maxTriggerOrdersPerUser?: number;\n takerFeesTenthBps?: number[];\n makerFeesTenthBps?: number[];\n maxOrderToTriggerPriceDeviationRatio?: Decimal;\n },\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_spot_market: {\n args: {\n market_id: marketId,\n base_min_lot_size: this.encodeDecimal(options.baseMinLotSize),\n quote_min_lot_size: this.encodeDecimal(options.quoteMinLotSize),\n max_orders_per_side: options.maxOrdersPerSide ?? null,\n max_orders_per_user: options.maxOrdersPerUser ?? null,\n max_trigger_orders_per_user:\n options.maxTriggerOrdersPerUser ?? null,\n taker_fees_tenth_bps: options.takerFeesTenthBps ?? null,\n maker_fees_tenth_bps: options.makerFeesTenthBps ?? null,\n max_order_to_trigger_price_deviation_ratio: this.encodeDecimal(\n options.maxOrderToTriggerPriceDeviationRatio,\n ),\n },\n },\n },\n },\n });\n }\n\n public async initPerpMarket(\n marketId: MarketId,\n baseAssetId: AssetId,\n name: string,\n tradingMode: string,\n minTickSize: Decimal,\n minLotSize: Decimal,\n maxOrdersPerSide: number,\n maxOrdersPerUser: number,\n maxTriggerOrdersPerUser: number,\n minInterestRateClamp: Decimal,\n maxInterestRateClamp: Decimal,\n minFundingRateClamp: Decimal,\n maxFundingRateClamp: Decimal,\n maxOiNotional: Decimal,\n maxOrderToMarkPriceDeviationRatio: Decimal,\n maxTriggerToComparisonPriceDeviationRatio: Decimal,\n maxOrderToTriggerPriceDeviationRatio: Decimal,\n impactMargin: Decimal,\n interestRate: Decimal,\n leverageTable: Record<string, number>,\n takerFeesTenthBps: number[],\n makerFeesTenthBps: number[],\n ) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n init_perp_market: {\n args: {\n market_id: marketId,\n base_asset_id: baseAssetId,\n name: name,\n trading_mode: tradingMode,\n min_tick_size: this.encodeDecimal(minTickSize),\n min_lot_size: this.encodeDecimal(minLotSize),\n max_orders_per_side: maxOrdersPerSide,\n max_orders_per_user: maxOrdersPerUser,\n max_trigger_orders_per_user: maxTriggerOrdersPerUser,\n min_interest_rate_clamp: this.encodeDecimal(minInterestRateClamp),\n max_interest_rate_clamp: this.encodeDecimal(maxInterestRateClamp),\n min_funding_rate_clamp: this.encodeDecimal(minFundingRateClamp),\n max_funding_rate_clamp: this.encodeDecimal(maxFundingRateClamp),\n max_oi_notional: this.encodeDecimal(maxOiNotional),\n max_order_to_mark_price_deviation_ratio: this.encodeDecimal(\n maxOrderToMarkPriceDeviationRatio,\n ),\n max_trigger_to_comparison_price_deviation_ratio:\n this.encodeDecimal(maxTriggerToComparisonPriceDeviationRatio),\n max_order_to_trigger_price_deviation_ratio: this.encodeDecimal(\n maxOrderToTriggerPriceDeviationRatio,\n ),\n impact_margin: this.encodeDecimal(impactMargin),\n interest_rate: this.encodeDecimal(interestRate),\n leverage_table_args: { table: leverageTable },\n taker_fees_tenth_bps: takerFeesTenthBps,\n maker_fees_tenth_bps: makerFeesTenthBps,\n },\n },\n },\n },\n });\n }\n\n public async updatePerpMarket(\n market: MarketName,\n options: {\n minTickSize?: Decimal;\n minLotSize?: Decimal;\n maxOrdersPerSide?: number;\n maxOrdersPerUser?: number;\n maxTriggerOrdersPerUser?: number;\n minInterestRateClamp?: Decimal;\n maxInterestRateClamp?: Decimal;\n minFundingRateClamp?: Decimal;\n maxFundingRateClamp?: Decimal;\n maxOiNotional?: Decimal;\n impactMargin?: Decimal;\n interestRate?: Decimal;\n takerFeesTenthBps?: number[];\n makerFeesTenthBps?: number[];\n maxOrderToMarkPriceDeviationRatio?: Decimal;\n maxTriggerToComparisonPriceDeviationRatio?: Decimal;\n maxOrderToTriggerPriceDeviationRatio?: Decimal;\n },\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_perp_market: {\n args: {\n market_id: marketId,\n min_tick_size: this.encodeDecimal(options.minTickSize),\n min_lot_size: this.encodeDecimal(options.minLotSize),\n max_orders_per_side: options.maxOrdersPerSide ?? null,\n max_orders_per_user: options.maxOrdersPerUser ?? null,\n max_trigger_orders_per_user:\n options.maxTriggerOrdersPerUser ?? null,\n min_interest_rate_clamp: this.encodeDecimal(\n options.minInterestRateClamp,\n ),\n max_interest_rate_clamp: this.encodeDecimal(\n options.maxInterestRateClamp,\n ),\n min_funding_rate_clamp: this.encodeDecimal(\n options.minFundingRateClamp,\n ),\n max_funding_rate_clamp: this.encodeDecimal(\n options.maxFundingRateClamp,\n ),\n max_oi_notional: this.encodeDecimal(options.maxOiNotional),\n impact_margin: this.encodeDecimal(options.impactMargin),\n interest_rate: this.encodeDecimal(options.interestRate),\n taker_fees_tenth_bps: options.takerFeesTenthBps ?? null,\n maker_fees_tenth_bps: options.makerFeesTenthBps ?? null,\n max_order_to_mark_price_deviation_ratio: this.encodeDecimal(\n options.maxOrderToMarkPriceDeviationRatio,\n ),\n max_trigger_to_comparison_price_deviation_ratio:\n this.encodeDecimal(\n options.maxTriggerToComparisonPriceDeviationRatio,\n ),\n max_order_to_trigger_price_deviation_ratio: this.encodeDecimal(\n options.maxOrderToTriggerPriceDeviationRatio,\n ),\n leverage_table_args: null,\n },\n },\n },\n },\n });\n }\n\n public async initBorrowLendPool(\n assetId: AssetId,\n optimalUtilisationRate: Decimal,\n minBorrowRate: Decimal,\n maxBorrowRate: Decimal,\n optimalBorrowRate: Decimal,\n assetWeight: Decimal,\n initialLiabilityWeight: Decimal,\n maintenanceLiabilityWeight: Decimal,\n depositLimit: Decimal,\n borrowLimit: Decimal,\n maxUtilizationRate: Decimal,\n liquidationTotalRewardRatio: Decimal,\n protocolRewardRatio: Decimal,\n liabilityLiquidationLimitRatio: Decimal,\n interestFeeTenthBps: number,\n ) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n init_borrow_lend_pool: {\n args: {\n asset_id: assetId,\n optimal_utilization_rate: this.encodeDecimal(\n optimalUtilisationRate,\n ),\n min_borrow_rate: this.encodeDecimal(minBorrowRate),\n max_borrow_rate: this.encodeDecimal(maxBorrowRate),\n optimal_borrow_rate: this.encodeDecimal(optimalBorrowRate),\n asset_weight: this.encodeDecimal(assetWeight),\n initial_liability_weight: this.encodeDecimal(\n initialLiabilityWeight,\n ),\n maintenance_liability_weight: this.encodeDecimal(\n maintenanceLiabilityWeight,\n ),\n deposit_limit: this.encodeDecimal(depositLimit),\n borrow_limit: this.encodeDecimal(borrowLimit),\n max_utilization_rate: this.encodeDecimal(maxUtilizationRate),\n liquidation_total_reward_ratio: this.encodeDecimal(\n liquidationTotalRewardRatio,\n ),\n protocol_reward_ratio: this.encodeDecimal(protocolRewardRatio),\n liability_liquidation_limit_ratio: this.encodeDecimal(\n liabilityLiquidationLimitRatio,\n ),\n interest_fee_tenth_bps: interestFeeTenthBps,\n },\n },\n },\n },\n });\n }\n\n public async updateBorrowLendPool(\n asset: AssetName,\n options: {\n optimalUtilizationRate?: Decimal;\n minBorrowRate?: Decimal;\n maxBorrowRate?: Decimal;\n optimalBorrowRate?: Decimal;\n assetWeight?: Decimal;\n initialLiabilityWeight?: Decimal;\n maintenanceLiabilityWeight?: Decimal;\n depositLimit?: Decimal;\n borrowLimit?: Decimal;\n maxUtilizationRate?: Decimal;\n liquidationTotalRewardRatio?: Decimal;\n protocolRewardRatio?: Decimal;\n liabilityLiquidationLimitRatio?: Decimal;\n interestFeeTenthBps?: number;\n },\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_borrow_lend_pool: {\n args: {\n asset_id: assetId,\n optimal_utilization_rate: this.encodeDecimal(\n options.optimalUtilizationRate,\n ),\n min_borrow_rate: this.encodeDecimal(options.minBorrowRate),\n max_borrow_rate: this.encodeDecimal(options.maxBorrowRate),\n optimal_borrow_rate: this.encodeDecimal(\n options.optimalBorrowRate,\n ),\n asset_weight: this.encodeDecimal(options.assetWeight),\n initial_liability_weight: this.encodeDecimal(\n options.initialLiabilityWeight,\n ),\n maintenance_liability_weight: this.encodeDecimal(\n options.maintenanceLiabilityWeight,\n ),\n deposit_limit: this.encodeDecimal(options.depositLimit),\n borrow_limit: this.encodeDecimal(options.borrowLimit),\n max_utilization_rate: this.encodeDecimal(\n options.maxUtilizationRate,\n ),\n liquidation_total_reward_ratio: this.encodeDecimal(\n options.liquidationTotalRewardRatio,\n ),\n protocol_reward_ratio: this.encodeDecimal(\n options.protocolRewardRatio,\n ),\n liability_liquidation_limit_ratio: this.encodeDecimal(\n options.liabilityLiquidationLimitRatio,\n ),\n interest_fee_tenth_bps: options.interestFeeTenthBps ?? null,\n },\n },\n },\n },\n });\n }\n\n public async updateLeverageTable(\n market: MarketName,\n leverageTable: Record<string, number>,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_perp_leverage_table: {\n market_id: marketId,\n args: { table: leverageTable },\n },\n },\n },\n });\n }\n\n public async createSubAccount(index: number) {\n return await this.submitTransaction({\n exchange: {\n user: {\n create_sub_account: {\n index,\n },\n },\n },\n });\n }\n\n public async transferSubAccount(\n subAccountIndex: number,\n toSubAccount: boolean,\n asset: AssetName,\n amount: Decimal,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n transfer_to_sub_account: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n sub_account_index: subAccountIndex,\n to_sub_account: toSubAccount,\n },\n },\n },\n });\n }\n\n public async delegateUser(delegate: Address, name: string) {\n return await this.submitTransaction({\n exchange: {\n user: {\n delegate_user: {\n delegate,\n name,\n },\n },\n },\n });\n }\n\n public async revokeDelegation(delegate: Address) {\n return await this.submitTransaction({\n exchange: {\n user: {\n revoke_delegation: {\n delegate,\n },\n },\n },\n });\n }\n\n public async vaultDelegateUser(\n vaultAddress: Address,\n delegate: Address,\n name: string,\n ) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n delegate_vault_user: {\n vault_address: vaultAddress,\n delegate,\n name,\n },\n },\n },\n });\n }\n\n public async vaultRevokeDelegation(vaultAddress: Address, delegate: Address) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n revoke_vault_delegation: {\n vault_address: vaultAddress,\n delegate,\n },\n },\n },\n });\n }\n\n public async adminPruneMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n prune_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminForceSettlePerpPosition(\n market: MarketName,\n usersToForceSettle: Address[],\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n force_settle_perp_position: {\n market_id: marketId,\n users: usersToForceSettle,\n },\n },\n },\n });\n }\n\n public async adminHaltPerpMarket(\n market: MarketName,\n settlementPrice: Decimal,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n halt_perp_market: {\n market_id: marketId,\n settlement_price: this.encodeDecimal(settlementPrice),\n },\n },\n },\n });\n }\n\n public async adminHaltSpotMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n halt_spot_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminUnhaltPerpMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n unhalt_perp_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminUnhaltSpotMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n unhalt_spot_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminHaltBorrowLendPool(asset: AssetName) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n halt_borrow_lend_pool: {\n asset_id: assetId,\n },\n },\n },\n });\n }\n\n public async adminUnhaltBorrowLendPool(asset: AssetName) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n unhalt_borrow_lend_pool: {\n asset_id: assetId,\n },\n },\n },\n });\n }\n\n public async adminForceRemoveDelegate(delegator: Address, delegate: Address) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n force_remove_delegate: {\n delegator,\n delegate,\n },\n },\n },\n });\n }\n\n // ============================================\n // Additional User Actions\n // ============================================\n\n public async settleFromPnlPool(subAccountIndex?: number) {\n return await this.submitTransaction({\n exchange: {\n user: {\n settle_from_pnl_pool: {\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async depositToTreasury(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_to_treasury: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async claimBorrowLendFees() {\n return await this.submitTransaction({\n exchange: {\n user: {\n claim_borrow_lend_fees: {},\n },\n },\n });\n }\n\n public async queueWithdrawal(vaultAddress: Address, shares: Decimal) {\n return await this.submitTransaction({\n exchange: {\n user: {\n queue_withdrawal: {\n vault_address: vaultAddress,\n shares: this.encodeDecimal(shares),\n },\n },\n },\n });\n }\n\n public async cancelQueuedWithdrawal(vaultAddress: Address) {\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_queued_withdrawal: {\n vault_address: vaultAddress,\n },\n },\n },\n });\n }\n\n public async forceWithdrawVault(vaultAddress: Address, shares: Decimal) {\n return await this.submitTransaction({\n exchange: {\n user: {\n force_withdraw_vault: {\n vault_address: vaultAddress,\n shares: this.encodeDecimal(shares),\n },\n },\n },\n });\n }\n\n // ============================================\n // Vault Actions\n // ============================================\n\n public async updateVaultConfig(\n vaultAddress: Address,\n options: {\n depositLimit?: Decimal;\n withdrawLockupPeriodHours?: number;\n profitSharePercentage?: number;\n },\n ) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n update_vault_config: {\n vault_address: vaultAddress,\n args: {\n deposit_limit: options.depositLimit\n ? this.encodeDecimal(options.depositLimit)\n : null,\n withdraw_lockup_period_hours:\n options.withdrawLockupPeriodHours ?? null,\n profit_share_percentage: options.profitSharePercentage ?? null,\n },\n },\n },\n },\n });\n }\n\n public async processWithdrawalQueue(vaultAddress: Address) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n process_withdrawal_queue: {\n vault_address: vaultAddress,\n },\n },\n },\n });\n }\n\n public async whitelistDepositor(vaultAddress: Address, userAddress: Address) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n whitelist_depositor: {\n vault_address: vaultAddress,\n user_address: userAddress,\n },\n },\n },\n });\n }\n\n public async unwhitelistDepositor(\n vaultAddress: Address,\n userAddress: Address,\n ) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n unwhitelist_depositor: {\n vault_address: vaultAddress,\n user_address: userAddress,\n },\n },\n },\n });\n }\n\n // ============================================\n // Additional Admin Actions\n // ============================================\n\n public async adminDeleteAsset(asset: AssetName) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: { delete_asset: { asset_id: assetId } },\n },\n });\n }\n\n public async adminDeleteMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n delete_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminCleanupUserMarketState(\n market: MarketName,\n users: Address[],\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n cleanup_user_market_state: {\n market_id: marketId,\n users,\n },\n },\n },\n });\n }\n\n public async adminUpdatePerpLiquidationConfig(options: {\n liquidationFee?: Decimal;\n liquidationIocBuffer?: Decimal;\n backstopLiquidationThreshold?: Decimal;\n liquidationProtocolRewardRatio?: Decimal;\n }) {\n const liquidationFee = options.liquidationFee\n ? this.encodeDecimal(options.liquidationFee)\n : null;\n const liquidationIocBuffer = options.liquidationIocBuffer\n ? this.encodeDecimal(options.liquidationIocBuffer)\n : null;\n const backstopLiquidationThreshold = options.backstopLiquidationThreshold\n ? this.encodeDecimal(options.backstopLiquidationThreshold)\n : null;\n const liquidationProtocolRewardRatio =\n options.liquidationProtocolRewardRatio\n ? this.encodeDecimal(options.liquidationProtocolRewardRatio)\n : null;\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_perp_liquidation_config: {\n args: {\n liquidation_fee: liquidationFee,\n liquidation_ioc_buffer: liquidationIocBuffer,\n backstop_liquidation_threshold: backstopLiquidationThreshold,\n liquidation_protocol_reward_ratio: liquidationProtocolRewardRatio,\n },\n },\n },\n },\n });\n }\n\n public async adminUpdateGlobalVaultConfig(options: {\n leaderMinimumHoldingPercentage?: number;\n creationFeeUsdc?: Decimal;\n minDepositValue?: Decimal;\n }) {\n const creationFeeUsdc = options.creationFeeUsdc\n ? this.encodeDecimal(options.creationFeeUsdc)\n : null;\n const minDepositValue = options.minDepositValue\n ? this.encodeDecimal(options.minDepositValue)\n : null;\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_global_vault_config: {\n args: {\n leader_minimum_holding_percentage:\n options.leaderMinimumHoldingPercentage ?? null,\n creation_fee_usdc: creationFeeUsdc,\n min_deposit_value: minDepositValue,\n },\n },\n },\n },\n });\n }\n\n public async adminWithdrawFromTreasury(\n asset: AssetName,\n amount: Decimal,\n to: Address,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n withdraw_from_treasury: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n to,\n },\n },\n },\n });\n }\n\n public async adminAutoDeleverage(options: {\n counterpartyA: Address;\n counterpartyASubAccountIndex?: number;\n counterpartyB: Address;\n counterpartyBSubAccountIndex?: number;\n market: MarketName;\n size?: Decimal;\n settlementPrice: Decimal;\n }) {\n const marketId = this.getMarketId(options.market);\n const size = this.encodeDecimal(options.size);\n return await this.submitTransaction({\n exchange: {\n admin: {\n auto_deleverage: {\n counterparty_a: options.counterpartyA,\n counterparty_a_sub_account_index:\n options.counterpartyASubAccountIndex ?? null,\n counterparty_b: options.counterpartyB,\n counterparty_b_sub_account_index:\n options.counterpartyBSubAccountIndex ?? null,\n market_id: marketId,\n size,\n settlement_price: this.encodeDecimal(options.settlementPrice),\n },\n },\n },\n });\n }\n\n public async adminDeposit(\n userAddress: Address,\n asset: AssetName,\n amount: Decimal,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n deposit: {\n user_address: userAddress,\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n // ============================================\n // Warp (Hyperlane) Actions\n // ============================================\n\n public async warpRegister(options: {\n admin: Address;\n remoteTokenId: string;\n localDecimals: number;\n remoteDecimals: number;\n ismThreshold: number;\n ismValidators: string[];\n remoteRouters: [number, string][];\n inboundTransferrableTokensLimit: string;\n inboundLimitReplenishmentPerSlot: string;\n outboundTransferrableTokensLimit: string;\n outboundLimitReplenishmentPerSlot: string;\n }) {\n return await this.submitTransaction({\n warp: {\n register: {\n admin: {\n InsecureOwner: options.admin,\n },\n token_source: {\n Synthetic: {\n remote_token_id: options.remoteTokenId,\n local_decimals: options.localDecimals,\n remote_decimals: options.remoteDecimals,\n },\n },\n ism: {\n MessageIdMultisig: {\n threshold: options.ismThreshold,\n validators: options.ismValidators,\n },\n },\n remote_routers: options.remoteRouters,\n inbound_transferrable_tokens_limit:\n options.inboundTransferrableTokensLimit,\n inbound_limit_replenishment_per_slot:\n options.inboundLimitReplenishmentPerSlot,\n outbound_transferrable_tokens_limit:\n options.outboundTransferrableTokensLimit,\n outbound_limit_replenishment_per_slot:\n options.outboundLimitReplenishmentPerSlot,\n },\n },\n });\n }\n\n public async warpUpdate(options: {\n warpRoute: string;\n admin?: Address;\n ismThreshold?: number;\n ismValidators?: string[];\n inboundTransferrableTokensLimit?: string;\n inboundLimitReplenishmentPerSlot?: string;\n outboundTransferrableTokensLimit?: string;\n outboundLimitReplenishmentPerSlot?: string;\n }) {\n return await this.submitTransaction({\n warp: {\n update: {\n warp_route: options.warpRoute,\n admin: options.admin ? { InsecureOwner: options.admin } : null,\n ism:\n options.ismThreshold != null && options.ismValidators != null\n ? {\n MessageIdMultisig: {\n threshold: options.ismThreshold,\n validators: options.ismValidators,\n },\n }\n : null,\n inbound_transferrable_tokens_limit:\n options.inboundTransferrableTokensLimit ?? null,\n inbound_limit_replenishment_per_slot:\n options.inboundLimitReplenishmentPerSlot ?? null,\n outbound_transferrable_tokens_limit:\n options.outboundTransferrableTokensLimit ?? null,\n outbound_limit_replenishment_per_slot:\n options.outboundLimitReplenishmentPerSlot ?? null,\n },\n },\n });\n }\n\n public async warpEnrollRemoteRouter(\n warpRoute: string,\n remoteDomain: number,\n remoteRouterAddress: string,\n ) {\n return await this.submitTransaction({\n warp: {\n enroll_remote_router: {\n warp_route: warpRoute,\n remote_domain: remoteDomain,\n remote_router_address: remoteRouterAddress,\n },\n },\n });\n }\n\n public async warpUnenrollRemoteRouter(\n warpRoute: string,\n remoteDomain: number,\n ) {\n return await this.submitTransaction({\n warp: {\n un_enroll_remote_router: {\n warp_route: warpRoute,\n remote_domain: remoteDomain,\n },\n },\n });\n }\n\n public async warpTransferRemote(options: {\n warpRoute: string;\n amount: number;\n destinationDomain: number;\n gasPaymentLimit: number;\n recipient: string;\n relayer?: { Standard?: string; Vm?: string };\n }) {\n return await this.submitTransaction({\n warp: {\n transfer_remote: {\n warp_route: options.warpRoute,\n amount: options.amount,\n destination_domain: options.destinationDomain,\n gas_payment_limit: options.gasPaymentLimit,\n recipient: options.recipient,\n relayer: options.relayer ?? null,\n },\n },\n });\n }\n\n // ============================================\n // Interchain Gas Paymaster Actions\n // ============================================\n\n public async setRelayerConfig(options: {\n domainOracleData: {\n domain: number;\n dataValue: { gasPrice: number; tokenExchangeRate: number };\n }[];\n domainDefaultGas: { domain: number; defaultGas: number }[];\n defaultGas: number;\n beneficiary?: string;\n }) {\n return await this.submitTransaction({\n interchain_gas_paymaster: {\n set_relayer_config: {\n domain_oracle_data: options.domainOracleData.map((d) => ({\n domain: d.domain,\n data_value: {\n gas_price: d.dataValue.gasPrice,\n token_exchange_rate: d.dataValue.tokenExchangeRate,\n },\n })),\n domain_default_gas: options.domainDefaultGas.map((d) => ({\n domain: d.domain,\n default_gas: d.defaultGas,\n })),\n default_gas: options.defaultGas,\n beneficiary: options.beneficiary ?? null,\n },\n },\n });\n }\n}\n\n// Factory function to create authenticated client (wallet required)\nasync function createAuthenticatedClient(\n endpoints: Endpoints,\n wallet: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n): Promise<AuthenticatedClient> {\n validateEndpoints(endpoints);\n console.debug(`Connecting to ${endpoints.rest}`);\n\n // This endpoint is ONLY used for Solana offchain authenticators (\"solana\", \"solanaSimple\").\n // Standard authenticator (\"standard\") uses \"/sequencer/txs\" internally via the inner StandardRollup.\n //\n // Endpoint routing by authenticator:\n // - \"standard\" → /sequencer/txs (Borsh-serialized, handled by inner StandardRollup)\n // - \"solana\" → /sequencer/solana_offchain_txs (JSON, signed with Solana spec preamble)\n // - \"solanaSimple\" → /sequencer/solana_offchain_txs (JSON, simple signature)\n const solanaEndpoint = \"/sequencer/solana_offchain_txs\";\n const rollupConfig: {\n url: string;\n getSerializer: (schema: RollupSchema) => WasmSerializer;\n context?: StandardRollupContext;\n } = {\n url: endpoints.rest,\n getSerializer: (schema: RollupSchema) => new WasmSerializer(schema),\n };\n\n const authenticator =\n txOpts?.authenticator ?? DEFAULT_TRANSACTION_OPTS.authenticator;\n const rollup = await createSolanaSignableRollup<RuntimeCall>(\n rollupConfig,\n solanaEndpoint,\n );\n const client = new AuthenticatedClient(\n endpoints,\n rollup,\n wallet,\n delegatorAddress,\n authenticator,\n );\n await client.initializeExchangeInfo();\n\n // Configure rollup with transaction defaults\n const chainId = await client.getChainId();\n\n rollupConfig.context = {\n defaultTxDetails: {\n max_priority_fee_bips:\n txOpts?.maxPriorityFeeBps ?? DEFAULT_TRANSACTION_OPTS.maxPriorityFeeBps,\n max_fee: txOpts?.maxFee ?? DEFAULT_TRANSACTION_OPTS.maxFee,\n gas_limit: txOpts?.gasLimit ?? DEFAULT_TRANSACTION_OPTS.gasLimit,\n chain_id: chainId,\n },\n };\n const rollupWithContext = await createSolanaSignableRollup<RuntimeCall>(\n rollupConfig,\n solanaEndpoint,\n );\n // Replace rollup with configured version after initialization\n // This is safe because we're in the factory function that creates the client\n client.rollup = rollupWithContext;\n\n return client;\n}\n\n// Client namespace - factory methods that return the correct type based on parameters\n// This provides a clean API: Client.fromNetwork() works for both authenticated and read-only\nexport namespace Client {\n // Overload: with wallet → returns AuthenticatedClient\n export function fromEndpoints(\n endpoints: Endpoints,\n wallet: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n ): Promise<AuthenticatedClient>;\n // Overload: without wallet → returns ReadOnlyClient\n export function fromEndpoints(endpoints: Endpoints): Promise<ReadOnlyClient>;\n // Implementation\n export async function fromEndpoints(\n endpoints: Endpoints,\n wallet?: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n ): Promise<ReadOnlyClient | AuthenticatedClient> {\n if (wallet) {\n return await createAuthenticatedClient(\n endpoints,\n wallet,\n delegatorAddress,\n txOpts,\n );\n }\n return await ReadOnlyClient.fromEndpoints(endpoints);\n }\n\n // Overload: with wallet → returns AuthenticatedClient\n export function fromNetwork(\n network: Network,\n wallet: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n ): Promise<AuthenticatedClient>;\n // Overload: without wallet → returns ReadOnlyClient\n export function fromNetwork(network: Network): Promise<ReadOnlyClient>;\n // Implementation\n export async function fromNetwork(\n network: Network,\n wallet?: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n ): Promise<ReadOnlyClient | AuthenticatedClient> {\n if (!isNetwork(network)) {\n throw new Error(`Invalid network: ${network}`);\n }\n if (wallet) {\n return await createAuthenticatedClient(\n NETWORKS[network],\n wallet,\n delegatorAddress,\n txOpts,\n );\n }\n return await ReadOnlyClient.fromNetwork(network);\n }\n}\n",
12
+ "import { getTokenId } from \"@sovereign-sdk/modules\";\nimport type { RollupSchema } from \"@sovereign-sdk/serializers\";\nimport { WasmSerializer } from \"@sovereign-sdk/serializers/wasm\";\nimport type { Transaction } from \"@sovereign-sdk/types\";\nimport {\n type Authenticator,\n createSolanaSignableRollup,\n type SolanaSignableRollup,\n type StandardRollupContext,\n type TransactionResult,\n VersionMismatchError,\n} from \"@sovereign-sdk/web3\";\nexport type { Authenticator };\n\nimport Decimal from \"decimal.js\";\nimport type { EquityType, MarginType } from \"./bullet-wasm\";\nimport { BulletWasm } from \"./bullet-wasm\";\nimport { type Endpoints, NETWORKS } from \"./constants\";\nimport { BulletError } from \"./error\";\nimport type { Orderbook } from \"./orderbook\";\nimport type { RuntimeCall } from \"./rollupTypes\";\nimport type {\n Address,\n AdminType,\n AssetId,\n AssetName,\n FeeTier,\n MarketId,\n MarketMetadata,\n MarketName,\n MarkPriceUpdateArgs,\n Network,\n NewOrderArgs,\n NewTwapOrderArgs,\n OraclePriceUpdateArgs,\n OrderType,\n Side,\n SpotCollateralTransferDirection,\n TokenId,\n TpslPair,\n} from \"./types\";\nimport {\n base58ToBytes,\n isNetwork,\n isValidHttpUrl,\n serialize,\n serializeVersioned,\n validateEndpoints,\n} from \"./utils\";\nimport type { Wallet } from \"./wallet\";\nimport { WebSocketManager } from \"./websocket\";\nimport {\n type AccountAddresses,\n BaseResponseSchemas,\n type BorrowLendPool,\n type OrderbookL2,\n type PerpMarketConfig,\n ResponseSchemas,\n type SpotMarketConfig,\n type UserAccount,\n type VersionedExchangeAssets,\n type VersionedExchangeInfo,\n type VersionedExecutionIds,\n type VersionedPerpMarket,\n type VersionedRiskEngine,\n type VersionedSpotMarket,\n type VersionedUserAccountConfig,\n} from \"./zod-types/rest\";\nimport { WasmResponseSchemas } from \"./zod-types/wasm\";\n\n// Define transaction options struct\nexport interface TransactionOpts {\n /**\n * Maximum priority fee in basis points.\n * @default 0\n */\n maxPriorityFeeBps?: number;\n /**\n * Maximum fee for the transaction.\n * @default \"10000000000\"\n */\n maxFee?: string;\n /**\n * Gas limit for the transaction.\n * @default null\n */\n gasLimit?: number[] | null;\n /**\n * The authenticator scheme for this client. Set once at construction time\n * and used for all subsequent transactions — cannot be overridden per-call.\n *\n * This also determines how Decimal values are serialized:\n * - Solana authenticators use serde (string format, e.g. \"10000\")\n * - Standard authenticator uses Borsh (SurrogateDecimal { flags, hi, lo, mid })\n *\n * Options:\n *\n * - \"solanaAuto\": Auto-detect based on signer type (recommended for Solana wallets)\n * - Uses \"solana\" for LedgerSolanaSigner (with preamble)\n * - Uses \"solanaSimple\" for other Solana signers (no preamble)\n *\n * - \"solanaSimple\": For browser wallets (Phantom, Solflare, etc.) - no preamble\n * - Signs raw JSON bytes directly\n * - Smaller message size\n *\n * - \"solana\": For Ledger hardware wallets - with preamble\n * - Adds 85-byte preamble required by Ledger's signOffchainMessage API\n * - Provides metadata for Ledger's display\n *\n * - \"standard\": Standard Sovereign SDK authentication (not Solana off-chain)\n * - Uses the rollup's native authentication scheme\n * - For non-Solana wallets or when you need standard SDK auth\n * - Uses \"/sequencer/txs\" endpoint instead of \"/sequencer/accept-solana-offchain-tx\"\n *\n * @default \"standard\"\n */\n authenticator?: Authenticator;\n}\n\n// Default transaction options\nconst DEFAULT_TRANSACTION_OPTS: Required<TransactionOpts> = {\n maxPriorityFeeBps: 0,\n maxFee: \"10000000000\",\n gasLimit: null,\n authenticator: \"standard\",\n};\n\ntype AmendOrderOptions =\n | {\n existingOrderId: bigint;\n existingClientOrderId?: never;\n newOrderArgs: NewOrderArgs;\n }\n | {\n existingOrderId?: never;\n existingClientOrderId: bigint;\n newOrderArgs: NewOrderArgs;\n };\n\ntype CancelOrderOptions =\n | {\n orderId: bigint;\n clientOrderId?: never;\n }\n | {\n orderId?: never;\n clientOrderId: bigint;\n };\n\ntype AssetInfo = {\n id: AssetId;\n name: AssetName;\n tokenId: TokenId | null;\n decimals: number;\n withdrawFee: string;\n};\n\n// Base class for read-only operations (no wallet required)\nexport class ReadOnlyClient {\n public rollup: SolanaSignableRollup<RuntimeCall>;\n public readonly endpoint: string;\n protected readonly wsManager?: WebSocketManager;\n protected assetInfoRegistry?: Map<AssetName, AssetInfo>;\n protected assetInfoRegistryReverse?: Map<AssetId, AssetInfo>;\n protected marketRegistry?: Map<MarketName, MarketMetadata>; // ID and type\n protected marketRegistryReverse?: Map<MarketId, MarketName>;\n protected generationOverride?: () => number;\n\n /**\n * @internal\n * Do not construct directly. Use Client.fromNetwork() or Client.fromEndpoints()\n */\n constructor(endpoints: Endpoints, rollup: SolanaSignableRollup<RuntimeCall>) {\n if (!isValidHttpUrl(endpoints.rest)) {\n throw new Error(`Invalid HTTP URL provided: ${endpoints.rest}`);\n }\n this.endpoint = endpoints.rest;\n this.rollup = rollup;\n if (endpoints.ws) {\n this.wsManager = new WebSocketManager(endpoints.ws);\n }\n // Initialize exchange info and registries asynchronously\n // Factory methods must await this separately\n }\n\n // Static convenience constructors (read-only, no wallet)\n public static async fromEndpoints(\n endpoints: Endpoints,\n ): Promise<ReadOnlyClient> {\n validateEndpoints(endpoints);\n console.debug(`Connecting to ${endpoints.rest}`);\n\n const rollupConfig = {\n url: endpoints.rest,\n getSerializer: (schema: RollupSchema) => new WasmSerializer(schema),\n };\n\n // This endpoint is ONLY used for Solana offchain authenticators (\"solana\", \"solanaSimple\").\n // Standard authenticator (\"standard\") uses \"/sequencer/txs\" internally via the inner StandardRollup.\n //\n // Endpoint routing by authenticator:\n // - \"standard\" → /sequencer/txs (Borsh-serialized, handled by inner StandardRollup)\n // - \"solana\" → /sequencer/solana_offchain_txs (JSON, signed with Solana spec preamble)\n // - \"solanaSimple\" → /sequencer/solana_offchain_txs (JSON, simple signature)\n const solanaEndpoint = \"/sequencer/solana_offchain_txs\";\n const rollup = await createSolanaSignableRollup<RuntimeCall>(\n rollupConfig,\n solanaEndpoint,\n );\n const client = new ReadOnlyClient(endpoints, rollup);\n await client.initializeExchangeInfo();\n return client;\n }\n\n public static async fromNetwork(network: Network): Promise<ReadOnlyClient> {\n if (!isNetwork(network)) {\n throw new Error(`Invalid network: ${network}`);\n }\n return await ReadOnlyClient.fromEndpoints(NETWORKS[network]);\n }\n\n public setGenerationOverride(generation: (() => number) | undefined) {\n this.generationOverride = generation;\n }\n\n // HTTP methods for data fetching (errors bubble up naturally from Sovereign SDK)\n private async fetchApiResource<T>(\n path: string,\n params?: Record<string, string | undefined>,\n ): Promise<T> {\n return await this.rollup.http.get<T>(path, { query: params });\n }\n\n private async fetchBulkApiResource<T>(\n path: string,\n body: Record<string, unknown>,\n params?: Record<string, string>,\n ): Promise<T> {\n return await this.rollup.http.post<T>(path, { query: params, body });\n }\n\n /**\n * @internal\n * Initializes exchange info and registries. Called automatically by factory methods.\n */\n async initializeExchangeInfo(): Promise<void> {\n const exchangeInfo = await this.getExchangeInfo();\n if (!exchangeInfo) {\n throw new Error(\"Exchange info not found\");\n }\n\n this.assetInfoRegistry = new Map();\n this.assetInfoRegistryReverse = new Map();\n\n this.marketRegistry = new Map();\n this.marketRegistryReverse = new Map();\n\n for (const info of exchangeInfo.data.assets.values()) {\n if (info && typeof info.name === \"string\") {\n const transformedInfo = {\n id: info.id,\n name: info.name,\n tokenId: info.token_id,\n decimals: info.decimals,\n withdrawFee: info.withdraw_fee.toString(),\n };\n this.assetInfoRegistry.set(info.name, transformedInfo);\n this.assetInfoRegistryReverse.set(info.id, transformedInfo);\n }\n }\n\n for (const info of exchangeInfo.data.markets.values()) {\n if (info && typeof info.name === \"string\") {\n this.marketRegistry.set(info.name, {\n id: info.id,\n kind: info.kind,\n baseAssetId: info.base_asset_id,\n name: info.name,\n });\n this.marketRegistryReverse.set(info.id, info.name);\n }\n }\n }\n\n // ========================================================================\n // Public Read Methods (work without wallet)\n // ========================================================================\n\n public async getExchangeInfo(): Promise<VersionedExchangeInfo | null> {\n const path = \"/modules/exchange/state/exchange-info\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.ExchangeInfo.parse(response);\n return parsed.value;\n }\n\n private getMarketMapping(): Map<MarketName, MarketMetadata> {\n if (!this.marketRegistry) {\n throw new Error(\"Market registry not initialized\");\n }\n return this.marketRegistry;\n }\n\n public getAssetInfo(asset: AssetName): AssetInfo {\n if (!this.assetInfoRegistry) {\n throw new Error(\"Asset registry not initialized\");\n }\n const assetInfo = this.assetInfoRegistry.get(asset);\n if (!assetInfo) {\n throw new Error(`Asset ${asset} not found`);\n }\n\n return assetInfo;\n }\n\n public getAssetId(asset: AssetName): AssetId {\n if (!this.assetInfoRegistry) {\n throw new Error(\"Asset registry not initialized\");\n }\n const assetInfo = this.assetInfoRegistry.get(asset);\n if (!assetInfo) {\n throw new Error(`Asset ${asset} not found`);\n }\n return assetInfo.id;\n }\n\n public getAssetName(assetId: AssetId): AssetName {\n if (!this.assetInfoRegistryReverse) {\n throw new Error(\"Asset registry not initialized\");\n }\n const assetInfo = this.assetInfoRegistryReverse.get(assetId);\n if (!assetInfo) {\n throw new Error(`Asset ${assetId} not found`);\n }\n return assetInfo.name;\n }\n\n public getTokenAddress(assetName: AssetName): TokenId {\n if (!this.assetInfoRegistry) {\n throw new Error(\n \"Asset registry not initialized. Call initializeRegistries() first.\",\n );\n }\n\n const assetInfo = this.assetInfoRegistry.get(assetName);\n if (!assetInfo || !assetInfo.tokenId) {\n throw new Error(`Token address not found for asset ${assetName}`);\n }\n\n return assetInfo.tokenId;\n }\n\n public getTokenAddresses(): Record<AssetName, TokenId> {\n if (!this.assetInfoRegistry) {\n throw new Error(\n \"Asset registry not initialized. Call initializeRegistries() first.\",\n );\n }\n\n const tokenAddresses: Record<AssetName, TokenId> = {};\n for (const [assetName, assetInfo] of this.assetInfoRegistry.entries()) {\n if (assetInfo.tokenId) {\n tokenAddresses[assetName] = assetInfo.tokenId;\n }\n }\n\n return tokenAddresses;\n }\n\n public getMarketId(market: MarketName): MarketId {\n return this.getMarketMeta(market).id;\n }\n\n public getMarketMeta(market: MarketName): MarketMetadata {\n const marketRegistry = this.getMarketMapping();\n const marketId = marketRegistry.get(market);\n if (marketId === undefined) {\n throw new Error(`Market ${market} not found`);\n }\n return marketId;\n }\n\n public getMarketName(marketId: MarketId): MarketName {\n if (!this.marketRegistryReverse) {\n throw new Error(\"Market registry not initialized\");\n }\n const marketName = this.marketRegistryReverse.get(marketId);\n if (marketName === undefined) {\n throw new Error(`Market ${marketId} not found`);\n }\n return marketName;\n }\n\n public async getOrderbookL2(\n market: MarketName,\n levels = 100,\n ): Promise<OrderbookL2> {\n const marketId = this.getMarketId(market);\n const path = `/modules/exchange/api/v1/orderbook-level2/${marketId}?levels=${levels}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.OrderbookL2.parse(response);\n return parsed.orderbook;\n }\n\n public async getOrderbookL2s(\n markets: MarketName[],\n levels = 100,\n ): Promise<Map<MarketId, OrderbookL2>> {\n const marketIds = markets.map((market) => {\n return this.getMarketId(market);\n });\n const path = \"/modules/exchange/api/v1/orderbook-level2/bulk\";\n const response = await this.fetchBulkApiResource(path, {\n requests: marketIds.map((marketId) => ({\n market_id: marketId,\n depth: levels,\n })),\n });\n const parsed = ResponseSchemas.OrderbookL2Bulk.parse(response);\n return parsed.found;\n }\n\n public async getChainId(): Promise<number> {\n const constants = await this.rollup.rollup.constants();\n return constants.chain_id;\n }\n\n public async getUserAccountAddresses(\n offset?: number,\n limit?: number,\n ): Promise<AccountAddresses> {\n const path = \"/modules/exchange/api/v1/account/addresses\";\n const response = await this.fetchApiResource(path, {\n offset: offset?.toString(),\n limit: limit?.toString(),\n });\n const parsed = ResponseSchemas.AccountAddresses.parse(response);\n return parsed;\n }\n\n public async getUserAccount(address: Address): Promise<UserAccount> {\n const path = `/modules/exchange/api/v1/account/${address}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.Account.parse(response);\n return parsed.account;\n }\n\n public async getUserAccounts(\n addresses: Address[],\n ): Promise<Map<Address, UserAccount>> {\n const path = \"/modules/exchange/api/v1/account/bulk\";\n const response = await this.fetchBulkApiResource(path, {\n addresses,\n });\n const parsed = ResponseSchemas.AccountBulk.parse(response);\n return parsed.found;\n }\n\n public async getUserAccountConfig(\n address: Address,\n ): Promise<VersionedUserAccountConfig | null> {\n const path = `/modules/exchange/state/user-account-configs/items/${address}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.UserAccountConfig.parse(response);\n return parsed.value;\n }\n\n public async getExchangeAssets(): Promise<VersionedExchangeAssets | null> {\n const path = \"/modules/exchange/state/exchange-assets\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.ExchangeAssets.parse(response);\n return parsed.value;\n }\n\n public async getRiskEngine(): Promise<VersionedRiskEngine | null> {\n const path = \"/modules/exchange/state/risk-engine\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.RiskEngine.parse(response);\n return parsed.value;\n }\n\n public async getPerpMarket(market: MarketName): Promise<VersionedPerpMarket> {\n const marketId = this.getMarketId(market);\n const path = `/modules/exchange/api/v1/perp-market/${marketId}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.PerpMarket.parse(response);\n return parsed.market;\n }\n\n public async getPerpMarketsConfig(): Promise<\n Map<MarketId, PerpMarketConfig>\n > {\n const path = \"/modules/exchange/api/v1/perp-market/configs\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.PerpMarketConfigs.parse(response);\n return parsed;\n }\n\n public async getSpotMarket(market: MarketName): Promise<VersionedSpotMarket> {\n const marketId = this.getMarketId(market);\n const path = `/modules/exchange/api/v1/spot-market/${marketId}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.SpotMarket.parse(response);\n return parsed.market;\n }\n\n public async getSpotMarketsConfig(): Promise<\n Map<MarketId, SpotMarketConfig>\n > {\n const path = \"/modules/exchange/api/v1/spot-market/configs\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.SpotMarketConfigs.parse(response);\n return parsed;\n }\n\n public async getExecutionIds(): Promise<VersionedExecutionIds | null> {\n const path = \"/modules/exchange/state/execution-ids\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.ExecutionIds.parse(response);\n return parsed.value;\n }\n\n public async getTokenBalance(\n tokenId: TokenId,\n address: Address,\n ): Promise<bigint> {\n const response = await this.fetchApiResource(\n `/modules/bank/tokens/${tokenId}/balances/${address}`,\n );\n const parsed = BaseResponseSchemas.CoinsResponse.parse(response);\n return parsed.amount;\n }\n\n public async getTotalSupply(tokenId: TokenId): Promise<bigint> {\n const response = await this.fetchApiResource(\n `/modules/bank/tokens/${tokenId}/total-supply`,\n );\n const parsed = BaseResponseSchemas.CoinsResponse.parse(response);\n return parsed.amount;\n }\n\n public async getGasTokenAddress(): Promise<TokenId> {\n const response = await this.fetchApiResource<{ token_id: TokenId }>(\n \"/modules/bank/tokens/gas_token\",\n );\n return response.token_id;\n }\n\n // ========================================================================\n // Calculation Methods\n // ========================================================================\n\n public calculateOrderbookMidpoint(\n orderbook: OrderbookL2,\n ): Decimal | undefined {\n if (orderbook.bids.length === 0 || orderbook.asks.length === 0) {\n return undefined;\n }\n const bestBid = orderbook.bids.reduce((max, bid) => {\n const keyDecimal = new Decimal(bid[0]);\n return max.greaterThan(keyDecimal) ? max : keyDecimal;\n }, new Decimal(Number.NEGATIVE_INFINITY));\n const bestAsk = orderbook.asks.reduce((min, ask) => {\n const keyDecimal = new Decimal(ask[0]);\n return min.lessThan(keyDecimal) ? min : keyDecimal;\n }, new Decimal(Number.POSITIVE_INFINITY));\n return bestBid.plus(bestAsk).div(2);\n }\n\n public calculateEntryPrice(\n market: MarketName,\n userAccount: UserAccount,\n ): Decimal {\n const marketId = this.getMarketId(market);\n const position = userAccount.perp_ledgers.get(marketId)?.position;\n if (!position) {\n throw new Error(\"No position found for asset\");\n }\n return position.cost_of_trades.div(position.size.abs());\n }\n\n public calculateTotalPerpUnrealizedPnl(\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_total_perp_unrealized_pnl(\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateAccountEquity(\n equityType: EquityType,\n conservative: boolean,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_account_equity(\n userAccountObject,\n conservative,\n equityType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateAccountLeverage(\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_account_leverage(\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateAvailableMargin(\n marginType: MarginType,\n conservative: boolean,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_available_margin(\n userAccountObject,\n conservative,\n marginType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateUsedMargin(\n withdrawal: boolean,\n marginType: MarginType,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_used_margin(\n userAccountObject,\n withdrawal,\n marginType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateUsedPerpMargin(\n userAccount: UserAccount,\n marginType: MarginType,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_used_perp_margin(\n userAccountObject,\n marginType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateUsedSpotMargin(\n userAccount: UserAccount,\n marginType: MarginType,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_used_spot_margin(\n userAccountObject,\n marginType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateEstimatedLiquidationPrice(\n market: MarketName,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const marketId = this.getMarketId(market);\n const baseAssetId = this.getMarketMeta(market).baseAssetId;\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_estimated_liquidation_price(\n userAccountObject,\n marketId,\n baseAssetId,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateLiquidationRiskPercentage(\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_liquidation_risk_percentage(\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateMarginBalance(\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_margin_balance(\n userAccountObject,\n riskEngineObject,\n );\n return WasmResponseSchemas.MarginBalanceSchema.parse(result);\n }\n\n public calculateTotalPerpMarginRequirement(\n userAccount: UserAccount,\n marginType: MarginType,\n withdrawal: boolean,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_total_perp_margin_requirement(\n userAccountObject,\n marginType,\n withdrawal,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateForceCancelRiskPercentage(\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_force_cancel_risk_percentage(\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateMaxBorrowAmount(\n asset: AssetName,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const assetId = this.getAssetId(asset);\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_max_borrow_amount(\n assetId,\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateMaxOrderSize(\n market: MarketName,\n price: Decimal,\n side: Side,\n orderType: OrderType,\n reduceOnly: boolean,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n orderbook: OrderbookL2,\n nIterations = 100,\n errorTolerance: Decimal = new Decimal(0.0001),\n ) {\n const marketId = this.getMarketId(market);\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const orderbookObject = serialize(orderbook);\n const result = BulletWasm.calculate_max_order_size(\n marketId,\n price.toFixed(),\n side,\n orderType,\n reduceOnly,\n userAccountObject,\n riskEngineObject,\n orderbookObject,\n nIterations,\n errorTolerance.toFixed(),\n );\n return new Decimal(result);\n }\n\n public calculateWithdrawableAmountOfAsset(\n asset: AssetName,\n forTransferSpotCollateral: boolean,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n exchangeInfo: VersionedExchangeInfo,\n ) {\n const assetId = this.getAssetId(asset);\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const exchangeInfoObject = serializeVersioned(exchangeInfo);\n const result = BulletWasm.calculate_withdrawable_amount_of_asset(\n assetId,\n forTransferSpotCollateral,\n userAccountObject,\n riskEngineObject,\n exchangeInfoObject,\n );\n return new Decimal(result);\n }\n\n public simulateUsedMarginOnBorrow(\n asset: AssetName,\n borrowAmount: Decimal,\n userAccount: UserAccount,\n marginType: MarginType,\n riskEngine: VersionedRiskEngine,\n ) {\n const assetId = this.getAssetId(asset);\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.simulate_used_margin_on_borrow(\n assetId,\n borrowAmount.toFixed(),\n userAccountObject,\n marginType,\n riskEngineObject,\n );\n return WasmResponseSchemas.SimulationResultSchema.parse(result);\n }\n\n public simulateUsedMarginOnOrder(\n market: MarketName,\n newOrderArgs: NewOrderArgs,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n orderbook: OrderbookL2,\n ) {\n const marketId = this.getMarketId(market);\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const orderbookObject = serialize(orderbook);\n const result = BulletWasm.simulate_used_margin_on_order(\n marketId,\n {\n price: newOrderArgs.price.toFixed(),\n size: newOrderArgs.size.toFixed(),\n side: newOrderArgs.side,\n order_type: newOrderArgs.orderType,\n reduce_only: newOrderArgs.reduceOnly,\n },\n userAccountObject,\n riskEngineObject,\n orderbookObject,\n );\n return WasmResponseSchemas.SimulationResultSchema.parse(result);\n }\n\n public simulateEstimatedLiquidationPriceOnOrder(\n market: MarketName,\n newOrderArgs: NewOrderArgs,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n orderbook: OrderbookL2,\n ) {\n const marketId = this.getMarketId(market);\n const baseAssetId = this.getMarketMeta(market).baseAssetId;\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const orderbookObject = serialize(orderbook);\n const result = BulletWasm.simulate_estimated_liquidation_price_on_order(\n marketId,\n {\n price: newOrderArgs.price.toFixed(),\n size: newOrderArgs.size.toFixed(),\n side: newOrderArgs.side,\n order_type: newOrderArgs.orderType,\n reduce_only: newOrderArgs.reduceOnly,\n },\n baseAssetId,\n userAccountObject,\n riskEngineObject,\n orderbookObject,\n );\n return WasmResponseSchemas.SimulationResultSchema.parse(result);\n }\n\n public calculatePositionsAdditionalMetadata(\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n exchangeInfo: VersionedExchangeInfo,\n ) {\n const userAccountObject = serialize(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const exchangeInfoObject = serializeVersioned(exchangeInfo);\n\n const result = BulletWasm.calculate_positions_additional_metadata(\n userAccountObject,\n riskEngineObject,\n exchangeInfoObject,\n );\n\n return WasmResponseSchemas.PositionAdditionalMetadataSchema.parse(result);\n }\n\n public calculateBorrowLendPoolAdditionalMetadata(\n borrowLendPools: Map<AssetId, BorrowLendPool>,\n asset: AssetName,\n ) {\n const assetId = this.getAssetId(asset);\n const borrowLendPoolsObject = serialize(borrowLendPools);\n const result = BulletWasm.calculate_borrow_lend_additional_metadata(\n borrowLendPoolsObject?.get(assetId),\n );\n return WasmResponseSchemas.BorrowLendMarketAdditionalMetadataSchema.parse(\n result,\n );\n }\n\n public calculateAccountSummaryBatch(\n userAccounts: UserAccount[],\n riskEngine: VersionedRiskEngine,\n useWeightedEquity = true,\n ) {\n const userAccountsObject = serialize(userAccounts);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_account_summary_batch(\n userAccountsObject,\n riskEngineObject,\n useWeightedEquity,\n );\n return WasmResponseSchemas.AccountSummaryBatchSchema.parse(result);\n }\n\n // ========================================================================\n // WebSocket Methods\n // ========================================================================\n\n private getWebSocketManager(): WebSocketManager {\n if (!this.wsManager) {\n throw new Error(\"WebSocket connection not configured\");\n }\n return this.wsManager;\n }\n\n public async *subscribeOrderbook(\n market: MarketName,\n signal?: AbortSignal,\n ): AsyncIterable<Orderbook> {\n const marketId = this.getMarketId(market);\n yield* this.getWebSocketManager().subscribeOrderbook(marketId, signal);\n }\n\n public async unsubscribeOrderbook(market: MarketName) {\n const marketId = this.getMarketId(market);\n await this.getWebSocketManager().unsubscribeOrderbook(marketId);\n }\n\n // ========================================================================\n // Resource Management\n // ========================================================================\n\n /**\n * Dispose of all resources: WebSocket connections, Maps, and references\n * Call this when the client is no longer needed to prevent memory leaks\n */\n public dispose(): void {\n // Dispose WebSocket manager if it exists\n if (this.wsManager) {\n this.wsManager.dispose();\n }\n\n // Clear Maps\n this.assetInfoRegistry?.clear();\n this.assetInfoRegistryReverse?.clear();\n this.marketRegistry?.clear();\n this.marketRegistryReverse?.clear();\n\n // Clear references\n this.assetInfoRegistry = undefined;\n this.assetInfoRegistryReverse = undefined;\n this.marketRegistry = undefined;\n this.marketRegistryReverse = undefined;\n this.generationOverride = undefined;\n }\n}\n\n// Authenticated client - extends ReadOnlyClient and adds authenticated operations\nexport class AuthenticatedClient extends ReadOnlyClient {\n public readonly address: Address;\n private readonly wallet: Wallet;\n private readonly authenticator: Authenticator;\n private readonly useSerdePath: boolean;\n\n /**\n * @internal\n * Do not construct directly. Use Client.fromNetwork() or Client.fromEndpoints()\n */\n constructor(\n endpoints: Endpoints,\n rollup: SolanaSignableRollup<RuntimeCall>,\n wallet: Wallet,\n delegatorAddress?: Address,\n authenticator: Authenticator = \"standard\",\n ) {\n super(endpoints, rollup);\n this.wallet = wallet;\n this.address = delegatorAddress ?? wallet.address;\n this.authenticator = authenticator;\n // \"solanaAuto\" resolves to \"solana\" (Ledger) or \"solanaSimple\" (all other\n // signers) at call time — it never falls back to the standard/Borsh path.\n // See: SolanaSignableRollup.getAutoAuthenticator() in @sovereign-sdk/web3.\n this.useSerdePath =\n authenticator === \"solana\" ||\n authenticator === \"solanaSimple\" ||\n authenticator === \"solanaAuto\";\n }\n\n /**\n * Encodes a Decimal.js value for the configured authenticator:\n * - Solana auth (serde): returns string (e.g. \"10000\")\n * - Standard auth (borsh): returns SurrogateDecimal { flags, hi, lo, mid }\n */\n private encodeDecimal(d?: Decimal | null) {\n if (!d) return null;\n const fixed = d.toFixed();\n return this.useSerdePath\n ? fixed\n : BulletWasm.convert_rust_decimal_to_json(fixed);\n }\n\n // Override getUserAccount to use this.address when no address provided\n public override async getUserAccount(\n address?: Address,\n ): Promise<UserAccount> {\n const addr = address ?? this.address;\n return await super.getUserAccount(addr);\n }\n\n public override async getUserAccountConfig(\n address?: Address,\n ): Promise<VersionedUserAccountConfig | null> {\n const addr = address ?? this.address;\n return await super.getUserAccountConfig(addr);\n }\n\n // Override getTokenBalance to use this.address when no address provided\n public override async getTokenBalance(\n tokenId: TokenId,\n address?: Address,\n ): Promise<bigint> {\n const addr = address ?? this.address;\n return await super.getTokenBalance(tokenId, addr);\n }\n\n // Authenticated-only methods\n public async getNonce(): Promise<number> {\n const pubKey = base58ToBytes(this.wallet.address);\n const dedup = await this.rollup.dedup(pubKey);\n return dedup.nonce;\n }\n\n // ========================================================================\n // Transaction Methods (requires wallet)\n // ========================================================================\n\n public async submitTransaction(\n runtimeCall: RuntimeCall,\n ): Promise<TransactionResult<Transaction<RuntimeCall>>> {\n try {\n // Decimals are already encoded in the correct format by encodeDecimal():\n // - Solana auth (serde): string format (\"10000\")\n // - Standard auth (borsh): SurrogateDecimal { flags, hi, lo, mid }\n return await this.rollup.call(runtimeCall, {\n signer: this.wallet.getSigner(),\n authenticator: this.authenticator,\n overrides: {\n uniqueness: this.generationOverride\n ? { generation: this.generationOverride() }\n : undefined,\n },\n });\n } catch (e) {\n // Handle version mismatch with retry\n if (e instanceof VersionMismatchError && e.retryable) {\n console.warn(\"Version mismatch, retrying...\");\n return await this.submitTransaction(runtimeCall);\n }\n // Convert to BulletError for consistent error handling\n throw BulletError.from(e);\n }\n }\n\n public async createToken(\n tokenName: string,\n tokenDecimals: number | null,\n initialBalance: bigint,\n mintToAddress: Address,\n admins: Address[],\n supplyCap: bigint | null,\n ) {\n const response = await this.submitTransaction({\n bank: {\n create_token: {\n token_name: tokenName,\n token_decimals: tokenDecimals,\n initial_balance: initialBalance.toString(),\n mint_to_address: mintToAddress,\n admins: admins,\n supply_cap: supplyCap?.toString() ?? null,\n },\n },\n });\n const rawBytestokenId = getTokenId(\n base58ToBytes(this.address),\n tokenName,\n tokenDecimals ?? 8,\n );\n return {\n rawBytestokenId,\n response,\n };\n }\n\n public async transfer(to: Address, amount: bigint, tokenId: TokenId) {\n return await this.submitTransaction({\n bank: {\n transfer: {\n to: to,\n coins: {\n amount: amount.toString(),\n token_id: tokenId,\n },\n },\n },\n });\n }\n\n public async mint(to: Address, amount: bigint, tokenId: TokenId) {\n return await this.submitTransaction({\n bank: {\n mint: {\n mint_to_address: to,\n coins: {\n amount: amount.toString(),\n token_id: tokenId,\n },\n },\n },\n });\n }\n\n public async deposit(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async depositToVault(\n vaultAddress: Address,\n asset: AssetName,\n amount: Decimal,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_to_vault: {\n vault_address: vaultAddress,\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async withdraw(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n withdraw: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async borrowSpot(\n asset: AssetName,\n amount: Decimal,\n subAccountIndex?: number,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n borrow_spot: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async depositSpotCollateral(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_spot_collateral: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async withdrawSpotCollateral(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n withdraw_spot_collateral: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async transferSpotCollateral(\n direction: SpotCollateralTransferDirection,\n asset: AssetName,\n amount: Decimal,\n subAccountIndex?: number,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n transfer_spot_collateral: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n direction,\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async placeOrders(\n market: MarketName,\n newOrders: NewOrderArgs[],\n replace = false,\n subAccountIndex?: number,\n ) {\n const marketMeta = this.getMarketMeta(market);\n\n const args = newOrders.map((newOrder) => {\n return {\n price: this.encodeDecimal(newOrder.price),\n size: this.encodeDecimal(newOrder.size),\n side: newOrder.side,\n order_type: newOrder.orderType,\n reduce_only: newOrder.reduceOnly,\n client_order_id: newOrder.clientOrderId\n ? newOrder.clientOrderId.toString()\n : null,\n pending_tpsl_pair: newOrder.pendingTpslPair\n ? {\n tpsl_pair: {\n tp: newOrder.pendingTpslPair.tpslPair.tp\n ? {\n order_price: this.encodeDecimal(\n newOrder.pendingTpslPair.tpslPair.tp.orderPrice,\n ),\n trigger_price: this.encodeDecimal(\n newOrder.pendingTpslPair.tpslPair.tp.triggerPrice,\n ),\n price_condition:\n newOrder.pendingTpslPair.tpslPair.tp.priceCondition,\n order_type:\n newOrder.pendingTpslPair.tpslPair.tp.orderType,\n }\n : null,\n sl: newOrder.pendingTpslPair.tpslPair.sl\n ? {\n order_price: this.encodeDecimal(\n newOrder.pendingTpslPair.tpslPair.sl.orderPrice,\n ),\n trigger_price: this.encodeDecimal(\n newOrder.pendingTpslPair.tpslPair.sl.triggerPrice,\n ),\n price_condition:\n newOrder.pendingTpslPair.tpslPair.sl.priceCondition,\n order_type:\n newOrder.pendingTpslPair.tpslPair.sl.orderType,\n }\n : null,\n },\n dynamic_size: newOrder.pendingTpslPair.dynamicSize,\n }\n : null,\n };\n });\n\n const msgInner = {\n market_id: marketMeta.id,\n orders: args,\n replace,\n sub_account_index: subAccountIndex ?? null,\n };\n\n const msg: RuntimeCall = {\n exchange: {\n user: {\n place_orders: msgInner,\n },\n },\n };\n\n return await this.submitTransaction(msg);\n }\n\n public async createPerpPositionTpsl(\n market: MarketName,\n tpslPair: TpslPair,\n size?: Decimal,\n subAccountIndex?: number,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n create_position_tpsl: {\n market_id: marketId,\n tpsl_pair: {\n tp: tpslPair.tp\n ? {\n order_price: this.encodeDecimal(tpslPair.tp.orderPrice),\n trigger_price: this.encodeDecimal(tpslPair.tp.triggerPrice),\n price_condition: tpslPair.tp.priceCondition,\n order_type: tpslPair.tp.orderType,\n }\n : null,\n sl: tpslPair.sl\n ? {\n order_price: this.encodeDecimal(tpslPair.sl.orderPrice),\n trigger_price: this.encodeDecimal(tpslPair.sl.triggerPrice),\n price_condition: tpslPair.sl.priceCondition,\n order_type: tpslPair.sl.orderType,\n }\n : null,\n },\n size: this.encodeDecimal(size),\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async amendOrders(\n market: MarketName,\n options: AmendOrderOptions[],\n subAccountIndex?: number,\n ) {\n const marketMeta = this.getMarketMeta(market);\n const args = options.map((option) => {\n return {\n cancel: {\n order_id: option.existingOrderId?.toString() ?? null,\n client_order_id: option.existingClientOrderId?.toString() ?? null,\n },\n place: {\n price: this.encodeDecimal(option.newOrderArgs.price),\n size: this.encodeDecimal(option.newOrderArgs.size),\n side: option.newOrderArgs.side,\n order_type: option.newOrderArgs.orderType,\n reduce_only: option.newOrderArgs.reduceOnly,\n client_order_id:\n option.newOrderArgs.clientOrderId?.toString() ?? null,\n pending_tpsl_pair: option.newOrderArgs.pendingTpslPair\n ? {\n tpsl_pair: {\n tp: option.newOrderArgs.pendingTpslPair.tpslPair.tp\n ? {\n order_price: this.encodeDecimal(\n option.newOrderArgs.pendingTpslPair.tpslPair.tp\n .orderPrice,\n ),\n trigger_price: this.encodeDecimal(\n option.newOrderArgs.pendingTpslPair.tpslPair.tp\n .triggerPrice,\n ),\n price_condition:\n option.newOrderArgs.pendingTpslPair.tpslPair.tp\n .priceCondition,\n order_type:\n option.newOrderArgs.pendingTpslPair.tpslPair.tp\n .orderType,\n }\n : null,\n sl: option.newOrderArgs.pendingTpslPair.tpslPair.sl\n ? {\n order_price: this.encodeDecimal(\n option.newOrderArgs.pendingTpslPair.tpslPair.sl\n .orderPrice,\n ),\n trigger_price: this.encodeDecimal(\n option.newOrderArgs.pendingTpslPair.tpslPair.sl\n .triggerPrice,\n ),\n price_condition:\n option.newOrderArgs.pendingTpslPair.tpslPair.sl\n .priceCondition,\n order_type:\n option.newOrderArgs.pendingTpslPair.tpslPair.sl\n .orderType,\n }\n : null,\n },\n dynamic_size: option.newOrderArgs.pendingTpslPair.dynamicSize,\n }\n : null,\n },\n };\n });\n\n const msgInner = {\n market_id: marketMeta.id,\n orders: args,\n sub_account_index: subAccountIndex ?? null,\n };\n\n const msg: RuntimeCall = {\n exchange: {\n user: {\n amend_orders: msgInner,\n },\n },\n };\n\n return await this.submitTransaction(msg);\n }\n\n public async cancelTriggerOrders(\n market: MarketName,\n triggerOrderIds: bigint[],\n subAccountIndex?: number,\n ) {\n const marketMeta = this.getMarketMeta(market);\n\n const msgInner = {\n market_id: marketMeta.id,\n trigger_order_ids: triggerOrderIds.map((id) => id.toString()),\n sub_account_index: subAccountIndex ?? null,\n };\n\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_trigger_orders: msgInner,\n },\n },\n });\n }\n\n public async cancelOrders(\n market: MarketName,\n options: CancelOrderOptions[],\n subAccountIndex?: number,\n ) {\n const marketMeta = this.getMarketMeta(market);\n\n const msgInner = {\n market_id: marketMeta.id,\n orders: options.map((option) => {\n return {\n order_id: option.orderId?.toString() ?? null,\n client_order_id: option.clientOrderId?.toString() ?? null,\n };\n }),\n sub_account_index: subAccountIndex ?? null,\n };\n\n const msg: RuntimeCall = {\n exchange: {\n user: {\n cancel_orders: msgInner,\n },\n },\n };\n\n return await this.submitTransaction(msg);\n }\n\n public async adminCancelOrders(\n address: Address,\n market: MarketName,\n orderId: string,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n cancel_orders: { cancels: [[marketId, orderId, address]] },\n },\n },\n });\n }\n\n public async adminCancelTriggerOrder(\n address: Address,\n market: MarketName,\n triggerOrderId: string,\n ) {\n const marketId = this.getMarketId(market);\n\n return await this.submitTransaction({\n exchange: {\n admin: {\n cancel_trigger_orders: {\n cancels: [[marketId, triggerOrderId, address]],\n },\n },\n },\n });\n }\n\n public async updateAdmin(adminType: AdminType, newAdmin: Address) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_admin: {\n admin_type: adminType,\n new_admin: newAdmin,\n },\n },\n },\n });\n }\n\n public async adminAddTradingCredits(address: Address, amount: Decimal) {\n return await this.submitTransaction({\n exchange: {\n keeper: {\n add_trading_credits: {\n user_address: address,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async adminRemoveTradingCredits(address: Address, amount: Decimal) {\n return await this.submitTransaction({\n exchange: {\n keeper: {\n remove_trading_credits: {\n user_address: address,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async adminSetCumulativeReferralRewards(\n address: Address,\n asset: AssetName,\n amount: Decimal,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n keeper: {\n set_cumulative_referral_rewards: {\n address,\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async adminUpdateUserFeeDiscountBps(\n address: Address,\n feeDiscountBps: number,\n ) {\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_user_fee_discount_bps: {\n address,\n fee_discount_bps: feeDiscountBps,\n },\n },\n },\n });\n }\n\n public async adminUpdateUserFeeTier(address: Address, feeTier: FeeTier) {\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_user_fee_tier: {\n address,\n fee_tier: feeTier,\n },\n },\n },\n });\n }\n\n public async cancelMarketOrders(\n market: MarketName,\n subAccountIndex?: number,\n ) {\n const meta = this.getMarketMeta(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_market_orders: {\n market_id: meta.id,\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async cancelAllOrders(subAccountIndex?: number) {\n const msgInner = {\n sub_account_index: subAccountIndex ?? null,\n };\n\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_all_orders: msgInner,\n },\n },\n });\n }\n\n public async updateOraclePrices(\n pricesToUpdate: OraclePriceUpdateArgs[],\n publishTimestamp?: number,\n ) {\n // set publish_timestamp to current timestamp if not provided\n const timestamp = publishTimestamp || Math.floor(Date.now() * 1000);\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_oracle_prices: {\n prices: await Promise.all(\n pricesToUpdate.map(async ({ asset, oraclePrice }) => ({\n asset_id: this.getAssetId(asset),\n oracle_price: this.encodeDecimal(oraclePrice),\n })),\n ),\n publish_timestamp: timestamp,\n },\n },\n },\n });\n }\n\n public async updateMarkPrices(\n pricesToUpdate: MarkPriceUpdateArgs[],\n publishTimestamp?: number,\n ) {\n // set publish_timestamp to current timestamp if not provided\n const timestamp = publishTimestamp || Math.floor(Date.now() * 1000);\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_mark_prices: {\n prices: await Promise.all(\n pricesToUpdate.map(\n async ({ market, medianCexPrice, diffEma }) => ({\n market_id: this.getMarketId(market),\n median_cex_price: this.encodeDecimal(medianCexPrice),\n diff_ema: this.encodeDecimal(diffEma),\n }),\n ),\n ),\n publish_timestamp: timestamp,\n },\n },\n },\n });\n }\n\n public async updateMaxLeverageForMarket(\n market: MarketName,\n maxLeverage: number,\n subAccountIndex?: number,\n ) {\n if (!Number.isInteger(maxLeverage)) {\n throw Error(\"Max leverage must be set to an integer\");\n }\n\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n update_max_leverage: {\n market_id: marketId,\n max_leverage: maxLeverage,\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async claimReferralRewards(asset: AssetName) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n claim_referral_rewards: {\n asset_id: assetId,\n },\n },\n },\n });\n }\n\n public async updatePremiumIndexes(markets: MarketName[]) {\n const marketIds = await Promise.all(\n markets.map(async (market) => {\n return this.getMarketId(market);\n }),\n );\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_premium_indexes: { market_ids: marketIds },\n },\n },\n });\n }\n\n public async executeTriggerOrders(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n public: {\n execute_trigger_orders: { market_id: marketId },\n },\n },\n });\n }\n\n public async createTwapOrder(\n market: MarketName,\n twapOrderArgs: NewTwapOrderArgs,\n subAccountIndex?: number,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n create_twap_order: {\n market_id: marketId,\n twap_order_args: {\n side: twapOrderArgs.side,\n total_size: this.encodeDecimal(twapOrderArgs.totalSize),\n reduce_only: twapOrderArgs.reduceOnly,\n total_duration_seconds: twapOrderArgs.totalDurationSeconds,\n },\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async executeTwapOrders(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n public: {\n execute_twap_orders: { market_id: marketId },\n },\n },\n });\n }\n\n public async cancelTwapOrder(\n market: MarketName,\n twapId: bigint,\n subAccountIndex?: number,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_twap_order: {\n market_id: marketId,\n twap_id: twapId.toString(),\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async activateTwapOrders(markets: MarketName[]) {\n const marketIds = markets.map((market) => this.getMarketId(market));\n return await this.submitTransaction({\n exchange: {\n public: {\n activate_twap_orders: { market_ids: marketIds },\n },\n },\n });\n }\n\n public async updateFunding(markets: MarketName[]) {\n const marketIds = await Promise.all(\n markets.map(async (market) => {\n return this.getMarketId(market);\n }),\n );\n return await this.submitTransaction({\n exchange: { keeper: { update_funding: { market_ids: marketIds } } },\n });\n }\n\n public async applyFunding(addresses: Address[]) {\n return await this.submitTransaction({\n exchange: {\n public: {\n apply_funding: {\n addresses: addresses,\n },\n },\n },\n });\n }\n\n public async accrueBorrowLendInterest() {\n return await this.submitTransaction({\n exchange: {\n public: {\n accrue_borrow_lend_interest: {},\n },\n },\n });\n }\n\n public async forceCancelOrders(address: Address) {\n return await this.submitTransaction({\n exchange: {\n public: {\n force_cancel_orders: {\n user_address: address,\n },\n },\n },\n });\n }\n\n public async liquidatePerpPositions(address: Address) {\n return await this.submitTransaction({\n exchange: {\n public: {\n liquidate_perp_positions: {\n address: address,\n },\n },\n },\n });\n }\n\n public async backstopLiquidatePerpPositions(\n address: Address,\n positions?: { market: MarketName; size: Decimal }[],\n subAccountIndex?: number,\n ) {\n const positionsWithIds = positions\n ? await Promise.all(\n positions.map(async ({ market, size }) => ({\n market_id: this.getMarketId(market),\n size: this.encodeDecimal(size),\n })),\n )\n : null;\n\n return await this.submitTransaction({\n exchange: {\n user: {\n backstop_liquidate_perp_positions: {\n address: address,\n positions: positionsWithIds,\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async liquidateBorrowLendLiability(\n address: Address,\n liabilityAsset: AssetName,\n collateralAsset: AssetName,\n liabilityAmount: Decimal,\n subAccountIndex?: number,\n ) {\n const liabilityAssetId = this.getAssetId(liabilityAsset);\n const collateralAssetId = this.getAssetId(collateralAsset);\n return await this.submitTransaction({\n exchange: {\n user: {\n liquidate_borrow_lend_liability: {\n liquidatee_address: address,\n liability_asset_id: liabilityAssetId,\n collateral_asset_id: collateralAssetId,\n liability_amount: this.encodeDecimal(liabilityAmount),\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async depositToUsdcPnlPool(amount: Decimal) {\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_to_pnl_pool: {\n usdc_amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async depositToInsuranceFund(amount: Decimal) {\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_to_insurance_fund: {\n usdc_amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async initAssetInfo(\n assetId: AssetId,\n assetName: AssetName,\n tokenId: TokenId | null,\n decimals: number,\n withdrawFee: Decimal,\n ) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n init_asset_info: {\n args: {\n asset_id: assetId,\n asset_name: assetName,\n token_id: tokenId,\n decimals: decimals,\n withdraw_fee: this.encodeDecimal(withdrawFee),\n },\n },\n },\n },\n });\n }\n\n public async updateAssetInfo(asset: AssetName, withdrawFee: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_asset_info: {\n args: {\n asset_id: assetId,\n withdraw_fee: this.encodeDecimal(withdrawFee),\n },\n },\n },\n },\n });\n }\n\n public async updateGlobalConfig(options: {\n maxOrdersPerUser?: number;\n maxTriggerOrdersPerUser?: number;\n maxOrdersPerBatchMsg?: number;\n maxTriggerOrdersToExecutePerMsg?: number;\n minNotionalTwapValue?: Decimal;\n minNotionalTwapValuePerOrder?: Decimal;\n twapExecutionIntervalSeconds?: number;\n depositLimitsPerUser?: [AssetId, Decimal][];\n whitelistedUsersForDeposit?: Address[];\n }) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_global_config: {\n args: {\n max_orders_per_user: options.maxOrdersPerUser ?? null,\n max_trigger_orders_per_user:\n options.maxTriggerOrdersPerUser ?? null,\n max_orders_per_batch_msg: options.maxOrdersPerBatchMsg ?? null,\n max_trigger_orders_to_execute_per_msg:\n options.maxTriggerOrdersToExecutePerMsg ?? null,\n min_notional_twap_value: this.encodeDecimal(\n options.minNotionalTwapValue,\n ),\n min_notional_twap_value_per_order: this.encodeDecimal(\n options.minNotionalTwapValuePerOrder,\n ),\n twap_execution_interval_seconds:\n options.twapExecutionIntervalSeconds ?? null,\n deposit_limits_per_user:\n options.depositLimitsPerUser?.map(([assetId, amount]) => [\n assetId,\n this.encodeDecimal(amount),\n ]) ?? null,\n whitelisted_users_for_deposit:\n options.whitelistedUsersForDeposit ?? null,\n },\n },\n },\n },\n });\n }\n\n public async createVault(\n name: string,\n description: string,\n leader: Address,\n depositAssets: AssetName[],\n withdrawAsset: AssetName,\n withdrawLockupPeriodHours: number,\n whitelistDeposits: boolean,\n profitSharePercentage: number,\n withdrawalFeeBps: number,\n depositLimit: Decimal,\n ) {\n const depositAssetIds = depositAssets.map((asset) =>\n this.getAssetId(asset),\n );\n const withdrawAssetId = this.getAssetId(withdrawAsset);\n return await this.submitTransaction({\n exchange: {\n user: {\n create_vault: {\n args: {\n name,\n description,\n leader,\n deposit_asset_ids: depositAssetIds,\n withdraw_asset_id: withdrawAssetId,\n withdraw_lockup_period_hours: withdrawLockupPeriodHours,\n whitelist_deposits: whitelistDeposits,\n profit_share_percentage: profitSharePercentage,\n withdrawal_fee_bps: withdrawalFeeBps,\n deposit_limit: this.encodeDecimal(depositLimit),\n },\n },\n },\n },\n });\n }\n\n public async initSpotMarket(\n marketId: MarketId,\n baseAssetId: AssetId,\n quoteAssetId: AssetId,\n baseMinLotSize: Decimal,\n quoteMinLotSize: Decimal,\n maxOrdersPerSide: number,\n maxOrdersPerUser: number,\n maxTriggerOrdersPerUser: number,\n takerFeesTenthBps: number[],\n makerFeesTenthBps: number[],\n maxOrderToTriggerPriceDeviationRatio: Decimal,\n name: string,\n ) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n init_spot_market: {\n args: {\n market_id: marketId,\n base_asset_id: baseAssetId,\n quote_asset_id: quoteAssetId,\n base_min_lot_size: this.encodeDecimal(baseMinLotSize),\n quote_min_lot_size: this.encodeDecimal(quoteMinLotSize),\n max_orders_per_side: maxOrdersPerSide,\n max_orders_per_user: maxOrdersPerUser,\n max_trigger_orders_per_user: maxTriggerOrdersPerUser,\n taker_fees_tenth_bps: takerFeesTenthBps,\n maker_fees_tenth_bps: makerFeesTenthBps,\n name: name,\n max_order_to_trigger_price_deviation_ratio: this.encodeDecimal(\n maxOrderToTriggerPriceDeviationRatio,\n ),\n },\n },\n },\n },\n });\n }\n\n public async updateSpotMarket(\n market: MarketName,\n options: {\n baseMinLotSize?: Decimal;\n quoteMinLotSize?: Decimal;\n maxOrdersPerSide?: number;\n maxOrdersPerUser?: number;\n maxTriggerOrdersPerUser?: number;\n takerFeesTenthBps?: number[];\n makerFeesTenthBps?: number[];\n maxOrderToTriggerPriceDeviationRatio?: Decimal;\n },\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_spot_market: {\n args: {\n market_id: marketId,\n base_min_lot_size: this.encodeDecimal(options.baseMinLotSize),\n quote_min_lot_size: this.encodeDecimal(options.quoteMinLotSize),\n max_orders_per_side: options.maxOrdersPerSide ?? null,\n max_orders_per_user: options.maxOrdersPerUser ?? null,\n max_trigger_orders_per_user:\n options.maxTriggerOrdersPerUser ?? null,\n taker_fees_tenth_bps: options.takerFeesTenthBps ?? null,\n maker_fees_tenth_bps: options.makerFeesTenthBps ?? null,\n max_order_to_trigger_price_deviation_ratio: this.encodeDecimal(\n options.maxOrderToTriggerPriceDeviationRatio,\n ),\n },\n },\n },\n },\n });\n }\n\n public async initPerpMarket(\n marketId: MarketId,\n baseAssetId: AssetId,\n name: string,\n tradingMode: string,\n minTickSize: Decimal,\n minLotSize: Decimal,\n maxOrdersPerSide: number,\n maxOrdersPerUser: number,\n maxTriggerOrdersPerUser: number,\n minInterestRateClamp: Decimal,\n maxInterestRateClamp: Decimal,\n minFundingRateClamp: Decimal,\n maxFundingRateClamp: Decimal,\n maxOiNotional: Decimal,\n maxOrderToMarkPriceDeviationRatio: Decimal,\n maxTriggerToComparisonPriceDeviationRatio: Decimal,\n maxOrderToTriggerPriceDeviationRatio: Decimal,\n impactMargin: Decimal,\n interestRate: Decimal,\n leverageTable: Record<string, number>,\n takerFeesTenthBps: number[],\n makerFeesTenthBps: number[],\n ) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n init_perp_market: {\n args: {\n market_id: marketId,\n base_asset_id: baseAssetId,\n name: name,\n trading_mode: tradingMode,\n min_tick_size: this.encodeDecimal(minTickSize),\n min_lot_size: this.encodeDecimal(minLotSize),\n max_orders_per_side: maxOrdersPerSide,\n max_orders_per_user: maxOrdersPerUser,\n max_trigger_orders_per_user: maxTriggerOrdersPerUser,\n min_interest_rate_clamp: this.encodeDecimal(minInterestRateClamp),\n max_interest_rate_clamp: this.encodeDecimal(maxInterestRateClamp),\n min_funding_rate_clamp: this.encodeDecimal(minFundingRateClamp),\n max_funding_rate_clamp: this.encodeDecimal(maxFundingRateClamp),\n max_oi_notional: this.encodeDecimal(maxOiNotional),\n max_order_to_mark_price_deviation_ratio: this.encodeDecimal(\n maxOrderToMarkPriceDeviationRatio,\n ),\n max_trigger_to_comparison_price_deviation_ratio:\n this.encodeDecimal(maxTriggerToComparisonPriceDeviationRatio),\n max_order_to_trigger_price_deviation_ratio: this.encodeDecimal(\n maxOrderToTriggerPriceDeviationRatio,\n ),\n impact_margin: this.encodeDecimal(impactMargin),\n interest_rate: this.encodeDecimal(interestRate),\n leverage_table_args: { table: leverageTable },\n taker_fees_tenth_bps: takerFeesTenthBps,\n maker_fees_tenth_bps: makerFeesTenthBps,\n },\n },\n },\n },\n });\n }\n\n public async updatePerpMarket(\n market: MarketName,\n options: {\n minTickSize?: Decimal;\n minLotSize?: Decimal;\n maxOrdersPerSide?: number;\n maxOrdersPerUser?: number;\n maxTriggerOrdersPerUser?: number;\n minInterestRateClamp?: Decimal;\n maxInterestRateClamp?: Decimal;\n minFundingRateClamp?: Decimal;\n maxFundingRateClamp?: Decimal;\n maxOiNotional?: Decimal;\n impactMargin?: Decimal;\n interestRate?: Decimal;\n takerFeesTenthBps?: number[];\n makerFeesTenthBps?: number[];\n maxOrderToMarkPriceDeviationRatio?: Decimal;\n maxTriggerToComparisonPriceDeviationRatio?: Decimal;\n maxOrderToTriggerPriceDeviationRatio?: Decimal;\n },\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_perp_market: {\n args: {\n market_id: marketId,\n min_tick_size: this.encodeDecimal(options.minTickSize),\n min_lot_size: this.encodeDecimal(options.minLotSize),\n max_orders_per_side: options.maxOrdersPerSide ?? null,\n max_orders_per_user: options.maxOrdersPerUser ?? null,\n max_trigger_orders_per_user:\n options.maxTriggerOrdersPerUser ?? null,\n min_interest_rate_clamp: this.encodeDecimal(\n options.minInterestRateClamp,\n ),\n max_interest_rate_clamp: this.encodeDecimal(\n options.maxInterestRateClamp,\n ),\n min_funding_rate_clamp: this.encodeDecimal(\n options.minFundingRateClamp,\n ),\n max_funding_rate_clamp: this.encodeDecimal(\n options.maxFundingRateClamp,\n ),\n max_oi_notional: this.encodeDecimal(options.maxOiNotional),\n impact_margin: this.encodeDecimal(options.impactMargin),\n interest_rate: this.encodeDecimal(options.interestRate),\n taker_fees_tenth_bps: options.takerFeesTenthBps ?? null,\n maker_fees_tenth_bps: options.makerFeesTenthBps ?? null,\n max_order_to_mark_price_deviation_ratio: this.encodeDecimal(\n options.maxOrderToMarkPriceDeviationRatio,\n ),\n max_trigger_to_comparison_price_deviation_ratio:\n this.encodeDecimal(\n options.maxTriggerToComparisonPriceDeviationRatio,\n ),\n max_order_to_trigger_price_deviation_ratio: this.encodeDecimal(\n options.maxOrderToTriggerPriceDeviationRatio,\n ),\n leverage_table_args: null,\n },\n },\n },\n },\n });\n }\n\n public async initBorrowLendPool(\n assetId: AssetId,\n optimalUtilisationRate: Decimal,\n minBorrowRate: Decimal,\n maxBorrowRate: Decimal,\n optimalBorrowRate: Decimal,\n assetWeight: Decimal,\n initialLiabilityWeight: Decimal,\n maintenanceLiabilityWeight: Decimal,\n depositLimit: Decimal,\n borrowLimit: Decimal,\n maxUtilizationRate: Decimal,\n liquidationTotalRewardRatio: Decimal,\n protocolRewardRatio: Decimal,\n liabilityLiquidationLimitRatio: Decimal,\n interestFeeTenthBps: number,\n ) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n init_borrow_lend_pool: {\n args: {\n asset_id: assetId,\n optimal_utilization_rate: this.encodeDecimal(\n optimalUtilisationRate,\n ),\n min_borrow_rate: this.encodeDecimal(minBorrowRate),\n max_borrow_rate: this.encodeDecimal(maxBorrowRate),\n optimal_borrow_rate: this.encodeDecimal(optimalBorrowRate),\n asset_weight: this.encodeDecimal(assetWeight),\n initial_liability_weight: this.encodeDecimal(\n initialLiabilityWeight,\n ),\n maintenance_liability_weight: this.encodeDecimal(\n maintenanceLiabilityWeight,\n ),\n deposit_limit: this.encodeDecimal(depositLimit),\n borrow_limit: this.encodeDecimal(borrowLimit),\n max_utilization_rate: this.encodeDecimal(maxUtilizationRate),\n liquidation_total_reward_ratio: this.encodeDecimal(\n liquidationTotalRewardRatio,\n ),\n protocol_reward_ratio: this.encodeDecimal(protocolRewardRatio),\n liability_liquidation_limit_ratio: this.encodeDecimal(\n liabilityLiquidationLimitRatio,\n ),\n interest_fee_tenth_bps: interestFeeTenthBps,\n },\n },\n },\n },\n });\n }\n\n public async updateBorrowLendPool(\n asset: AssetName,\n options: {\n optimalUtilizationRate?: Decimal;\n minBorrowRate?: Decimal;\n maxBorrowRate?: Decimal;\n optimalBorrowRate?: Decimal;\n assetWeight?: Decimal;\n initialLiabilityWeight?: Decimal;\n maintenanceLiabilityWeight?: Decimal;\n depositLimit?: Decimal;\n borrowLimit?: Decimal;\n maxUtilizationRate?: Decimal;\n liquidationTotalRewardRatio?: Decimal;\n protocolRewardRatio?: Decimal;\n liabilityLiquidationLimitRatio?: Decimal;\n interestFeeTenthBps?: number;\n },\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_borrow_lend_pool: {\n args: {\n asset_id: assetId,\n optimal_utilization_rate: this.encodeDecimal(\n options.optimalUtilizationRate,\n ),\n min_borrow_rate: this.encodeDecimal(options.minBorrowRate),\n max_borrow_rate: this.encodeDecimal(options.maxBorrowRate),\n optimal_borrow_rate: this.encodeDecimal(\n options.optimalBorrowRate,\n ),\n asset_weight: this.encodeDecimal(options.assetWeight),\n initial_liability_weight: this.encodeDecimal(\n options.initialLiabilityWeight,\n ),\n maintenance_liability_weight: this.encodeDecimal(\n options.maintenanceLiabilityWeight,\n ),\n deposit_limit: this.encodeDecimal(options.depositLimit),\n borrow_limit: this.encodeDecimal(options.borrowLimit),\n max_utilization_rate: this.encodeDecimal(\n options.maxUtilizationRate,\n ),\n liquidation_total_reward_ratio: this.encodeDecimal(\n options.liquidationTotalRewardRatio,\n ),\n protocol_reward_ratio: this.encodeDecimal(\n options.protocolRewardRatio,\n ),\n liability_liquidation_limit_ratio: this.encodeDecimal(\n options.liabilityLiquidationLimitRatio,\n ),\n interest_fee_tenth_bps: options.interestFeeTenthBps ?? null,\n },\n },\n },\n },\n });\n }\n\n public async updateLeverageTable(\n market: MarketName,\n leverageTable: Record<string, number>,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_perp_leverage_table: {\n market_id: marketId,\n args: { table: leverageTable },\n },\n },\n },\n });\n }\n\n public async createSubAccount(index: number) {\n return await this.submitTransaction({\n exchange: {\n user: {\n create_sub_account: {\n index,\n },\n },\n },\n });\n }\n\n public async transferSubAccount(\n subAccountIndex: number,\n toSubAccount: boolean,\n asset: AssetName,\n amount: Decimal,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n transfer_to_sub_account: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n sub_account_index: subAccountIndex,\n to_sub_account: toSubAccount,\n },\n },\n },\n });\n }\n\n public async delegateUser(delegate: Address, name: string) {\n return await this.submitTransaction({\n exchange: {\n user: {\n delegate_user: {\n delegate,\n name,\n },\n },\n },\n });\n }\n\n public async revokeDelegation(delegate: Address) {\n return await this.submitTransaction({\n exchange: {\n user: {\n revoke_delegation: {\n delegate,\n },\n },\n },\n });\n }\n\n public async vaultDelegateUser(\n vaultAddress: Address,\n delegate: Address,\n name: string,\n ) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n delegate_vault_user: {\n vault_address: vaultAddress,\n delegate,\n name,\n },\n },\n },\n });\n }\n\n public async vaultRevokeDelegation(vaultAddress: Address, delegate: Address) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n revoke_vault_delegation: {\n vault_address: vaultAddress,\n delegate,\n },\n },\n },\n });\n }\n\n public async adminPruneMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n prune_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminForceSettlePerpPosition(\n market: MarketName,\n usersToForceSettle: Address[],\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n force_settle_perp_position: {\n market_id: marketId,\n users: usersToForceSettle,\n },\n },\n },\n });\n }\n\n public async adminHaltPerpMarket(\n market: MarketName,\n settlementPrice: Decimal,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n halt_perp_market: {\n market_id: marketId,\n settlement_price: this.encodeDecimal(settlementPrice),\n },\n },\n },\n });\n }\n\n public async adminHaltSpotMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n halt_spot_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminUnhaltPerpMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n unhalt_perp_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminUnhaltSpotMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n unhalt_spot_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminHaltBorrowLendPool(asset: AssetName) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n halt_borrow_lend_pool: {\n asset_id: assetId,\n },\n },\n },\n });\n }\n\n public async adminUnhaltBorrowLendPool(asset: AssetName) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n unhalt_borrow_lend_pool: {\n asset_id: assetId,\n },\n },\n },\n });\n }\n\n public async adminForceRemoveDelegate(delegator: Address, delegate: Address) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n force_remove_delegate: {\n delegator,\n delegate,\n },\n },\n },\n });\n }\n\n // ============================================\n // Additional User Actions\n // ============================================\n\n public async settleFromPnlPool(subAccountIndex?: number) {\n return await this.submitTransaction({\n exchange: {\n user: {\n settle_from_pnl_pool: {\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async depositToTreasury(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_to_treasury: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async claimBorrowLendFees() {\n return await this.submitTransaction({\n exchange: {\n user: {\n claim_borrow_lend_fees: {},\n },\n },\n });\n }\n\n public async queueWithdrawal(vaultAddress: Address, shares: Decimal) {\n return await this.submitTransaction({\n exchange: {\n user: {\n queue_withdrawal: {\n vault_address: vaultAddress,\n shares: this.encodeDecimal(shares),\n },\n },\n },\n });\n }\n\n public async cancelQueuedWithdrawal(vaultAddress: Address) {\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_queued_withdrawal: {\n vault_address: vaultAddress,\n },\n },\n },\n });\n }\n\n public async forceWithdrawVault(vaultAddress: Address, shares: Decimal) {\n return await this.submitTransaction({\n exchange: {\n user: {\n force_withdraw_vault: {\n vault_address: vaultAddress,\n shares: this.encodeDecimal(shares),\n },\n },\n },\n });\n }\n\n // ============================================\n // Vault Actions\n // ============================================\n\n public async updateVaultConfig(\n vaultAddress: Address,\n options: {\n depositLimit?: Decimal;\n withdrawLockupPeriodHours?: number;\n profitSharePercentage?: number;\n },\n ) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n update_vault_config: {\n vault_address: vaultAddress,\n args: {\n deposit_limit: options.depositLimit\n ? this.encodeDecimal(options.depositLimit)\n : null,\n withdraw_lockup_period_hours:\n options.withdrawLockupPeriodHours ?? null,\n profit_share_percentage: options.profitSharePercentage ?? null,\n },\n },\n },\n },\n });\n }\n\n public async processWithdrawalQueue(vaultAddress: Address) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n process_withdrawal_queue: {\n vault_address: vaultAddress,\n },\n },\n },\n });\n }\n\n public async whitelistDepositor(vaultAddress: Address, userAddress: Address) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n whitelist_depositor: {\n vault_address: vaultAddress,\n user_address: userAddress,\n },\n },\n },\n });\n }\n\n public async unwhitelistDepositor(\n vaultAddress: Address,\n userAddress: Address,\n ) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n unwhitelist_depositor: {\n vault_address: vaultAddress,\n user_address: userAddress,\n },\n },\n },\n });\n }\n\n // ============================================\n // Additional Admin Actions\n // ============================================\n\n public async adminDeleteAsset(asset: AssetName) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: { delete_asset: { asset_id: assetId } },\n },\n });\n }\n\n public async adminDeleteMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n delete_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminCleanupUserMarketState(\n market: MarketName,\n users: Address[],\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n cleanup_user_market_state: {\n market_id: marketId,\n users,\n },\n },\n },\n });\n }\n\n public async adminUpdatePerpLiquidationConfig(options: {\n liquidationFee?: Decimal;\n liquidationIocBuffer?: Decimal;\n backstopLiquidationThreshold?: Decimal;\n liquidationProtocolRewardRatio?: Decimal;\n }) {\n const liquidationFee = options.liquidationFee\n ? this.encodeDecimal(options.liquidationFee)\n : null;\n const liquidationIocBuffer = options.liquidationIocBuffer\n ? this.encodeDecimal(options.liquidationIocBuffer)\n : null;\n const backstopLiquidationThreshold = options.backstopLiquidationThreshold\n ? this.encodeDecimal(options.backstopLiquidationThreshold)\n : null;\n const liquidationProtocolRewardRatio =\n options.liquidationProtocolRewardRatio\n ? this.encodeDecimal(options.liquidationProtocolRewardRatio)\n : null;\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_perp_liquidation_config: {\n args: {\n liquidation_fee: liquidationFee,\n liquidation_ioc_buffer: liquidationIocBuffer,\n backstop_liquidation_threshold: backstopLiquidationThreshold,\n liquidation_protocol_reward_ratio: liquidationProtocolRewardRatio,\n },\n },\n },\n },\n });\n }\n\n public async adminUpdateGlobalVaultConfig(options: {\n leaderMinimumHoldingPercentage?: number;\n creationFeeUsdc?: Decimal;\n minDepositValue?: Decimal;\n }) {\n const creationFeeUsdc = options.creationFeeUsdc\n ? this.encodeDecimal(options.creationFeeUsdc)\n : null;\n const minDepositValue = options.minDepositValue\n ? this.encodeDecimal(options.minDepositValue)\n : null;\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_global_vault_config: {\n args: {\n leader_minimum_holding_percentage:\n options.leaderMinimumHoldingPercentage ?? null,\n creation_fee_usdc: creationFeeUsdc,\n min_deposit_value: minDepositValue,\n },\n },\n },\n },\n });\n }\n\n public async adminWithdrawFromTreasury(\n asset: AssetName,\n amount: Decimal,\n to: Address,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n withdraw_from_treasury: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n to,\n },\n },\n },\n });\n }\n\n public async adminAutoDeleverage(options: {\n counterpartyA: Address;\n counterpartyASubAccountIndex?: number;\n counterpartyB: Address;\n counterpartyBSubAccountIndex?: number;\n market: MarketName;\n size?: Decimal;\n settlementPrice: Decimal;\n }) {\n const marketId = this.getMarketId(options.market);\n const size = this.encodeDecimal(options.size);\n return await this.submitTransaction({\n exchange: {\n admin: {\n auto_deleverage: {\n counterparty_a: options.counterpartyA,\n counterparty_a_sub_account_index:\n options.counterpartyASubAccountIndex ?? null,\n counterparty_b: options.counterpartyB,\n counterparty_b_sub_account_index:\n options.counterpartyBSubAccountIndex ?? null,\n market_id: marketId,\n size,\n settlement_price: this.encodeDecimal(options.settlementPrice),\n },\n },\n },\n });\n }\n\n public async adminDeposit(\n userAddress: Address,\n asset: AssetName,\n amount: Decimal,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n deposit: {\n user_address: userAddress,\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n // ============================================\n // Warp (Hyperlane) Actions\n // ============================================\n\n public async warpRegister(options: {\n admin: Address;\n remoteTokenId: string;\n localDecimals: number;\n remoteDecimals: number;\n ismThreshold: number;\n ismValidators: string[];\n remoteRouters: [number, string][];\n inboundTransferrableTokensLimit: string;\n inboundLimitReplenishmentPerSlot: string;\n outboundTransferrableTokensLimit: string;\n outboundLimitReplenishmentPerSlot: string;\n }) {\n return await this.submitTransaction({\n warp: {\n register: {\n admin: {\n InsecureOwner: options.admin,\n },\n token_source: {\n Synthetic: {\n remote_token_id: options.remoteTokenId,\n local_decimals: options.localDecimals,\n remote_decimals: options.remoteDecimals,\n },\n },\n ism: {\n MessageIdMultisig: {\n threshold: options.ismThreshold,\n validators: options.ismValidators,\n },\n },\n remote_routers: options.remoteRouters,\n inbound_transferrable_tokens_limit:\n options.inboundTransferrableTokensLimit,\n inbound_limit_replenishment_per_slot:\n options.inboundLimitReplenishmentPerSlot,\n outbound_transferrable_tokens_limit:\n options.outboundTransferrableTokensLimit,\n outbound_limit_replenishment_per_slot:\n options.outboundLimitReplenishmentPerSlot,\n },\n },\n });\n }\n\n public async warpUpdate(options: {\n warpRoute: string;\n admin?: Address;\n ismThreshold?: number;\n ismValidators?: string[];\n inboundTransferrableTokensLimit?: string;\n inboundLimitReplenishmentPerSlot?: string;\n outboundTransferrableTokensLimit?: string;\n outboundLimitReplenishmentPerSlot?: string;\n }) {\n return await this.submitTransaction({\n warp: {\n update: {\n warp_route: options.warpRoute,\n admin: options.admin ? { InsecureOwner: options.admin } : null,\n ism:\n options.ismThreshold != null && options.ismValidators != null\n ? {\n MessageIdMultisig: {\n threshold: options.ismThreshold,\n validators: options.ismValidators,\n },\n }\n : null,\n inbound_transferrable_tokens_limit:\n options.inboundTransferrableTokensLimit ?? null,\n inbound_limit_replenishment_per_slot:\n options.inboundLimitReplenishmentPerSlot ?? null,\n outbound_transferrable_tokens_limit:\n options.outboundTransferrableTokensLimit ?? null,\n outbound_limit_replenishment_per_slot:\n options.outboundLimitReplenishmentPerSlot ?? null,\n },\n },\n });\n }\n\n public async warpEnrollRemoteRouter(\n warpRoute: string,\n remoteDomain: number,\n remoteRouterAddress: string,\n ) {\n return await this.submitTransaction({\n warp: {\n enroll_remote_router: {\n warp_route: warpRoute,\n remote_domain: remoteDomain,\n remote_router_address: remoteRouterAddress,\n },\n },\n });\n }\n\n public async warpUnenrollRemoteRouter(\n warpRoute: string,\n remoteDomain: number,\n ) {\n return await this.submitTransaction({\n warp: {\n un_enroll_remote_router: {\n warp_route: warpRoute,\n remote_domain: remoteDomain,\n },\n },\n });\n }\n\n public async warpTransferRemote(options: {\n warpRoute: string;\n amount: number;\n destinationDomain: number;\n gasPaymentLimit: number;\n recipient: string;\n relayer?: { Standard?: string; Vm?: string };\n }) {\n return await this.submitTransaction({\n warp: {\n transfer_remote: {\n warp_route: options.warpRoute,\n amount: options.amount,\n destination_domain: options.destinationDomain,\n gas_payment_limit: options.gasPaymentLimit,\n recipient: options.recipient,\n relayer: options.relayer ?? null,\n },\n },\n });\n }\n\n // ============================================\n // Interchain Gas Paymaster Actions\n // ============================================\n\n public async setRelayerConfig(options: {\n domainOracleData: {\n domain: number;\n dataValue: { gasPrice: number; tokenExchangeRate: number };\n }[];\n domainDefaultGas: { domain: number; defaultGas: number }[];\n defaultGas: number;\n beneficiary?: string;\n }) {\n return await this.submitTransaction({\n interchain_gas_paymaster: {\n set_relayer_config: {\n domain_oracle_data: options.domainOracleData.map((d) => ({\n domain: d.domain,\n data_value: {\n gas_price: d.dataValue.gasPrice,\n token_exchange_rate: d.dataValue.tokenExchangeRate,\n },\n })),\n domain_default_gas: options.domainDefaultGas.map((d) => ({\n domain: d.domain,\n default_gas: d.defaultGas,\n })),\n default_gas: options.defaultGas,\n beneficiary: options.beneficiary ?? null,\n },\n },\n });\n }\n}\n\n// Factory function to create authenticated client (wallet required)\nasync function createAuthenticatedClient(\n endpoints: Endpoints,\n wallet: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n): Promise<AuthenticatedClient> {\n validateEndpoints(endpoints);\n console.debug(`Connecting to ${endpoints.rest}`);\n\n // This endpoint is ONLY used for Solana offchain authenticators (\"solana\", \"solanaSimple\").\n // Standard authenticator (\"standard\") uses \"/sequencer/txs\" internally via the inner StandardRollup.\n //\n // Endpoint routing by authenticator:\n // - \"standard\" → /sequencer/txs (Borsh-serialized, handled by inner StandardRollup)\n // - \"solana\" → /sequencer/solana_offchain_txs (JSON, signed with Solana spec preamble)\n // - \"solanaSimple\" → /sequencer/solana_offchain_txs (JSON, simple signature)\n const solanaEndpoint = \"/sequencer/solana_offchain_txs\";\n const rollupConfig: {\n url: string;\n getSerializer: (schema: RollupSchema) => WasmSerializer;\n context?: StandardRollupContext;\n } = {\n url: endpoints.rest,\n getSerializer: (schema: RollupSchema) => new WasmSerializer(schema),\n };\n\n const authenticator =\n txOpts?.authenticator ?? DEFAULT_TRANSACTION_OPTS.authenticator;\n const rollup = await createSolanaSignableRollup<RuntimeCall>(\n rollupConfig,\n solanaEndpoint,\n );\n const client = new AuthenticatedClient(\n endpoints,\n rollup,\n wallet,\n delegatorAddress,\n authenticator,\n );\n await client.initializeExchangeInfo();\n\n // Configure rollup with transaction defaults\n const chainId = await client.getChainId();\n\n rollupConfig.context = {\n defaultTxDetails: {\n max_priority_fee_bips:\n txOpts?.maxPriorityFeeBps ?? DEFAULT_TRANSACTION_OPTS.maxPriorityFeeBps,\n max_fee: txOpts?.maxFee ?? DEFAULT_TRANSACTION_OPTS.maxFee,\n gas_limit: txOpts?.gasLimit ?? DEFAULT_TRANSACTION_OPTS.gasLimit,\n chain_id: chainId,\n },\n };\n const rollupWithContext = await createSolanaSignableRollup<RuntimeCall>(\n rollupConfig,\n solanaEndpoint,\n );\n // Replace rollup with configured version after initialization\n // This is safe because we're in the factory function that creates the client\n client.rollup = rollupWithContext;\n\n return client;\n}\n\n// Client namespace - factory methods that return the correct type based on parameters\n// This provides a clean API: Client.fromNetwork() works for both authenticated and read-only\nexport namespace Client {\n // Overload: with wallet → returns AuthenticatedClient\n export function fromEndpoints(\n endpoints: Endpoints,\n wallet: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n ): Promise<AuthenticatedClient>;\n // Overload: without wallet → returns ReadOnlyClient\n export function fromEndpoints(endpoints: Endpoints): Promise<ReadOnlyClient>;\n // Implementation\n export async function fromEndpoints(\n endpoints: Endpoints,\n wallet?: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n ): Promise<ReadOnlyClient | AuthenticatedClient> {\n if (wallet) {\n return await createAuthenticatedClient(\n endpoints,\n wallet,\n delegatorAddress,\n txOpts,\n );\n }\n return await ReadOnlyClient.fromEndpoints(endpoints);\n }\n\n // Overload: with wallet → returns AuthenticatedClient\n export function fromNetwork(\n network: Network,\n wallet: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n ): Promise<AuthenticatedClient>;\n // Overload: without wallet → returns ReadOnlyClient\n export function fromNetwork(network: Network): Promise<ReadOnlyClient>;\n // Implementation\n export async function fromNetwork(\n network: Network,\n wallet?: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n ): Promise<ReadOnlyClient | AuthenticatedClient> {\n if (!isNetwork(network)) {\n throw new Error(`Invalid network: ${network}`);\n }\n if (wallet) {\n return await createAuthenticatedClient(\n NETWORKS[network],\n wallet,\n delegatorAddress,\n txOpts,\n );\n }\n return await ReadOnlyClient.fromNetwork(network);\n }\n}\n",
13
13
  "import type { Network } from \"./types\";\n\nexport interface Endpoints {\n rest: string;\n ws?: string;\n}\n\nexport const NETWORKS: Record<Network, Endpoints> = {\n localnet: {\n rest: \"http://127.0.0.1:12346\",\n ws: \"ws://127.0.0.1:3000/ws\",\n },\n staging: {\n rest: \"https://rollup.staging.bullet.xyz\",\n ws: \"wss://ws.staging.bullet.xyz/ws\",\n },\n testnet: {\n rest: \"https://rollup.testnet.bullet.xyz\",\n ws: \"wss://ws.testnet.bullet.xyz/ws\",\n },\n mainnet: {\n rest: \"https://rollup.mainnet.bullet.xyz\",\n ws: \"wss://ws.mainnet.bullet.xyz/ws\",\n },\n} as const;\n\nexport const GLOBAL_DEFAULT_MAX_LEVERAGE = 1000;\n",
14
14
  "import { SovereignError } from \"@sovereign-sdk/web3\";\n\n/**\n * Structured error details from rollup responses.\n *\n * Standard fields: domain, code, message\n * All other fields are dynamic and specific to each error type.\n */\nexport interface RollupErrorDetails {\n /** Error domain/category (e.g., 'risk_engine', 'account', 'order') */\n domain: string;\n\n /** Specific error code (e.g., 'stale_price', 'insufficient_margin') */\n code: string;\n\n /** Detailed error message from the rollup (thiserror Display) */\n message: string;\n\n /**\n * Additional dynamic fields specific to each error type.\n *\n * Examples:\n * - StalePrice: id, price_kind, last_update_timestamp, current_timestamp\n * - InsufficientMargin: address, available_margin, required_margin, margin_type\n * - OrderNotFound: order_id, market_id, market_type\n */\n [key: string]: unknown;\n}\n\n/**\n * Error class for Bullet SDK transaction execution errors.\n *\n * Wraps errors from `rollup.call()` and provides structured rollup module error details.\n * HTTP/API errors from data fetching are not wrapped and bubble up as Sovereign SDK errors.\n *\n * @example\n * ```typescript\n * try {\n * await client.placeOrders(\"BTC-USD\", [...]);\n * } catch (error) {\n * if (isBulletError(error)) {\n * console.log(error.code); // 'stale_price'\n * console.log(error.domain); // 'risk_engine'\n * console.log(error.message); // 'Stale price - mark 1, last_update: 0, current: 1762425013275'\n *\n * // Access error-specific fields via details\n * console.log(error.details.id);\n * console.log(error.details.price_kind);\n * console.log(error.details.current_timestamp);\n *\n * // Type-safe error handling\n * if (error.domain === 'account' && error.code === 'insufficient_margin') {\n * const { available_margin, required_margin } = error.details;\n * showDepositModal(Number(required_margin) - Number(available_margin));\n * }\n * }\n * }\n * ```\n */\nexport class BulletError extends SovereignError {\n /** Specific error code (e.g., 'stale_price', 'insufficient_margin') */\n readonly code: string;\n\n /** Error domain/category (e.g., 'risk_engine', 'account', 'order') */\n readonly domain: string;\n\n /** HTTP status code */\n readonly status?: number;\n\n /**\n * Structured error details from the rollup.\n * Contains all error-specific fields.\n * For ModuleError format: has domain and code.\n * For non-ModuleError format: just contains the original error details.\n */\n readonly details: RollupErrorDetails | Record<string, unknown>;\n\n /** Original error that caused this */\n readonly cause?: Error;\n\n private constructor(options: {\n code: string;\n domain: string;\n message: string;\n status?: number;\n details: RollupErrorDetails | Record<string, unknown>;\n cause?: Error;\n }) {\n super(options.message);\n this.code = options.code;\n this.domain = options.domain;\n this.status = options.status;\n this.details = options.details;\n this.cause = options.cause;\n this.name = \"BulletError\";\n\n // Maintain proper stack trace\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, BulletError);\n }\n }\n\n /**\n * Creates a BulletError from a Sovereign SDK transaction error.\n *\n * Only use this for errors from `rollup.call()` which contain structured\n * rollup module error details. HTTP/API errors should bubble up naturally.\n *\n * @param error - Error from rollup.call() transaction execution\n * @returns A properly structured BulletError\n */\n static from(error: unknown): BulletError {\n const err = error as Record<string, unknown>;\n const status = err?.status as number | undefined;\n\n // Extract structured error from Sovereign SDK\n // Format: { status: 400, error: { status, message, details: { domain, code, message, ... } }, headers }\n const rollupError = err?.error as Record<string, unknown> | undefined;\n const details = rollupError?.details as RollupErrorDetails | undefined;\n\n // Check for structured rollup error with code/domain\n if (details?.code && details?.domain) {\n // ModuleError always has a message\n const message = details.message || \"Unknown module error\";\n\n return new BulletError({\n code: details.code,\n domain: details.domain,\n message,\n status: (rollupError?.status as number | undefined) || status,\n details,\n cause: error instanceof Error ? error : undefined,\n });\n }\n\n // Fallback: extract message from rollupError.details.message if available\n // This happens when details exists but doesn't have code/domain (non-exchange-module errors,\n // e.g. hyperlane warp module doesn't use ModuleError format)\n const message =\n ((details as Record<string, unknown>)?.message as string | undefined) ||\n (rollupError?.message as string | undefined) ||\n (error instanceof Error ? error.message : undefined) ||\n \"Unknown error\";\n\n return new BulletError({\n code: \"unknown\",\n domain: \"unknown\",\n message,\n status,\n details: details || {},\n cause: error instanceof Error ? error : undefined,\n });\n }\n\n /**\n * Serializes the error to JSON (safe for React state, Redux, etc.)\n */\n toJSON() {\n return {\n name: this.name,\n code: this.code,\n domain: this.domain,\n message: this.message,\n status: this.status,\n details: this.details,\n stack: this.stack,\n };\n }\n\n /**\n * Returns a developer-friendly string representation.\n *\n * @example\n * \"[risk_engine:stale_price] Stale price - mark 1, last_update: 0, current: 1762425013275\"\n */\n toString(): string {\n return `[${this.domain}:${this.code}] ${this.message}`;\n }\n}\n\n/**\n * Type guard to check if an error is a BulletError.\n *\n * @example\n * ```typescript\n * catch (error) {\n * if (isBulletError(error)) {\n * console.log(error.code, error.domain, error.details);\n * }\n * }\n * ```\n */\nexport function isBulletError(error: unknown): error is BulletError {\n return error instanceof BulletError;\n}\n\n/**\n * Helper to create type-safe error handlers for specific error types.\n *\n * @example\n * ```typescript\n * const handleStalePrice = createErrorHandler(\n * 'risk_engine',\n * 'stale_price',\n * (error) => {\n * // Access fields via error.details\n * console.log(`Stale price for ${error.details.id}`);\n * console.log(`Price kind: ${error.details.price_kind}`);\n * retryWithFreshData();\n * }\n * );\n *\n * try {\n * await client.placeOrder(...);\n * } catch (error) {\n * if (isBulletError(error)) {\n * handleStalePrice(error);\n * }\n * }\n * ```\n */\nexport function createErrorHandler(\n domain: string,\n code: string,\n handler: (error: BulletError) => void,\n): (error: BulletError) => boolean {\n return (error: BulletError): boolean => {\n if (error.domain === domain && error.code === code) {\n handler(error);\n return true;\n }\n return false;\n };\n}\n\n/**\n * Type guard with specific domain/code check.\n * Useful for narrowing error types in conditional logic.\n *\n * @example\n * ```typescript\n * if (isErrorType(error, 'risk_engine', 'stale_price')) {\n * // error is BulletError with domain='risk_engine' and code='stale_price'\n * const { id, price_kind } = error.details;\n * }\n * ```\n */\nexport function isErrorType(\n error: unknown,\n domain: string,\n code: string,\n): error is BulletError {\n return isBulletError(error) && error.domain === domain && error.code === code;\n}\n\n/**\n * Custom AbortError class that works in both browser and Node.js environments.\n * Matches the behavior of DOMException with name \"AbortError\" for consistent error handling.\n *\n * This is the standard approach for isomorphic SDKs - using a custom error class\n * rather than runtime feature detection ensures predictable behavior across all environments.\n */\nexport class AbortError extends Error {\n constructor(message = \"Operation aborted\") {\n super(message);\n this.name = \"AbortError\";\n // Maintain proper stack trace\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, AbortError);\n }\n }\n}\n\n/**\n * Type guard to check if an error is an AbortError.\n * Works with both custom AbortError and DOMException (browser).\n *\n * @example\n * ```typescript\n * try {\n * await client.subscribeOrderbook(market, signal);\n * } catch (error) {\n * if (isAbortError(error)) {\n * // Expected cancellation, ignore\n * return;\n * }\n * // Handle other errors\n * }\n * ```\n */\nexport function isAbortError(error: unknown): error is AbortError | Error {\n if (error instanceof AbortError) {\n return true;\n }\n // Also check for DOMException in browser environments\n if (typeof DOMException !== \"undefined\" && error instanceof DOMException) {\n return error.name === \"AbortError\";\n }\n // Check for Error with AbortError name (Node.js or custom implementations)\n if (error instanceof Error) {\n return error.name === \"AbortError\";\n }\n return false;\n}\n",
15
15
  "import bs58 from \"bs58\";\nimport Decimal from \"decimal.js\";\nimport { type Endpoints, NETWORKS } from \"./constants\";\nimport type { Network } from \"./types\";\n\n// Browser compatible - does not use Buffer\nexport function bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\nexport function hexToBytes(hex: string): Uint8Array {\n const matches = hex.match(/.{1,2}/g) || [];\n return new Uint8Array(matches.map((byte) => Number.parseInt(byte, 16)));\n}\n\nexport function hexToBase64(hex: string): string {\n const bytes = hexToBytes(hex);\n // Convert bytes to binary string\n const binString = String.fromCharCode(...bytes);\n // Use btoa for base64 encoding\n return btoa(binString);\n}\n\nexport function hexToBase58(hex: string): string {\n const bytes = hexToBytes(hex);\n return bs58.encode(bytes);\n}\n\nexport function base58ToBytes(base58: string): Uint8Array {\n return bs58.decode(base58);\n}\n\nexport function base58ToHex(base58: string): string {\n const bytes = base58ToBytes(base58);\n return bytesToHex(bytes);\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function isNode(): boolean {\n return !!(typeof process !== \"undefined\" && process.versions?.node);\n}\n\nexport function serializeVersioned<T>(versioned: {\n version: string;\n data: T;\n}): unknown {\n return serialize({ [versioned.version]: versioned.data });\n}\n\n// This is needed because wasm-bindgen is not able to serialize Decimal, BigInt, and it expects IndexMap to be a JS Object (not Map)\nexport function serialize<T>(value: T): T {\n // Handle null/undefined\n if (value == null) {\n return value;\n }\n\n // Handle Decimal.js values\n if (Decimal.isDecimal(value)) {\n return value.toFixed() as T;\n }\n\n // Handle BigInt\n if (typeof value === \"bigint\") {\n // TODO: Fix - have to use number for now because sov universal serializer does not allow u64 serialization from string\n if (value > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw new Error(`BigInt value ${value} is too large for safe conversion`);\n }\n return Number(value) as T;\n }\n\n // Handle Sets\n if (value instanceof Set) {\n return Array.from(value).map(serialize) as T;\n }\n\n // Handle Maps\n if (value instanceof Map) {\n return new Map(\n Array.from(value.entries()).map(([k, v]) => [serialize(k), serialize(v)]),\n ) as T;\n }\n\n // Handle Arrays\n if (Array.isArray(value)) {\n return value.map(serialize) as T;\n }\n\n // Handle Objects\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([k, v]) => [serialize(k), serialize(v)]),\n ) as T;\n }\n\n // Return primitives as-is\n return value;\n}\n\nexport const isNetwork = (value: string): value is Network => {\n return value in NETWORKS;\n};\n\nexport const isValidHttpUrl = (url: string): boolean => {\n try {\n const u = new URL(url);\n return u.protocol === \"http:\" || u.protocol === \"https:\";\n } catch {\n return false;\n }\n};\n\nexport const isValidWsUrl = (url: string): boolean => {\n try {\n const u = new URL(url);\n return u.protocol === \"ws:\" || u.protocol === \"wss:\";\n } catch {\n return false;\n }\n};\n\nexport const validateEndpoints = (endpoints: Endpoints): void => {\n if (!isValidHttpUrl(endpoints.rest)) {\n throw new Error(`Invalid REST URL: ${endpoints.rest}`);\n }\n if (endpoints.ws && !isValidWsUrl(endpoints.ws)) {\n throw new Error(`Invalid WebSocket URL: ${endpoints.ws}`);\n }\n};\n\n/**\n * Converts human-readable token amount to native units (scaled by decimals)\n * @param amount - Human-readable token amount (e.g., 1000 for 1k SOL, 1.5 for 1.5 SOL)\n * @param decimals - Token decimals (e.g., 9 for SOL, 6 for USDC, 8 for BTC, 18 for ETH)\n * @returns Native token amount as BigInt\n * @example\n * toNativeUnits(1000, 9) // 1000 SOL = 1000000000000n\n * toNativeUnits(100, 6) // 100 USDC = 100000000n\n * toNativeUnits(1.5, 9) // 1.5 SOL = 1500000000n\n */\nexport function toNativeUnits(amount: number, decimals: number): bigint {\n return BigInt(new Decimal(amount).mul(Decimal.pow(10, decimals)).toFixed(0));\n}\n\nexport function fromNativeUnits(amount: bigint, decimals: number): Decimal {\n return new Decimal(amount.toString()).div(Decimal.pow(10, decimals));\n}\n",
@@ -18,14 +18,14 @@
18
18
  "import { z } from \"zod\";\nimport { AssetId, DecimalSchema } from \".\";\n\n/**\n * Zod 4: WebSocket message schemas with rich metadata\n */\n\nconst Topic = z\n .union([\n z.string().regex(/^orderbook\\.[0-9]+\\.[0-9]+$/),\n z.string().regex(/^trade\\.[0-9]+$/),\n ])\n .describe(\n \"WebSocket subscription topic (orderbook.{marketId}.{assetId} or trade.{assetId})\",\n );\n\nconst MessageType = z\n .enum([\"snapshot\", \"delta\"])\n .describe(\n \"Message type: snapshot (full state) or delta (incremental update)\",\n );\n\nconst WsMessage = <T extends z.ZodTypeAny>(data: T) =>\n z\n .object({\n topic: Topic,\n type: MessageType,\n ts: z.number().describe(\"Server timestamp in milliseconds\"),\n data: data,\n })\n .describe(\"Generic WebSocket message wrapper\");\n\nconst WebSocketResponse = z\n .object({\n success: z.boolean().describe(\"Whether the operation succeeded\"),\n ret_msg: z.string().describe(\"Human-readable response message\"),\n conn_id: z.string().describe(\"Connection identifier\"),\n op: z\n .string()\n .describe(\"Operation type (subscribe, unsubscribe, ping, etc.)\"),\n })\n .describe(\"WebSocket control message response\");\n\nconst OrderbookDelta = z\n .array(z.tuple([z.string(), DecimalSchema]))\n .describe(\"Array of [price, size] tuples representing orderbook levels\");\n\nconst OrderbookUpdate = z\n .object({\n s: AssetId.describe(\"Asset ID for this orderbook\"),\n b: OrderbookDelta.describe(\"Bid side updates\"),\n a: OrderbookDelta.describe(\"Ask side updates\"),\n u: z.number().describe(\"Update sequence number for delta ordering\"),\n })\n .describe(\"Orderbook snapshot or delta update\");\n\nexport const WsResponseSchemas = {\n WebSocketResponse: WebSocketResponse,\n OrderbookResponse: WsMessage(OrderbookUpdate),\n};\n\nexport type WebSocketResponse = z.infer<\n typeof WsResponseSchemas.WebSocketResponse\n>;\nexport type OrderbookResponse = z.infer<\n typeof WsResponseSchemas.OrderbookResponse\n>;\nexport type OrderbookUpdate = z.infer<typeof OrderbookUpdate>;\n",
19
19
  "import Decimal from \"decimal.js\";\nimport { z } from \"zod\";\n\n/**\n * Zod 4: Type-safe numeric bounds with const assertions\n */\nconst I16_MAX = 32767;\nconst I16_MIN = -32768;\nconst I64_MAX = 9223372036854775807n; // 2^63 - 1\nconst I64_MIN = -9223372036854775808n; // -2^63\nconst U8_MAX = 255;\nconst U16_MAX = 65535;\nconst U32_MAX = 4294967295;\nconst U64_MAX = 18446744073709551615n; // 2^64 - 1\nconst U128_MAX = 340282366920938463463374607431768211455n; // 2^128 - 1\n\n/**\n * Zod 4: Primitive integer schemas with rich metadata\n * Using z.pipe() for explicit conversions (14x faster than z.coerce)\n */\nexport const I64Schema = z\n .union([z.string(), z.number(), z.bigint()])\n .transform((val) => BigInt(val))\n .pipe(z.bigint().min(I64_MIN).max(I64_MAX))\n .describe(\"Signed 64-bit integer\");\n\nexport const U8Schema = z\n .union([z.string(), z.number()])\n .transform((val) => Number(val))\n .pipe(z.number().int().min(0).max(U8_MAX))\n .describe(\"Unsigned 8-bit integer (0-255)\");\n\nexport const U16Schema = z\n .union([z.string(), z.number()])\n .transform((val) => Number(val))\n .pipe(z.number().int().min(0).max(U16_MAX))\n .describe(\"Unsigned 16-bit integer (0-65535)\");\n\nexport const I16Schema = z\n .union([z.string(), z.number()])\n .transform((val) => Number(val))\n .pipe(z.number().int().min(I16_MIN).max(I16_MAX))\n .describe(\"Signed 16-bit integer (-32768-32767)\");\n\nexport const U32Schema = z\n .union([z.string(), z.number()])\n .transform((val) => Number(val))\n .pipe(z.number().int().min(0).max(U32_MAX))\n .describe(\"Unsigned 32-bit integer\");\n\nexport const U64Schema = z\n .union([z.string(), z.number(), z.bigint()])\n .transform((val) => BigInt(val))\n .pipe(z.bigint().min(0n).max(U64_MAX))\n .describe(\"Unsigned 64-bit integer\");\n\nexport const U128Schema = z\n .union([z.string(), z.number(), z.bigint()])\n .transform((val) => BigInt(val))\n .pipe(z.bigint().min(0n).max(U128_MAX))\n .describe(\"Unsigned 128-bit integer for large amounts\");\n\n/**\n * Zod 4: High-precision decimal schema\n * Accepts string or number, returns Decimal.js instance\n */\nexport const DecimalSchema = z\n .union([z.string(), z.number()])\n .transform((val, ctx) => {\n try {\n return new Decimal(val);\n } catch (_error) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Invalid decimal value: ${val}`,\n });\n return z.NEVER;\n }\n })\n .describe(\"High-precision decimal number using Decimal.js\");\n\n/**\n * Zod 4: Solana address validation with rich metadata\n */\nexport const Base58Address = z\n .string()\n .pipe(\n z.string().regex(/^[1-9A-HJ-NP-Za-km-z]{32,44}$/, {\n error: \"Invalid Base58 address format\",\n }),\n )\n .describe(\"Solana Base58-encoded public key address (32-44 characters)\");\n\n/**\n * Zod 4: Domain schemas with descriptive metadata\n * Note: Using type aliases instead of .brand() to maintain backwards compatibility\n * For full type safety, consider using .brand() after migrating existing code\n */\nexport const AssetId = U16Schema.describe(\n \"Unique identifier for a trading asset\",\n);\n\nexport const MarketId = U16Schema.describe(\n \"Unique identifier for a trading market\",\n);\n\nexport const OrderId = U64Schema.describe(\n \"Unique identifier for an order in the system\",\n);\n\nexport const TradeId = U64Schema.describe(\n \"Unique identifier for an executed trade\",\n);\n\nexport const ClientOrderId = U64Schema.describe(\n \"Client-provided order identifier for idempotency\",\n);\n\nexport const TriggerOrderId = U64Schema.describe(\n \"Unique identifier for a trigger/conditional order\",\n);\n\nexport const TwapId = U64Schema.describe(\"Unique identifier for a TWAP order\");\n\nexport const Amount = U128Schema.describe(\n \"Token amount in smallest unit (e.g., lamports for SOL)\",\n);\n\nexport const UnixTimestampMicros = I64Schema.describe(\n \"Unix timestamp in microseconds since epoch\",\n);\n\n/**\n * Zod 4: Type-safe map builder for JSON-serialized Maps\n * Converts object representation to native Map with typed keys\n *\n * @example\n * const MarketMap = createJsonMap(MarketId, MarketInfo);\n * // Type: Map<number & Brand<\"MarketId\">, MarketInfo>\n */\nexport const createJsonMap = <K extends z.ZodTypeAny, V extends z.ZodTypeAny>(\n keySchema: K,\n valueSchema: V,\n options?: {\n description?: string;\n example?: Record<string, unknown>;\n },\n) => {\n const schema = z\n .record(z.string(), valueSchema)\n .transform(\n (obj): Map<z.infer<K>, z.infer<V>> =>\n new Map(Object.entries(obj).map(([k, v]) => [keySchema.parse(k), v])),\n );\n\n if (options?.description) {\n schema.describe(options.description);\n }\n\n return schema;\n};\n\n/**\n * Zod 4: Type-safe set builder for JSON-serialized Sets (BTreeSet)\n * Converts array representation to native Set with typed elements\n *\n * @example\n * const AssetIdSet = createJsonSet(AssetId);\n * // Type: Set<number>\n *\n * const AddressSet = createJsonSet(Base58Address);\n * // Type: Set<string>\n */\nexport const createJsonSet = <V extends z.ZodTypeAny>(\n valueSchema: V,\n options?: {\n description?: string;\n example?: unknown[];\n },\n) => {\n const schema = z\n .array(valueSchema)\n .transform((arr): Set<z.infer<V>> => new Set(arr));\n\n if (options?.description) {\n schema.describe(options.description);\n }\n\n return schema;\n};\n\n/**\n * Zod 4: Schema registry for centralized validation and JSON Schema generation\n * Enables runtime introspection and API documentation generation\n */\nexport const PrimitiveSchemas = {\n I16: I16Schema,\n I64: I64Schema,\n U8: U8Schema,\n U16: U16Schema,\n U32: U32Schema,\n U64: U64Schema,\n U128: U128Schema,\n Decimal: DecimalSchema,\n Base58Address,\n} as const;\n\nexport const DomainSchemas = {\n AssetId,\n MarketId,\n OrderId,\n TradeId,\n ClientOrderId,\n TriggerOrderId,\n TwapId,\n Amount,\n UnixTimestampMicros,\n} as const;\n",
20
20
  "import { EventEmitter } from \"eventemitter3\";\nimport { AbortError } from \"./error\";\nimport { Orderbook } from \"./orderbook\";\nimport type { MarketId } from \"./types\";\nimport { WsResponseSchemas } from \"./zod-types/ws\";\n\n/**\n * Helper: Convert EventEmitter.once() to Promise with AbortSignal support\n * This follows the standard pattern for async generators with EventEmitter\n * and AbortSignal as recommended in TypeScript/JavaScript best practices.\n */\nfunction onceWithSignal<T>(\n emitter: EventEmitter,\n event: string,\n signal?: AbortSignal,\n): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n if (signal?.aborted) {\n reject(new AbortError());\n return;\n }\n\n let settled = false;\n\n const cleanup = () => {\n // Remove listener (safe even if once() already removed it)\n emitter.removeListener(event, listener);\n // Remove abort handler (safe with { once: true } but ensures cleanup)\n if (signal) {\n signal.removeEventListener(\"abort\", abortHandler);\n }\n };\n\n const listener = (value: T) => {\n if (settled) return; // Guard against race conditions\n settled = true;\n cleanup();\n resolve(value);\n };\n\n const abortHandler = () => {\n if (settled) return; // Guard against race conditions\n settled = true;\n cleanup();\n reject(new AbortError());\n };\n\n emitter.once(event, listener);\n\n if (signal) {\n signal.addEventListener(\"abort\", abortHandler, { once: true });\n }\n });\n}\n\nexport class WebSocketManager {\n private socket: WebSocket | null = null;\n private orderbooks: Map<MarketId, Orderbook> = new Map();\n private isConnected = false;\n private heartbeatInterval: NodeJS.Timeout | null = null;\n private lastUpdateIds: Map<MarketId, number> = new Map();\n private url: string;\n private reconnectAttempts = 0;\n private readonly maxReconnectAttempts = 5;\n private readonly reconnectDelay = 1000;\n private eventEmitter = new EventEmitter();\n private disposed = false;\n\n constructor(url: string) {\n this.url = url;\n }\n\n private async connect(): Promise<void> {\n if (this.disposed) {\n throw new Error(\"WebSocketManager has been disposed\");\n }\n\n if (this.socket?.readyState === WebSocket.OPEN) {\n return;\n }\n\n // Close existing socket if any\n if (this.socket) {\n this.socket.close();\n this.socket = null;\n }\n\n const { promise, resolve, reject } = Promise.withResolvers<void>();\n const timeout = setTimeout(() => {\n this.socket?.close();\n reject(new Error(\"Connection timeout\"));\n }, 10000);\n\n this.socket = new WebSocket(this.url);\n\n this.socket.onopen = () => {\n clearTimeout(timeout);\n this.isConnected = true;\n this.reconnectAttempts = 0;\n this.startHeartbeat();\n resolve();\n };\n\n this.socket.onerror = (err) => {\n clearTimeout(timeout);\n console.error(\"WebSocket error:\", err);\n reject(err);\n };\n\n this.socket.onclose = () => {\n clearTimeout(timeout);\n this.isConnected = false;\n this.stopHeartbeat();\n // Only auto-reconnect if not disposed and not already reconnecting\n if (\n !this.disposed &&\n this.reconnectAttempts < this.maxReconnectAttempts\n ) {\n this.handleReconnect();\n }\n };\n\n this.socket.onmessage = (data) => this.handleMessage(data.data);\n\n return promise;\n }\n\n private async handleReconnect() {\n // Don't reconnect if disposed\n if (this.disposed) {\n return;\n }\n\n if (this.reconnectAttempts >= this.maxReconnectAttempts) {\n console.error(\"Max reconnection attempts reached\");\n return;\n }\n\n this.reconnectAttempts++;\n const delay = this.reconnectDelay * 2 ** (this.reconnectAttempts - 1);\n\n console.info(`Attempting to reconnect in ${delay}ms...`);\n await new Promise((resolve) => setTimeout(resolve, delay));\n\n // Check again after delay (might have been disposed during wait)\n if (this.disposed) {\n return;\n }\n\n try {\n await this.connect();\n // Resubscribe to existing orderbooks\n for (const assetId of this.orderbooks.keys()) {\n this.sendSubscription(assetId);\n }\n } catch (error) {\n console.error(\"Reconnection failed:\", error);\n }\n }\n\n private handleMessage(data: MessageEvent) {\n let jsonData: unknown;\n try {\n jsonData = JSON.parse(data.toString());\n } catch (error) {\n console.error(\"Failed to parse WebSocket message:\", error);\n return;\n }\n\n // Fast path: Check if it's a control message (has 'op' field)\n if (typeof jsonData === \"object\" && jsonData !== null && \"op\" in jsonData) {\n const baseResponse =\n WsResponseSchemas.WebSocketResponse.safeParse(jsonData);\n if (baseResponse.success && !baseResponse.data.success) {\n console.error(\"WebSocket error:\", baseResponse.data.ret_msg);\n }\n return;\n }\n\n // Parse orderbook update\n const orderbookResponse =\n WsResponseSchemas.OrderbookResponse.safeParse(jsonData);\n if (!orderbookResponse.success) {\n console.error(\n \"Failed to parse orderbook message:\",\n jsonData,\n orderbookResponse.error,\n );\n return;\n }\n\n const message = orderbookResponse.data;\n const marketId = message.data.s;\n const updateId = message.data.u;\n const lastUpdateId = this.lastUpdateIds.get(marketId) ?? 0;\n\n // Skip stale updates\n if (updateId <= lastUpdateId) {\n return;\n }\n\n this.lastUpdateIds.set(marketId, updateId);\n\n // Handle snapshot or delta\n if (message.type === \"snapshot\") {\n this.orderbooks.set(marketId, new Orderbook(marketId, message.data));\n } else {\n // Delta update\n let orderbook = this.orderbooks.get(marketId);\n if (!orderbook) {\n orderbook = new Orderbook(marketId);\n this.orderbooks.set(marketId, orderbook);\n }\n orderbook.applyDelta(message.data);\n }\n\n // Update timestamp and emit event\n const orderbook = this.orderbooks.get(marketId);\n if (orderbook) {\n orderbook.setLastUpdated(message.ts);\n this.eventEmitter.emit(`orderbookUpdated-${marketId}`);\n }\n }\n\n private startHeartbeat() {\n this.stopHeartbeat();\n this.heartbeatInterval = setInterval(() => {\n if (this.isConnected) {\n this.sendMessage(JSON.stringify({ op: \"ping\" }));\n }\n }, 30000);\n }\n\n private stopHeartbeat() {\n if (this.heartbeatInterval) {\n clearInterval(this.heartbeatInterval);\n this.heartbeatInterval = null;\n }\n }\n\n private sendSubscription(marketId: MarketId) {\n this.sendMessage(\n JSON.stringify({ op: \"subscribe\", args: [`orderbook.None.${marketId}`] }),\n );\n }\n\n public sendMessage(message: string) {\n if (this.disposed) {\n throw new Error(\"WebSocketManager has been disposed\");\n }\n if (!this.isConnected || !this.socket) {\n throw new Error(\"WebSocket is not connected\");\n }\n this.socket.send(message);\n }\n\n /**\n * Dispose of all resources: close WebSocket, stop heartbeat, remove listeners, clear Maps\n */\n public dispose(): void {\n if (this.disposed) {\n return;\n }\n\n this.disposed = true;\n this.stopHeartbeat();\n\n if (this.socket) {\n // Remove event handlers to prevent reconnection attempts\n this.socket.onopen = null;\n this.socket.onerror = null;\n this.socket.onclose = null;\n this.socket.onmessage = null;\n\n // Close the connection if open or connecting\n if (\n this.socket.readyState === WebSocket.OPEN ||\n this.socket.readyState === WebSocket.CONNECTING\n ) {\n this.socket.close();\n }\n this.socket = null;\n }\n\n this.eventEmitter.removeAllListeners();\n this.orderbooks.clear();\n this.lastUpdateIds.clear();\n this.isConnected = false;\n this.reconnectAttempts = 0;\n }\n\n public async *subscribeOrderbook(\n marketId: MarketId,\n signal?: AbortSignal,\n ): AsyncIterable<Orderbook> {\n if (signal?.aborted) {\n throw new AbortError();\n }\n\n await this.connect();\n this.sendSubscription(marketId);\n\n const eventName = `orderbookUpdated-${marketId}`;\n\n try {\n while (true) {\n // Wait for next orderbook update (with abort support)\n await onceWithSignal(this.eventEmitter, eventName, signal);\n\n // Get the updated orderbook\n const orderbook = this.orderbooks.get(marketId);\n if (!orderbook) {\n throw new Error(`Orderbook for market ${marketId} not found`);\n }\n\n yield orderbook;\n }\n } finally {\n await this.unsubscribeOrderbook(marketId);\n this.eventEmitter.removeAllListeners(eventName);\n }\n }\n\n public async unsubscribeOrderbook(marketId: MarketId): Promise<void> {\n try {\n this.sendMessage(\n JSON.stringify({\n op: \"unsubscribe\",\n args: [`orderbook.None.${marketId}`],\n }),\n );\n } catch (error) {\n // Ignore errors if already disposed or disconnected\n if (this.disposed || !this.isConnected) {\n return;\n }\n throw error;\n }\n }\n}\n",
21
- "import { z } from \"zod\";\nimport type {\n MarketKind,\n OrderType,\n Side,\n TriggerDirection,\n TriggerPriceCondition,\n} from \"../types\";\nimport {\n Amount,\n AssetId,\n Base58Address,\n ClientOrderId,\n createJsonMap,\n createJsonSet,\n DecimalSchema,\n I16Schema,\n I64Schema,\n MarketId,\n OrderId,\n TradeId,\n TriggerOrderId,\n TwapId,\n U8Schema,\n U16Schema,\n U32Schema,\n U64Schema,\n UnixTimestampMicros,\n} from \".\";\n\n// Zod 4 Best Practice: Use z.literal() with arrays for cleaner enum definitions\nconst MARKET_KINDS = [\"perp\", \"spot\"] as const satisfies readonly MarketKind[];\nconst SIDES = [\"bid\", \"ask\"] as const satisfies readonly Side[];\nconst TRIGGER_DIRECTIONS = [\n \"greater_than_or_equal\",\n \"less_than_or_equal\",\n] as const satisfies readonly TriggerDirection[];\nconst TRIGGER_PRICE_CONDITIONS = [\n \"mark\",\n \"oracle\",\n \"last_trade\",\n] as const satisfies readonly TriggerPriceCondition[];\nconst ORDER_TYPES = [\n \"limit\",\n \"post_only\",\n \"fill_or_kill\",\n \"immediate_or_cancel\",\n \"post_only_slide\",\n \"post_only_front\",\n] as const satisfies readonly OrderType[];\n\n// Base response schema builder\nconst createBaseResponse = <T extends z.ZodTypeAny>(schema: T) => schema;\n\n// Helper for versioned types with proper type inference\n// Helper for versioned V0 type with discriminated output\nconst VersionedV0 = <V0 extends z.ZodTypeAny>(schema: V0) =>\n z.object({ V0: schema }).transform((d) => ({\n version: \"V0\" as const,\n data: (d as { V0: z.output<V0> }).V0,\n }));\n\nconst VersionedV1 = <V1 extends z.ZodTypeAny>(schema: V1) =>\n z.object({ V1: schema }).transform((d) => ({\n version: \"V1\" as const,\n data: (d as { V1: z.output<V1> }).V1,\n }));\n\n// Helper for versioned types with proper type inference\n// Not needed right now because we've fully migrated ExchangeInfo to V1\nconst _VersionedV1V0 = <\n V0 extends z.ZodTypeAny,\n V1 extends z.ZodTypeAny,\n>(schemas: {\n V0: V0;\n V1: V1;\n}) =>\n z.union([\n z.object({ V0: schemas.V0 }).transform((d) => ({\n version: \"V0\" as const,\n data: (d as { V0: z.output<V0> }).V0,\n })),\n z.object({ V1: schemas.V1 }).transform((d) => ({\n version: \"V1\" as const,\n data: (d as { V1: z.output<V1> }).V1,\n })),\n ]);\n\n// Generic response schemas\nexport const StateResponseSchemas = {\n RollupSchema: <T extends z.ZodTypeAny>(valueSchema: T) =>\n createBaseResponse(z.object({ schema: valueSchema })),\n\n StateValue: <T extends z.ZodTypeAny>(valueSchema: T) =>\n createBaseResponse(z.object({ value: valueSchema.nullable() })),\n\n CustomRouteValue: <T extends z.ZodTypeAny>(valueSchema: T) =>\n createBaseResponse(valueSchema),\n\n StateMapElement: <K extends z.ZodTypeAny, V extends z.ZodTypeAny>(\n keySchema: K,\n valueSchema: V,\n ) =>\n createBaseResponse(\n z.object({\n key: keySchema,\n value: valueSchema.nullable(),\n }),\n ),\n\n StateVecElement: <T extends z.ZodTypeAny>(valueSchema: T) =>\n createBaseResponse(\n z.object({\n index: z.number(),\n value: valueSchema.nullable(),\n }),\n ),\n} as const;\n\nexport const BaseResponseSchemas = {\n CoinsResponse: createBaseResponse(\n z.object({\n amount: Amount,\n token_id: z.string(),\n }),\n ),\n BatchSequencerResponse: createBaseResponse(\n z.object({\n da_height: z.number(),\n num_txs: z.number(),\n }),\n ),\n SequencerResponse: createBaseResponse(\n z.object({\n id: z.string(),\n status: z.string(),\n }),\n ),\n} as const;\n\n// Price and size\nconst PriceLevelL2 = z.tuple([DecimalSchema, DecimalSchema]);\n\nconst Position = z.object({\n size: DecimalSchema,\n cost_of_trades: DecimalSchema,\n realized_pnl: DecimalSchema,\n cached_mark_price: DecimalSchema,\n last_accum_funding_applied_per_lot: z.tuple([\n DecimalSchema,\n UnixTimestampMicros,\n ]),\n funding_payments_on_side: DecimalSchema,\n funding_payments_on_position: DecimalSchema,\n});\n\nconst BorrowLendRateConfig = z.object({\n optimal_utilization_rate: DecimalSchema,\n min_borrow_rate: DecimalSchema,\n optimal_borrow_rate: DecimalSchema,\n max_borrow_rate: DecimalSchema,\n});\n\nconst BorrowLendRiskConfig = z.object({\n liquidation_total_reward_ratio: DecimalSchema,\n liability_liquidation_limit_ratio: DecimalSchema,\n asset_weight: DecimalSchema,\n initial_liability_weight: DecimalSchema,\n maintenance_liability_weight: DecimalSchema,\n protocol_reward_ratio: DecimalSchema,\n});\n\nconst PerpLiquidationConfig = z.object({\n liquidation_ioc_buffer: DecimalSchema,\n backstop_liquidation_threshold: DecimalSchema,\n liquidation_fee: DecimalSchema,\n liquidation_protocol_reward_ratio: DecimalSchema,\n});\n\nconst Balance = z.object({\n asset: DecimalSchema,\n liability: DecimalSchema,\n});\n\nconst CrossBalances = z.object({\n balances: createJsonMap(AssetId, Balance),\n unrealized_loss_borrow: DecimalSchema,\n unsettled_perp_profit: DecimalSchema,\n trading_credits: DecimalSchema,\n});\n\nconst Tpsl = z.object({\n order_price: DecimalSchema,\n trigger_price: DecimalSchema,\n price_condition: z.enum(TRIGGER_PRICE_CONDITIONS),\n order_type: z.enum(ORDER_TYPES),\n});\n\nconst TpslPair = z.object({\n tp: Tpsl.nullable(),\n sl: Tpsl.nullable(),\n});\n\nconst PendingTpslPair = z.object({\n tpsl_pair: TpslPair,\n dynamic_size: z.boolean(),\n});\n\nconst PerpOrder = z.object({\n side: z.enum(SIDES),\n market_id: MarketId,\n order_id: OrderId,\n client_order_id: ClientOrderId.nullable(),\n price: DecimalSchema,\n remaining_size: DecimalSchema,\n reduce_only: z.boolean(),\n filled_size: DecimalSchema,\n filled_cot: DecimalSchema,\n owner: Base58Address,\n reserved_pending_tpsl_pair_ids: z.string().nullable(),\n});\n\nconst SpotOrder = z.object({\n side: z.enum(SIDES),\n market_id: MarketId,\n order_id: OrderId,\n quote_asset_id: AssetId,\n base_asset_id: AssetId,\n client_order_id: ClientOrderId.nullable(),\n quote_lots: DecimalSchema,\n remaining_base_lots: DecimalSchema,\n filled_base_lots: DecimalSchema,\n filled_cot: DecimalSchema,\n owner: Base58Address,\n});\n\nconst Order = z.union([PerpOrder, SpotOrder]);\n\nconst TriggerOrder = z.object({\n side: z.enum(SIDES),\n market_id: MarketId,\n trigger_order_id: TriggerOrderId,\n order_price: DecimalSchema,\n trigger_price: DecimalSchema,\n trigger_direction: z.enum(TRIGGER_DIRECTIONS),\n price_condition: z.enum(TRIGGER_PRICE_CONDITIONS),\n size: DecimalSchema.nullable(),\n order_type: z.enum(ORDER_TYPES),\n owner: Base58Address,\n last_update_timestamp: UnixTimestampMicros,\n linked_trigger_order_id: TriggerOrderId.nullable(),\n});\n\nconst RewardVariant = z.enum([\"referral\", \"liquidity\"]);\nconst MarketTradingStatus = z.enum([\"active\", \"halted\", \"cleaning\", \"cleaned\"]);\nconst FeeTier = z.enum([\"tier0\", \"tier1\", \"tier2\", \"tier3\", \"tier4\"]);\nconst TradingMode = z.enum([\"iso\", \"cross\", \"none\"]);\nconst PerpLedger = z.object({\n trading_mode: TradingMode,\n order_ids: z.array(OrderId),\n trigger_order_ids: z.array(TriggerOrderId),\n position: Position,\n user_selected_max_leverage: U16Schema,\n notional_open_orders: DecimalSchema,\n twap_ids: z.array(TwapId),\n open_twap_lots: DecimalSchema,\n});\n\nconst SpotLedger = z.object({\n order_ids: z.array(OrderId),\n trigger_order_ids: z.array(TriggerOrderId),\n twap_ids: z.array(TwapId),\n});\n\nconst Balances = z.object({\n cross: CrossBalances,\n iso: createJsonMap(MarketId, DecimalSchema),\n spot: createJsonMap(AssetId, DecimalSchema),\n});\n\nconst RewardsInfo = z.object({\n cumulative_amount: DecimalSchema,\n total_claimed_amount: DecimalSchema,\n});\n\nconst Twap = z.object({\n side: z.enum(SIDES),\n market_id: MarketId,\n twap_id: TwapId,\n total_orders: U32Schema,\n total_size: DecimalSchema,\n total_duration_seconds: U64Schema,\n executed_size: DecimalSchema,\n executed_orders: U32Schema,\n cost_of_trade: DecimalSchema,\n reduce_only: z.boolean(),\n owner: Base58Address,\n});\n\nconst OrdersLedger = z.object({\n client_order_ids: createJsonMap(ClientOrderId, OrderId),\n perp_orders: createJsonMap(OrderId, PerpOrder),\n perp_trigger_orders: createJsonMap(TriggerOrderId, TriggerOrder),\n perp_pending_tpsl_pairs: createJsonMap(z.string(), PendingTpslPair),\n spot_orders: createJsonMap(OrderId, SpotOrder),\n spot_trigger_orders: createJsonMap(TriggerOrderId, TriggerOrder),\n twaps: createJsonMap(TwapId, Twap),\n});\n\nconst TriggerNodesStore = z.object({\n inactive: createJsonMap(\n z.string(),\n createJsonMap(z.string(), z.any()), // TriggerNodesPriceMap<S>\n ),\n active: z.array(z.any()), // VecDeque<TriggerNode<S>>\n});\n\nconst ActiveTwap = z.object({\n twap_id: U64Schema,\n remaining_orders: U32Schema,\n owner: Base58Address,\n});\n\nconst TwapNode = z.object({\n twap_id: U64Schema,\n owner: Base58Address,\n});\n\nconst TwapNodesStore = z.object({\n twaps: z.array(ActiveTwap),\n last_execution_time: I64Schema,\n execution_queue: z.array(TwapNode),\n});\n\nconst PriceLevel = z.object({\n nodes: z.array(\n z.object({\n order_id: OrderId,\n owner: Base58Address,\n }),\n ),\n total_size: DecimalSchema,\n});\n\nconst OraclePrice = z.object({\n price: DecimalSchema,\n last_update_timestamp: UnixTimestampMicros.nullable(),\n});\n\nconst MarkPrice = z.object({\n price: DecimalSchema,\n last_oracle_diff_ema: DecimalSchema,\n last_median_cex_price: DecimalSchema,\n last_update_timestamp: UnixTimestampMicros.nullable(),\n});\n\nconst TimeWeightedPremiumIndex = z.object({\n weighted_premium_sum: DecimalSchema,\n duration_sum: U64Schema,\n last_update_timestamp: UnixTimestampMicros.nullable(),\n});\n\nconst FundingConfig = z.object({\n interest_rate: DecimalSchema,\n min_interest_rate_clamp: DecimalSchema,\n max_interest_rate_clamp: DecimalSchema,\n min_funding_rate_clamp: DecimalSchema,\n max_funding_rate_clamp: DecimalSchema,\n});\n\nconst FundingMeta = z.object({\n rate: DecimalSchema,\n accum_per_lot: DecimalSchema,\n last_update_timestamp: UnixTimestampMicros,\n config: FundingConfig,\n});\n\nconst PerpPrice = z.object({\n market_id: MarketId,\n mark_price: MarkPrice,\n accum_premium_index: TimeWeightedPremiumIndex,\n funding_meta: FundingMeta,\n});\n\nconst PricingEngine = z.object({\n pricing_frequency_seconds: U32Schema,\n relaxed_pricing_frequency_seconds: U32Schema,\n oracle_pricing: createJsonMap(AssetId, OraclePrice),\n perp_pricing: createJsonMap(MarketId, PerpPrice),\n});\n\nconst LeverageTable = z.object({\n tiers: createJsonMap(\n z.string(),\n z.object({\n max_leverage: U16Schema,\n mmr: DecimalSchema,\n maintenance_amount: DecimalSchema,\n }),\n ),\n});\n\nconst MarginConfig = z.object({\n perp_liquidation_config: PerpLiquidationConfig,\n perp_leverage_tables: createJsonMap(MarketId, LeverageTable),\n borrow_lend_risk_configs: createJsonMap(AssetId, BorrowLendRiskConfig),\n});\n\nconst GlobalConfig = z.object({\n max_orders_per_user: U16Schema,\n max_trigger_orders_per_user: U16Schema,\n max_orders_per_batch_msg: U16Schema,\n max_trigger_orders_to_execute_per_msg: U16Schema,\n min_notional_twap_value: DecimalSchema,\n min_notional_twap_value_per_order: DecimalSchema,\n twap_execution_interval_seconds: U64Schema,\n user_deposit_limits_per_asset: createJsonMap(AssetId, DecimalSchema),\n whitelisted_users_for_deposit: createJsonSet(Base58Address),\n});\n\nconst AdminRegistry = z.object({\n protocol: Base58Address,\n funding: Base58Address,\n pricing: Base58Address,\n fee_tier: Base58Address,\n credits: Base58Address,\n referrals: Base58Address,\n});\n\nconst AssetInfo = z.object({\n id: AssetId,\n name: z.string(),\n token_id: z.string().nullable(),\n decimals: U8Schema,\n withdraw_fee: DecimalSchema,\n});\n\nconst MarketInfo = z.object({\n id: MarketId,\n kind: z.enum(MARKET_KINDS),\n base_asset_id: AssetId,\n name: z.string(),\n trading_mode: TradingMode,\n});\n\nconst VaultWithdrawal = z.object({\n user: Base58Address,\n shares: DecimalSchema,\n timestamp: UnixTimestampMicros,\n});\n\nconst VaultInfo = z.object({\n leader: Base58Address,\n name: z.string(),\n description: z.string(),\n deposit_asset_ids: z.array(AssetId),\n withdraw_asset_id: AssetId,\n deposit_limit: DecimalSchema,\n leader_minimum_holding_percentage: U8Schema,\n withdraw_lockup_period_hours: U8Schema,\n profit_share_percentage: U8Schema,\n withdrawal_fee_bps: U8Schema,\n total_shares: DecimalSchema,\n high_watermark: DecimalSchema,\n queued_withdrawals: z.array(VaultWithdrawal),\n whitelist_deposits: z.boolean(),\n whitelisted_depositors: z.array(Base58Address),\n});\n\nconst GlobalVaultConfig = z.object({\n leader_minimum_holding_percentage: U8Schema,\n creation_fee_usdc: DecimalSchema,\n min_deposit_value: DecimalSchema,\n});\n\nconst VaultRegistry = z.object({\n vaults: createJsonMap(Base58Address, VaultInfo),\n config: GlobalVaultConfig,\n depositor_state: createJsonMap(\n Base58Address,\n createJsonMap(Base58Address, DecimalSchema),\n ),\n});\n\nconst UsdcPnlPool = z.object({\n amount: DecimalSchema,\n trading_credits: DecimalSchema,\n orphaned_trading_credits: DecimalSchema,\n external_deposits: createJsonMap(Base58Address, DecimalSchema),\n token_holder: z.string(),\n});\n\nconst UsdcInsuranceFund = z.object({\n amount: DecimalSchema,\n external_deposits: createJsonMap(Base58Address, DecimalSchema),\n minimum_usdc_token_amount: DecimalSchema,\n token_holder: z.string(),\n});\n\nconst BorrowLendPool = z.object({\n asset_id: AssetId,\n is_active: z.boolean(),\n last_update_timestamp: UnixTimestampMicros,\n rate_config: BorrowLendRateConfig,\n deposit_limit: DecimalSchema,\n borrow_limit: DecimalSchema,\n max_utilization_rate: DecimalSchema,\n available_amount: DecimalSchema,\n borrowed_amount: DecimalSchema,\n cumulative_deposit_rate: DecimalSchema,\n cumulative_borrow_rate: DecimalSchema,\n accumulated_protocol_fees: DecimalSchema,\n unclaimed_protocol_fees: DecimalSchema,\n interest_fee_tenth_bps: U16Schema,\n});\n\nconst CrossAssets = z.object({\n usdc_pnl_pool: UsdcPnlPool,\n usdc_insurance_fund: UsdcInsuranceFund,\n borrow_lend_deposit_vault: z.string(),\n borrow_lend_pools: createJsonMap(AssetId, BorrowLendPool),\n});\n\nconst IsoAssets = z.object({\n usdc_deposit_vault: z.string(),\n usdc_insurance_fund: UsdcInsuranceFund,\n});\n\nconst PerpMarketConfig = z.object({\n min_tick_size: DecimalSchema,\n min_lot_size: DecimalSchema,\n max_oi_notional: DecimalSchema,\n impact_margin: DecimalSchema,\n max_orders_per_side: U16Schema,\n max_orders_per_user: U16Schema,\n max_trigger_orders_per_user: U16Schema,\n taker_fees_tenth_bps: z.array(I16Schema),\n maker_fees_tenth_bps: z.array(I16Schema),\n max_order_to_mark_price_deviation_ratio: DecimalSchema,\n max_trigger_to_comparison_price_deviation_ratio: DecimalSchema,\n max_order_to_trigger_price_deviation_ratio: DecimalSchema,\n});\n\nconst SpotMarketConfig = z.object({\n base_min_lot_size: DecimalSchema,\n quote_min_lot_size: DecimalSchema,\n max_orders_per_side: U16Schema,\n max_orders_per_user: U16Schema,\n max_trigger_orders_per_user: U16Schema,\n taker_fees_tenth_bps: z.array(I16Schema),\n maker_fees_tenth_bps: z.array(I16Schema),\n max_order_to_trigger_price_deviation_ratio: DecimalSchema,\n});\n\n// Main schemas\nexport const Schemas = {\n DummyValue: z.number(),\n\n ExchangeInfoV1: z.object({\n global_config: GlobalConfig,\n admins: AdminRegistry,\n assets: createJsonMap(AssetId, AssetInfo),\n markets: createJsonMap(MarketId, MarketInfo),\n vaults: VaultRegistry,\n }),\n\n ExchangeAssetsV0: z.object({\n cross_assets: CrossAssets,\n iso_assets: createJsonMap(MarketId, IsoAssets),\n spot_collateral_vault: z.string(),\n treasury: z.string(),\n }),\n\n OrderbookL2: z.object({\n market_id: MarketId,\n bids: z.array(PriceLevelL2),\n asks: z.array(PriceLevelL2),\n }),\n\n UserAccount: z.object({\n account_variant: z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"master\"),\n sub_account_indices: z.array(U8Schema),\n }),\n z.object({ type: z.literal(\"sub\") }),\n z.object({ type: z.literal(\"vault\") }),\n z.object({ type: z.literal(\"protocol_vault\") }),\n ]),\n address: Base58Address,\n fee_tier: FeeTier,\n fee_discount_bps: U16Schema,\n balances: Balances,\n rewards: createJsonMap(AssetId, createJsonMap(RewardVariant, RewardsInfo)),\n perp_ledgers: createJsonMap(MarketId, PerpLedger),\n spot_ledgers: createJsonMap(MarketId, SpotLedger),\n orders_ledger: OrdersLedger,\n }),\n\n UserAccountConfigV0: z.object({\n delegates: createJsonMap(Base58Address, z.string()),\n }),\n\n RiskEngineV0: z.object({\n pricing_engine: PricingEngine,\n margin_config: MarginConfig,\n }),\n\n PerpMarketV0: z.object({\n market_id: MarketId,\n trading_status: MarketTradingStatus,\n config: PerpMarketConfig,\n current_open_interest_lots: DecimalSchema,\n last_trade_price: DecimalSchema.nullable(),\n orderbook: z.object({\n bids: createJsonMap(z.string(), PriceLevel),\n asks: createJsonMap(z.string(), PriceLevel),\n }),\n trigger_nodes_store: TriggerNodesStore,\n twap_nodes_store: TwapNodesStore,\n }),\n\n PerpMarketConfig: PerpMarketConfig,\n\n SpotMarketV0: z.object({\n market_id: MarketId,\n trading_status: MarketTradingStatus,\n base_asset_id: AssetId,\n quote_asset_id: AssetId,\n config: SpotMarketConfig,\n last_trade_price: DecimalSchema.nullable(),\n orderbook: z.object({\n bids: createJsonMap(z.string(), PriceLevel),\n asks: createJsonMap(z.string(), PriceLevel),\n }),\n trigger_nodes_store: TriggerNodesStore,\n }),\n\n SpotMarketConfig: SpotMarketConfig,\n\n ExecutionIdsV0: z.object({\n last_order_id: OrderId,\n last_trigger_order_id: TriggerOrderId,\n last_trade_id: TradeId,\n }),\n AccountAddresses: z.object({\n addresses: z.array(Base58Address),\n total: z.number(),\n next_offset: z.number().nullable(),\n }),\n} as const;\n\n// Response schemas\nexport const ResponseSchemas = {\n DummyValue: StateResponseSchemas.StateValue(Schemas.DummyValue),\n Order: StateResponseSchemas.StateMapElement(OrderId, Order),\n ExchangeInfo: StateResponseSchemas.StateValue(\n VersionedV1(Schemas.ExchangeInfoV1),\n ),\n ExchangeAssets: StateResponseSchemas.StateValue(\n VersionedV0(Schemas.ExchangeAssetsV0),\n ),\n RiskEngine: StateResponseSchemas.StateValue(\n VersionedV0(Schemas.RiskEngineV0),\n ),\n ExecutionIds: StateResponseSchemas.StateValue(\n VersionedV0(Schemas.ExecutionIdsV0),\n ),\n OrderbookL2: createBaseResponse(\n z.object({\n market_id: MarketId,\n orderbook: Schemas.OrderbookL2,\n }),\n ),\n OrderbookL2Bulk: createBaseResponse(\n z.object({\n found: createJsonMap(MarketId, Schemas.OrderbookL2),\n not_found: z.array(MarketId),\n }),\n ),\n Account: createBaseResponse(\n z.object({\n address: Base58Address,\n account: Schemas.UserAccount,\n }),\n ),\n UserAccountConfig: createBaseResponse(\n VersionedV0(Schemas.UserAccountConfigV0),\n ),\n AccountBulk: createBaseResponse(\n z.object({\n found: createJsonMap(Base58Address, Schemas.UserAccount),\n not_found: z.array(Base58Address),\n }),\n ),\n PerpMarket: createBaseResponse(\n z.object({\n market_id: MarketId,\n market: VersionedV0(Schemas.PerpMarketV0),\n }),\n ),\n PerpMarketConfigs: createBaseResponse(\n createJsonMap(MarketId, Schemas.PerpMarketConfig),\n ),\n SpotMarket: createBaseResponse(\n z.object({\n market_id: MarketId,\n market: VersionedV0(Schemas.SpotMarketV0),\n }),\n ),\n SpotMarketConfigs: createBaseResponse(\n createJsonMap(MarketId, Schemas.SpotMarketConfig),\n ),\n AccountAddresses: createBaseResponse(Schemas.AccountAddresses),\n ChainData: StateResponseSchemas.RollupSchema(\n z.object({\n chain_data: z.object({\n chain_id: z.number(),\n chain_name: z.string(),\n }),\n }),\n ),\n} as const;\n\n// Internal scehma types\ntype UserAccountConfigV0 = z.infer<typeof Schemas.UserAccountConfigV0>;\ntype PerpMarketV0 = z.infer<typeof Schemas.PerpMarketV0>;\ntype SpotMarketV0 = z.infer<typeof Schemas.SpotMarketV0>;\ntype RiskEngineV0 = z.infer<typeof Schemas.RiskEngineV0>;\ntype ExchangeInfoV1 = z.infer<typeof Schemas.ExchangeInfoV1>;\ntype ExchangeAssetsV0 = z.infer<typeof Schemas.ExchangeAssetsV0>;\ntype ExecutionIdsV0 = z.infer<typeof Schemas.ExecutionIdsV0>;\n\n// Schema types\nexport type DummyValue = z.infer<typeof Schemas.DummyValue>;\nexport type Order = z.infer<typeof Order>;\nexport type OrderbookL2 = z.infer<typeof Schemas.OrderbookL2>;\nexport type PriceLevelL2 = z.infer<typeof PriceLevelL2>;\nexport type UserAccount = z.infer<typeof Schemas.UserAccount>;\nexport type PerpMarketConfig = z.infer<typeof Schemas.PerpMarketConfig>;\nexport type SpotMarketConfig = z.infer<typeof Schemas.SpotMarketConfig>;\nexport type VersionedUserAccountConfig = {\n version: \"V0\";\n data: UserAccountConfigV0;\n};\nexport type VersionedExchangeAssets = { version: \"V0\"; data: ExchangeAssetsV0 };\nexport type VersionedPerpMarket = { version: \"V0\"; data: PerpMarketV0 };\nexport type VersionedSpotMarket = { version: \"V0\"; data: SpotMarketV0 };\nexport type VersionedExchangeInfo = { version: \"V1\"; data: ExchangeInfoV1 };\nexport type AccountAddresses = z.infer<typeof Schemas.AccountAddresses>;\nexport type VersionedExecutionIds = { version: \"V0\"; data: ExecutionIdsV0 };\nexport type VersionedRiskEngine = { version: \"V0\"; data: RiskEngineV0 };\n\nexport type BorrowLendPool = z.infer<typeof BorrowLendPool>;\n",
21
+ "import { z } from \"zod\";\nimport type {\n MarketKind,\n OrderType,\n Side,\n TriggerDirection,\n TriggerPriceCondition,\n} from \"../types\";\nimport {\n Amount,\n AssetId,\n Base58Address,\n ClientOrderId,\n createJsonMap,\n createJsonSet,\n DecimalSchema,\n I16Schema,\n I64Schema,\n MarketId,\n OrderId,\n TradeId,\n TriggerOrderId,\n TwapId,\n U8Schema,\n U16Schema,\n U32Schema,\n U64Schema,\n UnixTimestampMicros,\n} from \".\";\n\n// Zod 4 Best Practice: Use z.literal() with arrays for cleaner enum definitions\nconst MARKET_KINDS = [\"perp\", \"spot\"] as const satisfies readonly MarketKind[];\nconst SIDES = [\"bid\", \"ask\"] as const satisfies readonly Side[];\nconst TRIGGER_DIRECTIONS = [\n \"greater_than_or_equal\",\n \"less_than_or_equal\",\n] as const satisfies readonly TriggerDirection[];\nconst TRIGGER_PRICE_CONDITIONS = [\n \"mark\",\n \"oracle\",\n \"last_trade\",\n] as const satisfies readonly TriggerPriceCondition[];\nconst ORDER_TYPES = [\n \"limit\",\n \"post_only\",\n \"fill_or_kill\",\n \"immediate_or_cancel\",\n \"post_only_slide\",\n \"post_only_front\",\n] as const satisfies readonly OrderType[];\n\n// Base response schema builder\nconst createBaseResponse = <T extends z.ZodTypeAny>(schema: T) => schema;\n\n// Helper for versioned types with proper type inference\n// Helper for versioned V0 type with discriminated output\nconst VersionedV0 = <V0 extends z.ZodTypeAny>(schema: V0) =>\n z.object({ V0: schema }).transform((d) => ({\n version: \"V0\" as const,\n data: (d as { V0: z.output<V0> }).V0,\n }));\n\nconst VersionedV1 = <V1 extends z.ZodTypeAny>(schema: V1) =>\n z.object({ V1: schema }).transform((d) => ({\n version: \"V1\" as const,\n data: (d as { V1: z.output<V1> }).V1,\n }));\n\n// Helper for versioned types with proper type inference\n// Not needed right now because we've fully migrated ExchangeInfo to V1\nconst _VersionedV1V0 = <\n V0 extends z.ZodTypeAny,\n V1 extends z.ZodTypeAny,\n>(schemas: {\n V0: V0;\n V1: V1;\n}) =>\n z.union([\n z.object({ V0: schemas.V0 }).transform((d) => ({\n version: \"V0\" as const,\n data: (d as { V0: z.output<V0> }).V0,\n })),\n z.object({ V1: schemas.V1 }).transform((d) => ({\n version: \"V1\" as const,\n data: (d as { V1: z.output<V1> }).V1,\n })),\n ]);\n\n// Generic response schemas\nexport const StateResponseSchemas = {\n RollupSchema: <T extends z.ZodTypeAny>(valueSchema: T) =>\n createBaseResponse(z.object({ schema: valueSchema })),\n\n StateValue: <T extends z.ZodTypeAny>(valueSchema: T) =>\n createBaseResponse(z.object({ value: valueSchema.nullable() })),\n\n CustomRouteValue: <T extends z.ZodTypeAny>(valueSchema: T) =>\n createBaseResponse(valueSchema),\n\n StateMapElement: <K extends z.ZodTypeAny, V extends z.ZodTypeAny>(\n keySchema: K,\n valueSchema: V,\n ) =>\n createBaseResponse(\n z.object({\n key: keySchema,\n value: valueSchema.nullable(),\n }),\n ),\n\n StateVecElement: <T extends z.ZodTypeAny>(valueSchema: T) =>\n createBaseResponse(\n z.object({\n index: z.number(),\n value: valueSchema.nullable(),\n }),\n ),\n} as const;\n\nexport const BaseResponseSchemas = {\n CoinsResponse: createBaseResponse(\n z.object({\n amount: Amount,\n token_id: z.string(),\n }),\n ),\n BatchSequencerResponse: createBaseResponse(\n z.object({\n da_height: z.number(),\n num_txs: z.number(),\n }),\n ),\n SequencerResponse: createBaseResponse(\n z.object({\n id: z.string(),\n status: z.string(),\n }),\n ),\n} as const;\n\n// Price and size\nconst PriceLevelL2 = z.tuple([DecimalSchema, DecimalSchema]);\n\nconst Position = z.object({\n size: DecimalSchema,\n cost_of_trades: DecimalSchema,\n realized_pnl: DecimalSchema,\n cached_mark_price: DecimalSchema,\n last_accum_funding_applied_per_lot: z.tuple([\n DecimalSchema,\n UnixTimestampMicros,\n ]),\n funding_payments_on_side: DecimalSchema,\n funding_payments_on_position: DecimalSchema,\n});\n\nconst BorrowLendRateConfig = z.object({\n optimal_utilization_rate: DecimalSchema,\n min_borrow_rate: DecimalSchema,\n optimal_borrow_rate: DecimalSchema,\n max_borrow_rate: DecimalSchema,\n});\n\nconst BorrowLendRiskConfig = z.object({\n liquidation_total_reward_ratio: DecimalSchema,\n liability_liquidation_limit_ratio: DecimalSchema,\n asset_weight: DecimalSchema,\n initial_liability_weight: DecimalSchema,\n maintenance_liability_weight: DecimalSchema,\n protocol_reward_ratio: DecimalSchema,\n});\n\nconst PerpLiquidationConfig = z.object({\n liquidation_ioc_buffer: DecimalSchema,\n backstop_liquidation_threshold: DecimalSchema,\n liquidation_fee: DecimalSchema,\n liquidation_protocol_reward_ratio: DecimalSchema,\n});\n\nconst Balance = z.object({\n asset: DecimalSchema,\n liability: DecimalSchema,\n});\n\nconst CrossBalances = z.object({\n balances: createJsonMap(AssetId, Balance),\n unrealized_loss_borrow: DecimalSchema,\n unsettled_perp_profit: DecimalSchema,\n trading_credits: DecimalSchema,\n});\n\nconst Tpsl = z.object({\n order_price: DecimalSchema,\n trigger_price: DecimalSchema,\n price_condition: z.enum(TRIGGER_PRICE_CONDITIONS),\n order_type: z.enum(ORDER_TYPES),\n});\n\nconst TpslPair = z.object({\n tp: Tpsl.nullable(),\n sl: Tpsl.nullable(),\n});\n\nconst PendingTpslPair = z.object({\n tpsl_pair: TpslPair,\n dynamic_size: z.boolean(),\n});\n\nconst PerpOrder = z.object({\n side: z.enum(SIDES),\n market_id: MarketId,\n order_id: OrderId,\n client_order_id: ClientOrderId.nullable(),\n price: DecimalSchema,\n remaining_size: DecimalSchema,\n reduce_only: z.boolean(),\n filled_size: DecimalSchema,\n filled_cot: DecimalSchema,\n owner: Base58Address,\n reserved_pending_tpsl_pair_ids: z.string().nullable(),\n});\n\nconst SpotOrder = z.object({\n side: z.enum(SIDES),\n market_id: MarketId,\n order_id: OrderId,\n quote_asset_id: AssetId,\n base_asset_id: AssetId,\n client_order_id: ClientOrderId.nullable(),\n quote_lots: DecimalSchema,\n remaining_base_lots: DecimalSchema,\n filled_base_lots: DecimalSchema,\n filled_cot: DecimalSchema,\n owner: Base58Address,\n});\n\nconst Order = z.union([PerpOrder, SpotOrder]);\n\nconst TriggerOrder = z.object({\n side: z.enum(SIDES),\n market_id: MarketId,\n trigger_order_id: TriggerOrderId,\n order_price: DecimalSchema,\n trigger_price: DecimalSchema,\n trigger_direction: z.enum(TRIGGER_DIRECTIONS),\n price_condition: z.enum(TRIGGER_PRICE_CONDITIONS),\n size: DecimalSchema.nullable(),\n order_type: z.enum(ORDER_TYPES),\n owner: Base58Address,\n last_update_timestamp: UnixTimestampMicros,\n linked_trigger_order_id: TriggerOrderId.nullable(),\n});\n\nconst RewardVariant = z.enum([\"referral\", \"liquidity\"]);\nconst MarketTradingStatus = z.enum([\"active\", \"halted\", \"cleaning\", \"cleaned\"]);\nconst FeeTier = z.enum([\"tier0\", \"tier1\", \"tier2\", \"tier3\", \"tier4\"]);\nconst TradingMode = z.enum([\"iso\", \"cross\", \"none\"]);\nconst PerpLedger = z.object({\n trading_mode: TradingMode,\n order_ids: z.array(OrderId),\n trigger_order_ids: z.array(TriggerOrderId),\n position: Position,\n user_selected_max_leverage: U16Schema,\n notional_open_orders: DecimalSchema,\n twap_ids: z.array(TwapId),\n open_twap_lots: DecimalSchema,\n});\n\nconst SpotLedger = z.object({\n order_ids: z.array(OrderId),\n trigger_order_ids: z.array(TriggerOrderId),\n twap_ids: z.array(TwapId),\n});\n\nconst Balances = z.object({\n cross: CrossBalances,\n iso: createJsonMap(MarketId, DecimalSchema),\n spot: createJsonMap(AssetId, DecimalSchema),\n});\n\nconst RewardsInfo = z.object({\n cumulative_amount: DecimalSchema,\n total_claimed_amount: DecimalSchema,\n});\n\nconst Twap = z.object({\n side: z.enum(SIDES),\n market_id: MarketId,\n twap_id: TwapId,\n total_orders: U32Schema,\n total_size: DecimalSchema,\n total_duration_seconds: U64Schema,\n executed_size: DecimalSchema,\n executed_orders: U32Schema,\n cost_of_trade: DecimalSchema,\n reduce_only: z.boolean(),\n owner: Base58Address,\n});\n\nconst OrdersLedger = z.object({\n client_order_ids: createJsonMap(ClientOrderId, OrderId),\n perp_orders: createJsonMap(OrderId, PerpOrder),\n perp_trigger_orders: createJsonMap(TriggerOrderId, TriggerOrder),\n perp_pending_tpsl_pairs: createJsonMap(z.string(), PendingTpslPair),\n spot_orders: createJsonMap(OrderId, SpotOrder),\n spot_trigger_orders: createJsonMap(TriggerOrderId, TriggerOrder),\n twaps: createJsonMap(TwapId, Twap),\n});\n\nconst TriggerNodesStore = z.object({\n inactive: createJsonMap(\n z.string(),\n createJsonMap(z.string(), z.any()), // TriggerNodesPriceMap<S>\n ),\n active: z.array(z.any()), // VecDeque<TriggerNode<S>>\n});\n\nconst ActiveTwap = z.object({\n twap_id: U64Schema,\n remaining_orders: U32Schema,\n owner: Base58Address,\n});\n\nconst TwapNode = z.object({\n twap_id: U64Schema,\n owner: Base58Address,\n});\n\nconst TwapNodesStore = z.object({\n twaps: z.array(ActiveTwap),\n last_execution_time: I64Schema,\n execution_queue: z.array(TwapNode),\n});\n\nconst PriceLevel = z.object({\n nodes: z.array(\n z.object({\n order_id: OrderId,\n owner: Base58Address,\n }),\n ),\n total_size: DecimalSchema,\n});\n\nconst OraclePrice = z.object({\n price: DecimalSchema,\n last_update_timestamp: UnixTimestampMicros.nullable(),\n});\n\nconst MarkPrice = z.object({\n price: DecimalSchema,\n last_oracle_diff_ema: DecimalSchema,\n last_median_cex_price: DecimalSchema,\n last_update_timestamp: UnixTimestampMicros.nullable(),\n});\n\nconst TimeWeightedPremiumIndex = z.object({\n weighted_premium_sum: DecimalSchema,\n duration_sum: U64Schema,\n last_update_timestamp: UnixTimestampMicros.nullable(),\n});\n\nconst FundingConfig = z.object({\n interest_rate: DecimalSchema,\n min_interest_rate_clamp: DecimalSchema,\n max_interest_rate_clamp: DecimalSchema,\n min_funding_rate_clamp: DecimalSchema,\n max_funding_rate_clamp: DecimalSchema,\n});\n\nconst FundingMeta = z.object({\n rate: DecimalSchema,\n accum_per_lot: DecimalSchema,\n last_update_timestamp: UnixTimestampMicros,\n config: FundingConfig,\n});\n\nconst PerpPrice = z.object({\n market_id: MarketId,\n mark_price: MarkPrice,\n accum_premium_index: TimeWeightedPremiumIndex,\n funding_meta: FundingMeta,\n});\n\nconst PricingEngine = z.object({\n pricing_frequency_seconds: U32Schema,\n relaxed_pricing_frequency_seconds: U32Schema,\n oracle_pricing: createJsonMap(AssetId, OraclePrice),\n perp_pricing: createJsonMap(MarketId, PerpPrice),\n});\n\nconst LeverageTable = z.object({\n tiers: createJsonMap(\n z.string(),\n z.object({\n max_leverage: U16Schema,\n mmr: DecimalSchema,\n maintenance_amount: DecimalSchema,\n }),\n ),\n});\n\nconst MarginConfig = z.object({\n perp_liquidation_config: PerpLiquidationConfig,\n perp_leverage_tables: createJsonMap(MarketId, LeverageTable),\n borrow_lend_risk_configs: createJsonMap(AssetId, BorrowLendRiskConfig),\n});\n\nconst GlobalConfig = z.object({\n max_orders_per_user: U16Schema,\n max_trigger_orders_per_user: U16Schema,\n max_orders_per_batch_msg: U16Schema,\n max_trigger_orders_to_execute_per_msg: U16Schema,\n min_notional_twap_value: DecimalSchema,\n min_notional_twap_value_per_order: DecimalSchema,\n twap_execution_interval_seconds: U64Schema,\n user_deposit_limits_per_asset: createJsonMap(AssetId, DecimalSchema),\n whitelisted_users_for_deposit: createJsonSet(Base58Address),\n});\n\nconst AdminRegistry = z.object({\n protocol: Base58Address,\n funding: Base58Address,\n pricing: Base58Address,\n fee_tier: Base58Address,\n credits: Base58Address,\n referrals: Base58Address,\n});\n\nconst AssetInfo = z.object({\n id: AssetId,\n name: z.string(),\n token_id: z.string().nullable(),\n decimals: U8Schema,\n withdraw_fee: DecimalSchema,\n});\n\nconst MarketInfo = z.object({\n id: MarketId,\n kind: z.enum(MARKET_KINDS),\n base_asset_id: AssetId,\n name: z.string(),\n trading_mode: TradingMode,\n});\n\nconst VaultWithdrawal = z.object({\n user: Base58Address,\n shares: DecimalSchema,\n timestamp: UnixTimestampMicros,\n});\n\nconst VaultInfo = z.object({\n leader: Base58Address,\n name: z.string(),\n description: z.string(),\n deposit_asset_ids: z.array(AssetId),\n withdraw_asset_id: AssetId,\n deposit_limit: DecimalSchema,\n leader_minimum_holding_percentage: U8Schema,\n withdraw_lockup_period_hours: U8Schema,\n profit_share_percentage: U8Schema,\n withdrawal_fee_bps: U8Schema,\n total_shares: DecimalSchema,\n high_watermark: DecimalSchema,\n queued_withdrawals: z.array(VaultWithdrawal),\n whitelist_deposits: z.boolean(),\n whitelisted_depositors: z.array(Base58Address),\n});\n\nconst GlobalVaultConfig = z.object({\n leader_minimum_holding_percentage: U8Schema,\n creation_fee_usdc: DecimalSchema,\n min_deposit_value: DecimalSchema,\n});\n\nconst VaultRegistry = z.object({\n vaults: createJsonMap(Base58Address, VaultInfo),\n config: GlobalVaultConfig,\n depositor_state: createJsonMap(\n Base58Address,\n createJsonMap(Base58Address, DecimalSchema),\n ),\n});\n\nconst UsdcPnlPool = z.object({\n amount: DecimalSchema,\n trading_credits: DecimalSchema,\n orphaned_trading_credits: DecimalSchema,\n external_deposits: createJsonMap(Base58Address, DecimalSchema),\n token_holder: z.string(),\n});\n\nconst UsdcInsuranceFund = z.object({\n amount: DecimalSchema,\n external_deposits: createJsonMap(Base58Address, DecimalSchema),\n minimum_usdc_token_amount: DecimalSchema,\n token_holder: z.string(),\n});\n\nconst BorrowLendPool = z.object({\n asset_id: AssetId,\n is_active: z.boolean(),\n last_update_timestamp: UnixTimestampMicros,\n rate_config: BorrowLendRateConfig,\n deposit_limit: DecimalSchema,\n borrow_limit: DecimalSchema,\n max_utilization_rate: DecimalSchema,\n available_amount: DecimalSchema,\n borrowed_amount: DecimalSchema,\n cumulative_deposit_rate: DecimalSchema,\n cumulative_borrow_rate: DecimalSchema,\n accumulated_protocol_fees: DecimalSchema,\n unclaimed_protocol_fees: DecimalSchema,\n interest_fee_tenth_bps: U16Schema,\n});\n\nconst CrossAssets = z.object({\n usdc_pnl_pool: UsdcPnlPool,\n usdc_insurance_fund: UsdcInsuranceFund,\n borrow_lend_deposit_vault: z.string(),\n borrow_lend_pools: createJsonMap(AssetId, BorrowLendPool),\n});\n\nconst IsoAssets = z.object({\n usdc_deposit_vault: z.string(),\n usdc_insurance_fund: UsdcInsuranceFund,\n});\n\nconst PerpMarketConfig = z.object({\n min_tick_size: DecimalSchema,\n min_lot_size: DecimalSchema,\n max_oi_notional: DecimalSchema,\n impact_margin: DecimalSchema,\n max_orders_per_side: U16Schema,\n max_orders_per_user: U16Schema,\n max_trigger_orders_per_user: U16Schema,\n taker_fees_tenth_bps: z.array(I16Schema),\n maker_fees_tenth_bps: z.array(I16Schema),\n max_order_to_mark_price_deviation_ratio: DecimalSchema,\n max_trigger_to_comparison_price_deviation_ratio: DecimalSchema,\n max_order_to_trigger_price_deviation_ratio: DecimalSchema,\n});\n\nconst SpotMarketConfig = z.object({\n base_min_lot_size: DecimalSchema,\n quote_min_lot_size: DecimalSchema,\n max_orders_per_side: U16Schema,\n max_orders_per_user: U16Schema,\n max_trigger_orders_per_user: U16Schema,\n taker_fees_tenth_bps: z.array(I16Schema),\n maker_fees_tenth_bps: z.array(I16Schema),\n max_order_to_trigger_price_deviation_ratio: DecimalSchema,\n});\n\n// Main schemas\nexport const Schemas = {\n DummyValue: z.number(),\n\n ExchangeInfoV1: z.object({\n global_config: GlobalConfig,\n admins: AdminRegistry,\n assets: createJsonMap(AssetId, AssetInfo),\n markets: createJsonMap(MarketId, MarketInfo),\n vaults: VaultRegistry,\n }),\n\n ExchangeAssetsV0: z.object({\n cross_assets: CrossAssets,\n iso_assets: createJsonMap(MarketId, IsoAssets),\n spot_collateral_vault: z.string(),\n treasury: z.string(),\n }),\n\n OrderbookL2: z.object({\n market_id: MarketId,\n bids: z.array(PriceLevelL2),\n asks: z.array(PriceLevelL2),\n }),\n\n UserAccount: z.object({\n account_variant: z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"master\"),\n sub_account_indices: z.array(U8Schema),\n }),\n z.object({ type: z.literal(\"sub\") }),\n z.object({ type: z.literal(\"vault\") }),\n z.object({ type: z.literal(\"protocol_vault\") }),\n ]),\n address: Base58Address,\n fee_tier: FeeTier,\n fee_discount_bps: U16Schema,\n balances: Balances,\n rewards: createJsonMap(AssetId, createJsonMap(RewardVariant, RewardsInfo)),\n perp_ledgers: createJsonMap(MarketId, PerpLedger),\n spot_ledgers: createJsonMap(MarketId, SpotLedger),\n orders_ledger: OrdersLedger,\n }),\n\n UserAccountConfigV0: z.object({\n delegates: createJsonMap(Base58Address, z.string()),\n }),\n\n RiskEngineV0: z.object({\n pricing_engine: PricingEngine,\n margin_config: MarginConfig,\n }),\n\n PerpMarketV0: z.object({\n market_id: MarketId,\n trading_status: MarketTradingStatus,\n config: PerpMarketConfig,\n current_open_interest_lots: DecimalSchema,\n last_trade_price: DecimalSchema.nullable(),\n orderbook: z.object({\n bids: createJsonMap(z.string(), PriceLevel),\n asks: createJsonMap(z.string(), PriceLevel),\n }),\n trigger_nodes_store: TriggerNodesStore,\n twap_nodes_store: TwapNodesStore,\n }),\n\n PerpMarketConfig: PerpMarketConfig,\n\n SpotMarketV0: z.object({\n market_id: MarketId,\n trading_status: MarketTradingStatus,\n base_asset_id: AssetId,\n quote_asset_id: AssetId,\n config: SpotMarketConfig,\n last_trade_price: DecimalSchema.nullable(),\n orderbook: z.object({\n bids: createJsonMap(z.string(), PriceLevel),\n asks: createJsonMap(z.string(), PriceLevel),\n }),\n trigger_nodes_store: TriggerNodesStore,\n }),\n\n SpotMarketConfig: SpotMarketConfig,\n\n ExecutionIdsV0: z.object({\n last_order_id: OrderId,\n last_trigger_order_id: TriggerOrderId,\n last_trade_id: TradeId,\n }),\n AccountAddresses: z.object({\n addresses: z.array(Base58Address),\n total: z.number(),\n next_offset: z.number().nullable(),\n }),\n} as const;\n\n// Response schemas\nexport const ResponseSchemas = {\n DummyValue: StateResponseSchemas.StateValue(Schemas.DummyValue),\n Order: StateResponseSchemas.StateMapElement(OrderId, Order),\n ExchangeInfo: StateResponseSchemas.StateValue(\n VersionedV1(Schemas.ExchangeInfoV1),\n ),\n ExchangeAssets: StateResponseSchemas.StateValue(\n VersionedV0(Schemas.ExchangeAssetsV0),\n ),\n RiskEngine: StateResponseSchemas.StateValue(\n VersionedV0(Schemas.RiskEngineV0),\n ),\n ExecutionIds: StateResponseSchemas.StateValue(\n VersionedV0(Schemas.ExecutionIdsV0),\n ),\n OrderbookL2: createBaseResponse(\n z.object({\n market_id: MarketId,\n orderbook: Schemas.OrderbookL2,\n }),\n ),\n OrderbookL2Bulk: createBaseResponse(\n z.object({\n found: createJsonMap(MarketId, Schemas.OrderbookL2),\n not_found: z.array(MarketId),\n }),\n ),\n Account: createBaseResponse(\n z.object({\n address: Base58Address,\n account: Schemas.UserAccount,\n }),\n ),\n UserAccountConfig: StateResponseSchemas.StateMapElement(\n Base58Address,\n VersionedV0(Schemas.UserAccountConfigV0),\n ),\n AccountBulk: createBaseResponse(\n z.object({\n found: createJsonMap(Base58Address, Schemas.UserAccount),\n not_found: z.array(Base58Address),\n }),\n ),\n PerpMarket: createBaseResponse(\n z.object({\n market_id: MarketId,\n market: VersionedV0(Schemas.PerpMarketV0),\n }),\n ),\n PerpMarketConfigs: createBaseResponse(\n createJsonMap(MarketId, Schemas.PerpMarketConfig),\n ),\n SpotMarket: createBaseResponse(\n z.object({\n market_id: MarketId,\n market: VersionedV0(Schemas.SpotMarketV0),\n }),\n ),\n SpotMarketConfigs: createBaseResponse(\n createJsonMap(MarketId, Schemas.SpotMarketConfig),\n ),\n AccountAddresses: createBaseResponse(Schemas.AccountAddresses),\n ChainData: StateResponseSchemas.RollupSchema(\n z.object({\n chain_data: z.object({\n chain_id: z.number(),\n chain_name: z.string(),\n }),\n }),\n ),\n} as const;\n\n// Internal scehma types\ntype UserAccountConfigV0 = z.infer<typeof Schemas.UserAccountConfigV0>;\ntype PerpMarketV0 = z.infer<typeof Schemas.PerpMarketV0>;\ntype SpotMarketV0 = z.infer<typeof Schemas.SpotMarketV0>;\ntype RiskEngineV0 = z.infer<typeof Schemas.RiskEngineV0>;\ntype ExchangeInfoV1 = z.infer<typeof Schemas.ExchangeInfoV1>;\ntype ExchangeAssetsV0 = z.infer<typeof Schemas.ExchangeAssetsV0>;\ntype ExecutionIdsV0 = z.infer<typeof Schemas.ExecutionIdsV0>;\n\n// Schema types\nexport type DummyValue = z.infer<typeof Schemas.DummyValue>;\nexport type Order = z.infer<typeof Order>;\nexport type OrderbookL2 = z.infer<typeof Schemas.OrderbookL2>;\nexport type PriceLevelL2 = z.infer<typeof PriceLevelL2>;\nexport type UserAccount = z.infer<typeof Schemas.UserAccount>;\nexport type PerpMarketConfig = z.infer<typeof Schemas.PerpMarketConfig>;\nexport type SpotMarketConfig = z.infer<typeof Schemas.SpotMarketConfig>;\nexport type VersionedUserAccountConfig = {\n version: \"V0\";\n data: UserAccountConfigV0;\n};\nexport type VersionedExchangeAssets = { version: \"V0\"; data: ExchangeAssetsV0 };\nexport type VersionedPerpMarket = { version: \"V0\"; data: PerpMarketV0 };\nexport type VersionedSpotMarket = { version: \"V0\"; data: SpotMarketV0 };\nexport type VersionedExchangeInfo = { version: \"V1\"; data: ExchangeInfoV1 };\nexport type AccountAddresses = z.infer<typeof Schemas.AccountAddresses>;\nexport type VersionedExecutionIds = { version: \"V0\"; data: ExecutionIdsV0 };\nexport type VersionedRiskEngine = { version: \"V0\"; data: RiskEngineV0 };\n\nexport type BorrowLendPool = z.infer<typeof BorrowLendPool>;\n",
22
22
  "import { z } from \"zod\";\nimport { Base58Address, DecimalSchema, MarketId, U16Schema } from \".\";\n\nexport const WasmResponseSchemas = {\n SimulationResultSchema: z.object({\n current: DecimalSchema,\n updated: DecimalSchema,\n }),\n PositionAdditionalMetadataSchema: z.map(\n // since we use hashmap which serializes to map\n MarketId,\n z.object({\n projected_funding_payment: DecimalSchema,\n unrealized_pnl: DecimalSchema,\n liquidation_price: DecimalSchema,\n liquidation_risk_percentage: DecimalSchema,\n max_leverage_to_use: U16Schema,\n }),\n ),\n BorrowLendMarketAdditionalMetadataSchema: z.object({\n utilization_rate: DecimalSchema,\n current_deposit_rate: DecimalSchema,\n current_borrow_rate: DecimalSchema,\n }),\n AccountSummaryBatchSchema: z.array(\n z.object({\n account_variant: z.string().optional(),\n address: Base58Address,\n equity: DecimalSchema,\n unrealized_pnl: DecimalSchema,\n available_initial_margin: DecimalSchema,\n available_maintenance_margin: DecimalSchema,\n leverage: DecimalSchema,\n }),\n ),\n MarginBalanceSchema: z.object({\n collateral_value: DecimalSchema,\n assets: DecimalSchema,\n liabilities: DecimalSchema,\n pnl: DecimalSchema,\n }),\n};\n\nexport type PositionAdditionalMetadata = z.infer<\n typeof WasmResponseSchemas.PositionAdditionalMetadataSchema\n>;\n",
23
23
  "/**\n * Encoding utilities for decimal serialization between TypeScript and Rust.\n *\n * SurrogateDecimal format: { flags, hi, lo, mid }\n * - Produced by BulletWasm.convert_rust_decimal_to_json()\n * - Matches rust_decimal's internal struct representation\n * - Used by standard authenticator: SDK → json_to_borsh (client-side WASM) → Borsh bytes → /sequencer/txs\n *\n * AuthenticatedClient.encodeDecimal() selects the correct format automatically:\n * - Standard auth (borsh): SurrogateDecimal { flags, hi, lo, mid }\n * - Solana auth (serde): string (e.g. \"10000\")\n */\n\nimport type Decimal from \"decimal.js\";\nimport { BulletWasm } from \"./bullet-wasm\";\n\n/**\n * Converts a Decimal.js value to SurrogateDecimal format for Borsh serialization.\n * Used by standard authenticator where json_to_borsh parses this format client-side.\n *\n * @param d - The Decimal value to convert\n * @returns SurrogateDecimal object { flags, hi, lo, mid } or null\n */\nexport const decimalToSurrogate = (d?: Decimal | null) =>\n d ? BulletWasm.convert_rust_decimal_to_json(d.toFixed()) : null;\n",
24
24
  "import type { Signer } from \"@sovereign-sdk/signers\";\nimport type { Address, PublicKey } from \"../types\";\nimport { hexToBase58 } from \"../utils\";\n\nexport abstract class Wallet {\n // For now this is same as pubkey but b58 encoded\n public address: Address;\n public publicKey: PublicKey;\n\n constructor(publicKey: PublicKey) {\n this.publicKey = publicKey;\n this.address = hexToBase58(this.publicKey);\n }\n\n // Abstract method to be implemented by subclasses\n public abstract getSigner(): Signer;\n}\n",
25
25
  "import type { Signer } from \"@sovereign-sdk/signers\";\nimport type { PublicKey } from \"../types\";\nimport { bytesToHex } from \"../utils\";\nimport { Wallet } from \"./wallet\";\n\n/**\n * Type guard to check if a signer is a Ledger Solana signer.\n * This allows checking the signer type without importing Ledger-specific dependencies.\n */\nexport function isLedgerSolanaSigner(\n signer: Signer,\n): signer is Signer & { readonly __ledgerSolanaSigner: true } {\n return (\n \"__ledgerSolanaSigner\" in signer && signer.__ledgerSolanaSigner === true\n );\n}\n\n/**\n * LedgerSolanaSigner interface matching the @sovereign-sdk/signers implementation.\n * This allows us to work with the Ledger signer without directly importing\n * the browser-specific or node-specific implementations.\n */\nexport interface LedgerSolanaSigner extends Signer {\n readonly __ledgerSolanaSigner: true;\n disconnect(): Promise<void>;\n}\n\n/**\n * A Wallet implementation that uses a Ledger hardware wallet for signing.\n *\n * This wallet wraps a LedgerSolanaSigner from @sovereign-sdk/signers and is\n * compatible with the Bullet SDK's Client class.\n *\n * @example\n * ```typescript\n * // Browser environment - use default export from @sovereign-sdk/signers/ledger-solana\n * import { LedgerSolanaSigner } from \"@sovereign-sdk/signers/ledger-solana\";\n *\n * const ledgerSigner = new LedgerSolanaSigner();\n * const wallet = await LedgerWallet.fromSigner(ledgerSigner);\n *\n * // Create client with Ledger wallet - will auto-detect and use \"solana\" authenticator\n * const client = await Client.fromNetwork(\"mainnet\", wallet);\n * ```\n *\n * @example\n * ```typescript\n * // Node.js environment - use node export\n * import { LedgerSolanaSigner } from \"@sovereign-sdk/signers/ledger-solana/node\";\n *\n * const ledgerSigner = new LedgerSolanaSigner();\n * const wallet = await LedgerWallet.fromSigner(ledgerSigner);\n * ```\n */\nexport class LedgerWallet extends Wallet {\n private ledgerSigner: LedgerSolanaSigner;\n\n /**\n * @internal\n * Use LedgerWallet.fromSigner() to create instances.\n */\n private constructor(publicKey: PublicKey, ledgerSigner: LedgerSolanaSigner) {\n super(publicKey);\n this.ledgerSigner = ledgerSigner;\n }\n\n /**\n * Creates a LedgerWallet from a LedgerSolanaSigner instance.\n *\n * This is an async factory method because getting the public key from\n * the Ledger device requires an async operation.\n *\n * @param ledgerSigner - A LedgerSolanaSigner instance from @sovereign-sdk/signers\n * @returns A Promise that resolves to a LedgerWallet instance\n *\n * @example\n * ```typescript\n * import { LedgerSolanaSigner } from \"@sovereign-sdk/signers/ledger-solana\";\n *\n * const signer = new LedgerSolanaSigner(\"44'/501'/0'/0'\");\n * const wallet = await LedgerWallet.fromSigner(signer);\n * ```\n */\n public static async fromSigner(\n ledgerSigner: LedgerSolanaSigner,\n ): Promise<LedgerWallet> {\n // Get public key from Ledger device\n const publicKeyBytes = await ledgerSigner.publicKey();\n\n if (publicKeyBytes.length !== 32) {\n throw new Error(\n `Invalid public key length from Ledger: ${publicKeyBytes.length} bytes. Expected 32 bytes.`,\n );\n }\n\n // Convert to hex string (without 0x prefix) for Wallet base class\n const publicKey = bytesToHex(publicKeyBytes).replace(/^0x/, \"\");\n\n return new LedgerWallet(publicKey, ledgerSigner);\n }\n\n /**\n * Signs a message using the Ledger device.\n *\n * @param message - The message to sign as a Uint8Array\n * @returns A Promise that resolves to the signature as a Uint8Array\n */\n public async signMessage(message: Uint8Array): Promise<Uint8Array> {\n return this.ledgerSigner.sign(message);\n }\n\n /**\n * Returns the Ledger signer for use with the Sovereign SDK rollup.\n *\n * The returned signer has the `__ledgerSolanaSigner` marker which allows\n * the SDK to auto-detect that it should use the \"solana\" authenticator\n * (with preamble) when `authenticator: \"solanaAuto\"` is specified.\n */\n public getSigner(): LedgerSolanaSigner {\n return this.ledgerSigner;\n }\n\n /**\n * Disconnects from the Ledger device.\n *\n * Call this when you're done using the wallet to properly close\n * the USB/HID transport connection.\n */\n public async disconnect(): Promise<void> {\n await this.ledgerSigner.disconnect();\n }\n}\n",
26
26
  "import { readFileSync } from \"node:fs\";\nimport * as ed from \"@noble/ed25519\";\nimport { Ed25519Signer } from \"@sovereign-sdk/signers\";\nimport type { PrivateKey, PublicKey } from \"../types\";\nimport { bytesToHex } from \"../utils\";\nimport { Wallet } from \"./wallet\";\n\nexport class NodeWallet extends Wallet {\n // All hex strings - may eventually add a class\n private privateKey: PrivateKey;\n\n constructor(privateKey: PrivateKey, publicKey: PublicKey) {\n // Check if running in browser environment\n if (typeof (globalThis as { window?: unknown }).window !== \"undefined\") {\n throw new Error(\"NodeWallet is not supported in browser environments\");\n }\n super(publicKey);\n this.privateKey = privateKey;\n }\n\n static async fromPrivateKeyBytes(\n privateKeyBytes: Uint8Array,\n ): Promise<NodeWallet> {\n const privateKey = bytesToHex(privateKeyBytes.slice(0, 32)).replace(\n /^0x/,\n \"\",\n );\n const publicKeyBytes = await ed.getPublicKeyAsync(privateKey);\n const publicKey = bytesToHex(publicKeyBytes).replace(/^0x/, \"\");\n return new NodeWallet(privateKey, publicKey);\n }\n\n static fromLocalSolanaWallet(\n filePath = \"~/.config/solana/id.json\",\n ): NodeWallet {\n const solanaKeypairBytes = new Uint8Array(\n JSON.parse(readFileSync(filePath, \"utf-8\")),\n );\n const privateKey = bytesToHex(solanaKeypairBytes.slice(0, 32)).replace(\n /^0x/,\n \"\",\n );\n const publicKey = bytesToHex(solanaKeypairBytes.slice(32, 64)).replace(\n /^0x/,\n \"\",\n );\n return new NodeWallet(privateKey, publicKey);\n }\n\n static async fromLocalSovWallet(filePath: string): Promise<NodeWallet> {\n let privateKeyRaw: Uint8Array;\n try {\n const jsonContent = JSON.parse(readFileSync(filePath, \"utf-8\"));\n privateKeyRaw = jsonContent.private_key.key_pair;\n if (!privateKeyRaw) {\n throw new Error(\"Missing private_key.key_pair in JSON\");\n }\n } catch (error) {\n console.error(\n `Error reading keypair file: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n throw error;\n }\n return await NodeWallet.fromPrivateKeyBytes(privateKeyRaw);\n }\n\n public getSigner(): Ed25519Signer {\n return new Ed25519Signer(this.privateKey);\n }\n}\n"
27
27
  ],
28
- "mappings": "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",
29
- "debugId": "354D37E829CFEAAA64756E2164756E21",
28
+ "mappings": "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",
29
+ "debugId": "DC274FC8903FF9F564756E2164756E21",
30
30
  "names": []
31
31
  }