@kehtus/proportion-sdk 0.1.1 → 0.1.3

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 (90) hide show
  1. package/LICENSE +21 -0
  2. package/dist/abi/factory.d.ts +1 -0
  3. package/dist/abi/factory.d.ts.map +1 -0
  4. package/dist/abi/factory.js +1 -0
  5. package/dist/abi/factory.js.map +1 -0
  6. package/dist/abi/forwarder.d.ts +1 -0
  7. package/dist/abi/forwarder.d.ts.map +1 -0
  8. package/dist/abi/forwarder.js +1 -0
  9. package/dist/abi/forwarder.js.map +1 -0
  10. package/dist/abi/fundedAccount.d.ts +1 -0
  11. package/dist/abi/fundedAccount.d.ts.map +1 -0
  12. package/dist/abi/fundedAccount.js +1 -0
  13. package/dist/abi/fundedAccount.js.map +1 -0
  14. package/dist/abi/mainVault.d.ts +198 -16
  15. package/dist/abi/mainVault.d.ts.map +1 -0
  16. package/dist/abi/mainVault.js +253 -19
  17. package/dist/abi/mainVault.js.map +1 -0
  18. package/dist/account.d.ts +3 -2
  19. package/dist/account.d.ts.map +1 -0
  20. package/dist/account.js +46 -43
  21. package/dist/account.js.map +1 -0
  22. package/dist/base.d.ts +9 -0
  23. package/dist/base.d.ts.map +1 -0
  24. package/dist/base.js +19 -0
  25. package/dist/base.js.map +1 -0
  26. package/dist/constants.d.ts +5 -4
  27. package/dist/constants.d.ts.map +1 -0
  28. package/dist/constants.js +5 -4
  29. package/dist/constants.js.map +1 -0
  30. package/dist/factory.d.ts +1 -0
  31. package/dist/factory.d.ts.map +1 -0
  32. package/dist/factory.js +56 -10
  33. package/dist/factory.js.map +1 -0
  34. package/dist/index.d.ts +1 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +1 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/indexer.d.ts +8 -3
  39. package/dist/indexer.d.ts.map +1 -0
  40. package/dist/indexer.js +81 -136
  41. package/dist/indexer.js.map +1 -0
  42. package/dist/sdk.d.ts +1 -0
  43. package/dist/sdk.d.ts.map +1 -0
  44. package/dist/sdk.js +1 -0
  45. package/dist/sdk.js.map +1 -0
  46. package/dist/types.d.ts +5 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +1 -0
  49. package/dist/types.js.map +1 -0
  50. package/dist/utils.d.ts +8 -0
  51. package/dist/utils.d.ts.map +1 -0
  52. package/dist/utils.js +10 -0
  53. package/dist/utils.js.map +1 -0
  54. package/dist/vault.d.ts +7 -4
  55. package/dist/vault.d.ts.map +1 -0
  56. package/dist/vault.js +76 -51
  57. package/dist/vault.js.map +1 -0
  58. package/package.json +12 -1
  59. package/SDK_IMPROVEMENT_PLAN.md +0 -197
  60. package/arch.md +0 -455
  61. package/dist/__tests__/account.test.d.ts +0 -1
  62. package/dist/__tests__/account.test.js +0 -36
  63. package/dist/__tests__/indexer.test.d.ts +0 -1
  64. package/dist/__tests__/indexer.test.js +0 -230
  65. package/dist/__tests__/lifecycle.test.d.ts +0 -1
  66. package/dist/__tests__/lifecycle.test.js +0 -186
  67. package/dist/__tests__/reads.test.d.ts +0 -1
  68. package/dist/__tests__/reads.test.js +0 -184
  69. package/dist/__tests__/utils.test.d.ts +0 -1
  70. package/dist/__tests__/utils.test.js +0 -185
  71. package/src/__tests__/account.test.ts +0 -40
  72. package/src/__tests__/indexer.test.ts +0 -255
  73. package/src/__tests__/lifecycle.test.ts +0 -231
  74. package/src/__tests__/reads.test.ts +0 -208
  75. package/src/__tests__/utils.test.ts +0 -245
  76. package/src/abi/factory.ts +0 -417
  77. package/src/abi/forwarder.ts +0 -373
  78. package/src/abi/fundedAccount.ts +0 -1296
  79. package/src/abi/mainVault.ts +0 -1852
  80. package/src/account.ts +0 -325
  81. package/src/constants.ts +0 -51
  82. package/src/factory.ts +0 -157
  83. package/src/index.ts +0 -16
  84. package/src/indexer.ts +0 -636
  85. package/src/sdk.ts +0 -93
  86. package/src/types.ts +0 -421
  87. package/src/utils.ts +0 -143
  88. package/src/vault.ts +0 -479
  89. package/tsconfig.json +0 -19
  90. package/vitest.config.ts +0 -8
