@kehtus/proportion-sdk 0.4.2 → 1.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 (96) hide show
  1. package/LICENSE +21 -21
  2. package/dist/abi/challengeAccount.d.ts +1855 -0
  3. package/dist/abi/challengeAccount.d.ts.map +1 -0
  4. package/dist/abi/challengeAccount.js +2365 -0
  5. package/dist/abi/challengeAccount.js.map +1 -0
  6. package/dist/abi/challengeFactory.d.ts +1351 -0
  7. package/dist/abi/challengeFactory.d.ts.map +1 -0
  8. package/dist/abi/challengeFactory.js +1727 -0
  9. package/dist/abi/challengeFactory.js.map +1 -0
  10. package/dist/abi/challengeVault.d.ts +1392 -0
  11. package/dist/abi/challengeVault.d.ts.map +1 -0
  12. package/dist/abi/challengeVault.js +1793 -0
  13. package/dist/abi/challengeVault.js.map +1 -0
  14. package/dist/abi/factory.d.ts +4 -0
  15. package/dist/abi/factory.d.ts.map +1 -1
  16. package/dist/abi/factory.js +5 -0
  17. package/dist/abi/factory.js.map +1 -1
  18. package/dist/abi/fundedAccount.d.ts +49 -20
  19. package/dist/abi/fundedAccount.d.ts.map +1 -1
  20. package/dist/abi/fundedAccount.js +62 -26
  21. package/dist/abi/fundedAccount.js.map +1 -1
  22. package/dist/abi/mainVault.d.ts +409 -64
  23. package/dist/abi/mainVault.d.ts.map +1 -1
  24. package/dist/abi/mainVault.js +523 -75
  25. package/dist/abi/mainVault.js.map +1 -1
  26. package/dist/abi/priceOracle.d.ts +497 -0
  27. package/dist/abi/priceOracle.d.ts.map +1 -0
  28. package/dist/abi/priceOracle.js +644 -0
  29. package/dist/abi/priceOracle.js.map +1 -0
  30. package/dist/account.d.ts.map +1 -1
  31. package/dist/account.js +6 -0
  32. package/dist/account.js.map +1 -1
  33. package/dist/challenge/account.d.ts +95 -0
  34. package/dist/challenge/account.d.ts.map +1 -0
  35. package/dist/challenge/account.js +375 -0
  36. package/dist/challenge/account.js.map +1 -0
  37. package/dist/challenge/api.d.ts +49 -0
  38. package/dist/challenge/api.d.ts.map +1 -0
  39. package/dist/challenge/api.js +173 -0
  40. package/dist/challenge/api.js.map +1 -0
  41. package/dist/challenge/factory.d.ts +151 -0
  42. package/dist/challenge/factory.d.ts.map +1 -0
  43. package/dist/challenge/factory.js +355 -0
  44. package/dist/challenge/factory.js.map +1 -0
  45. package/dist/challenge/intents.d.ts +137 -0
  46. package/dist/challenge/intents.d.ts.map +1 -0
  47. package/dist/challenge/intents.js +218 -0
  48. package/dist/challenge/intents.js.map +1 -0
  49. package/dist/challenge/oracle.d.ts +50 -0
  50. package/dist/challenge/oracle.d.ts.map +1 -0
  51. package/dist/challenge/oracle.js +117 -0
  52. package/dist/challenge/oracle.js.map +1 -0
  53. package/dist/challenge/types.d.ts +652 -0
  54. package/dist/challenge/types.d.ts.map +1 -0
  55. package/dist/challenge/types.js +64 -0
  56. package/dist/challenge/types.js.map +1 -0
  57. package/dist/challenge/vault.d.ts +87 -0
  58. package/dist/challenge/vault.d.ts.map +1 -0
  59. package/dist/challenge/vault.js +299 -0
  60. package/dist/challenge/vault.js.map +1 -0
  61. package/dist/constants.d.ts +14 -4
  62. package/dist/constants.d.ts.map +1 -1
  63. package/dist/constants.js +23 -4
  64. package/dist/constants.js.map +1 -1
  65. package/dist/factory.d.ts +1 -1
  66. package/dist/factory.d.ts.map +1 -1
  67. package/dist/factory.js +12 -0
  68. package/dist/factory.js.map +1 -1
  69. package/dist/forwarder.d.ts +58 -0
  70. package/dist/forwarder.d.ts.map +1 -0
  71. package/dist/forwarder.js +145 -0
  72. package/dist/forwarder.js.map +1 -0
  73. package/dist/index.d.ts +13 -0
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +14 -0
  76. package/dist/index.js.map +1 -1
  77. package/dist/indexer.d.ts +52 -0
  78. package/dist/indexer.d.ts.map +1 -1
  79. package/dist/indexer.js +349 -145
  80. package/dist/indexer.js.map +1 -1
  81. package/dist/sdk.d.ts +18 -1
  82. package/dist/sdk.d.ts.map +1 -1
  83. package/dist/sdk.js +85 -32
  84. package/dist/sdk.js.map +1 -1
  85. package/dist/types.d.ts +54 -0
  86. package/dist/types.d.ts.map +1 -1
  87. package/dist/types.js.map +1 -1
  88. package/dist/utils.d.ts +35 -2
  89. package/dist/utils.d.ts.map +1 -1
  90. package/dist/utils.js +86 -7
  91. package/dist/utils.js.map +1 -1
  92. package/dist/vault.d.ts +44 -5
  93. package/dist/vault.d.ts.map +1 -1
  94. package/dist/vault.js +138 -12
  95. package/dist/vault.js.map +1 -1
  96. package/package.json +2 -2
