@markit.market/sdk 0.1.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 (66) hide show
  1. package/README.md +76 -0
  2. package/dist/abi/ERC20.d.ts +44 -0
  3. package/dist/abi/ERC20.d.ts.map +1 -0
  4. package/dist/abi/ERC20.js +30 -0
  5. package/dist/abi/ERC20.js.map +1 -0
  6. package/dist/abi/LpVault.d.ts +89 -0
  7. package/dist/abi/LpVault.d.ts.map +1 -0
  8. package/dist/abi/LpVault.js +12 -0
  9. package/dist/abi/LpVault.js.map +1 -0
  10. package/dist/abi/MarketEngine.d.ts +259 -0
  11. package/dist/abi/MarketEngine.d.ts.map +1 -0
  12. package/dist/abi/MarketEngine.js +28 -0
  13. package/dist/abi/MarketEngine.js.map +1 -0
  14. package/dist/abi/MarketFactory.d.ts +32 -0
  15. package/dist/abi/MarketFactory.d.ts.map +1 -0
  16. package/dist/abi/MarketFactory.js +6 -0
  17. package/dist/abi/MarketFactory.js.map +1 -0
  18. package/dist/builder.d.ts +3 -0
  19. package/dist/builder.d.ts.map +1 -0
  20. package/dist/builder.js +41 -0
  21. package/dist/builder.js.map +1 -0
  22. package/dist/client.d.ts +16 -0
  23. package/dist/client.d.ts.map +1 -0
  24. package/dist/client.js +45 -0
  25. package/dist/client.js.map +1 -0
  26. package/dist/constants.d.ts +7 -0
  27. package/dist/constants.d.ts.map +1 -0
  28. package/dist/constants.js +27 -0
  29. package/dist/constants.js.map +1 -0
  30. package/dist/errors.d.ts +21 -0
  31. package/dist/errors.d.ts.map +1 -0
  32. package/dist/errors.js +24 -0
  33. package/dist/errors.js.map +1 -0
  34. package/dist/index.d.ts +6 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +7 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/markets.d.ts +4 -0
  39. package/dist/markets.d.ts.map +1 -0
  40. package/dist/markets.js +111 -0
  41. package/dist/markets.js.map +1 -0
  42. package/dist/trade.d.ts +4 -0
  43. package/dist/trade.d.ts.map +1 -0
  44. package/dist/trade.js +139 -0
  45. package/dist/trade.js.map +1 -0
  46. package/dist/types.d.ts +185 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +2 -0
  49. package/dist/types.js.map +1 -0
  50. package/dist/utils/format.d.ts +17 -0
  51. package/dist/utils/format.d.ts.map +1 -0
  52. package/dist/utils/format.js +32 -0
  53. package/dist/utils/format.js.map +1 -0
  54. package/dist/utils/pricing.d.ts +15 -0
  55. package/dist/utils/pricing.d.ts.map +1 -0
  56. package/dist/utils/pricing.js +61 -0
  57. package/dist/utils/pricing.js.map +1 -0
  58. package/dist/utils/supabase.d.ts +16 -0
  59. package/dist/utils/supabase.d.ts.map +1 -0
  60. package/dist/utils/supabase.js +45 -0
  61. package/dist/utils/supabase.js.map +1 -0
  62. package/dist/vault.d.ts +4 -0
  63. package/dist/vault.d.ts.map +1 -0
  64. package/dist/vault.js +89 -0
  65. package/dist/vault.js.map +1 -0
  66. package/package.json +46 -0
