curvance 5.1.9 → 5.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 (109) hide show
  1. package/README.md +249 -65
  2. package/dist/abis/OptimizerReader.json +292 -1
  3. package/dist/chains/arbitrum.d.ts.map +1 -1
  4. package/dist/chains/arbitrum.js +14 -1
  5. package/dist/chains/arbitrum.js.map +1 -1
  6. package/dist/chains/index.d.ts +19 -0
  7. package/dist/chains/index.d.ts.map +1 -1
  8. package/dist/chains/index.js.map +1 -1
  9. package/dist/chains/monad.d.ts.map +1 -1
  10. package/dist/chains/monad.js +25 -2
  11. package/dist/chains/monad.js.map +1 -1
  12. package/dist/chains/services.d.ts +8 -0
  13. package/dist/chains/services.d.ts.map +1 -0
  14. package/dist/chains/services.js +9 -0
  15. package/dist/chains/services.js.map +1 -0
  16. package/dist/classes/Api.d.ts +7 -2
  17. package/dist/classes/Api.d.ts.map +1 -1
  18. package/dist/classes/Api.js +60 -24
  19. package/dist/classes/Api.js.map +1 -1
  20. package/dist/classes/BorrowableCToken.d.ts.map +1 -1
  21. package/dist/classes/BorrowableCToken.js +7 -2
  22. package/dist/classes/BorrowableCToken.js.map +1 -1
  23. package/dist/classes/CToken.d.ts +28 -15
  24. package/dist/classes/CToken.d.ts.map +1 -1
  25. package/dist/classes/CToken.js +217 -85
  26. package/dist/classes/CToken.js.map +1 -1
  27. package/dist/classes/DexAggregators/IDexAgg.d.ts +8 -0
  28. package/dist/classes/DexAggregators/IDexAgg.d.ts.map +1 -1
  29. package/dist/classes/DexAggregators/KyberSwap.d.ts +5 -2
  30. package/dist/classes/DexAggregators/KyberSwap.d.ts.map +1 -1
  31. package/dist/classes/DexAggregators/KyberSwap.js +41 -19
  32. package/dist/classes/DexAggregators/KyberSwap.js.map +1 -1
  33. package/dist/classes/DexAggregators/MultiDexAgg.d.ts +7 -4
  34. package/dist/classes/DexAggregators/MultiDexAgg.d.ts.map +1 -1
  35. package/dist/classes/DexAggregators/MultiDexAgg.js +62 -16
  36. package/dist/classes/DexAggregators/MultiDexAgg.js.map +1 -1
  37. package/dist/classes/DexAggregators/helpers.d.ts +1 -1
  38. package/dist/classes/DexAggregators/helpers.d.ts.map +1 -1
  39. package/dist/classes/DexAggregators/helpers.js +1 -1
  40. package/dist/classes/DexAggregators/helpers.js.map +1 -1
  41. package/dist/classes/DexAggregators/index.d.ts +0 -1
  42. package/dist/classes/DexAggregators/index.d.ts.map +1 -1
  43. package/dist/classes/DexAggregators/index.js +0 -1
  44. package/dist/classes/DexAggregators/index.js.map +1 -1
  45. package/dist/classes/LendingOptimizer.d.ts.map +1 -1
  46. package/dist/classes/LendingOptimizer.js +8 -2
  47. package/dist/classes/LendingOptimizer.js.map +1 -1
  48. package/dist/classes/Market.d.ts +5 -0
  49. package/dist/classes/Market.d.ts.map +1 -1
  50. package/dist/classes/Market.js +129 -30
  51. package/dist/classes/Market.js.map +1 -1
  52. package/dist/classes/NativeToken.d.ts +5 -2
  53. package/dist/classes/NativeToken.d.ts.map +1 -1
  54. package/dist/classes/NativeToken.js +5 -5
  55. package/dist/classes/NativeToken.js.map +1 -1
  56. package/dist/classes/OptimizerReader.d.ts +44 -4
  57. package/dist/classes/OptimizerReader.d.ts.map +1 -1
  58. package/dist/classes/OptimizerReader.js +133 -62
  59. package/dist/classes/OptimizerReader.js.map +1 -1
  60. package/dist/classes/PositionManager.d.ts +1 -0
  61. package/dist/classes/PositionManager.d.ts.map +1 -1
  62. package/dist/classes/PositionManager.js +25 -0
  63. package/dist/classes/PositionManager.js.map +1 -1
  64. package/dist/classes/ProtocolReader.d.ts +3 -0
  65. package/dist/classes/ProtocolReader.d.ts.map +1 -1
  66. package/dist/classes/ProtocolReader.js +34 -0
  67. package/dist/classes/ProtocolReader.js.map +1 -1
  68. package/dist/classes/Zapper.d.ts +4 -1
  69. package/dist/classes/Zapper.d.ts.map +1 -1
  70. package/dist/classes/Zapper.js +34 -9
  71. package/dist/classes/Zapper.js.map +1 -1
  72. package/dist/classes/index.d.ts +1 -0
  73. package/dist/classes/index.d.ts.map +1 -1
  74. package/dist/classes/index.js +1 -0
  75. package/dist/classes/index.js.map +1 -1
  76. package/dist/contracts/index.d.ts +248 -248
  77. package/dist/contracts/index.d.ts.map +1 -1
  78. package/dist/contracts/index.js +3 -2
  79. package/dist/contracts/index.js.map +1 -1
  80. package/dist/contracts/monad-mainnet.json +1 -1
  81. package/dist/feePolicy.d.ts +29 -26
  82. package/dist/feePolicy.d.ts.map +1 -1
  83. package/dist/feePolicy.js +43 -34
  84. package/dist/feePolicy.js.map +1 -1
  85. package/dist/format/index.d.ts +5 -0
  86. package/dist/format/index.d.ts.map +1 -1
  87. package/dist/format/index.js +28 -0
  88. package/dist/format/index.js.map +1 -1
  89. package/dist/helpers.d.ts +247 -248
  90. package/dist/helpers.d.ts.map +1 -1
  91. package/dist/helpers.js +5 -5
  92. package/dist/helpers.js.map +1 -1
  93. package/dist/immutability.d.ts +6 -0
  94. package/dist/immutability.d.ts.map +1 -0
  95. package/dist/immutability.js +25 -0
  96. package/dist/immutability.js.map +1 -0
  97. package/dist/integrations/merkl.d.ts +9 -2
  98. package/dist/integrations/merkl.d.ts.map +1 -1
  99. package/dist/integrations/merkl.js +219 -11
  100. package/dist/integrations/merkl.js.map +1 -1
  101. package/dist/integrations/snapshot.d.ts +3 -0
  102. package/dist/integrations/snapshot.d.ts.map +1 -1
  103. package/dist/integrations/snapshot.js +47 -3
  104. package/dist/integrations/snapshot.js.map +1 -1
  105. package/dist/setup.d.ts +13 -3
  106. package/dist/setup.d.ts.map +1 -1
  107. package/dist/setup.js +101 -7
  108. package/dist/setup.js.map +1 -1
  109. package/package.json +7 -4