@@ -0,0 +1,64 @@
1
+ // ── On-chain enums (order must match Solidity exactly) ──
2
+ /** ChallengeAccount.Phase */
3
+ export var ChallengePhase;
4
+ (function (ChallengePhase) {
5
+ ChallengePhase[ChallengePhase["Uninitialized"] = 0] = "Uninitialized";
6
+ ChallengePhase[ChallengePhase["Challenge"] = 1] = "Challenge";
7
+ ChallengePhase[ChallengePhase["Passed"] = 2] = "Passed";
8
+ ChallengePhase[ChallengePhase["PaperFunded"] = 3] = "PaperFunded";
9
+ ChallengePhase[ChallengePhase["Failed"] = 4] = "Failed";
10
+ ChallengePhase[ChallengePhase["Closed"] = 5] = "Closed";
11
+ ChallengePhase[ChallengePhase["Promoted"] = 6] = "Promoted";
12
+ })(ChallengePhase || (ChallengePhase = {}));
13
+ /** ChallengeAccount.FailReason (annotates PhaseChanged; None on non-failure transitions). */
14
+ export var ChallengeFailReason;
15
+ (function (ChallengeFailReason) {
16
+ ChallengeFailReason[ChallengeFailReason["None"] = 0] = "None";
17
+ ChallengeFailReason[ChallengeFailReason["Drawdown"] = 1] = "Drawdown";
18
+ ChallengeFailReason[ChallengeFailReason["Expired"] = 2] = "Expired";
19
+ })(ChallengeFailReason || (ChallengeFailReason = {}));
20
+ /** ChallengeAccount.ExitOrderKind */
21
+ export var ExitOrderKind;
22
+ (function (ExitOrderKind) {
23
+ ExitOrderKind[ExitOrderKind["StopLoss"] = 0] = "StopLoss";
24
+ ExitOrderKind[ExitOrderKind["TakeProfit"] = 1] = "TakeProfit";
25
+ })(ExitOrderKind || (ExitOrderKind = {}));
26
+ /** ChallengePricingLib.ChallengeType */
27
+ export var ChallengeType;
28
+ (function (ChallengeType) {
29
+ ChallengeType[ChallengeType["OneStep"] = 0] = "OneStep";
30
+ ChallengeType[ChallengeType["TwoStep"] = 1] = "TwoStep";
31
+ })(ChallengeType || (ChallengeType = {}));
32
+ const phaseLabels = {
33
+ [ChallengePhase.Uninitialized]: "Uninitialized",
34
+ [ChallengePhase.Challenge]: "Challenge",
35
+ [ChallengePhase.Passed]: "Passed",
36
+ [ChallengePhase.PaperFunded]: "PaperFunded",
37
+ [ChallengePhase.Failed]: "Failed",
38
+ [ChallengePhase.Closed]: "Closed",
39
+ [ChallengePhase.Promoted]: "Promoted",
40
+ };
41
+ const labelPhases = {
42
+ Uninitialized: ChallengePhase.Uninitialized,
43
+ Challenge: ChallengePhase.Challenge,
44
+ Passed: ChallengePhase.Passed,
45
+ PaperFunded: ChallengePhase.PaperFunded,
46
+ Failed: ChallengePhase.Failed,
47
+ Closed: ChallengePhase.Closed,
48
+ Promoted: ChallengePhase.Promoted,
49
+ };
50
+ export function phaseToLabel(phase) {
51
+ return phaseLabels[phase];
52
+ }
53
+ export function labelToPhase(label) {
54
+ return labelPhases[label];
55
+ }
56
+ const failReasonLabels = {
57
+ [ChallengeFailReason.None]: "None",
58
+ [ChallengeFailReason.Drawdown]: "Drawdown",
59
+ [ChallengeFailReason.Expired]: "Expired",
60
+ };
61
+ export function failReasonToLabel(reason) {
62
+ return failReasonLabels[reason];
63
+ }
64
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/challenge/types.ts"],"names":[],"mappings":"AAEA,2DAA2D;AAE3D,6BAA6B;AAC7B,MAAM,CAAN,IAAY,cAQX;AARD,WAAY,cAAc;IACxB,qEAAa,CAAA;IACb,6DAAS,CAAA;IACT,uDAAM,CAAA;IACN,iEAAW,CAAA;IACX,uDAAM,CAAA;IACN,uDAAM,CAAA;IACN,2DAAQ,CAAA;AACV,CAAC,EARW,cAAc,KAAd,cAAc,QAQzB;AAED,6FAA6F;AAC7F,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,6DAAI,CAAA;IACJ,qEAAQ,CAAA;IACR,mEAAO,CAAA;AACT,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B;AAED,qCAAqC;AACrC,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,yDAAQ,CAAA;IACR,6DAAU,CAAA;AACZ,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AAED,wCAAwC;AACxC,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,uDAAO,CAAA;IACP,uDAAO,CAAA;AACT,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AA2BD,MAAM,WAAW,GAAgD;IAC/D,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,eAAe;IAC/C,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,WAAW;IACvC,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,QAAQ;IACjC,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,aAAa;IAC3C,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,QAAQ;IACjC,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,QAAQ;IACjC,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,UAAU;CACtC,CAAC;AAEF,MAAM,WAAW,GAAgD;IAC/D,aAAa,EAAE,cAAc,CAAC,aAAa;IAC3C,SAAS,EAAE,cAAc,CAAC,SAAS;IACnC,MAAM,EAAE,cAAc,CAAC,MAAM;IAC7B,WAAW,EAAE,cAAc,CAAC,WAAW;IACvC,MAAM,EAAE,cAAc,CAAC,MAAM;IAC7B,MAAM,EAAE,cAAc,CAAC,MAAM;IAC7B,QAAQ,EAAE,cAAc,CAAC,QAAQ;CAClC,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,KAAqB;IAChD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAA0B;IACrD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,gBAAgB,GAA0D;IAC9E,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM;IAClC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,UAAU;IAC1C,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,SAAS;CACzC,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,MAA2B;IAC3D,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,87 @@
1
+ import { type Address, type Chain, type Hash, type PublicClient, type WalletClient } from "viem";
2
+ import type { BuilderBankStatus, PayoutState, QueuedPayout, RegisteredChallengeAccount } from "./types.js";
3
+ type AddressResolver = Address | (() => Promise<Address>);
4
+ /**
5
+ * ChallengeVault module — the sole USDC custodian of the B-book: builder banks,
6
+ * fee routing, and the FIFO payout queue.
7
+ *
8
+ * Writes here are builder-facing operations (bank deposits/withdrawals, A-book promotion,
9
+ * manual queue draining). Governance (upgrades, factory allow-list, setMainVault) is
10
+ * multisig territory and intentionally not covered.
11
+ */
12
+ export declare class ChallengeVaultModule {
13
+ private publicClient;
14
+ private walletClient;
15
+ private chain;
16
+ private addressResolver;
17
+ private addressPromise;
18
+ private resolvedUsdc;
19
+ constructor(publicClient: PublicClient, walletClient: WalletClient | undefined, chain: Chain, addressResolver: AddressResolver, usdc?: Address);
20
+ /**
21
+ * Resolved ChallengeVault proxy address (lazy when constructed with a resolver).
22
+ * The in-flight promise is cached so concurrent callers share one RPC lookup;
23
+ * a failed resolution is cleared so the next call retries.
24
+ */
25
+ getAddress(): Promise<Address>;
26
+ private requireWallet;
27
+ private write;
28
+ /**
29
+ * Full builder bank snapshot: balance/debt/delinquency plus the coverage and
30
+ * anti-drain views the frontend must surface (pendingPassedAccounts blocks new
31
+ * sales at 50; pendingPayoutCount caps queued payouts at 30).
32
+ */
33
+ getBuilderBank(builder: Address): Promise<BuilderBankStatus>;
34
+ /** Per-account payout accounting (lifetime paid, in-flight pending, cooldown anchor, live queue entry). */
35
+ getPayoutState(account: Address): Promise<PayoutState>;
36
+ getRegisteredAccount(account: Address): Promise<RegisteredChallengeAccount>;
37
+ getQueuedPayout(queueId: bigint): Promise<QueuedPayout>;
38
+ /**
39
+ * The builder's live FIFO payout queue, head first (index 0 = next to be drained).
40
+ *
41
+ * On-chain the queue array is append-only: drained entries stay in place and
42
+ * `builderQueueHead` marks the live window start, so `builderQueueLength` counts
43
+ * every entry EVER queued and the live claims are `[head, length)`. Three dependent
44
+ * RPC round trips (head/length → ids → entries) — the live window is capped at
45
+ * MAX_PENDING_PAYOUTS = 30 so each is small; polling UIs should prefer
46
+ * `indexer.getPayoutQueue` (one GraphQL query) over this on-chain read.
47
+ */
48
+ getBuilderQueue(builder: Address): Promise<QueuedPayout[]>;
49
+ /** Off-chain solvency monitor: usdc.balanceOf(vault) >= totalBuilderBalance. */
50
+ isTokenSolvent(): Promise<boolean>;
51
+ /** Static vault wiring + protocol-wide totals and rule constants. */
52
+ getConfig(): Promise<{
53
+ usdc: Address;
54
+ mainVault: Address;
55
+ owner: Address;
56
+ pendingOwner: Address;
57
+ totalBuilderBalance: bigint;
58
+ factoryActivationDelay: bigint;
59
+ payoutCooldown: bigint;
60
+ maxPayoutTotalBps: bigint;
61
+ maxSinglePayoutBps: bigint;
62
+ maxDailyPayoutBps: bigint;
63
+ maxPendingPayouts: bigint;
64
+ maxPendingPassedAccounts: bigint;
65
+ coverageMultiplier: bigint;
66
+ }>;
67
+ private getUsdc;
68
+ /** Approve the ChallengeVault to pull USDC (needed before depositBuilderBalance). */
69
+ approveUsdc(amount: bigint): Promise<Hash>;
70
+ /** Fund a builder's B-book bank (anyone can deposit on a builder's behalf). */
71
+ depositBuilderBalance(builder: Address, amount: bigint): Promise<Hash>;
72
+ /** Instant withdrawal of the caller's available bank balance. */
73
+ withdrawBuilderBalance(amount: bigint): Promise<Hash>;
74
+ /**
75
+ * Atomic A-book promotion of a Passed challenge: debits the builder bank by the
76
+ * MainVault activation fee and calls MainVault.activateFundedFor. The single mutable
77
+ * B-book → A-book boundary.
78
+ */
79
+ promotePassedToAbook(account: Address): Promise<Hash>;
80
+ /**
81
+ * Drain the FIFO head as builder liquidity allows. Permissionless; the challenge-service
82
+ * keeper runs it automatically — this is the manual "process my queue now" button.
83
+ */
84
+ executeNextQueuedPayout(builder: Address): Promise<Hash>;
85
+ }
86
+ export {};
87
+ //# sourceMappingURL=vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../src/challenge/vault.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,IAAI,EACT,KAAK,YAAY,EACjB,KAAK,YAAY,EAElB,MAAM,MAAM,CAAC;AAGd,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAEpB,KAAK,eAAe,GAAG,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAE1D;;;;;;;GAOG;AACH,qBAAa,oBAAoB;IAK7B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,eAAe;IAPzB,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,YAAY,CAAsB;gBAGhC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,GAAG,SAAS,EACtC,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,eAAe,EACxC,IAAI,CAAC,EAAE,OAAO;IAMhB;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAWpC,OAAO,CAAC,aAAa;YASP,KAAK;IAWnB;;;;OAIG;IACG,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAuClE,2GAA2G;IACrG,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAWtD,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAW3E,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAW7D;;;;;;;;;OASG;IACG,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA4ChE,gFAAgF;IAC1E,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IASxC,qEAAqE;IAC/D,SAAS,IAAI,OAAO,CAAC;QACzB,IAAI,EAAE,OAAO,CAAC;QACd,SAAS,EAAE,OAAO,CAAC;QACnB,KAAK,EAAE,OAAO,CAAC;QACf,YAAY,EAAE,OAAO,CAAC;QACtB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,sBAAsB,EAAE,MAAM,CAAC;QAC/B,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,wBAAwB,EAAE,MAAM,CAAC;QACjC,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;YAwCY,OAAO;IAWrB,qFAAqF;IAC/E,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhD,+EAA+E;IACzE,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5E,iEAAiE;IAC3D,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3D;;;;OAIG;IACG,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3D;;;OAGG;IACG,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAS/D"}
@@ -0,0 +1,299 @@
1
+ import { erc20Abi, } from "viem";
2
+ import { challengeVaultAbi } from "../abi/challengeVault.js";
3
+ import { assertAllSuccess } from "../utils.js";
4
+ /**
5
+ * ChallengeVault module — the sole USDC custodian of the B-book: builder banks,
6
+ * fee routing, and the FIFO payout queue.
7
+ *
8
+ * Writes here are builder-facing operations (bank deposits/withdrawals, A-book promotion,
9
+ * manual queue draining). Governance (upgrades, factory allow-list, setMainVault) is
10
+ * multisig territory and intentionally not covered.
11
+ */
12
+ export class ChallengeVaultModule {
13
+ publicClient;
14
+ walletClient;
15
+ chain;
16
+ addressResolver;
17
+ addressPromise;
18
+ resolvedUsdc;
19
+ constructor(publicClient, walletClient, chain, addressResolver, usdc) {
20
+ this.publicClient = publicClient;
21
+ this.walletClient = walletClient;
22
+ this.chain = chain;
23
+ this.addressResolver = addressResolver;
24
+ if (typeof addressResolver === "string")
25
+ this.addressPromise = Promise.resolve(addressResolver);
26
+ this.resolvedUsdc = usdc;
27
+ }
28
+ /**
29
+ * Resolved ChallengeVault proxy address (lazy when constructed with a resolver).
30
+ * The in-flight promise is cached so concurrent callers share one RPC lookup;
31
+ * a failed resolution is cleared so the next call retries.
32
+ */
33
+ async getAddress() {
34
+ if (!this.addressPromise) {
35
+ const resolver = this.addressResolver;
36
+ this.addressPromise = resolver().catch((err) => {
37
+ this.addressPromise = undefined;
38
+ throw err;
39
+ });
40
+ }
41
+ return this.addressPromise;
42
+ }
43
+ requireWallet() {
44
+ if (!this.walletClient)
45
+ throw new Error("WalletClient required for write operations");
46
+ const walletChainId = this.walletClient.chain?.id;
47
+ if (walletChainId !== undefined && walletChainId !== this.chain.id) {
48
+ throw new Error(`WalletClient chain mismatch: expected ${this.chain.id}, got ${walletChainId}`);
49
+ }
50
+ return this.walletClient;
51
+ }
52
+ async write(params) {
53
+ const wallet = this.requireWallet();
54
+ const account = wallet.account;
55
+ if (!account)
56
+ throw new Error("WalletClient has no account");
57
+ return wallet.writeContract({ ...params, chain: this.chain, account });
58
+ }
59
+ // ── READS ───────────────────────────────────────────
60
+ /**
61
+ * Full builder bank snapshot: balance/debt/delinquency plus the coverage and
62
+ * anti-drain views the frontend must surface (pendingPassedAccounts blocks new
63
+ * sales at 50; pendingPayoutCount caps queued payouts at 30).
64
+ */
65
+ async getBuilderBank(builder) {
66
+ const address = await this.getAddress();
67
+ const contract = { address, abi: challengeVaultAbi };
68
+ const results = await this.publicClient.multicall({
69
+ contracts: [
70
+ { ...contract, functionName: "books", args: [builder] },
71
+ { ...contract, functionName: "builderRisks", args: [builder] },
72
+ { ...contract, functionName: "builderExposure", args: [builder] },
73
+ { ...contract, functionName: "requiredCoverage", args: [builder] },
74
+ { ...contract, functionName: "payoutLiquidity", args: [builder] },
75
+ { ...contract, functionName: "shortfall", args: [builder] },
76
+ { ...contract, functionName: "pendingPassedAccounts", args: [builder] },
77
+ { ...contract, functionName: "builderPendingPayoutCount", args: [builder] },
78
+ ],
79
+ });
80
+ const r = assertAllSuccess(results);
81
+ const book = r[0];
82
+ const risks = r[1];
83
+ return {
84
+ builder,
85
+ balance: book[0],
86
+ pendingPayouts: book[1],
87
+ delinquentSince: book[2],
88
+ exposure: r[2],
89
+ requiredCoverage: r[3],
90
+ payoutLiquidity: r[4],
91
+ shortfall: r[5],
92
+ pendingPassedAccounts: r[6],
93
+ pendingPayoutCount: r[7],
94
+ activeChallengeExposure6: risks[0],
95
+ passedExposure6: risks[1],
96
+ paperFundedExposure6: risks[2],
97
+ queuedPayoutExposure6: risks[3],
98
+ payoutDay: risks[4],
99
+ paidToday6: risks[5],
100
+ };
101
+ }
102
+ /** Per-account payout accounting (lifetime paid, in-flight pending, cooldown anchor, live queue entry). */
103
+ async getPayoutState(account) {
104
+ const address = await this.getAddress();
105
+ const [totalPaidGross6, pendingGross6, lastPayoutAt, queueId] = await this.publicClient.readContract({
106
+ address,
107
+ abi: challengeVaultAbi,
108
+ functionName: "payoutState",
109
+ args: [account],
110
+ });
111
+ return { totalPaidGross6, pendingGross6, lastPayoutAt, queueId };
112
+ }
113
+ async getRegisteredAccount(account) {
114
+ const address = await this.getAddress();
115
+ const [builder, trader, allocation6, maxPayoutTotal6, registered] = await this.publicClient.readContract({
116
+ address,
117
+ abi: challengeVaultAbi,
118
+ functionName: "accounts",
119
+ args: [account],
120
+ });
121
+ return { builder, trader, allocation6, maxPayoutTotal6, registered };
122
+ }
123
+ async getQueuedPayout(queueId) {
124
+ const address = await this.getAddress();
125
+ const [account, trader, remainingGross6, remainingExposure6] = await this.publicClient.readContract({
126
+ address,
127
+ abi: challengeVaultAbi,
128
+ functionName: "queuedPayouts",
129
+ args: [queueId],
130
+ });
131
+ return { queueId, account, trader, remainingGross6, remainingExposure6 };
132
+ }
133
+ /**
134
+ * The builder's live FIFO payout queue, head first (index 0 = next to be drained).
135
+ *
136
+ * On-chain the queue array is append-only: drained entries stay in place and
137
+ * `builderQueueHead` marks the live window start, so `builderQueueLength` counts
138
+ * every entry EVER queued and the live claims are `[head, length)`. Three dependent
139
+ * RPC round trips (head/length → ids → entries) — the live window is capped at
140
+ * MAX_PENDING_PAYOUTS = 30 so each is small; polling UIs should prefer
141
+ * `indexer.getPayoutQueue` (one GraphQL query) over this on-chain read.
142
+ */
143
+ async getBuilderQueue(builder) {
144
+ const address = await this.getAddress();
145
+ const contract = { address, abi: challengeVaultAbi };
146
+ const headLength = await this.publicClient.multicall({
147
+ contracts: [
148
+ { ...contract, functionName: "builderQueueHead", args: [builder] },
149
+ { ...contract, functionName: "builderQueueLength", args: [builder] },
150
+ ],
151
+ });
152
+ const [head, length] = assertAllSuccess(headLength, ["builderQueueHead", "builderQueueLength"]);
153
+ if (head >= length)
154
+ return [];
155
+ const idResults = await this.publicClient.multicall({
156
+ contracts: Array.from({ length: Number(length - head) }, (_, i) => ({
157
+ ...contract,
158
+ functionName: "builderQueueAt",
159
+ args: [builder, head + BigInt(i)],
160
+ })),
161
+ });
162
+ const queueIds = assertAllSuccess(idResults);
163
+ const entryResults = await this.publicClient.multicall({
164
+ contracts: queueIds.map((queueId) => ({
165
+ ...contract,
166
+ functionName: "queuedPayouts",
167
+ args: [queueId],
168
+ })),
169
+ });
170
+ const entries = assertAllSuccess(entryResults);
171
+ return entries.map((raw, i) => {
172
+ const [account, trader, remainingGross6, remainingExposure6] = raw;
173
+ return {
174
+ queueId: queueIds[i],
175
+ account,
176
+ trader,
177
+ remainingGross6,
178
+ remainingExposure6,
179
+ };
180
+ });
181
+ }
182
+ /** Off-chain solvency monitor: usdc.balanceOf(vault) >= totalBuilderBalance. */
183
+ async isTokenSolvent() {
184
+ const address = await this.getAddress();
185
+ return this.publicClient.readContract({
186
+ address,
187
+ abi: challengeVaultAbi,
188
+ functionName: "tokenSolvent",
189
+ });
190
+ }
191
+ /** Static vault wiring + protocol-wide totals and rule constants. */
192
+ async getConfig() {
193
+ const address = await this.getAddress();
194
+ const contract = { address, abi: challengeVaultAbi };
195
+ const results = await this.publicClient.multicall({
196
+ contracts: [
197
+ { ...contract, functionName: "usdc" },
198
+ { ...contract, functionName: "mainVault" },
199
+ { ...contract, functionName: "owner" },
200
+ { ...contract, functionName: "pendingOwner" },
201
+ { ...contract, functionName: "totalBuilderBalance" },
202
+ { ...contract, functionName: "factoryActivationDelay" },
203
+ { ...contract, functionName: "PAYOUT_COOLDOWN" },
204
+ { ...contract, functionName: "MAX_PAYOUT_TOTAL_BPS" },
205
+ { ...contract, functionName: "MAX_SINGLE_PAYOUT_BPS" },
206
+ { ...contract, functionName: "MAX_DAILY_PAYOUT_BPS" },
207
+ { ...contract, functionName: "MAX_PENDING_PAYOUTS" },
208
+ { ...contract, functionName: "MAX_PENDING_PASSED_ACCOUNTS" },
209
+ { ...contract, functionName: "COVERAGE_MULTIPLIER" },
210
+ ],
211
+ });
212
+ const r = assertAllSuccess(results);
213
+ return {
214
+ usdc: r[0],
215
+ mainVault: r[1],
216
+ owner: r[2],
217
+ pendingOwner: r[3],
218
+ totalBuilderBalance: r[4],
219
+ factoryActivationDelay: r[5],
220
+ payoutCooldown: r[6],
221
+ maxPayoutTotalBps: r[7],
222
+ maxSinglePayoutBps: r[8],
223
+ maxDailyPayoutBps: r[9],
224
+ maxPendingPayouts: r[10],
225
+ maxPendingPassedAccounts: r[11],
226
+ coverageMultiplier: r[12],
227
+ };
228
+ }
229
+ // ── BUILDER WRITES ──────────────────────────────────
230
+ async getUsdc() {
231
+ if (this.resolvedUsdc)
232
+ return this.resolvedUsdc;
233
+ const address = await this.getAddress();
234
+ this.resolvedUsdc = await this.publicClient.readContract({
235
+ address,
236
+ abi: challengeVaultAbi,
237
+ functionName: "usdc",
238
+ });
239
+ return this.resolvedUsdc;
240
+ }
241
+ /** Approve the ChallengeVault to pull USDC (needed before depositBuilderBalance). */
242
+ async approveUsdc(amount) {
243
+ const [vault, usdc] = await Promise.all([this.getAddress(), this.getUsdc()]);
244
+ return this.write({
245
+ address: usdc,
246
+ abi: erc20Abi,
247
+ functionName: "approve",
248
+ args: [vault, amount],
249
+ });
250
+ }
251
+ /** Fund a builder's B-book bank (anyone can deposit on a builder's behalf). */
252
+ async depositBuilderBalance(builder, amount) {
253
+ const address = await this.getAddress();
254
+ return this.write({
255
+ address,
256
+ abi: challengeVaultAbi,
257
+ functionName: "depositBuilderBalance",
258
+ args: [builder, amount],
259
+ });
260
+ }
261
+ /** Instant withdrawal of the caller's available bank balance. */
262
+ async withdrawBuilderBalance(amount) {
263
+ const address = await this.getAddress();
264
+ return this.write({
265
+ address,
266
+ abi: challengeVaultAbi,
267
+ functionName: "withdrawBuilderBalance",
268
+ args: [amount],
269
+ });
270
+ }
271
+ /**
272
+ * Atomic A-book promotion of a Passed challenge: debits the builder bank by the
273
+ * MainVault activation fee and calls MainVault.activateFundedFor. The single mutable
274
+ * B-book → A-book boundary.
275
+ */
276
+ async promotePassedToAbook(account) {
277
+ const address = await this.getAddress();
278
+ return this.write({
279
+ address,
280
+ abi: challengeVaultAbi,
281
+ functionName: "promotePassedToAbook",
282
+ args: [account],
283
+ });
284
+ }
285
+ /**
286
+ * Drain the FIFO head as builder liquidity allows. Permissionless; the challenge-service
287
+ * keeper runs it automatically — this is the manual "process my queue now" button.
288
+ */
289
+ async executeNextQueuedPayout(builder) {
290
+ const address = await this.getAddress();
291
+ return this.write({
292
+ address,
293
+ abi: challengeVaultAbi,
294
+ functionName: "executeNextQueuedPayout",
295
+ args: [builder],
296
+ });
297
+ }
298
+ }
299
+ //# sourceMappingURL=vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../src/challenge/vault.ts"],"names":[],"mappings":"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"}
@@ -20,16 +20,26 @@ export declare const hyperEvm: {
20
20
  };
