@mutinylabs/slip 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +99 -0
  3. package/dist/ai.d.ts +70 -0
  4. package/dist/ai.d.ts.map +1 -0
  5. package/dist/ai.js +448 -0
  6. package/dist/ai.js.map +1 -0
  7. package/dist/anchor.d.ts +15 -0
  8. package/dist/anchor.d.ts.map +1 -0
  9. package/dist/anchor.js +15 -0
  10. package/dist/anchor.js.map +1 -0
  11. package/dist/client.d.ts +90 -0
  12. package/dist/client.d.ts.map +1 -0
  13. package/dist/client.js +161 -0
  14. package/dist/client.js.map +1 -0
  15. package/dist/evidence.d.ts +13 -0
  16. package/dist/evidence.d.ts.map +1 -0
  17. package/dist/evidence.js +34 -0
  18. package/dist/evidence.js.map +1 -0
  19. package/dist/generated/accounts/index.d.ts +10 -0
  20. package/dist/generated/accounts/index.d.ts.map +1 -0
  21. package/dist/generated/accounts/index.js +10 -0
  22. package/dist/generated/accounts/index.js.map +1 -0
  23. package/dist/generated/accounts/market.d.ts +73 -0
  24. package/dist/generated/accounts/market.d.ts.map +1 -0
  25. package/dist/generated/accounts/market.js +105 -0
  26. package/dist/generated/accounts/market.js.map +1 -0
  27. package/dist/generated/accounts/marketTicket.d.ts +43 -0
  28. package/dist/generated/accounts/marketTicket.d.ts.map +1 -0
  29. package/dist/generated/accounts/marketTicket.js +69 -0
  30. package/dist/generated/accounts/marketTicket.js.map +1 -0
  31. package/dist/generated/errors/index.d.ts +9 -0
  32. package/dist/generated/errors/index.d.ts.map +1 -0
  33. package/dist/generated/errors/index.js +9 -0
  34. package/dist/generated/errors/index.js.map +1 -0
  35. package/dist/generated/errors/slip.d.ts +68 -0
  36. package/dist/generated/errors/slip.d.ts.map +1 -0
  37. package/dist/generated/errors/slip.js +96 -0
  38. package/dist/generated/errors/slip.js.map +1 -0
  39. package/dist/generated/index.d.ts +14 -0
  40. package/dist/generated/index.d.ts.map +1 -0
  41. package/dist/generated/index.js +14 -0
  42. package/dist/generated/index.js.map +1 -0
  43. package/dist/generated/instructions/buyTicket.d.ts +80 -0
  44. package/dist/generated/instructions/buyTicket.d.ts.map +1 -0
  45. package/dist/generated/instructions/buyTicket.js +149 -0
  46. package/dist/generated/instructions/buyTicket.js.map +1 -0
  47. package/dist/generated/instructions/claimTicket.d.ts +55 -0
  48. package/dist/generated/instructions/claimTicket.d.ts.map +1 -0
  49. package/dist/generated/instructions/claimTicket.js +87 -0
  50. package/dist/generated/instructions/claimTicket.js.map +1 -0
  51. package/dist/generated/instructions/createMarket.d.ts +105 -0
  52. package/dist/generated/instructions/createMarket.d.ts.map +1 -0
  53. package/dist/generated/instructions/createMarket.js +195 -0
  54. package/dist/generated/instructions/createMarket.js.map +1 -0
  55. package/dist/generated/instructions/index.d.ts +14 -0
  56. package/dist/generated/instructions/index.d.ts.map +1 -0
  57. package/dist/generated/instructions/index.js +14 -0
  58. package/dist/generated/instructions/index.js.map +1 -0
  59. package/dist/generated/instructions/resolveMarket.d.ts +75 -0
  60. package/dist/generated/instructions/resolveMarket.d.ts.map +1 -0
  61. package/dist/generated/instructions/resolveMarket.js +107 -0
  62. package/dist/generated/instructions/resolveMarket.js.map +1 -0
  63. package/dist/generated/instructions/resolveMarketV3.d.ts +78 -0
  64. package/dist/generated/instructions/resolveMarketV3.d.ts.map +1 -0
  65. package/dist/generated/instructions/resolveMarketV3.js +109 -0
  66. package/dist/generated/instructions/resolveMarketV3.js.map +1 -0
  67. package/dist/generated/instructions/voidMarket.d.ts +40 -0
  68. package/dist/generated/instructions/voidMarket.d.ts.map +1 -0
  69. package/dist/generated/instructions/voidMarket.js +64 -0
  70. package/dist/generated/instructions/voidMarket.js.map +1 -0
  71. package/dist/generated/pdas/index.d.ts +10 -0
  72. package/dist/generated/pdas/index.d.ts.map +1 -0
  73. package/dist/generated/pdas/index.js +10 -0
  74. package/dist/generated/pdas/index.js.map +1 -0
  75. package/dist/generated/pdas/market.d.ts +16 -0
  76. package/dist/generated/pdas/market.d.ts.map +1 -0
  77. package/dist/generated/pdas/market.js +20 -0
  78. package/dist/generated/pdas/market.js.map +1 -0
  79. package/dist/generated/pdas/ticket.d.ts +17 -0
  80. package/dist/generated/pdas/ticket.d.ts.map +1 -0
  81. package/dist/generated/pdas/ticket.js +21 -0
  82. package/dist/generated/pdas/ticket.js.map +1 -0
  83. package/dist/generated/programs/index.d.ts +9 -0
  84. package/dist/generated/programs/index.d.ts.map +1 -0
  85. package/dist/generated/programs/index.js +9 -0
  86. package/dist/generated/programs/index.js.map +1 -0
  87. package/dist/generated/programs/slip.d.ts +43 -0
  88. package/dist/generated/programs/slip.d.ts.map +1 -0
  89. package/dist/generated/programs/slip.js +106 -0
  90. package/dist/generated/programs/slip.js.map +1 -0
  91. package/dist/generated/shared/index.d.ts +50 -0
  92. package/dist/generated/shared/index.d.ts.map +1 -0
  93. package/dist/generated/shared/index.js +87 -0
  94. package/dist/generated/shared/index.js.map +1 -0
  95. package/dist/generated/types/binaryOp.d.ts +18 -0
  96. package/dist/generated/types/binaryOp.d.ts.map +1 -0
  97. package/dist/generated/types/binaryOp.js +24 -0
  98. package/dist/generated/types/binaryOp.js.map +1 -0
  99. package/dist/generated/types/index.d.ts +19 -0
  100. package/dist/generated/types/index.d.ts.map +1 -0
  101. package/dist/generated/types/index.js +19 -0
  102. package/dist/generated/types/index.js.map +1 -0
  103. package/dist/generated/types/marketExpression.d.ts +34 -0
  104. package/dist/generated/types/marketExpression.d.ts.map +1 -0
  105. package/dist/generated/types/marketExpression.js +37 -0
  106. package/dist/generated/types/marketExpression.js.map +1 -0
  107. package/dist/generated/types/marketState.d.ts +18 -0
  108. package/dist/generated/types/marketState.d.ts.map +1 -0
  109. package/dist/generated/types/marketState.js +24 -0
  110. package/dist/generated/types/marketState.js.map +1 -0
  111. package/dist/generated/types/multiProof.d.ts +28 -0
  112. package/dist/generated/types/multiProof.d.ts.map +1 -0
  113. package/dist/generated/types/multiProof.js +25 -0
  114. package/dist/generated/types/multiProof.js.map +1 -0
  115. package/dist/generated/types/outcomeBand.d.ts +26 -0
  116. package/dist/generated/types/outcomeBand.d.ts.map +1 -0
  117. package/dist/generated/types/outcomeBand.js +26 -0
  118. package/dist/generated/types/outcomeBand.js.map +1 -0
  119. package/dist/generated/types/proofNode.d.ts +17 -0
  120. package/dist/generated/types/proofNode.d.ts.map +1 -0
  121. package/dist/generated/types/proofNode.js +24 -0
  122. package/dist/generated/types/proofNode.js.map +1 -0
  123. package/dist/generated/types/provenStat.d.ts +21 -0
  124. package/dist/generated/types/provenStat.d.ts.map +1 -0
  125. package/dist/generated/types/provenStat.js +25 -0
  126. package/dist/generated/types/provenStat.js.map +1 -0
  127. package/dist/generated/types/scoreStatInput.d.ts +18 -0
  128. package/dist/generated/types/scoreStatInput.d.ts.map +1 -0
  129. package/dist/generated/types/scoreStatInput.js +26 -0
  130. package/dist/generated/types/scoreStatInput.js.map +1 -0
  131. package/dist/generated/types/settlementMode.d.ts +16 -0
  132. package/dist/generated/types/settlementMode.d.ts.map +1 -0
  133. package/dist/generated/types/settlementMode.js +22 -0
  134. package/dist/generated/types/settlementMode.js.map +1 -0
  135. package/dist/generated/types/sideSelector.d.ts +18 -0
  136. package/dist/generated/types/sideSelector.d.ts.map +1 -0
  137. package/dist/generated/types/sideSelector.js +24 -0
  138. package/dist/generated/types/sideSelector.js.map +1 -0
  139. package/dist/generated/types/summaryInput.d.ts +26 -0
  140. package/dist/generated/types/summaryInput.d.ts.map +1 -0
  141. package/dist/generated/types/summaryInput.js +30 -0
  142. package/dist/generated/types/summaryInput.js.map +1 -0
  143. package/dist/idl/slip.json +2418 -0
  144. package/dist/index.d.ts +9 -0
  145. package/dist/index.d.ts.map +1 -0
  146. package/dist/index.js +9 -0
  147. package/dist/index.js.map +1 -0
  148. package/dist/market-reference.d.ts +9 -0
  149. package/dist/market-reference.d.ts.map +1 -0
  150. package/dist/market-reference.js +38 -0
  151. package/dist/market-reference.js.map +1 -0
  152. package/dist/market.d.ts +42 -0
  153. package/dist/market.d.ts.map +1 -0
  154. package/dist/market.js +267 -0
  155. package/dist/market.js.map +1 -0
  156. package/dist/merkle.d.ts +48 -0
  157. package/dist/merkle.d.ts.map +1 -0
  158. package/dist/merkle.js +67 -0
  159. package/dist/merkle.js.map +1 -0
  160. package/dist/pda.d.ts +12 -0
  161. package/dist/pda.d.ts.map +1 -0
  162. package/dist/pda.js +30 -0
  163. package/dist/pda.js.map +1 -0
  164. package/dist/proof.d.ts +40 -0
  165. package/dist/proof.d.ts.map +1 -0
  166. package/dist/proof.js +106 -0
  167. package/dist/proof.js.map +1 -0
  168. package/dist/public-client.d.ts +60 -0
  169. package/dist/public-client.d.ts.map +1 -0
  170. package/dist/public-client.js +487 -0
  171. package/dist/public-client.js.map +1 -0
  172. package/dist/public-math.d.ts +17 -0
  173. package/dist/public-math.d.ts.map +1 -0
  174. package/dist/public-math.js +57 -0
  175. package/dist/public-math.js.map +1 -0
  176. package/dist/public-types.d.ts +151 -0
  177. package/dist/public-types.d.ts.map +1 -0
  178. package/dist/public-types.js +2 -0
  179. package/dist/public-types.js.map +1 -0
  180. package/dist/rulebook-skills.d.ts +15 -0
  181. package/dist/rulebook-skills.d.ts.map +1 -0
  182. package/dist/rulebook-skills.js +155 -0
  183. package/dist/rulebook-skills.js.map +1 -0
  184. package/dist/rulebook.d.ts +17 -0
  185. package/dist/rulebook.d.ts.map +1 -0
  186. package/dist/rulebook.js +42 -0
  187. package/dist/rulebook.js.map +1 -0
  188. package/dist/transaction.d.ts +23 -0
  189. package/dist/transaction.d.ts.map +1 -0
  190. package/dist/transaction.js +51 -0
  191. package/dist/transaction.js.map +1 -0
  192. package/dist/txline.d.ts +55 -0
  193. package/dist/txline.d.ts.map +1 -0
  194. package/dist/txline.js +238 -0
  195. package/dist/txline.js.map +1 -0
  196. package/dist/types.d.ts +149 -0
  197. package/dist/types.d.ts.map +1 -0
  198. package/dist/types.js +10 -0
  199. package/dist/types.js.map +1 -0
  200. package/package.json +123 -0