package/src/vault.ts DELETED
@@ -1,479 +0,0 @@
1
- import type { Address, Chain, Hash, PublicClient, WalletClient } from "viem";
2
- import { mainVaultAbi } from "./abi/mainVault.js";
3
- import type { BuilderInfo, LPPosition, VaultStats } from "./types.js";
4
-
5
- const erc20Abi = [
6
- {
7
- type: "function",
8
- name: "approve",
9
- inputs: [
10
- { name: "spender", type: "address" },
11
- { name: "amount", type: "uint256" },
12
- ],
13
- outputs: [{ name: "", type: "bool" }],
14
- stateMutability: "nonpayable",
15
- },
16
- ] as const;
17
-
18
- export class VaultModule {
19
- constructor(
20
- private publicClient: PublicClient,
21
- private walletClient: WalletClient | undefined,
22
- private chain: Chain,
23
- private addresses: { vault: Address; usdc: Address },
24
- ) {}
25
-
26
- // ── READS ───────────────────────────────────────────
27
-
28
- async getStats(): Promise<VaultStats> {
29
- const contract = { address: this.addresses.vault, abi: mainVaultAbi } as const;
30
- const results = await this.publicClient.multicall({
31
- contracts: [
32
- { ...contract, functionName: "totalAssets" },
33
- { ...contract, functionName: "sharePrice" },
34
- { ...contract, functionName: "getUtilizationBps" },
35
- { ...contract, functionName: "getAvailableForAllocation" },
36
- { ...contract, functionName: "getMaxAccountSize" },
37
- { ...contract, functionName: "getRemainingCap" },
38
- { ...contract, functionName: "paused" },
39
- { ...contract, functionName: "feeMultiplier" },
40
- { ...contract, functionName: "subscriptionFeeMultiplier" },
41
- { ...contract, functionName: "totalShares" },
42
- { ...contract, functionName: "totalAllocated" },
43
- { ...contract, functionName: "owner" },
44
- { ...contract, functionName: "pendingOwner" },
45
- { ...contract, functionName: "relayer" },
46
- { ...contract, functionName: "protocolFeeReceiver" },
47
- { ...contract, functionName: "maxCap" },
48
- { ...contract, functionName: "hypeForSpot" },
49
- { ...contract, functionName: "factory" },
50
- { ...contract, functionName: "MIN_BUILDER_SHARES" },
51
- { ...contract, functionName: "BUILDER_LEVERAGE" },
52
- { ...contract, functionName: "PROTOCOL_FEE_BPS" },
53
- { ...contract, functionName: "MIN_ACCOUNT_SIZE" },
54
- { ...contract, functionName: "MAX_ACCOUNT_SIZE" },
55
- { ...contract, functionName: "MIN_DRAWDOWN_BPS" },
56
- { ...contract, functionName: "MAX_DRAWDOWN_BPS" },
57
- { ...contract, functionName: "MAX_UTILIZATION_BPS" },
58
- { ...contract, functionName: "MAX_SINGLE_ACCOUNT_BPS" },
59
- { ...contract, functionName: "DAILY_DD_DISCOUNT_BPS" },
60
- ],
61
- });
62
- return {
63
- totalAssets: results[0].result!,
64
- sharePrice: results[1].result!,
65
- utilizationBps: results[2].result!,
66
- availableForAllocation: results[3].result!,
67
- maxAccountSize: results[4].result!,
68
- remainingCap: results[5].result!,
69
- paused: results[6].result!,
70
- feeMultiplier: results[7].result!,
71
- subscriptionFeeMultiplier: results[8].result!,
72
- totalShares: results[9].result!,
73
- totalAllocated: results[10].result!,
74
- owner: results[11].result!,
75
- pendingOwner: results[12].result!,
76
- relayer: results[13].result!,
77
- protocolFeeReceiver: results[14].result!,
78
- maxCap: results[15].result!,
79
- hypeForSpot: results[16].result!,
80
- factory: results[17].result!,
81
- minBuilderShares: results[18].result!,
82
- builderLeverage: results[19].result!,
83
- protocolFeeBps: results[20].result!,
84
- minAccountSize: results[21].result!,
85
- maxAccountSizeLimit: results[22].result!,
86
- minDrawdownBps: results[23].result!,
87
- maxDrawdownBps: results[24].result!,
88
- maxUtilizationBps: results[25].result!,
89
- maxSingleAccountBps: results[26].result!,
90
- dailyDdDiscountBps: results[27].result!,
91
- };
92
- }
93
-
94
- async getLPPosition(account: Address): Promise<LPPosition> {
95
- const contract = { address: this.addresses.vault, abi: mainVaultAbi } as const;
96
- const results = await this.publicClient.multicall({
97
- contracts: [
98
- { ...contract, functionName: "shares", args: [account] },
99
- { ...contract, functionName: "sharesValue", args: [account] },
100
- { ...contract, functionName: "withdrawableShares", args: [account] },
101
- ],
102
- });
103
- return {
104
- shares: results[0].result!,
105
- sharesValue: results[1].result!,
106
- withdrawableShares: results[2].result!,
107
- };
108
- }
109
-
110
- async getBuilderInfo(builder: Address): Promise<BuilderInfo> {
111
- const contract = { address: this.addresses.vault, abi: mainVaultAbi } as const;
112
- const results = await this.publicClient.multicall({
113
- contracts: [
114
- { ...contract, functionName: "builders", args: [builder] },
115
- { ...contract, functionName: "builderAvailableFunded", args: [builder] },
116
- ],
117
- });
118
- const [active, activeFunded] = results[0].result!;
119
- return {
120
- active,
121
- activeFunded,
122
- availableFunded: results[1].result!,
123
- };
124
- }
125
-
126
- async getAllowedPerps(): Promise<number[]> {
127
- const result = await this.publicClient.readContract({
128
- address: this.addresses.vault,
129
- abi: mainVaultAbi,
130
- functionName: "getAllowedPerps",
131
- });
132
- return result.map(Number);
133
- }
134
-
135
- async isAllowedPerp(index: number): Promise<boolean> {
136
- return this.publicClient.readContract({
137
- address: this.addresses.vault,
138
- abi: mainVaultAbi,
139
- functionName: "isAllowedPerp",
140
- args: [index],
141
- });
142
- }
143
-
144
- async calculateFee(size: bigint, bps: number, dailyDD: boolean): Promise<bigint> {
145
- return this.publicClient.readContract({
146
- address: this.addresses.vault,
147
- abi: mainVaultAbi,
148
- functionName: "calculateActivationFee",
149
- args: [size, bps, dailyDD],
150
- });
151
- }
152
-
153
- async isPaused(): Promise<boolean> {
154
- return this.publicClient.readContract({
155
- address: this.addresses.vault,
156
- abi: mainVaultAbi,
157
- functionName: "paused",
158
- });
159
- }
160
-
161
- async getRemainingCap(): Promise<bigint> {
162
- return this.publicClient.readContract({
163
- address: this.addresses.vault,
164
- abi: mainVaultAbi,
165
- functionName: "getRemainingCap",
166
- });
167
- }
168
-
169
- async isFundedAccount(account: Address): Promise<boolean> {
170
- return this.publicClient.readContract({
171
- address: this.addresses.vault,
172
- abi: mainVaultAbi,
173
- functionName: "isFundedAccount",
174
- args: [account],
175
- });
176
- }
177
-
178
- async getDelegateBuilder(delegate: Address): Promise<Address> {
179
- return this.publicClient.readContract({
180
- address: this.addresses.vault,
181
- abi: mainVaultAbi,
182
- functionName: "delegateBuilder",
183
- args: [delegate],
184
- });
185
- }
186
-
187
- // ── WRITES ──────────────────────────────────────────
188
-
189
- private requireWallet(): WalletClient {
190
- if (!this.walletClient) throw new Error("WalletClient required for write operations");
191
- return this.walletClient;
192
- }
193
-
194
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
195
- private async write(params: Record<string, unknown>): Promise<Hash> {
196
- const wallet = this.requireWallet();
197
- return wallet.writeContract({ chain: this.chain, ...params } as any);
198
- }
199
-
200
- async deposit(amount: bigint): Promise<Hash> {
201
- return this.write({
202
- address: this.addresses.vault,
203
- abi: mainVaultAbi,
204
- functionName: "deposit",
205
- args: [amount],
206
- });
207
- }
208
-
209
- async withdraw(shares: bigint): Promise<Hash> {
210
- return this.write({
211
- address: this.addresses.vault,
212
- abi: mainVaultAbi,
213
- functionName: "withdraw",
214
- args: [shares],
215
- });
216
- }
217
-
218
- async approveUsdc(amount: bigint): Promise<Hash> {
219
- return this.write({
220
- address: this.addresses.usdc,
221
- abi: erc20Abi,
222
- functionName: "approve",
223
- args: [this.addresses.vault, amount],
224
- });
225
- }
226
-
227
- async registerBuilder(): Promise<Hash> {
228
- return this.write({
229
- address: this.addresses.vault,
230
- abi: mainVaultAbi,
231
- functionName: "registerBuilder",
232
- });
233
- }
234
-
235
- async setDelegate(delegate: Address): Promise<Hash> {
236
- return this.write({
237
- address: this.addresses.vault,
238
- abi: mainVaultAbi,
239
- functionName: "setDelegate",
240
- args: [delegate],
241
- });
242
- }
243
-
244
- async removeDelegate(delegate: Address): Promise<Hash> {
245
- return this.write({
246
- address: this.addresses.vault,
247
- abi: mainVaultAbi,
248
- functionName: "removeDelegate",
249
- args: [delegate],
250
- });
251
- }
252
-
253
- async activateFunded(p: {
254
- trader: Address;
255
- accountSize: bigint;
256
- drawdownBps: number;
257
- dailyDrawdownEnabled: boolean;
258
- hypeValue?: bigint;
259
- }): Promise<Hash> {
260
- const hypeValue = p.hypeValue ?? await this.publicClient.readContract({
261
- address: this.addresses.vault,
262
- abi: mainVaultAbi,
263
- functionName: "hypeForSpot",
264
- });
265
- return this.write({
266
- address: this.addresses.vault,
267
- abi: mainVaultAbi,
268
- functionName: "activateFunded",
269
- args: [p.trader, p.accountSize, p.drawdownBps, p.dailyDrawdownEnabled],
270
- value: hypeValue,
271
- });
272
- }
273
-
274
- // ── ADMIN ───────────────────────────────────────────
275
-
276
- async pause(): Promise<Hash> {
277
- return this.write({
278
- address: this.addresses.vault,
279
- abi: mainVaultAbi,
280
- functionName: "pause",
281
- });
282
- }
283
-
284
- async unpause(): Promise<Hash> {
285
- return this.write({
286
- address: this.addresses.vault,
287
- abi: mainVaultAbi,
288
- functionName: "unpause",
289
- });
290
- }
291
-
292
- async addAllowedPerp(index: number): Promise<Hash> {
293
- return this.write({
294
- address: this.addresses.vault,
295
- abi: mainVaultAbi,
296
- functionName: "addAllowedPerp",
297
- args: [index],
298
- });
299
- }
300
-
301
- async removeAllowedPerp(index: number): Promise<Hash> {
302
- return this.write({
303
- address: this.addresses.vault,
304
- abi: mainVaultAbi,
305
- functionName: "removeAllowedPerp",
306
- args: [index],
307
- });
308
- }
309
-
310
- async setRelayer(addr: Address): Promise<Hash> {
311
- return this.write({
312
- address: this.addresses.vault,
313
- abi: mainVaultAbi,
314
- functionName: "setRelayer",
315
- args: [addr],
316
- });
317
- }
318
-
319
- async setFactory(addr: Address): Promise<Hash> {
320
- return this.write({
321
- address: this.addresses.vault,
322
- abi: mainVaultAbi,
323
- functionName: "setFactory",
324
- args: [addr],
325
- });
326
- }
327
-
328
- async setProtocolFeeReceiver(addr: Address): Promise<Hash> {
329
- return this.write({
330
- address: this.addresses.vault,
331
- abi: mainVaultAbi,
332
- functionName: "setProtocolFeeReceiver",
333
- args: [addr],
334
- });
335
- }
336
-
337
- async transferOwnership(newOwner: Address): Promise<Hash> {
338
- return this.write({
339
- address: this.addresses.vault,
340
- abi: mainVaultAbi,
341
- functionName: "transferOwnership",
342
- args: [newOwner],
343
- });
344
- }
345
-
346
- async acceptOwnership(): Promise<Hash> {
347
- return this.write({
348
- address: this.addresses.vault,
349
- abi: mainVaultAbi,
350
- functionName: "acceptOwnership",
351
- });
352
- }
353
-
354
- async setFeeMultiplier(value: number): Promise<Hash> {
355
- return this.write({
356
- address: this.addresses.vault,
357
- abi: mainVaultAbi,
358
- functionName: "setFeeMultiplier",
359
- args: [value],
360
- });
361
- }
362
-
363
- async setSubscriptionFeeMultiplier(value: number): Promise<Hash> {
364
- return this.write({
365
- address: this.addresses.vault,
366
- abi: mainVaultAbi,
367
- functionName: "setSubscriptionFeeMultiplier",
368
- args: [value],
369
- });
370
- }
371
-
372
- async setHypeForSpot(value: bigint): Promise<Hash> {
373
- return this.write({
374
- address: this.addresses.vault,
375
- abi: mainVaultAbi,
376
- functionName: "setHypeForSpot",
377
- args: [value],
378
- });
379
- }
380
-
381
- async setMaxCap(value: bigint): Promise<Hash> {
382
- return this.write({
383
- address: this.addresses.vault,
384
- abi: mainVaultAbi,
385
- functionName: "setMaxCap",
386
- args: [value],
387
- });
388
- }
389
-
390
- async setMinBuilderShares(value: bigint): Promise<Hash> {
391
- return this.write({
392
- address: this.addresses.vault,
393
- abi: mainVaultAbi,
394
- functionName: "setMinBuilderShares",
395
- args: [value],
396
- });
397
- }
398
-
399
- async setBuilderLeverage(value: bigint): Promise<Hash> {
400
- return this.write({
401
- address: this.addresses.vault,
402
- abi: mainVaultAbi,
403
- functionName: "setBuilderLeverage",
404
- args: [value],
405
- });
406
- }
407
-
408
- async setProtocolFeeBps(value: bigint): Promise<Hash> {
409
- return this.write({
410
- address: this.addresses.vault,
411
- abi: mainVaultAbi,
412
- functionName: "setProtocolFeeBps",
413
- args: [value],
414
- });
415
- }
416
-
417
- async setMinAccountSize(value: bigint): Promise<Hash> {
418
- return this.write({
419
- address: this.addresses.vault,
420
- abi: mainVaultAbi,
421
- functionName: "setMinAccountSize",
422
- args: [value],
423
- });
424
- }
425
-
426
- async setMaxAccountSize(value: bigint): Promise<Hash> {
427
- return this.write({
428
- address: this.addresses.vault,
429
- abi: mainVaultAbi,
430
- functionName: "setMaxAccountSize",
431
- args: [value],
432
- });
433
- }
434
-
435
- async setMinDrawdownBps(value: number): Promise<Hash> {
436
- return this.write({
437
- address: this.addresses.vault,
438
- abi: mainVaultAbi,
439
- functionName: "setMinDrawdownBps",
440
- args: [value],
441
- });
442
- }
443
-
444
- async setMaxDrawdownBps(value: number): Promise<Hash> {
445
- return this.write({
446
- address: this.addresses.vault,
447
- abi: mainVaultAbi,
448
- functionName: "setMaxDrawdownBps",
449
- args: [value],
450
- });
451
- }
452
-
453
- async setMaxUtilizationBps(value: bigint): Promise<Hash> {
454
- return this.write({
455
- address: this.addresses.vault,
456
- abi: mainVaultAbi,
457
- functionName: "setMaxUtilizationBps",
458
- args: [value],
459
- });
460
- }
461
-
462
- async setMaxSingleAccountBps(value: bigint): Promise<Hash> {
463
- return this.write({
464
- address: this.addresses.vault,
465
- abi: mainVaultAbi,
466
- functionName: "setMaxSingleAccountBps",
467
- args: [value],
468
- });
469
- }
470
-
471
- async setDailyDdDiscountBps(value: number): Promise<Hash> {
472
- return this.write({
473
- address: this.addresses.vault,
474
- abi: mainVaultAbi,
475
- functionName: "setDailyDdDiscountBps",
476
- args: [value],
477
- });
478
- }
479
- }
package/tsconfig.json DELETED
@@ -1,19 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "ES2022",
5
- "moduleResolution": "bundler",
6
- "declaration": true,
7
- "outDir": "dist",
8
- "rootDir": "src",
9
- "strict": true,
10
- "esModuleInterop": true,
11
- "skipLibCheck": true,
12
- "forceConsistentCasingInFileNames": true,
13
- "resolveJsonModule": true,
14
- "isolatedModules": true,
15
- "types": ["node"]
16
- },
17
- "include": ["src"],
18
- "exclude": ["node_modules", "dist"]
19
- }
package/vitest.config.ts DELETED
@@ -1,8 +0,0 @@
1
- import { defineConfig } from "vitest/config";
2
-
3
- export default defineConfig({
4
- test: {
5
- testTimeout: 120_000,
6
- hookTimeout: 120_000,
7
- },
8
- });