21
21
  export declare const ADDRESSES: {
22
22
  readonly MAIN_VAULT: "0xaC98618D06D0787D43353308286cDBa8A7aD4a8D";
23
- readonly FORWARDER: "0x04f51e589Edeaa77ddC2dEe5d0D63fa78b0c1EdA";
23
+ readonly FORWARDER: "0xaf8370E399eb657114C4d82988169845b1B32694";
24
24
  readonly USDC: "0xb88339CB7199b77E23DB6E890353E22632Ba630f";
25
25
  };
26
+ export declare const CHALLENGE_ADDRESSES: {
27
+ readonly CHALLENGE_FACTORY: "0xc90Ab435B104e3E7eF580d5516d4F1B0912dFccC";
28
+ readonly CHALLENGE_VAULT: "0x405EFbC832323393a91127a1b83AE36B9eEC6b4D";
29
+ readonly CHALLENGE_PRICE_ORACLE: "0x1366f0954c601BAe7fB84b9242295293AE2C61F4";
30
+ readonly CHALLENGE_ACCOUNT_IMPL: "0x6DeA37698b1f8EdFCE1E86Db7EF5C3A6D13bBE2E";
31
+ };
26
32
  export declare const BPS = 10000n;
27
33
  export declare const MIN_DRAWDOWN_BPS = 500;