@@ -55,14 +55,12 @@ import { ChainRpcPrefix } from "./helpers";
55
55
  * would let the protocol, integrators, and a referral program co-receive
56
56
  * fees in one swap call.
57
57
  *
58
- * - **Dynamic DAO address from chain.** `CURVANCE_DAO_FEE_RECEIVER` is
59
- * hardcoded. The on-chain KyberSwapChecker validates against
60
- * `centralRegistry.daoAddress()` dynamically. If DAO permissions transfer
61
- * via `transferDaoPermissions()`, the checker validates against the new
62
- * address but the SDK still sends the old one — every swap reverts.
63
- * Fix: read `daoAddress` at setupChain time via
64
- * `protocolReader.centralRegistry()` → `centralRegistry.daoAddress()`,
65
- * store in setup_config, and use at runtime instead of the constant.
58
+ * - **Dynamic DAO address from chain.** The on-chain KyberSwapChecker
59
+ * validates fee receivers against `centralRegistry.daoAddress()`
60
+ * dynamically. `setupChain()` resolves that DAO address once through
61
+ * ProtocolReader/CentralRegistry and builds the default fee policy with the
62
+ * setup-resolved receiver, so quote paths do not need per-swap registry
63
+ * reads.
66
64
  *
67
65
  * - **Per-user fee tiers / discounts.** The current policy is global (one
68
66
  * policy per setupChain). To support staker discounts, volume tiers, or