@@ -0,0 +1,185 @@
1
+ import type { Address, WalletClient } from 'viem';
2
+ export interface MarkitClientConfig {
3
+ /** Builder code for attribution (required) */
4
+ builderCode: string;
5
+ /** Target chain: 'base' (mainnet) or 'baseSepolia' (testnet). Default: 'base' */
6
+ chain?: 'base' | 'baseSepolia';
7
+ /** Custom RPC URL (overrides default) */
8
+ rpcUrl?: string;
9
+ /** API key for builder stats (optional, from registration) */
10
+ apiKey?: string;
11
+ }
12
+ export interface MarketSummary {
13
+ address: Address;
14
+ question: string;
15
+ slug: string | null;
16
+ state: number;
17
+ outcome: number;
18
+ sport: string;
19
+ yesPrice: string;
20
+ noPrice: string;
21
+ yesLiability: string;
22
+ noLiability: string;
23
+ engineUsdc: string;
24
+ bettingCloseTime: number;
25
+ resolveTime: number;
26
+ homeLogoUrl: string | null;
27
+ awayLogoUrl: string | null;
28
+ }
29
+ export interface MarketDetail extends MarketSummary {
30
+ totalLpShares: string;
31
+ accumulatedFees: string;
32
+ totalLpDeposited: string;
33
+ curveA: string;
34
+ baseFeeBps: number;
35
+ feeK: number;
36
+ minFeeBps: number;
37
+ minBetUsdc: string;
38
+ minLpUsdc: string;
39
+ seedImbalance: string;
40
+ protocolFeeBps: number;
41
+ }
42
+ export interface MarketPrice {
43
+ yes: number;
44
+ no: number;
45
+ }
46
+ export interface BetQuote {
47
+ sharesOut: string;
48
+ avgPrice: string;
49
+ priceImpact: string;
50
+ lpFee: string;
51
+ protocolFee: string;
52
+ builderFee: string;
53
+ totalFee: string;
54
+ effectivePrice: string;
55
+ }
56
+ export interface LiveScore {
57
+ homeTeam: string;
58
+ awayTeam: string;
59
+ homeScore: number;
60
+ awayScore: number;
61
+ status: string;
62
+ period: string;
63
+ clock: string;
64
+ }
65
+ export interface MarketListOptions {
66
+ sport?: 'nba' | 'ncaab' | 'all';
67
+ state?: 'open' | 'closeOnly' | 'resolved' | 'all';
68
+ limit?: number;
69
+ }
70
+ export interface PlaceBetParams {
71
+ market: Address;
72
+ side: 'yes' | 'no';
73
+ usdcAmount: bigint;
74
+ minSharesOut?: bigint;
75
+ signer: WalletClient;
76
+ }
77
+ export interface PlaceBetResult {
78
+ txHash: string;
79
+ attributed: boolean;
80
+ }
81
+ export interface BuildPlaceBetCallsParams {
82
+ market: Address;
83
+ side: 'yes' | 'no';
84
+ usdcAmount: bigint;
85
+ minSharesOut?: bigint;
86
+ }
87
+ export interface CallData {
88
+ to: Address;
89
+ data: `0x${string}`;
90
+ value?: bigint;
91
+ }
92
+ export interface ReportAttributionParams {
93
+ market: Address;
94
+ txHash: string;
95
+ bettor: Address;
96
+ }
97
+ export interface UserPosition {
98
+ market: Address;
99
+ yesShares: bigint;
100
+ noShares: bigint;
101
+ }
102
+ export interface VaultState {
103
+ nav: bigint;
104
+ sharePrice: bigint;
105
+ totalShares: bigint;
106
+ float: bigint;
107
+ activeMarketCount: number;
108
+ }
109
+ export interface VaultUserPosition {
110
+ shares: bigint;
111
+ value: bigint;
112
+ }
113
+ export interface VaultDepositParams {
114
+ usdcAmount: bigint;
115
+ signer: WalletClient;
116
+ }
117
+ export interface VaultWithdrawParams {
118
+ shares: bigint;
119
+ signer: WalletClient;
120
+ }
121
+ export interface BuilderStats {
122
+ code: string;
123
+ totalVolume: number;
124
+ totalFees: number;
125
+ totalBets: number;
126
+ uniqueUsers: number;
127
+ unpaidFees: number;
128
+ last30dVolume: number;
129
+ last30dFees: number;
130
+ }
131
+ export interface BuilderFeeRow {
132
+ market: string;
133
+ bettor: string;
134
+ usdcBet: string;
135
+ builderFee: string;
136
+ txHash: string;
137
+ createdAt: string;
138
+ paidAt: string | null;
139
+ }
140
+ export interface ChainConfig {
141
+ id: number;
142
+ rpcUrl: string;
143
+ factoryAddress: Address;
144
+ usdcAddress: Address;
145
+ vaultAddress: Address;
146
+ supabaseUrl: string;
147
+ supabaseAnonKey: string;
148
+ baseUrl: string;
149
+ }
150
+ export interface MarkitClient {
151
+ markets: MarkitMarkets;
152
+ trade: MarkitTrade;
153
+ vault: MarkitVault;
154
+ builder: MarkitBuilder;
155
+ }
156
+ export interface MarkitMarkets {
157
+ list(options?: MarketListOptions): Promise<MarketSummary[]>;
158
+ get(slugOrAddress: string): Promise<MarketDetail | null>;
159
+ getPrice(market: Address): Promise<MarketPrice>;
160
+ getQuote(params: {
161
+ market: Address;
162
+ side: 'yes' | 'no';
163
+ usdcAmount: bigint;
164
+ }): Promise<BetQuote>;
165
+ getLiveScores(): Promise<LiveScore[]>;
166
+ }
167
+ export interface MarkitTrade {
168
+ placeBet(params: PlaceBetParams): Promise<PlaceBetResult>;
169
+ buildPlaceBetCalls(params: BuildPlaceBetCallsParams): CallData[];
170
+ reportAttribution(params: ReportAttributionParams): Promise<boolean>;
171
+ getPositions(user: Address): Promise<UserPosition[]>;
172
+ }
173
+ export interface MarkitVault {
174
+ getState(): Promise<VaultState>;
175
+ getUserPosition(user: Address): Promise<VaultUserPosition>;
176
+ deposit(params: VaultDepositParams): Promise<string>;
177
+ requestWithdrawal(params: VaultWithdrawParams): Promise<string>;
178
+ }
179
+ export interface MarkitBuilder {
180
+ getStats(): Promise<BuilderStats | null>;
181
+ getFeeHistory(params?: {
182
+ limit?: number;
183
+ }): Promise<BuilderFeeRow[]>;
184
+ }
185
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ /** 1e18 — WAD precision */
2
+ export declare const WAD = 1000000000000000000n;
3
+ /** Convert 6-dec USDC to 18-dec WAD */
4
+ export declare function toWad(usdc: bigint): bigint;
5
+ /** Convert 18-dec WAD to 6-dec USDC (truncates) */
6
+ export declare function fromWad(wad: bigint): bigint;
7
+ /** WAD multiply: (a * b) / 1e18 */
8
+ export declare function wadMul(a: bigint, b: bigint): bigint;
9
+ /** WAD divide: (a * 1e18) / b */
10
+ export declare function wadDiv(a: bigint, b: bigint): bigint;
11
+ /** Convert WAD to human-readable number */
12
+ export declare function wadToNumber(wad: bigint): number;
13
+ /** Convert 6-dec USDC to human-readable number */
14
+ export declare function usdcToNumber(usdc: bigint): number;
15
+ /** Format USDC for display */
16
+ export declare function formatUsdc(usdc: bigint | number): string;
17
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,eAAO,MAAM,GAAG,uBAA6B,CAAA;AAE7C,uCAAuC;AACvC,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED,mDAAmD;AACnD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,mCAAmC;AACnC,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,iCAAiC;AACjC,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,kDAAkD;AAClD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,8BAA8B;AAC9B,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAGxD"}
@@ -0,0 +1,32 @@
1
+ /** 1e18 — WAD precision */
2
+ export const WAD = 1000000000000000000n;
3
+ /** Convert 6-dec USDC to 18-dec WAD */
4
+ export function toWad(usdc) {
5
+ return usdc * 1000000000000n;
6
+ }
7
+ /** Convert 18-dec WAD to 6-dec USDC (truncates) */
8
+ export function fromWad(wad) {
9
+ return wad / 1000000000000n;
10
+ }
11
+ /** WAD multiply: (a * b) / 1e18 */
12
+ export function wadMul(a, b) {
13
+ return (a * b) / WAD;
14
+ }
15
+ /** WAD divide: (a * 1e18) / b */
16
+ export function wadDiv(a, b) {
17
+ return (a * WAD) / b;
18
+ }
19
+ /** Convert WAD to human-readable number */
20
+ export function wadToNumber(wad) {
21
+ return Number(wad) / 1e18;
22
+ }
23
+ /** Convert 6-dec USDC to human-readable number */
24
+ export function usdcToNumber(usdc) {
25
+ return Number(usdc) / 1e6;
26
+ }
27
+ /** Format USDC for display */
28
+ export function formatUsdc(usdc) {
29
+ const n = typeof usdc === 'bigint' ? Number(usdc) / 1e6 : usdc;
30
+ return `$${n.toFixed(2)}`;
31
+ }
32
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,MAAM,CAAC,MAAM,GAAG,GAAG,oBAA0B,CAAA;AAE7C,uCAAuC;AACvC,MAAM,UAAU,KAAK,CAAC,IAAY;IAChC,OAAO,IAAI,GAAG,cAAkB,CAAA;AAClC,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,OAAO,GAAG,GAAG,cAAkB,CAAA;AACjC,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,MAAM,CAAC,CAAS,EAAE,CAAS;IACzC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;AACtB,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,MAAM,CAAC,CAAS,EAAE,CAAS;IACzC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;AACtB,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;AAC3B,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;AAC3B,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,UAAU,CAAC,IAAqB;IAC9C,MAAM,CAAC,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;IAC9D,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;AAC3B,CAAC"}
@@ -0,0 +1,15 @@
1
+ /** Off-chain piecewise pricing — mirrors MarketEngine's BET_STEPS=16 */
2
+ export declare function getMarkPrice(yesLiability: bigint, noLiability: bigint, usdcBalanceWad: bigint, virtualLiquidity: bigint, seedImbalance?: bigint): {
3
+ pYes: bigint;
4
+ pNo: bigint;
5
+ };
6
+ export interface PiecewiseResult {
7
+ sharesOut: bigint;
8
+ avgPrice: bigint;
9
+ spotPrice: bigint;
10
+ priceImpactPct: number;
11
+ lpFeeUsdc: bigint;
12
+ protocolFeeUsdc: bigint;
13
+ }
14
+ export declare function estimatePiecewise(side: number, usdcIn: bigint, yesLiability: bigint, noLiability: bigint, usdcBalanceWad: bigint, virtualLiquidity: bigint, lpFeeBps: bigint, protocolFeeBps: bigint, seedImbalance?: bigint): PiecewiseResult;
15
+ //# sourceMappingURL=pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/utils/pricing.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAexE,wBAAgB,YAAY,CAC1B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,EACxB,aAAa,SAAK,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAkB/B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,aAAa,SAAK,GACjB,eAAe,CAkCjB"}
@@ -0,0 +1,61 @@
1
+ /** Off-chain piecewise pricing — mirrors MarketEngine's BET_STEPS=16 */
2
+ const WAD = 1000000000000000000n;
3
+ const BET_STEPS = 16;
4
+ const CURVE_A = 300000000000000000n; // 0.30e18
5
+ const WAD_TO_USDC = 1000000000000n;
6
+ function wadDiv(a, b) {
7
+ return (a * WAD) / b;
8
+ }
9
+ function abs(x) {
10
+ return x < 0n ? -x : x;
11
+ }
12
+ export function getMarkPrice(yesLiability, noLiability, usdcBalanceWad, virtualLiquidity, seedImbalance = 0n) {
13
+ const signedImbalance = yesLiability - noLiability + seedImbalance;
14
+ if (signedImbalance === 0n)
15
+ return { pYes: WAD / 2n, pNo: WAD / 2n };
16
+ const backingEff = usdcBalanceWad + virtualLiquidity;
17
+ const x = (signedImbalance * WAD) / backingEff;
18
+ const absX = abs(x);
19
+ const numerator = (WAD / 2n) * x;
20
+ const denominator = CURVE_A + absX;
21
+ const adjustment = numerator / denominator;
22
+ let raw = WAD / 2n + adjustment;
23
+ const floor = WAD / 100n;
24
+ const ceiling = (WAD * 99n) / 100n;
25
+ if (raw < floor)
26
+ raw = floor;
27
+ if (raw > ceiling)
28
+ raw = ceiling;
29
+ return { pYes: raw, pNo: WAD - raw };
30
+ }
31
+ export function estimatePiecewise(side, usdcIn, yesLiability, noLiability, usdcBalanceWad, virtualLiquidity, lpFeeBps, protocolFeeBps, seedImbalance = 0n) {
32
+ const protocolFeeUsdc = (usdcIn * protocolFeeBps + 9999n) / 10000n;
33
+ const lpFeeUsdc = (usdcIn * lpFeeBps + 9999n) / 10000n;
34
+ const usdcNet = usdcIn - lpFeeUsdc - protocolFeeUsdc;
35
+ const { pYes: spotPYes, pNo: spotPNo } = getMarkPrice(yesLiability, noLiability, usdcBalanceWad, virtualLiquidity, seedImbalance);
36
+ const spotPrice = side === 0 ? spotPYes : spotPNo;
37
+ const usdcNetWad = usdcNet * WAD_TO_USDC;
38
+ const stepUsdc = usdcNetWad / BigInt(BET_STEPS);
39
+ const remainder = usdcNetWad - stepUsdc * BigInt(BET_STEPS);
40
+ let totalShares = 0n;
41
+ let simYes = yesLiability;
42
+ let simNo = noLiability;
43
+ const simBalance = usdcBalanceWad + usdcIn * WAD_TO_USDC;
44
+ for (let i = 0; i < BET_STEPS; i++) {
45
+ let thisStep = stepUsdc;
46
+ if (i === BET_STEPS - 1)
47
+ thisStep += remainder;
48
+ const { pYes, pNo } = getMarkPrice(simYes, simNo, simBalance, virtualLiquidity, seedImbalance);
49
+ const price = side === 0 ? pYes : pNo;
50
+ const stepShares = wadDiv(thisStep, price);
51
+ totalShares += stepShares;
52
+ if (side === 0)
53
+ simYes += stepShares;
54
+ else
55
+ simNo += stepShares;
56
+ }
57
+ const avgPrice = totalShares > 0n ? wadDiv(usdcNetWad, totalShares) : spotPrice;
58
+ const priceImpactPct = spotPrice > 0n ? (Number(avgPrice - spotPrice) / Number(spotPrice)) * 100 : 0;
59
+ return { sharesOut: totalShares, avgPrice, spotPrice, priceImpactPct, lpFeeUsdc, protocolFeeUsdc };
60
+ }
61
+ //# sourceMappingURL=pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/utils/pricing.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,MAAM,GAAG,GAAG,oBAA0B,CAAA;AACtC,MAAM,SAAS,GAAG,EAAE,CAAA;AACpB,MAAM,OAAO,GAAG,mBAAwB,CAAA,CAAC,UAAU;AACnD,MAAM,WAAW,GAAG,cAAkB,CAAA;AAEtC,SAAS,MAAM,CAAC,CAAS,EAAE,CAAS;IAClC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;AACtB,CAAC;AAED,SAAS,GAAG,CAAC,CAAS;IACpB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,YAAoB,EACpB,WAAmB,EACnB,cAAsB,EACtB,gBAAwB,EACxB,aAAa,GAAG,EAAE;IAElB,MAAM,eAAe,GAAG,YAAY,GAAG,WAAW,GAAG,aAAa,CAAA;IAClE,IAAI,eAAe,KAAK,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,CAAA;IAEpE,MAAM,UAAU,GAAG,cAAc,GAAG,gBAAgB,CAAA;IACpD,MAAM,CAAC,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,UAAU,CAAA;IAC9C,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;IACnB,MAAM,SAAS,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;IAChC,MAAM,WAAW,GAAG,OAAO,GAAG,IAAI,CAAA;IAClC,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,CAAA;IAE1C,IAAI,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,UAAU,CAAA;IAC/B,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAA;IACxB,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAA;IAClC,IAAI,GAAG,GAAG,KAAK;QAAE,GAAG,GAAG,KAAK,CAAA;IAC5B,IAAI,GAAG,GAAG,OAAO;QAAE,GAAG,GAAG,OAAO,CAAA;IAEhC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAA;AACtC,CAAC;AAWD,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,MAAc,EACd,YAAoB,EACpB,WAAmB,EACnB,cAAsB,EACtB,gBAAwB,EACxB,QAAgB,EAChB,cAAsB,EACtB,aAAa,GAAG,EAAE;IAElB,MAAM,eAAe,GAAG,CAAC,MAAM,GAAG,cAAc,GAAG,KAAM,CAAC,GAAG,MAAO,CAAA;IACpE,MAAM,SAAS,GAAG,CAAC,MAAM,GAAG,QAAQ,GAAG,KAAM,CAAC,GAAG,MAAO,CAAA;IACxD,MAAM,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,eAAe,CAAA;IAEpD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAA;IACjI,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAA;IAEjD,MAAM,UAAU,GAAG,OAAO,GAAG,WAAW,CAAA;IACxC,MAAM,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;IAC/C,MAAM,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;IAE3D,IAAI,WAAW,GAAG,EAAE,CAAA;IACpB,IAAI,MAAM,GAAG,YAAY,CAAA;IACzB,IAAI,KAAK,GAAG,WAAW,CAAA;IACvB,MAAM,UAAU,GAAG,cAAc,GAAG,MAAM,GAAG,WAAW,CAAA;IAExD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,IAAI,QAAQ,GAAG,QAAQ,CAAA;QACvB,IAAI,CAAC,KAAK,SAAS,GAAG,CAAC;YAAE,QAAQ,IAAI,SAAS,CAAA;QAE9C,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAA;QAC9F,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAA;QACrC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;QAC1C,WAAW,IAAI,UAAU,CAAA;QAEzB,IAAI,IAAI,KAAK,CAAC;YAAE,MAAM,IAAI,UAAU,CAAA;;YAC/B,KAAK,IAAI,UAAU,CAAA;IAC1B,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC/E,MAAM,cAAc,GAAG,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAEpG,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,EAAE,CAAA;AACpG,CAAC"}
@@ -0,0 +1,16 @@
1
+ /** Lightweight PostgREST wrapper — no @supabase/supabase-js dependency */
2
+ export interface PostgRESTOptions {
3
+ url: string;
4
+ anonKey: string;
5
+ }
6
+ interface QueryParams {
7
+ select?: string;
8
+ eq?: Record<string, string>;
9
+ order?: string;
10
+ limit?: number;
11
+ offset?: number;
12
+ }
13
+ export declare function postgrestQuery<T>(opts: PostgRESTOptions, table: string, params?: QueryParams): Promise<T[]>;
14
+ export declare function postgrestRpc<T>(opts: PostgRESTOptions, fn: string, params?: Record<string, unknown>): Promise<T>;
15
+ export {};
16
+ //# sourceMappingURL=supabase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../src/utils/supabase.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAsB,cAAc,CAAC,CAAC,EACpC,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,WAAgB,GACvB,OAAO,CAAC,CAAC,EAAE,CAAC,CA0Bd;AAED,wBAAsB,YAAY,CAAC,CAAC,EAClC,IAAI,EAAE,gBAAgB,EACtB,EAAE,EAAE,MAAM,EACV,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACnC,OAAO,CAAC,CAAC,CAAC,CAkBZ"}
@@ -0,0 +1,45 @@
1
+ /** Lightweight PostgREST wrapper — no @supabase/supabase-js dependency */
2
+ export async function postgrestQuery(opts, table, params = {}) {
3
+ const url = new URL(`${opts.url}/rest/v1/${table}`);
4
+ if (params.select)
5
+ url.searchParams.set('select', params.select);
6
+ if (params.eq) {
7
+ for (const [key, val] of Object.entries(params.eq)) {
8
+ url.searchParams.set(key, `eq.${val}`);
9
+ }
10
+ }
11
+ if (params.order)
12
+ url.searchParams.set('order', params.order);
13
+ if (params.limit)
14
+ url.searchParams.set('limit', String(params.limit));
15
+ if (params.offset)
16
+ url.searchParams.set('offset', String(params.offset));
17
+ const res = await fetch(url.toString(), {
18
+ headers: {
19
+ 'apikey': opts.anonKey,
20
+ 'Authorization': `Bearer ${opts.anonKey}`,
21
+ 'Content-Type': 'application/json',
22
+ },
23
+ });
24
+ if (!res.ok) {
25
+ throw new Error(`PostgREST error: ${res.status} ${res.statusText}`);
26
+ }
27
+ return res.json();
28
+ }
29
+ export async function postgrestRpc(opts, fn, params = {}) {
30
+ const url = `${opts.url}/rest/v1/rpc/${fn}`;
31
+ const res = await fetch(url, {
32
+ method: 'POST',
33
+ headers: {
34
+ 'apikey': opts.anonKey,
35
+ 'Authorization': `Bearer ${opts.anonKey}`,
36
+ 'Content-Type': 'application/json',
37
+ },
38
+ body: JSON.stringify(params),
39
+ });
40
+ if (!res.ok) {
41
+ throw new Error(`PostgREST RPC error: ${res.status} ${res.statusText}`);
42
+ }
43
+ return res.json();
44
+ }
45
+ //# sourceMappingURL=supabase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.js","sourceRoot":"","sources":["../../src/utils/supabase.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAe1E,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAsB,EACtB,KAAa,EACb,SAAsB,EAAE;IAExB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,YAAY,KAAK,EAAE,CAAC,CAAA;IAEnD,IAAI,MAAM,CAAC,MAAM;QAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IAChE,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,CAAA;QACxC,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,KAAK;QAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IAC7D,IAAI,MAAM,CAAC,KAAK;QAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACrE,IAAI,MAAM,CAAC,MAAM;QAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;IAExE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;QACtC,OAAO,EAAE;YACP,QAAQ,EAAE,IAAI,CAAC,OAAO;YACtB,eAAe,EAAE,UAAU,IAAI,CAAC,OAAO,EAAE;YACzC,cAAc,EAAE,kBAAkB;SACnC;KACF,CAAC,CAAA;IAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;IACrE,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,EAAkB,CAAA;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAsB,EACtB,EAAU,EACV,SAAkC,EAAE;IAEpC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,gBAAgB,EAAE,EAAE,CAAA;IAE3C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,QAAQ,EAAE,IAAI,CAAC,OAAO;YACtB,eAAe,EAAE,UAAU,IAAI,CAAC,OAAO,EAAE;YACzC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;KAC7B,CAAC,CAAA;IAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;IACzE,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,EAAgB,CAAA;AACjC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { PublicClient } from 'viem';
2
+ import type { ChainConfig, MarkitVault } from './types.js';
3
+ export declare function createVault(publicClient: PublicClient, chainConfig: ChainConfig): MarkitVault;
4
+ //# sourceMappingURL=vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../src/vault.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,YAAY,EAAE,MAAM,MAAM,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAA0E,WAAW,EAAE,MAAM,YAAY,CAAA;AAKlI,wBAAgB,WAAW,CACzB,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,GACvB,WAAW,CA0Fb"}
package/dist/vault.js ADDED
@@ -0,0 +1,89 @@
1
+ import { lpVaultAbi } from './abi/LpVault.js';
2
+ import { erc20Abi } from './abi/ERC20.js';
3
+ import { MarkitError, ErrorCode } from './errors.js';
4
+ export function createVault(publicClient, chainConfig) {
5
+ const vault = chainConfig.vaultAddress;
6
+ return {
7
+ async getState() {
8
+ const results = await publicClient.multicall({
9
+ contracts: [
10
+ { address: vault, abi: lpVaultAbi, functionName: 'currentNAV' },
11
+ { address: vault, abi: lpVaultAbi, functionName: 'sharePrice' },
12
+ { address: vault, abi: lpVaultAbi, functionName: 'totalShares' },
13
+ { address: vault, abi: lpVaultAbi, functionName: 'float' },
14
+ { address: vault, abi: lpVaultAbi, functionName: 'activeMarketCount' },
15
+ ],
16
+ });
17
+ return {
18
+ nav: results[0].result,
19
+ sharePrice: results[1].result,
20
+ totalShares: results[2].result,
21
+ float: results[3].result,
22
+ activeMarketCount: Number(results[4].result),
23
+ };
24
+ },
25
+ async getUserPosition(user) {
26
+ const results = await publicClient.multicall({
27
+ contracts: [
28
+ { address: vault, abi: lpVaultAbi, functionName: 'shares', args: [user] },
29
+ { address: vault, abi: lpVaultAbi, functionName: 'userValue', args: [user] },
30
+ ],
31
+ });
32
+ return {
33
+ shares: results[0].result,
34
+ value: results[1].result,
35
+ };
36
+ },
37
+ async deposit(params) {
38
+ const { usdcAmount, signer } = params;
39
+ const account = signer.account;
40
+ if (!account)
41
+ throw new MarkitError(ErrorCode.INVALID_PARAMS, 'Signer has no account');
42
+ // Check allowance
43
+ const allowance = await publicClient.readContract({
44
+ address: chainConfig.usdcAddress,
45
+ abi: erc20Abi,
46
+ functionName: 'allowance',
47
+ args: [account.address, vault],
48
+ });
49
+ if (allowance < usdcAmount) {
50
+ const approveHash = await signer.writeContract({
51
+ address: chainConfig.usdcAddress,
52
+ abi: erc20Abi,
53
+ functionName: 'approve',
54
+ args: [vault, usdcAmount],
55
+ chain: null,
56
+ account: account,
57
+ });
58
+ await publicClient.waitForTransactionReceipt({ hash: approveHash });
59
+ }
60
+ const hash = await signer.writeContract({
61
+ address: vault,
62
+ abi: lpVaultAbi,
63
+ functionName: 'deposit',
64
+ args: [usdcAmount],
65
+ chain: null,
66
+ account: account,
67
+ });
68
+ await publicClient.waitForTransactionReceipt({ hash });
69
+ return hash;
70
+ },
71
+ async requestWithdrawal(params) {
72
+ const { shares, signer } = params;
73
+ const account = signer.account;
74
+ if (!account)
75
+ throw new MarkitError(ErrorCode.INVALID_PARAMS, 'Signer has no account');
76
+ const hash = await signer.writeContract({
77
+ address: vault,
78
+ abi: lpVaultAbi,
79
+ functionName: 'requestWithdrawal',
80
+ args: [shares],
81
+ chain: null,
82
+ account: account,
83
+ });
84
+ await publicClient.waitForTransactionReceipt({ hash });
85
+ return hash;
86
+ },
87
+ };
88
+ }
89
+ //# sourceMappingURL=vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../src/vault.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@markit.market/sdk",
3
+ "version": "0.1.0",
4
+ "description": "TypeScript SDK for MarkIt prediction markets on Base",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
18
+ "scripts": {
19
+ "prepublishOnly": "npm run clean && npm run build && npm test",
20
+ "build": "tsc",
21
+ "typecheck": "tsc --noEmit",
22
+ "clean": "rm -rf dist",
23
+ "test": "vitest run",
24
+ "test:watch": "vitest"
25
+ },
26
+ "peerDependencies": {
27
+ "viem": ">=2.0.0"
28
+ },
29
+ "devDependencies": {
30
+ "typescript": "~5.9.3",
31
+ "viem": "^2.46.1",
32
+ "vitest": "^4.0.18"
33
+ },
34
+ "license": "MIT",
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "https://github.com/markit-market/sdk"
38
+ },
39
+ "keywords": [
40
+ "prediction-markets",
41
+ "base",
42
+ "viem",
43
+ "sdk",
44
+ "markit"
45
+ ]
46
+ }