28
34
  export declare const MAX_DRAWDOWN_BPS = 2500;
29
- export declare const DAILY_DD_DISCOUNT_BPS = 2000n;
30
- export declare const PROTOCOL_FEE_BPS = 1000n;
35
+ export declare const PROTOCOL_FEE_BPS = 5000n;
31
36
  export declare const OWNER_PROFIT_BPS = 8000n;
32
37
  export declare const PROTOCOL_PROFIT_BPS = 700n;
38
+ export declare const SUBSCRIPTION_PROTOCOL_BPS = 1500n;
39
+ export declare const NON_OWNER_PROFIT_BPS = 2000n;
40
+ export declare const BUILDER_PROFIT_BPS_DEFAULT = 1400n;
41
+ export declare const BUILDER_PAYBACK_PROTOCOL_BPS_DEFAULT = 300n;
42
+ export declare const BUILDER_PAYBACK_FRACTION_BPS_DEFAULT = 5000n;
33
43
  export declare const BUILDER_LEVERAGE = 10n;
34
44
  export declare const MAX_UTILIZATION_BPS = 8000n;
35
45
  export declare const MAX_SINGLE_ACCOUNT_BPS = 1000n;
@@ -41,7 +51,7 @@ export declare const BRIDGE_DELAY = 30;
41
51
  export declare const CHECKPOINT_INTERVAL = 86400;