@@ -75,10 +73,9 @@ import { ChainRpcPrefix } from "./helpers";
75
73
  * query it. The classifier callback pattern generalizes to this — a
76
74
  * `getUserVolume(address)` callback that the policy uses to pick a tier.
77
75
  *
78
- * - **Per-aggregator routing fees.** Currently both KyberSwap and Kuru use the
79
- * same fee policy. If routing economics differ (e.g., Kuru's referrerFeeBps
80
- * has different rebate semantics), the policy interface could be extended
81
- * to take an aggregator name and return aggregator-specific bps.
76
+ * - **Per-aggregator routing fees.** Current adapters use the same fee policy.
77
+ * If routing economics differ, the policy interface could be extended to take
78
+ * an aggregator name and return aggregator-specific bps.
82
79
  *
83
80
  * - **Leverage-tiered fees (if reversed from current decision).** The current
84
81
  * design matches perp convention (flat bps on notional). If product later
@@ -101,24 +98,30 @@ export interface FeePolicyContext {
101
98
  /** Target leverage. null for zap. */
102
99
  targetLeverage: Decimal | null;
103
100
  }
101
+ export interface CheckerFeePolicyCompatibility {
102
+ /** Exact BPS the policy returns for every DEX-executed swap. */
103
+ exactFeeBpsForDexSwaps: bigint;
104
+ /** Receiver submitted to the checker-bound DEX route. */
105
+ feeReceiver: address;
106
+ }
104
107
  export interface FeePolicy {
108
+ /** Chain this policy was constructed for. Omit only for custom legacy policies;
109
+ * use "any" for chain-agnostic no-op policies. */
110
+ chain?: ChainRpcPrefix | "any";
105
111
  /** Returns the fee in BPS for this operation. Return 0n for no fee. */
106
112
  getFeeBps(ctx: FeePolicyContext): bigint;
107
113
  /** Address that receives the fee. KyberSwap supports comma-separated
108
114
  * multi-receiver lists if extended in the future. */
109
115
  feeReceiver: address;
116
+ /** Declares that non-no-op DEX swaps always use one checker-compatible fee.
117
+ * Omit this for context-dependent policies such as stable-tier overrides. */
118
+ checkerCompatibility?: CheckerFeePolicyCompatibility;
110
119
  }
111
120
  /** Fee BPS charged on all DEX swaps via KyberSwap's `feeAmount` parameter.
112
121
  * Must match the on-chain KyberSwapChecker.FEE_BPS constant — if they
113
122
  * diverge, every swap reverts (checker enforces exact match).
114
123
  * To change the fee: update this constant AND redeploy the checker. */
115
124
  export declare const CURVANCE_FEE_BPS = 4n;
116
- /** Curvance DAO fee receiver — same wallet used for protocol interest fees
117
- * and existing Kuru aggregator referrer fees. Must match
118
- * centralRegistry.daoAddress() — the on-chain checker validates
119
- * dynamically per-swap. If DAO permissions transfer on-chain without
120
- * updating this constant, every swap reverts. */
121
- export declare const CURVANCE_DAO_FEE_RECEIVER: address;
122
125
  /** Token classification used by the optional category-tier override.
123
126
  * Consumers provide their own classifier — the SDK does not currently
124
127
  * populate token categories from market metadata. */