@@ -0,0 +1,487 @@
1
+ import { AccountRole, address, createNoopSigner, getAddressDecoder, getBase58Encoder, getAddressEncoder, getProgramDerivedAddress, isSome, } from "@solana/kit";
2
+ import { BinaryOp, CREATE_MARKET_DISCRIMINATOR, MarketState, SettlementMode, SideSelector, findMarketPda, findTicketPda, getBuyTicketInstructionAsync, getClaimTicketInstruction, getCreateMarketInstructionAsync, getMarketDiscriminatorBytes, getMarketDecoder, getMarketTicketDiscriminatorBytes, getMarketTicketDecoder, getResolveMarketInstruction, getResolveMarketV3Instruction, getVoidMarketInstruction, } from "./generated/index.js";
3
+ import { validateMarketReference } from "./market-reference.js";
4
+ import { calculateMarketRulebookHash, verifyCompiledRulebookHash } from "./rulebook.js";
5
+ const TOKEN_PROGRAM = address("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
6
+ const ASSOCIATED_TOKEN_PROGRAM = address("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL");
7
+ const SYSTEM_PROGRAM = address("11111111111111111111111111111111");
8
+ const UNIFIED_MARKETS_CAPABILITY = new TextEncoder().encode("slip:unified-markets:v1");
9
+ export const FEE_TREASURY_ADDRESS = address("DZqzfMTmFyDvhLWamA4qjiEUUzS8LoTZ6d2KMkXwsiXh");
10
+ function proofBytes(value, field) {
11
+ if (value.length !== 32 || value.some((byte) => !Number.isInteger(byte) || byte < 0 || byte > 255)) {
12
+ throw new Error(`${field} must contain exactly 32 bytes`);
13
+ }
14
+ return Uint8Array.from(value);
15
+ }
16
+ function proofNode(node, field) {
17
+ return { hash: proofBytes(node.hash, `${field}.hash`), isRightSibling: node.isRightSibling };
18
+ }
19
+ export class SlipCompilerError extends Error {
20
+ code;
21
+ status;
22
+ constructor(message, code, status) {
23
+ super(message);
24
+ this.name = "SlipCompilerError";
25
+ this.code = code;
26
+ this.status = status;
27
+ }
28
+ }
29
+ function absoluteHttpUrl(value, name) {
30
+ let url;
31
+ try {
32
+ url = new URL(value);
33
+ }
34
+ catch (cause) {
35
+ throw new Error(`${name} must be an absolute URL`, { cause });
36
+ }
37
+ if (url.protocol !== "http:" && url.protocol !== "https:")
38
+ throw new Error(`${name} must use HTTP or HTTPS`);
39
+ return url.toString().replace(/\/$/, "");
40
+ }
41
+ function base64Bytes(value) {
42
+ const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
43
+ const clean = value.replace(/=+$/, "");
44
+ const output = new Uint8Array(Math.floor(clean.length * 6 / 8));
45
+ let accumulator = 0;
46
+ let bits = 0;
47
+ let index = 0;
48
+ for (const character of clean) {
49
+ const digit = alphabet.indexOf(character);
50
+ if (digit < 0)
51
+ throw new Error("RPC returned invalid base64 account data");
52
+ accumulator = accumulator * 64 + digit;
53
+ bits += 6;
54
+ if (bits >= 8) {
55
+ bits -= 8;
56
+ output[index++] = (accumulator >> bits) & 0xff;
57
+ accumulator &= (1 << bits) - 1;
58
+ }
59
+ }
60
+ return output;
61
+ }
62
+ function contains(haystack, needle) {
63
+ outer: for (let offset = 0; offset <= haystack.length - needle.length; offset++) {
64
+ for (let index = 0; index < needle.length; index++)
65
+ if (haystack[offset + index] !== needle[index])
66
+ continue outer;
67
+ return true;
68
+ }
69
+ return false;
70
+ }
71
+ function number(value, name) {
72
+ const converted = Number(value);
73
+ if (!Number.isSafeInteger(converted))
74
+ throw new Error(`${name} exceeds the JavaScript safe integer range`);
75
+ return converted;
76
+ }
77
+ function option(value) {
78
+ return isSome(value) ? value.value : null;
79
+ }
80
+ function side(value) {
81
+ return value === SideSelector.Home ? "Home" : value === SideSelector.Away ? "Away" : "Total";
82
+ }
83
+ function operation(value) {
84
+ return value === null ? null : value === BinaryOp.Add ? "Add" : value === BinaryOp.Sub ? "Sub" : "Min";
85
+ }
86
+ function settlementMode(_value) {
87
+ return "Terminal";
88
+ }
89
+ function snapshot(addressValue, market) {
90
+ const statBSide = option(market.expression.statBSide);
91
+ return {
92
+ address: addressValue,
93
+ id: market.id,
94
+ creator: market.creator,
95
+ mint: market.mint,
96
+ expression: {
97
+ fixtureId: number(market.expression.fixtureId, "fixtureId"),
98
+ settlementMode: settlementMode(market.expression.settlementMode),
99
+ period: market.expression.period,
100
+ statAKey: market.expression.statAKey,
101
+ statASide: side(market.expression.statASide),
102
+ statBKey: option(market.expression.statBKey),
103
+ statBSide: statBSide === null ? null : side(statBSide),
104
+ op: operation(option(market.expression.op)),
105
+ },
106
+ outcomeLabels: [...market.outcomeLabels],
107
+ bands: market.bands.map((band) => ({ lowerInclusive: option(band.lowerInclusive), upperExclusive: option(band.upperExclusive), outcomeIndex: band.outcomeIndex })),
108
+ pools: market.pools.slice(0, market.outcomeLabels.length),
109
+ entryDeadline: number(market.entryDeadline, "entryDeadline"),
110
+ resolveAt: number(market.resolveAt, "resolveAt"),
111
+ voidAt: number(market.voidAt, "voidAt"),
112
+ feeBps: market.feeBps,
113
+ tipBps: market.tipBps,
114
+ status: market.state === MarketState.Open ? "open" : market.state === MarketState.Resolved ? "resolved" : "voided",
115
+ winningOutcome: option(market.winningOutcome),
116
+ resolutionEvidenceHash: option(market.resolutionEvidenceHash),
117
+ createdAt: number(market.createdAt, "createdAt"),
118
+ resolvedAt: market.resolvedTs === 0n ? null : number(market.resolvedTs, "resolvedAt"),
119
+ ticketCount: market.ticketCount,
120
+ claimedStake: market.claimedStake,
121
+ };
122
+ }
123
+ function ticketSnapshot(addressValue, ticket) {
124
+ return { address: addressValue, market: ticket.market, owner: ticket.owner, nonce: ticket.nonce, outcomeIndex: ticket.outcomeIndex, stake: ticket.stake, claimed: ticket.claimed };
125
+ }
126
+ function sideArg(value) {
127
+ if (value === "Home")
128
+ return SideSelector.Home;
129
+ if (value === "Away")
130
+ return SideSelector.Away;
131
+ if (value === "Total")
132
+ return SideSelector.Total;
133
+ throw new Error(`Unsupported Rulebook side ${value}`);
134
+ }
135
+ function opArg(value) {
136
+ if (value === null)
137
+ return null;
138
+ if (value === "Add")
139
+ return BinaryOp.Add;
140
+ if (value === "Sub")
141
+ return BinaryOp.Sub;
142
+ if (value === "Min")
143
+ return BinaryOp.Min;
144
+ throw new Error(`Unsupported Rulebook operation ${value}`);
145
+ }
146
+ function settlementModeArg(value) {
147
+ if (value === "Terminal")
148
+ return SettlementMode.Terminal;
149
+ throw new Error(`Unsupported Rulebook settlement mode ${value}`);
150
+ }
151
+ async function associatedToken(mint, owner) {
152
+ return (await getProgramDerivedAddress({
153
+ programAddress: ASSOCIATED_TOKEN_PROGRAM,
154
+ seeds: [getAddressEncoder().encode(owner), getAddressEncoder().encode(TOKEN_PROGRAM), getAddressEncoder().encode(mint)],
155
+ }))[0];
156
+ }
157
+ function createAssociatedTokenInstruction(payer, mint, owner, ata) {
158
+ return Object.freeze({
159
+ programAddress: ASSOCIATED_TOKEN_PROGRAM,
160
+ accounts: [
161
+ { address: payer, role: AccountRole.WRITABLE_SIGNER },
162
+ { address: ata, role: AccountRole.WRITABLE },
163
+ { address: owner, role: AccountRole.READONLY },
164
+ { address: mint, role: AccountRole.READONLY },
165
+ { address: SYSTEM_PROGRAM, role: AccountRole.READONLY },
166
+ { address: TOKEN_PROGRAM, role: AccountRole.READONLY },
167
+ ],
168
+ data: new Uint8Array([1]),
169
+ });
170
+ }
171
+ export class SlipClient {
172
+ config;
173
+ #rpcId = 0;
174
+ constructor(config) {
175
+ this.config = Object.freeze({
176
+ ...config,
177
+ rpcUrl: absoluteHttpUrl(config.rpcUrl, "Slip RPC URL"),
178
+ websocketUrl: config.websocketUrl,
179
+ compilerOrigin: config.compilerOrigin ? absoluteHttpUrl(config.compilerOrigin, "Slip compiler origin") : undefined,
180
+ commitment: config.commitment ?? "confirmed",
181
+ programAddress: address(config.programAddress),
182
+ settlementMint: address(config.settlementMint),
183
+ });
184
+ }
185
+ async #rpc(method, params) {
186
+ const response = await fetch(this.config.rpcUrl, {
187
+ method: "POST",
188
+ headers: { "content-type": "application/json" },
189
+ body: JSON.stringify({ jsonrpc: "2.0", id: ++this.#rpcId, method, params }),
190
+ });
191
+ if (!response.ok)
192
+ throw new Error(`Slip RPC ${method} failed with HTTP ${response.status}`);
193
+ const payload = await response.json();
194
+ if (payload.error)
195
+ throw new Error(`Slip RPC ${method} failed (${payload.error.code}): ${payload.error.message}`);
196
+ if (!("result" in payload))
197
+ throw new Error(`Slip RPC ${method} returned no result`);
198
+ return payload.result;
199
+ }
200
+ async #account(accountAddress) {
201
+ const response = await this.#rpc("getAccountInfo", [accountAddress, { encoding: "base64", commitment: this.config.commitment }]);
202
+ if (!response.value)
203
+ throw new Error(`Solana account ${accountAddress} was not found`);
204
+ return response.value;
205
+ }
206
+ async supportsUnifiedMarkets() {
207
+ const program = await this.#account(this.config.programAddress);
208
+ if (!program.executable)
209
+ return false;
210
+ let bytes = base64Bytes(program.data[0]);
211
+ // Upgradeable-loader Program accounts store their ProgramData address after the enum tag.
212
+ if (bytes.length >= 36 && bytes[0] === 2 && bytes[1] === 0 && bytes[2] === 0 && bytes[3] === 0) {
213
+ const programDataAddress = getAddressDecoder().decode(bytes.slice(4, 36));
214
+ bytes = base64Bytes((await this.#account(programDataAddress)).data[0]);
215
+ }
216
+ if (contains(bytes, UNIFIED_MARKETS_CAPABILITY) || contains(bytes, CREATE_MARKET_DISCRIMINATOR))
217
+ return true;
218
+ const accounts = await this.#programAccounts();
219
+ return accounts.some(({ account }) => contains(base64Bytes(account.data[0]), getMarketDiscriminatorBytes()));
220
+ }
221
+ async #programAccounts() {
222
+ return this.#rpc("getProgramAccounts", [this.config.programAddress, { encoding: "base64", commitment: this.config.commitment }]);
223
+ }
224
+ async compileRulebook(request, signal) {
225
+ if (!this.config.compilerOrigin)
226
+ throw new Error("Slip compiler origin is not configured");
227
+ if (!/^[1-9]\d{0,18}$/.test(request.fixtureId))
228
+ throw new Error("Fixture ID must be a positive integer string");
229
+ const question = request.question.trim();
230
+ if (!question || question.length > 500)
231
+ throw new Error("Rulebook question must contain 1 to 500 characters");
232
+ const labels = request.outcomeLabels?.map((label) => label.trim());
233
+ if (labels && (labels.length < 2 || labels.length > 5 || labels.some((label) => !label) || new Set(labels).size !== labels.length)) {
234
+ throw new Error("Rulebook compilation requires two to five unique ordered poll labels");
235
+ }
236
+ const fixture = request.fixture;
237
+ if (fixture && (!fixture.competition.trim() || !fixture.home.trim() || !fixture.away.trim() || !Number.isSafeInteger(fixture.kickoff) || fixture.kickoff <= 0 || (fixture.gameState !== undefined && !Number.isSafeInteger(fixture.gameState)))) {
238
+ throw new Error("Rulebook fixture context is incomplete");
239
+ }
240
+ const response = await fetch(`${this.config.compilerOrigin}/api/v1/compile`, {
241
+ method: "POST",
242
+ headers: { "content-type": "application/json" },
243
+ body: JSON.stringify({ fixtureId: request.fixtureId, question, ...(labels ? { outcomeLabels: labels } : {}), ...(fixture ? { fixture } : {}) }),
244
+ signal,
245
+ });
246
+ const payload = await response.json().catch(() => null);
247
+ if (!response.ok) {
248
+ throw new SlipCompilerError(payload?.error?.message || `Slip compiler failed with HTTP ${response.status}`, payload?.error?.code || "compiler_error", response.status);
249
+ }
250
+ const wire = payload?.data;
251
+ if (!wire || wire.fixtureId !== request.fixtureId || wire.question !== question)
252
+ throw new Error("Slip compiler returned mismatched fixture or question context");
253
+ const rulebook = { ...wire, bands: wire.bands.map((band) => ({ lowerInclusive: band.lowerInclusive === null ? null : BigInt(band.lowerInclusive), upperExclusive: band.upperExclusive === null ? null : BigInt(band.upperExclusive), outcomeIndex: band.outcomeIndex })) };
254
+ if (labels && (rulebook.outcomeLabels.length !== labels.length || rulebook.outcomeLabels.some((label, index) => label !== labels[index]))) {
255
+ throw new Error("Slip compiler did not preserve the exact ordered poll labels");
256
+ }
257
+ if (rulebook.outcomeLabels.length < 2 || rulebook.outcomeLabels.length > 5 || rulebook.outcomeLabels.some((label) => !label.trim()) || new Set(rulebook.outcomeLabels).size !== rulebook.outcomeLabels.length) {
258
+ throw new Error("Slip compiler returned invalid derived outcome labels");
259
+ }
260
+ await verifyCompiledRulebookHash(rulebook);
261
+ return rulebook;
262
+ }
263
+ async marketAddress(creator, id) {
264
+ return (await findMarketPda({ creator, id }, { programAddress: this.config.programAddress }))[0];
265
+ }
266
+ async ticketAddress(market, owner, nonce) {
267
+ return (await findTicketPda({ market, buyer: owner, nonce }, { programAddress: this.config.programAddress }))[0];
268
+ }
269
+ async createMarket(request) {
270
+ const creator = createNoopSigner(request.creator);
271
+ const market = await this.marketAddress(request.creator, request.id);
272
+ const instruction = await getCreateMarketInstructionAsync({
273
+ creator,
274
+ market,
275
+ mint: this.config.settlementMint,
276
+ id: request.id,
277
+ expression: {
278
+ fixtureId: request.rulebook.expression.fixtureId,
279
+ settlementMode: settlementModeArg(request.rulebook.expression.settlementMode),
280
+ period: request.rulebook.expression.period,
281
+ statAKey: request.rulebook.expression.statAKey,
282
+ statASide: sideArg(request.rulebook.expression.statASide),
283
+ statBKey: request.rulebook.expression.statBKey,
284
+ statBSide: request.rulebook.expression.statBSide === null ? null : sideArg(request.rulebook.expression.statBSide),
285
+ op: opArg(request.rulebook.expression.op),
286
+ },
287
+ outcomeLabels: request.rulebook.outcomeLabels,
288
+ bands: request.rulebook.bands,
289
+ entryDeadline: request.rulebook.entryDeadline,
290
+ resolveAt: request.rulebook.resolveAt,
291
+ voidAt: request.rulebook.voidAt,
292
+ feeBps: request.rulebook.feeBps,
293
+ tipBps: request.rulebook.tipBps,
294
+ }, { programAddress: this.config.programAddress });
295
+ return { market, instructions: [instruction] };
296
+ }
297
+ async buyTicket(request) {
298
+ const market = await this.getMarket(request.market);
299
+ if (market.mint !== this.config.settlementMint)
300
+ throw new Error("Market settlement mint does not match client configuration");
301
+ if (!Number.isInteger(request.outcomeIndex) || request.outcomeIndex < 0 || request.outcomeIndex >= market.outcomeLabels.length)
302
+ throw new Error("Ticket outcome is outside this market");
303
+ if (request.amount < 1000000n)
304
+ throw new Error("Stake must be at least one settlement token");
305
+ const buyer = createNoopSigner(request.buyer);
306
+ const buyerToken = await associatedToken(this.config.settlementMint, request.buyer);
307
+ const marketVault = await associatedToken(this.config.settlementMint, request.market);
308
+ const ticket = await this.ticketAddress(request.market, request.buyer, request.nonce);
309
+ const instruction = await getBuyTicketInstructionAsync({ buyer, market: request.market, ticket, buyerToken, marketVault, outcomeIndex: request.outcomeIndex, amount: request.amount, nonce: request.nonce }, { programAddress: this.config.programAddress });
310
+ return { ticket, instructions: [createAssociatedTokenInstruction(request.buyer, this.config.settlementMint, request.buyer, buyerToken), instruction] };
311
+ }
312
+ async claimTicket(input) {
313
+ const [market, ticket] = await Promise.all([this.getMarket(input.market), this.getTicket(input.ticket)]);
314
+ if (ticket.market !== input.market)
315
+ throw new Error("Ticket does not belong to this market");
316
+ const ownerToken = await associatedToken(market.mint, ticket.owner);
317
+ const vault = await associatedToken(market.mint, input.market);
318
+ const treasuryToken = await associatedToken(market.mint, FEE_TREASURY_ADDRESS);
319
+ return [
320
+ createAssociatedTokenInstruction(input.caller, market.mint, ticket.owner, ownerToken),
321
+ createAssociatedTokenInstruction(input.caller, market.mint, FEE_TREASURY_ADDRESS, treasuryToken),
322
+ getClaimTicketInstruction({ caller: createNoopSigner(input.caller), market: input.market, ticket: input.ticket, ownerToken, marketVault: vault, treasuryToken }, { programAddress: this.config.programAddress }),
323
+ ];
324
+ }
325
+ async claimRefund(input) {
326
+ return this.claimTicket(input);
327
+ }
328
+ voidMarket(input) {
329
+ return [getVoidMarketInstruction({ caller: createNoopSigner(input.caller), market: input.market }, { programAddress: this.config.programAddress })];
330
+ }
331
+ async resolveMarket(input) {
332
+ const market = await this.getMarket(input.market);
333
+ const vault = await associatedToken(market.mint, input.market);
334
+ const treasuryToken = await associatedToken(market.mint, FEE_TREASURY_ADDRESS);
335
+ const resolverToken = await associatedToken(market.mint, input.resolver);
336
+ return [
337
+ createAssociatedTokenInstruction(input.resolver, market.mint, FEE_TREASURY_ADDRESS, treasuryToken),
338
+ createAssociatedTokenInstruction(input.resolver, market.mint, input.resolver, resolverToken),
339
+ getResolveMarketInstruction({ resolver: createNoopSigner(input.resolver), market: input.market, marketVault: vault, dailyScoresRoots: input.dailyScoresRoots, treasuryToken, resolverToken, ...input.proof }, { programAddress: this.config.programAddress }),
340
+ ];
341
+ }
342
+ /** Resolve from TxLINE's archived `/stat-validation-v3` JSON without rewriting the proof. */
343
+ async resolveMarketV3(input) {
344
+ const market = await this.getMarket(input.market);
345
+ const vault = await associatedToken(market.mint, input.market);
346
+ const treasuryToken = await associatedToken(market.mint, FEE_TREASURY_ADDRESS);
347
+ const resolverToken = await associatedToken(market.mint, input.resolver);
348
+ const proof = input.proof;
349
+ return [
350
+ createAssociatedTokenInstruction(input.resolver, market.mint, FEE_TREASURY_ADDRESS, treasuryToken),
351
+ createAssociatedTokenInstruction(input.resolver, market.mint, input.resolver, resolverToken),
352
+ getResolveMarketV3Instruction({
353
+ resolver: createNoopSigner(input.resolver),
354
+ market: input.market,
355
+ marketVault: vault,
356
+ dailyScoresRoots: input.dailyScoresRoots,
357
+ treasuryToken,
358
+ resolverToken,
359
+ ts: BigInt(proof.ts),
360
+ eventStatRoot: proofBytes(proof.eventStatRoot, "eventStatRoot"),
361
+ stats: proof.statsToProve.map((entry, index) => ({
362
+ stat: entry.stat,
363
+ statProof: entry.statProof.map((node, proofIndex) => proofNode(node, `statsToProve[${index}].statProof[${proofIndex}]`)),
364
+ })),
365
+ multiproof: {
366
+ hashes: proof.multiproof.hashes.map((node, index) => proofNode(node, `multiproof.hashes[${index}]`)),
367
+ indices: [...proof.multiproof.indices],
368
+ },
369
+ summary: {
370
+ fixtureId: BigInt(proof.summary.fixtureId),
371
+ updateCount: proof.summary.updateStats.updateCount,
372
+ minTimestamp: BigInt(proof.summary.updateStats.minTimestamp),
373
+ maxTimestamp: BigInt(proof.summary.updateStats.maxTimestamp),
374
+ eventsSubTreeRoot: proofBytes(proof.summary.eventStatsSubTreeRoot, "summary.eventStatsSubTreeRoot"),
375
+ },
376
+ subTreeProof: proof.subTreeProof.map((node, index) => proofNode(node, `subTreeProof[${index}]`)),
377
+ mainTreeProof: proof.mainTreeProof.map((node, index) => proofNode(node, `mainTreeProof[${index}]`)),
378
+ }, { programAddress: this.config.programAddress }),
379
+ ];
380
+ }
381
+ async getMarket(marketAddress) {
382
+ const account = await this.#account(marketAddress);
383
+ if (account.owner !== this.config.programAddress)
384
+ throw new Error("Market account owner does not match the configured Slip program");
385
+ const result = snapshot(marketAddress, getMarketDecoder().decode(base64Bytes(account.data[0])));
386
+ const expected = await this.marketAddress(result.creator, result.id);
387
+ if (expected !== marketAddress)
388
+ throw new Error("Market address is not the canonical Slip PDA");
389
+ return result;
390
+ }
391
+ async getTicket(ticketAddress) {
392
+ const account = await this.#account(ticketAddress);
393
+ if (account.owner !== this.config.programAddress)
394
+ throw new Error("Ticket account owner does not match the configured Slip program");
395
+ const data = base64Bytes(account.data[0]);
396
+ const result = ticketSnapshot(ticketAddress, getMarketTicketDecoder().decode(data));
397
+ const expected = await this.ticketAddress(result.market, result.owner, result.nonce);
398
+ if (expected !== ticketAddress)
399
+ throw new Error("Ticket address is not the canonical Slip PDA");
400
+ return result;
401
+ }
402
+ async listMarkets() {
403
+ const output = [];
404
+ for (const entry of await this.#programAccounts()) {
405
+ const data = base64Bytes(entry.account.data[0]);
406
+ if (!contains(data, getMarketDiscriminatorBytes()))
407
+ continue;
408
+ const marketAddress = address(entry.pubkey);
409
+ output.push(snapshot(marketAddress, getMarketDecoder().decode(data)));
410
+ }
411
+ return output;
412
+ }
413
+ async listWalletTickets(owner) {
414
+ const output = [];
415
+ for (const entry of await this.#programAccounts()) {
416
+ const data = base64Bytes(entry.account.data[0]);
417
+ if (!contains(data, getMarketTicketDiscriminatorBytes()))
418
+ continue;
419
+ const ticketAddress = address(entry.pubkey);
420
+ const decoded = getMarketTicketDecoder().decode(data);
421
+ if (decoded.owner === owner)
422
+ output.push(ticketSnapshot(ticketAddress, decoded));
423
+ }
424
+ return output;
425
+ }
426
+ async verifyReference(input) {
427
+ const reference = validateMarketReference(input);
428
+ if (reference.network !== this.config.network)
429
+ throw new Error("Market reference network does not match this client");
430
+ if (reference.program !== this.config.programAddress)
431
+ throw new Error("Market reference program does not match this client");
432
+ if (reference.mint !== this.config.settlementMint)
433
+ throw new Error("Market reference mint does not match this client");
434
+ const market = await this.getMarket(address(reference.market));
435
+ if (market.mint !== this.config.settlementMint)
436
+ throw new Error("Market account mint does not match the reference");
437
+ if (String(market.expression.fixtureId) !== reference.fixtureId)
438
+ throw new Error("Market fixture does not match the reference");
439
+ if (await calculateMarketRulebookHash(market) !== reference.rulebookHash)
440
+ throw new Error("Market Rulebook hash does not match the reference");
441
+ const transaction = await this.#rpc("getTransaction", [reference.creationSignature, { encoding: "json", commitment: this.config.commitment, maxSupportedTransactionVersion: 0 }]);
442
+ if (!transaction)
443
+ throw new Error("Market creation signature is unavailable on this RPC");
444
+ const keys = transaction.transaction.message.accountKeys.map((key) => typeof key === "string" ? key : key.pubkey);
445
+ const creation = transaction.transaction.message.instructions.find((instruction) => {
446
+ if (keys[instruction.programIdIndex] !== reference.program || !instruction.accounts.some((index) => keys[index] === reference.market))
447
+ return false;
448
+ try {
449
+ const data = getBase58Encoder().encode(instruction.data);
450
+ return CREATE_MARKET_DISCRIMINATOR.every((byte, index) => data[index] === byte);
451
+ }
452
+ catch {
453
+ return false;
454
+ }
455
+ });
456
+ if (!creation)
457
+ throw new Error("Creation signature does not contain the claimed Slip create-market instruction");
458
+ return { reference, market };
459
+ }
460
+ watchMarket(market, listener, onError) {
461
+ if (!this.config.websocketUrl)
462
+ throw new Error("Slip WebSocket URL is not configured");
463
+ const socket = new WebSocket(this.config.websocketUrl);
464
+ let subscription = null;
465
+ socket.addEventListener("open", () => socket.send(JSON.stringify({ jsonrpc: "2.0", id: 1, method: "accountSubscribe", params: [market, { encoding: "base64", commitment: this.config.commitment }] })));
466
+ socket.addEventListener("message", (event) => {
467
+ try {
468
+ const message = JSON.parse(String(event.data));
469
+ if (typeof message.result === "number")
470
+ subscription = message.result;
471
+ if (message.method === "accountNotification")
472
+ void this.getMarket(market).then(listener, (cause) => onError?.(cause instanceof Error ? cause : new Error(String(cause))));
473
+ }
474
+ catch (cause) {
475
+ onError?.(cause instanceof Error ? cause : new Error(String(cause)));
476
+ }
477
+ });
478
+ socket.addEventListener("error", () => onError?.(new Error("Slip market subscription failed")));
479
+ return () => {
480
+ if (subscription !== null && socket.readyState === WebSocket.OPEN)
481
+ socket.send(JSON.stringify({ jsonrpc: "2.0", id: 2, method: "accountUnsubscribe", params: [subscription] }));
482
+ socket.close();
483
+ };
484
+ }
485
+ }
486
+ export function createSlipClient(config) { return new SlipClient(config); }
487
+ //# sourceMappingURL=public-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-client.js","sourceRoot":"","sources":["../src/public-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export declare function parseAmount(value: string): bigint;
2
+ export declare function formatAmount(value: bigint, options?: {
3
+ trim?: boolean;
4
+ }): string;
5
+ export declare function calculateMarket(pools: readonly bigint[], feeBps: number, tipBps: number): {
6
+ total: bigint;
7
+ fee: bigint;
8
+ resolverTip: bigint;
9
+ net: bigint;
10
+ outcomes: {
11
+ pool: bigint;
12
+ probabilityBps: number;
13
+ projectedPayout(stake: bigint): bigint | null;
14
+ }[];
15
+ dustFor(winningPool: bigint, winningStakes: readonly bigint[]): bigint;
16
+ };
17
+ //# sourceMappingURL=public-math.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-math.d.ts","sourceRoot":"","sources":["../src/public-math.ts"],"names":[],"mappings":"AAIA,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAKpF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;;;;;+BAmB3D,MAAM,GAAG,MAAM,GAAG,IAAI;;yBAK1B,MAAM,iBAAiB,SAAS,MAAM,EAAE,GAAG,MAAM;EAMzE"}
@@ -0,0 +1,57 @@
1
+ const SCALE = 1000000n;
2
+ const BPS = 10000n;
3
+ const U64_MAX = 18446744073709551615n;
4
+ export function parseAmount(value) {
5
+ const match = /^(0|[1-9]\d*)(?:\.(\d{1,6}))?$/.exec(value.trim());
6
+ if (!match)
7
+ throw new Error("Amount must be a non-negative decimal with at most six places");
8
+ const amount = BigInt(match[1]) * SCALE + BigInt((match[2] ?? "").padEnd(6, "0"));
9
+ if (amount > U64_MAX)
10
+ throw new Error("Amount exceeds the settlement token limit");
11
+ return amount;
12
+ }
13
+ export function formatAmount(value, options = {}) {
14
+ if (value < 0n || value > U64_MAX)
15
+ throw new Error("Amount must fit in u64");
16
+ const fraction = (value % SCALE).toString().padStart(6, "0");
17
+ const rendered = `${value / SCALE}.${fraction}`;
18
+ return options.trim === false ? rendered : rendered.replace(/\.0+$/, "").replace(/(\.\d*?)0+$/, "$1");
19
+ }
20
+ export function calculateMarket(pools, feeBps, tipBps) {
21
+ if (pools.length < 2 || pools.length > 5)
22
+ throw new Error("A market must have two to five pools");
23
+ if (![feeBps, tipBps].every((value) => Number.isInteger(value) && value >= 0 && value <= 10_000)) {
24
+ throw new Error("Fee and resolver tip must be basis points");
25
+ }
26
+ for (const pool of pools)
27
+ if (pool < 0n || pool > U64_MAX)
28
+ throw new Error("Pool amount must fit in u64");
29
+ const total = pools.reduce((sum, pool) => sum + pool, 0n);
30
+ if (total > U64_MAX)
31
+ throw new Error("Total pool exceeds u64");
32
+ const fee = total * BigInt(feeBps) / BPS;
33
+ const resolverTip = total * BigInt(tipBps) / BPS;
34
+ const net = total - fee - resolverTip;
35
+ return {
36
+ total,
37
+ fee,
38
+ resolverTip,
39
+ net,
40
+ outcomes: pools.map((pool) => ({
41
+ pool,
42
+ probabilityBps: total === 0n ? 0 : Number(pool * BPS / total),
43
+ projectedPayout(stake) {
44
+ if (stake < 0n)
45
+ throw new Error("Stake cannot be negative");
46
+ return pool === 0n ? null : stake * net / pool;
47
+ },
48
+ })),
49
+ dustFor(winningPool, winningStakes) {
50
+ if (winningPool <= 0n)
51
+ return net;
52
+ const paid = winningStakes.reduce((sum, stake) => sum + stake * net / winningPool, 0n);
53
+ return net - paid;
54
+ },
55
+ };
56
+ }
57
+ //# sourceMappingURL=public-math.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-math.js","sourceRoot":"","sources":["../src/public-math.ts"],"names":[],"mappings":"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"}