42
52
  export declare const PROFITABLE_DAYS_REQUIRED = 3;
43
53
  export declare const MIN_PROFIT_BPS = 70;
44
- export declare const INSTANT_WITHDRAW_PROFIT_BPS = 200;
54
+ export declare const INSTANT_WITHDRAW_PROFIT_BPS = 100;
45
55
  export declare const MIN_WITHDRAW_AMOUNT = 1000000n;
46
56
  export declare const HWM_PROFIT_LOCK_BPS = 3000;
47
57
  export declare const MAX_LEVERAGE = 5;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,MAAM,CAAC;AAE5B,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;CAQK,CAAC;AAE3B,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AAGX,eAAO,MAAM,GAAG,SAAU,CAAC;AAC3B,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AACtC,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AACtC,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AACzC,eAAO,MAAM,sBAAsB,QAAQ,CAAC;AAG5C,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAIxC,eAAO,MAAM,mBAAmB,QAAa,CAAC;AAC9C,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AAGzC,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAC/C,eAAO,MAAM,mBAAmB,WAAa,CAAC;AAC9C,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,YAAY,IAAI,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,MAAM,CAAC;AAE5B,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;CAQK,CAAC;AAE3B,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AAIX,eAAO,MAAM,mBAAmB;;;;;CAKtB,CAAC;AAGX,eAAO,MAAM,GAAG,SAAU,CAAC;AAC3B,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AACtC,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AACtC,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAI/C,eAAO,MAAM,oBAAoB,QAAQ,CAAC;AAC1C,eAAO,MAAM,0BAA0B,QAAQ,CAAC;AAChD,eAAO,MAAM,oCAAoC,OAAO,CAAC;AACzD,eAAO,MAAM,oCAAoC,QAAQ,CAAC;AAC1D,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AACzC,eAAO,MAAM,sBAAsB,QAAQ,CAAC;AAG5C,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAIxC,eAAO,MAAM,mBAAmB,QAAa,CAAC;AAC9C,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AAGzC,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAC/C,eAAO,MAAM,mBAAmB,WAAa,CAAC;AAC9C,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,YAAY,IAAI,CAAC"}