@@ -148,9 +151,10 @@ export interface FlatFeePolicyConfig {
148
151
  *
149
152
  * @example
150
153
  * // Simple flat 4 bps everywhere except no-ops:
154
+ * const feeReceiver = await reader.getDaoAddress();
151
155
  * flatFeePolicy({
152
156
  * bps: 4n,
153
- * feeReceiver: CURVANCE_DAO_FEE_RECEIVER,
157
+ * feeReceiver,
154
158
  * chain: 'monad-mainnet',
155
159
  * })
156
160
  *
@@ -160,7 +164,7 @@ export interface FlatFeePolicyConfig {
160
164
  * flatFeePolicy({
161
165
  * bps: 4n,
162
166
  * stableToStableBps: 1n,
163
- * feeReceiver: CURVANCE_DAO_FEE_RECEIVER,
167
+ * feeReceiver,
164
168
  * chain: 'monad-mainnet',
165
169
  * classify: (addr) => STABLES.has(addr.toLowerCase()) ? 'stable' : 'volatile',
166
170
  * })
@@ -168,17 +172,16 @@ export interface FlatFeePolicyConfig {
168
172
  export declare function flatFeePolicy(config: FlatFeePolicyConfig): FeePolicy;
169
173
  /**
170
174
  * Convenience: a no-op fee policy that returns 0 bps for all operations.
171
- * This is the default when no policy is configured in setupChain — it
172
- * preserves backward compatibility with pre-fee-policy SDK behavior.
175
+ * Pass this explicitly when a caller wants fee-free behavior.
173
176
  *
174
- * The receiver is set to the Curvance DAO address for consistency, but it's
175
- * never used since getFeeBps always returns 0n.
177
+ * The receiver is set to the zero address because getFeeBps always returns 0n
178
+ * and no fee receiver is submitted.
176
179
  *
177
180
  * Frozen to prevent accidental mutation. Anyone needing a customized no-op
178
181
  * variant should construct a fresh `flatFeePolicy({ bps: 0n, ... })` instead
179
182
  * of mutating this singleton.
180
183
  */
181
184
  export declare const NO_FEE_POLICY: FeePolicy;
182
- export declare function getMonadMainnetFeePolicy(): FeePolicy;
183
- export declare function defaultFeePolicyForChain(chain: ChainRpcPrefix): FeePolicy;
185
+ export declare function getMonadMainnetFeePolicy(feeReceiver: address): FeePolicy;
186
+ export declare function defaultFeePolicyForChain(chain: ChainRpcPrefix, feeReceiver: address): FeePolicy;
184
187
  //# sourceMappingURL=feePolicy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feePolicy.d.ts","sourceRoot":"","sources":["../src/feePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoFG;AAEH,MAAM,MAAM,YAAY,GAClB,aAAa,GACb,eAAe,GACf,sBAAsB,GACtB,KAAK,CAAC;AAEZ,MAAM,WAAW,gBAAgB;IAC7B,iDAAiD;IACjD,SAAS,EAAE,YAAY,CAAC;IACxB,wEAAwE;IACxE,UAAU,EAAE,OAAO,CAAC;IACpB,0CAA0C;IAC1C,WAAW,EAAE,OAAO,CAAC;IACrB,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,eAAe,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,qCAAqC;IACrC,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,SAAS;IACtB,uEAAuE;IACvE,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAAC;IACzC;0DACsD;IACtD,WAAW,EAAE,OAAO,CAAC;CACxB;AAED;;;wEAGwE;AACxE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;;;kDAIkD;AAClD,eAAO,MAAM,yBAAyB,EAAE,OACQ,CAAC;AAEjD;;sDAEsD;AACtD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,mBAAmB;IAChC,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,WAAW,EAAE,OAAO,CAAC;IACrB;gEAC4D;IAC5D,KAAK,EAAE,cAAc,CAAC;IACtB;;wCAEoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;6EAGyE;IACzE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,UAAU,GAAG,IAAI,CAAC;CACpD;AAID;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,SAAS,CA2DpE;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,EAAE,SAG1B,CAAC;AAIH,wBAAgB,wBAAwB,IAAI,SAAS,CAUpD;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CAOzE"}
1
+ {"version":3,"file":"feePolicy.d.ts","sourceRoot":"","sources":["../src/feePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAO,cAAc,EAAuD,MAAM,WAAW,CAAC;AAGrG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiFG;AAEH,MAAM,MAAM,YAAY,GAClB,aAAa,GACb,eAAe,GACf,sBAAsB,GACtB,KAAK,CAAC;AAEZ,MAAM,WAAW,gBAAgB;IAC7B,iDAAiD;IACjD,SAAS,EAAE,YAAY,CAAC;IACxB,wEAAwE;IACxE,UAAU,EAAE,OAAO,CAAC;IACpB,0CAA0C;IAC1C,WAAW,EAAE,OAAO,CAAC;IACrB,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,eAAe,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,qCAAqC;IACrC,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,6BAA6B;IAC1C,gEAAgE;IAChE,sBAAsB,EAAE,MAAM,CAAC;IAC/B,yDAAyD;IACzD,WAAW,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACtB;uDACmD;IACnD,KAAK,CAAC,EAAE,cAAc,GAAG,KAAK,CAAC;IAC/B,uEAAuE;IACvE,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAAC;IACzC;0DACsD;IACtD,WAAW,EAAE,OAAO,CAAC;IACrB;kFAC8E;IAC9E,oBAAoB,CAAC,EAAE,6BAA6B,CAAC;CACxD;AAED;;;wEAGwE;AACxE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;sDAEsD;AACtD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,mBAAmB;IAChC,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,WAAW,EAAE,OAAO,CAAC;IACrB;gEAC4D;IAC5D,KAAK,EAAE,cAAc,CAAC;IACtB;;wCAEoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;6EAGyE;IACzE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,UAAU,GAAG,IAAI,CAAC;CACpD;AAID;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,SAAS,CA6EpE;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,EAAE,SAQ1B,CAAC;AAEH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,OAAO,GAAG,SAAS,CAExE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,GAAG,SAAS,CAQ/F"}
package/dist/feePolicy.js CHANGED
@@ -1,22 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NO_FEE_POLICY = exports.CURVANCE_DAO_FEE_RECEIVER = exports.CURVANCE_FEE_BPS = void 0;
3
+ exports.NO_FEE_POLICY = exports.CURVANCE_FEE_BPS = void 0;
4
4
  exports.flatFeePolicy = flatFeePolicy;
5
5
  exports.getMonadMainnetFeePolicy = getMonadMainnetFeePolicy;
6
6
  exports.defaultFeePolicyForChain = defaultFeePolicyForChain;
7
+ const helpers_1 = require("./helpers");
7
8
  const chains_1 = require("./chains");
8
9
  /** Fee BPS charged on all DEX swaps via KyberSwap's `feeAmount` parameter.
9
10
  * Must match the on-chain KyberSwapChecker.FEE_BPS constant — if they
10
11
  * diverge, every swap reverts (checker enforces exact match).
11
12
  * To change the fee: update this constant AND redeploy the checker. */
12
13
  exports.CURVANCE_FEE_BPS = 4n;
13
- /** Curvance DAO fee receiver — same wallet used for protocol interest fees
14
- * and existing Kuru aggregator referrer fees. Must match
15
- * centralRegistry.daoAddress() — the on-chain checker validates
16
- * dynamically per-swap. If DAO permissions transfer on-chain without
17
- * updating this constant, every swap reverts. */
18
- exports.CURVANCE_DAO_FEE_RECEIVER = '0x0Acb7eF4D8733C719d60e0992B489b629bc55C02';
19
- const NATIVE_ADDRESS = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
14
+ const NATIVE_ADDRESS_LOWER = helpers_1.NATIVE_ADDRESS.toLowerCase();
20
15
  /**
21
16
  * Default fee policy: flat BPS for all operations, with no-op exemptions for
22
17
  * same-token and native↔wrapped routes. Optionally supports a stable→stable
@@ -24,9 +19,10 @@ const NATIVE_ADDRESS = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
24
19
  *
25
20
  * @example
26
21
  * // Simple flat 4 bps everywhere except no-ops:
22
+ * const feeReceiver = await reader.getDaoAddress();
27
23
  * flatFeePolicy({
28
24
  * bps: 4n,
29
- * feeReceiver: CURVANCE_DAO_FEE_RECEIVER,
25
+ * feeReceiver,
30
26
  * chain: 'monad-mainnet',
31
27
  * })
32
28
  *
@@ -36,7 +32,7 @@ const NATIVE_ADDRESS = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
36
32
  * flatFeePolicy({
37
33
  * bps: 4n,
38
34
  * stableToStableBps: 1n,
39
- * feeReceiver: CURVANCE_DAO_FEE_RECEIVER,
35
+ * feeReceiver,
40
36
  * chain: 'monad-mainnet',
41
37
  * classify: (addr) => STABLES.has(addr.toLowerCase()) ? 'stable' : 'volatile',
42
38
  * })
@@ -46,11 +42,11 @@ function flatFeePolicy(config) {
46
42
  if (bps < 0n) {
47
43
  throw new Error(`flatFeePolicy: bps must be non-negative, got ${bps}`);
48
44
  }
49
- if (bps >= 10000n) {
45
+ if (bps >= helpers_1.BPS) {
50
46
  throw new Error(`flatFeePolicy: bps must be < 10000 (100%), got ${bps}`);
51
47
  }
52
48
  if (stableToStableBps !== undefined) {
53
- if (stableToStableBps < 0n || stableToStableBps >= 10000n) {
49
+ if (stableToStableBps < 0n || stableToStableBps >= helpers_1.BPS) {
54
50
  throw new Error(`flatFeePolicy: stableToStableBps must be in [0, 10000), got ${stableToStableBps}`);
55
51
  }
56
52
  }
@@ -62,7 +58,17 @@ function flatFeePolicy(config) {
62
58
  throw new Error(`flatFeePolicy: unknown chain '${chain}'`);
63
59
  }
64
60
  const wrappedNativeLower = chainCfg.wrapped_native.toLowerCase();
65
- return {
61
+ const dexSwapFeeIsContextInvariant = stableToStableBps === undefined ||
62
+ classify === undefined ||
63
+ stableToStableBps === bps;
64
+ const checkerCompatibility = dexSwapFeeIsContextInvariant
65
+ ? Object.freeze({
66
+ exactFeeBpsForDexSwaps: bps,
67
+ feeReceiver,
68
+ })
69
+ : undefined;
70
+ const policy = {
71
+ chain,
66
72
  feeReceiver,
67
73
  getFeeBps(ctx) {
68
74
  const inLower = ctx.inputToken.toLowerCase();
@@ -76,8 +82,8 @@ function flatFeePolicy(config) {
76
82
  // without a DEX call, so no fee applies. This exemption is
77
83
  // unconditional — native↔wrapped is always a no-op regardless of
78
84
  // which call site invokes the policy.
79
- if ((inLower === NATIVE_ADDRESS && outLower === wrappedNativeLower) ||
80
- (inLower === wrappedNativeLower && outLower === NATIVE_ADDRESS)) {
85
+ if ((inLower === NATIVE_ADDRESS_LOWER && outLower === wrappedNativeLower) ||
86
+ (inLower === wrappedNativeLower && outLower === NATIVE_ADDRESS_LOWER)) {
81
87
  return 0n;
82
88
  }
83
89
  // Stable→stable tier (only when both classify and stableToStableBps
@@ -92,38 +98,41 @@ function flatFeePolicy(config) {
92
98
  return bps;
93
99
  },
94
100
  };
101
+ return checkerCompatibility == null
102
+ ? policy
103
+ : {
104
+ ...policy,
105
+ checkerCompatibility,
106
+ };
95
107
  }
96
108
  /**
97
109
  * Convenience: a no-op fee policy that returns 0 bps for all operations.
98
- * This is the default when no policy is configured in setupChain — it
99
- * preserves backward compatibility with pre-fee-policy SDK behavior.
110
+ * Pass this explicitly when a caller wants fee-free behavior.
100
111
  *
101
- * The receiver is set to the Curvance DAO address for consistency, but it's
102
- * never used since getFeeBps always returns 0n.
112
+ * The receiver is set to the zero address because getFeeBps always returns 0n
113
+ * and no fee receiver is submitted.
103
114
  *
104
115
  * Frozen to prevent accidental mutation. Anyone needing a customized no-op
105
116
  * variant should construct a fresh `flatFeePolicy({ bps: 0n, ... })` instead
106
117
  * of mutating this singleton.
107
118
  */
108
119
  exports.NO_FEE_POLICY = Object.freeze({
109
- feeReceiver: exports.CURVANCE_DAO_FEE_RECEIVER,
120
+ chain: "any",
121
+ feeReceiver: helpers_1.EMPTY_ADDRESS,
122
+ checkerCompatibility: Object.freeze({
123
+ exactFeeBpsForDexSwaps: 0n,
124
+ feeReceiver: helpers_1.EMPTY_ADDRESS,
125
+ }),
110
126
  getFeeBps: () => 0n,
111
127
  });
112
- let monadMainnetFeePolicy = null;
113
- function getMonadMainnetFeePolicy() {
114
- monadMainnetFeePolicy ??= Object.freeze(flatFeePolicy({
128
+ function getMonadMainnetFeePolicy(feeReceiver) {
129
+ return defaultFeePolicyForChain('monad-mainnet', feeReceiver);
130
+ }
131
+ function defaultFeePolicyForChain(chain, feeReceiver) {
132
+ return Object.freeze(flatFeePolicy({
115
133
  bps: exports.CURVANCE_FEE_BPS,
116
- feeReceiver: exports.CURVANCE_DAO_FEE_RECEIVER,
117
- chain: 'monad-mainnet',
134
+ feeReceiver,
135
+ chain,
118
136
  }));
119
- return monadMainnetFeePolicy;
120
- }
121
- function defaultFeePolicyForChain(chain) {
122
- switch (chain) {
123
- case 'monad-mainnet':
124
- return getMonadMainnetFeePolicy();
125
- default:
126
- return exports.NO_FEE_POLICY;
127
- }
128
137
  }
129
138
  //# sourceMappingURL=feePolicy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"feePolicy.js","sourceRoot":"","sources":["../src/feePolicy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feePolicy.js","sourceRoot":"","sources":["../src/feePolicy.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,8 @@
1
+ export * as leverage from './leverage';
2
+ export * as borrow from './borrow';
3
+ export * as collateral from './collateral';
4
+ export * as health from './health';
5
+ export * as amounts from './amounts';
1
6
  export * from './leverage';
2
7
  export * from './borrow';
3
8
  export * from './collateral';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/format/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/format/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAErC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
@@ -10,10 +10,38 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
10
10
  if (k2 === undefined) k2 = k;
11
11
  o[k2] = m[k];
12
12
  }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
13
35
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
36
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
37
  };
16
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.amounts = exports.health = exports.collateral = exports.borrow = exports.leverage = void 0;
40
+ exports.leverage = __importStar(require("./leverage"));
41
+ exports.borrow = __importStar(require("./borrow"));
42
+ exports.collateral = __importStar(require("./collateral"));
43
+ exports.health = __importStar(require("./health"));
44
+ exports.amounts = __importStar(require("./amounts"));
17
45
  __exportStar(require("./leverage"), exports);
18
46
  __exportStar(require("./borrow"), exports);
19
47
  __exportStar(require("./collateral"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/format/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,2CAAyB;AACzB,+CAA6B;AAC7B,2CAAyB;AACzB,4CAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/format/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAAuC;AACvC,mDAAmC;AACnC,2DAA2C;AAC3C,mDAAmC;AACnC,qDAAqC;AAErC,6CAA2B;AAC3B,2CAAyB;AACzB,+CAA6B;AAC7B,2CAAyB;AACzB,4CAA0B"}