package/dist/constants.js CHANGED
@@ -10,17 +10,31 @@ export const hyperEvm = {
10
10
  };
11
11
  export const ADDRESSES = {
12
12
  MAIN_VAULT: "0xaC98618D06D0787D43353308286cDBa8A7aD4a8D",
13
- FORWARDER: "0x04f51e589Edeaa77ddC2dEe5d0D63fa78b0c1EdA",
13
+ FORWARDER: "0xaf8370E399eb657114C4d82988169845b1B32694",
14
14
  USDC: "0xb88339CB7199b77E23DB6E890353E22632Ba630f",
15
15
  };
16
+ // Challenge / B-book deployment (hyperevm 2026-06-26, EVM/deployment-challenge-hyperevm.json).
17
+ // CHALLENGE_FACTORY is the stable root: vault/oracle/implementation are read from it on-chain.
18
+ export const CHALLENGE_ADDRESSES = {
19
+ CHALLENGE_FACTORY: "0xc90Ab435B104e3E7eF580d5516d4F1B0912dFccC",
20
+ CHALLENGE_VAULT: "0x405EFbC832323393a91127a1b83AE36B9eEC6b4D",
21
+ CHALLENGE_PRICE_ORACLE: "0x1366f0954c601BAe7fB84b9242295293AE2C61F4",
22
+ CHALLENGE_ACCOUNT_IMPL: "0x6DeA37698b1f8EdFCE1E86Db7EF5C3A6D13bBE2E",
23
+ };
16
24
  // BPS
17
25
  export const BPS = 10000n;
18
26
  export const MIN_DRAWDOWN_BPS = 500;
19
27
  export const MAX_DRAWDOWN_BPS = 2500;
20
- export const DAILY_DD_DISCOUNT_BPS = 2000n;
21
- export const PROTOCOL_FEE_BPS = 1000n;
28
+ export const PROTOCOL_FEE_BPS = 5000n;
22
29
  export const OWNER_PROFIT_BPS = 8000n;
23
30
  export const PROTOCOL_PROFIT_BPS = 700n;
31
+ export const SUBSCRIPTION_PROTOCOL_BPS = 1500n; // 15% of subscription fee to protocol
32
+ // Builder profit-share (activation-fee payback). Trader always keeps OWNER_PROFIT_BPS (80%);
33
+ // during payback the builder cut + protocol cut must fit the 20% non-owner pool.
34
+ export const NON_OWNER_PROFIT_BPS = 2000n; // 20% — owner+builder+protocol+vault cap for setters
35
+ export const BUILDER_PROFIT_BPS_DEFAULT = 1400n; // 14% builder cut during payback
36
+ export const BUILDER_PAYBACK_PROTOCOL_BPS_DEFAULT = 300n; // 3% protocol cut during payback (vs 7% normal)
37
+ export const BUILDER_PAYBACK_FRACTION_BPS_DEFAULT = 5000n; // target = 50% of the activation fee
24
38
  export const BUILDER_LEVERAGE = 10n;
25
39
  export const MAX_UTILIZATION_BPS = 8000n;
26
40
  export const MAX_SINGLE_ACCOUNT_BPS = 1000n;
@@ -36,8 +50,13 @@ export const CHECKPOINT_INTERVAL = 86400;
36
50
  // Trading rules
37
51
  export const PROFITABLE_DAYS_REQUIRED = 3;
38
52
  export const MIN_PROFIT_BPS = 70;
39
- export const INSTANT_WITHDRAW_PROFIT_BPS = 200; // 2% of accountSize
53
+ export const INSTANT_WITHDRAW_PROFIT_BPS = 100; // 1% of accountSize
40
54
  export const MIN_WITHDRAW_AMOUNT = 1000000n; // $1 in 6dec
41
55
  export const HWM_PROFIT_LOCK_BPS = 3000; // lock 30% of profit growth into HWM
42
56
  export const MAX_LEVERAGE = 5;
57
+ // Challenge / B-book rule constants are intentionally NOT mirrored here: ChallengeVault is
58
+ // UUPS-upgradeable and the ChallengeAccount implementation is swappable on the factory, so
59
+ // hardcoded copies would drift silently. Read them live instead:
60
+ // ChallengeVaultModule.getConfig() — payout cooldown/caps, coverage, queue limits
61
+ // ChallengeAccountModule.getAccountConstants() — challenge duration, min profit bar, taker fee
43
62
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAE5B,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,EAAE,EAAE,GAAG;IACP,IAAI,EAAE,UAAU;IAChB,cAAc,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC9D,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,iCAAiC,CAAC,EAAE,EAAE;IACnE,SAAS,EAAE;QACT,UAAU,EAAE,EAAE,OAAO,EAAE,4CAA4C,EAAE;KACtE;CACuB,CAAC;AAE3B,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,UAAU,EAAE,4CAA4C;IACxD,SAAS,EAAE,4CAA4C;IACvD,IAAI,EAAE,4CAA4C;CAC1C,CAAC;AAEX,MAAM;AACN,MAAM,CAAC,MAAM,GAAG,GAAG,MAAO,CAAC;AAC3B,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACrC,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAC3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AACtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AACtC,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACxC,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AACzC,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAE5C,WAAW;AACX,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAC/B,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,+BAA+B;AAC/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,CAAC,2CAA2C;AACpF,kGAAkG;AAElG,iBAAiB;AACjB,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAC/B,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAEzC,gBAAgB;AAChB,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAC1C,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC,CAAC,oBAAoB;AACpE,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAU,CAAC,CAAC,aAAa;AAC5D,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,CAAC,qCAAqC;AAC9E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
package/dist/factory.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Address, PublicClient } from "viem";
1
+ import { type Address, type PublicClient } from "viem";
2
2
  export declare class FactoryModule {
3
3
  private publicClient;
4
4
  private factoryAddress;
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAIlD,qBAAa,aAAa;IAEtB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,cAAc;gBADd,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;YAG9C,iBAAiB;IAK/B,OAAO,CAAC,kBAAkB;YAKZ,eAAe;IAgBvB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAUlE,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU7C,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAUlD,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAU9C,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAO1D,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAUxE,gBAAgB,CAAC,OAAO,GAAE,MAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IA4E5D,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA2B9D,SAAS,IAAI,OAAO,CAAC;QACzB,cAAc,EAAE,OAAO,CAAC;QACxB,KAAK,EAAE,OAAO,CAAC;QACf,YAAY,EAAE,OAAO,CAAC;QACtB,IAAI,EAAE,OAAO,CAAC;QACd,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;CAsBH"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,OAAO,EACZ,KAAK,YAAY,EAClB,MAAM,MAAM,CAAC;AAId,qBAAa,aAAa;IAEtB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,cAAc;gBADd,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;YAG9C,iBAAiB;IAW/B,OAAO,CAAC,kBAAkB;YAWZ,eAAe;IAgBvB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAUlE,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU7C,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAUlD,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAU9C,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAO1D,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAUxE,gBAAgB,CAAC,OAAO,GAAE,MAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IA4E5D,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA2B9D,SAAS,IAAI,OAAO,CAAC;QACzB,cAAc,EAAE,OAAO,CAAC;QACxB,KAAK,EAAE,OAAO,CAAC;QACf,YAAY,EAAE,OAAO,CAAC;QACtB,IAAI,EAAE,OAAO,CAAC;QACd,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;CAsBH"}
package/dist/factory.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { BaseError, ContractFunctionRevertedError, ContractFunctionZeroDataError, } from "viem";
1
2
  import { factoryAbi } from "./abi/factory.js";
2
3
  import { assertAllSuccess } from "./utils.js";
3
4
  export class FactoryModule {
@@ -12,7 +13,18 @@ export class FactoryModule {
12
13
  return this.factoryAddress;
13
14
  return this.factoryAddress();
14
15
  }
16
+ // allAccounts(uint256) is a plain public array getter — the only revert the CALL itself
17
+ // can produce is the out-of-bounds panic, so any decoded contract revert means "index past
18
+ // the end". Detect by viem error class (message text varies by RPC/viem version — e.g.
19
+ // 'The contract function "allAccounts" reverted.' matches none of the legacy patterns);
20
+ // transport/RPC failures produce neither cause class and still bubble. The message regex
21
+ // stays as a fallback for non-viem-shaped errors.
15
22
  isOutOfBoundsError(error) {
23
+ if (error instanceof BaseError) {
24
+ const revert = error.walk((e) => e instanceof ContractFunctionRevertedError || e instanceof ContractFunctionZeroDataError);
25
+ if (revert)
26
+ return true;
27
+ }
16
28
  const message = error instanceof Error ? error.message : String(error);
17
29
  return /out of bounds|execution reverted|returned no data|position out of bounds/i.test(message);
18
30
  }