curvance 5.1.9 → 5.2.1

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 (115) hide show
  1. package/README.md +264 -67
  2. package/dist/abis/OptimizerReader.json +292 -1
  3. package/dist/abis/OptimizerZapper.json +177 -0
  4. package/dist/chains/arbitrum.d.ts.map +1 -1
  5. package/dist/chains/arbitrum.js +14 -1
  6. package/dist/chains/arbitrum.js.map +1 -1
  7. package/dist/chains/index.d.ts +19 -0
  8. package/dist/chains/index.d.ts.map +1 -1
  9. package/dist/chains/index.js.map +1 -1
  10. package/dist/chains/monad.d.ts.map +1 -1
  11. package/dist/chains/monad.js +25 -2
  12. package/dist/chains/monad.js.map +1 -1
  13. package/dist/chains/services.d.ts +8 -0
  14. package/dist/chains/services.d.ts.map +1 -0
  15. package/dist/chains/services.js +9 -0
  16. package/dist/chains/services.js.map +1 -0
  17. package/dist/classes/Api.d.ts +7 -2
  18. package/dist/classes/Api.d.ts.map +1 -1
  19. package/dist/classes/Api.js +60 -24
  20. package/dist/classes/Api.js.map +1 -1
  21. package/dist/classes/BorrowableCToken.d.ts.map +1 -1
  22. package/dist/classes/BorrowableCToken.js +7 -2
  23. package/dist/classes/BorrowableCToken.js.map +1 -1
  24. package/dist/classes/CToken.d.ts +28 -15
  25. package/dist/classes/CToken.d.ts.map +1 -1
  26. package/dist/classes/CToken.js +217 -85
  27. package/dist/classes/CToken.js.map +1 -1
  28. package/dist/classes/DexAggregators/IDexAgg.d.ts +8 -0
  29. package/dist/classes/DexAggregators/IDexAgg.d.ts.map +1 -1
  30. package/dist/classes/DexAggregators/KyberSwap.d.ts +5 -2
  31. package/dist/classes/DexAggregators/KyberSwap.d.ts.map +1 -1
  32. package/dist/classes/DexAggregators/KyberSwap.js +41 -19
  33. package/dist/classes/DexAggregators/KyberSwap.js.map +1 -1
  34. package/dist/classes/DexAggregators/MultiDexAgg.d.ts +7 -4
  35. package/dist/classes/DexAggregators/MultiDexAgg.d.ts.map +1 -1
  36. package/dist/classes/DexAggregators/MultiDexAgg.js +62 -16
  37. package/dist/classes/DexAggregators/MultiDexAgg.js.map +1 -1
  38. package/dist/classes/DexAggregators/helpers.d.ts +1 -1
  39. package/dist/classes/DexAggregators/helpers.d.ts.map +1 -1
  40. package/dist/classes/DexAggregators/helpers.js +1 -1
  41. package/dist/classes/DexAggregators/helpers.js.map +1 -1
  42. package/dist/classes/DexAggregators/index.d.ts +0 -1
  43. package/dist/classes/DexAggregators/index.d.ts.map +1 -1
  44. package/dist/classes/DexAggregators/index.js +0 -1
  45. package/dist/classes/DexAggregators/index.js.map +1 -1
  46. package/dist/classes/LendingOptimizer.d.ts +62 -2
  47. package/dist/classes/LendingOptimizer.d.ts.map +1 -1
  48. package/dist/classes/LendingOptimizer.js +251 -4
  49. package/dist/classes/LendingOptimizer.js.map +1 -1
  50. package/dist/classes/Market.d.ts +5 -0
  51. package/dist/classes/Market.d.ts.map +1 -1
  52. package/dist/classes/Market.js +129 -30
  53. package/dist/classes/Market.js.map +1 -1
  54. package/dist/classes/NativeToken.d.ts +5 -2
  55. package/dist/classes/NativeToken.d.ts.map +1 -1
  56. package/dist/classes/NativeToken.js +5 -5
  57. package/dist/classes/NativeToken.js.map +1 -1
  58. package/dist/classes/OptimizerReader.d.ts +44 -4
  59. package/dist/classes/OptimizerReader.d.ts.map +1 -1
  60. package/dist/classes/OptimizerReader.js +133 -62
  61. package/dist/classes/OptimizerReader.js.map +1 -1
  62. package/dist/classes/OptimizerZapper.d.ts +24 -0
  63. package/dist/classes/OptimizerZapper.d.ts.map +1 -0
  64. package/dist/classes/OptimizerZapper.js +117 -0
  65. package/dist/classes/OptimizerZapper.js.map +1 -0
  66. package/dist/classes/PositionManager.d.ts +1 -0
  67. package/dist/classes/PositionManager.d.ts.map +1 -1
  68. package/dist/classes/PositionManager.js +25 -0
  69. package/dist/classes/PositionManager.js.map +1 -1
  70. package/dist/classes/ProtocolReader.d.ts +3 -0
  71. package/dist/classes/ProtocolReader.d.ts.map +1 -1
  72. package/dist/classes/ProtocolReader.js +34 -0
  73. package/dist/classes/ProtocolReader.js.map +1 -1
  74. package/dist/classes/Zapper.d.ts +4 -1
  75. package/dist/classes/Zapper.d.ts.map +1 -1
  76. package/dist/classes/Zapper.js +34 -9
  77. package/dist/classes/Zapper.js.map +1 -1
  78. package/dist/classes/index.d.ts +2 -0
  79. package/dist/classes/index.d.ts.map +1 -1
  80. package/dist/classes/index.js +2 -0
  81. package/dist/classes/index.js.map +1 -1
  82. package/dist/contracts/index.d.ts +249 -248
  83. package/dist/contracts/index.d.ts.map +1 -1
  84. package/dist/contracts/index.js +3 -2
  85. package/dist/contracts/index.js.map +1 -1
  86. package/dist/contracts/monad-mainnet.json +3 -2
  87. package/dist/feePolicy.d.ts +29 -26
  88. package/dist/feePolicy.d.ts.map +1 -1
  89. package/dist/feePolicy.js +43 -34
  90. package/dist/feePolicy.js.map +1 -1
  91. package/dist/format/index.d.ts +5 -0
  92. package/dist/format/index.d.ts.map +1 -1
  93. package/dist/format/index.js +28 -0
  94. package/dist/format/index.js.map +1 -1
  95. package/dist/helpers.d.ts +248 -248
  96. package/dist/helpers.d.ts.map +1 -1
  97. package/dist/helpers.js +5 -5
  98. package/dist/helpers.js.map +1 -1
  99. package/dist/immutability.d.ts +6 -0
  100. package/dist/immutability.d.ts.map +1 -0
  101. package/dist/immutability.js +25 -0
  102. package/dist/immutability.js.map +1 -0
  103. package/dist/integrations/merkl.d.ts +9 -2
  104. package/dist/integrations/merkl.d.ts.map +1 -1
  105. package/dist/integrations/merkl.js +219 -11
  106. package/dist/integrations/merkl.js.map +1 -1
  107. package/dist/integrations/snapshot.d.ts +3 -0
  108. package/dist/integrations/snapshot.d.ts.map +1 -1
  109. package/dist/integrations/snapshot.js +47 -3
  110. package/dist/integrations/snapshot.js.map +1 -1
  111. package/dist/setup.d.ts +13 -3
  112. package/dist/setup.d.ts.map +1 -1
  113. package/dist/setup.js +101 -7
  114. package/dist/setup.js.map +1 -1
  115. package/package.json +7 -4
@@ -1,9 +1,14 @@
1
1
  import { Contract } from "ethers";
2
+ import Decimal from "decimal.js";
2
3
  import { address, curvance_read_provider } from "../types";
4
+ import type { Market } from "./Market";
3
5
  export interface OptimizerCTokenData {
4
6
  address: address;
5
7
  allocatedAssets: bigint;
6
8
  liquidity: bigint;
9
+ allocationCap: bigint;
10
+ /** Current allocation relative to the cap-derived max allocation. 10000 = at cap. */
11
+ allocationCapUtilizationBps: bigint;
7
12
  }
8
13
  export interface OptimizerMarketData {
9
14
  address: address;
@@ -12,10 +17,30 @@ export interface OptimizerMarketData {
12
17
  markets: OptimizerCTokenData[];
13
18
  totalLiquidity: bigint;
14
19
  sharePrice: bigint;
20
+ exchangeRateHighWatermark: bigint;
15
21
  performanceFee: bigint;
22
+ numApprovedMarkets: bigint;
16
23
  /** Pre-performance-fee weighted supply APY in WAD (1e18 = 100%). */
17
24
  apy: bigint;
18
25
  }
26
+ export interface OptimizerUnderlyingMarketAPY {
27
+ cToken: address;
28
+ market: address | null;
29
+ assetSymbol: string;
30
+ allocatedAssets: bigint;
31
+ allocationWeight: Decimal;
32
+ nativeApy: Decimal;
33
+ merklApy: Decimal;
34
+ totalApy: Decimal;
35
+ }
36
+ export interface OptimizerAPYBreakdown {
37
+ optimizer: address;
38
+ totalAssets: bigint;
39
+ nativeApy: Decimal;
40
+ merklApy: Decimal;
41
+ averageApy: Decimal;
42
+ markets: OptimizerUnderlyingMarketAPY[];
43
+ }
19
44
  export interface OptimizerUserData {
20
45
  address: address;
21
46
  shareBalance: bigint;
@@ -32,9 +57,12 @@ export interface AllocationBound {
32
57
  }
33
58
  export interface IOptimizerReader {
34
59
  getOptimizerAPY(optimizer: address): Promise<bigint>;
35
- getOptimizerMarketData(optimizers: address[]): Promise<any[]>;
36
60
  getOptimizerUserData(optimizers: address[], account: address): Promise<any[]>;
61
+ assetsAtTimestamp(account: address, cToken: address, timestamp: bigint): Promise<bigint>;
62
+ isBad(optimizer: address): Promise<address[]>;
63
+ multiIsBadCheck(optimizers: address[]): Promise<address[][]>;
37
64
  optimalRebalance(optimizer: address, slippageBps: bigint): Promise<any>;
65
+ optimalRebalanceAt(optimizer: address, slippageBps: bigint, timestamp: bigint): Promise<any>;
38
66
  }
39
67
  export declare class OptimizerReader {
40
68
  provider: curvance_read_provider;
@@ -43,13 +71,25 @@ export declare class OptimizerReader {
43
71
  constructor(address: address, provider?: curvance_read_provider);
44
72
  getOptimizerAPY(optimizer: address): Promise<bigint>;
45
73
  getOptimizerMarketData(optimizers: address[]): Promise<OptimizerMarketData[]>;
46
- private shouldFallbackToViewOnlyOptimizerReads;
47
- private getOptimizerMarketDataViewOnly;
48
- private normalizeOptimizerMarketData;
74
+ /**
75
+ * Returns the optimizer APY model plus weighted Merkl LEND rewards.
76
+ *
77
+ * The native optimizer APY comes from `getOptimizerMarketData().apy`, which
78
+ * mirrors the on-chain reader's weighted supply APY. Per-market Merkl APYs
79
+ * come from SDK market tokens hydrated during `Market.getAll`/`setupChain`.
80
+ */
81
+ getOptimizerAPYBreakdown(optimizer: address, markets?: Market[]): Promise<OptimizerAPYBreakdown>;
49
82
  getOptimizerUserData(optimizers: address[], account: address): Promise<OptimizerUserData[]>;
83
+ assetsAtTimestamp(account: address, cToken: address, timestamp: bigint): Promise<bigint>;
84
+ isBad(optimizer: address): Promise<address[]>;
85
+ multiIsBadCheck(optimizers: address[]): Promise<address[][]>;
50
86
  optimalRebalance(optimizer: address, slippageBps?: bigint): Promise<{
51
87
  actions: ReallocationAction[];
52
88
  bounds: AllocationBound[];
53
89
  }>;
90
+ optimalRebalanceAt(optimizer: address, slippageBps: bigint, timestamp: bigint): Promise<{
91
+ actions: ReallocationAction[];
92
+ bounds: AllocationBound[];
93
+ }>;
54
94
  }
55
95
  //# sourceMappingURL=OptimizerReader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OptimizerReader.d.ts","sourceRoot":"","sources":["../../src/classes/OptimizerReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAoB3D,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC7B,eAAe,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,sBAAsB,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9D,oBAAoB,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9E,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CAC3E;AAiBD,qBAAa,eAAe;IACxB,QAAQ,EAAE,sBAAsB,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,GAAG,gBAAgB,CAAC;gBAE1B,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,sBAAsB;IAczD,eAAe,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAIpD,sBAAsB,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAanF,OAAO,CAAC,sCAAsC;YAKhC,8BAA8B;YAqC9B,4BAA4B;IAiBpC,oBAAoB,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAS3F,gBAAgB,CAClB,SAAS,EAAE,OAAO,EAClB,WAAW,GAAE,MAAW,GACzB,OAAO,CAAC;QAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;QAAC,MAAM,EAAE,eAAe,EAAE,CAAA;KAAE,CAAC;CAU3E"}
1
+ {"version":3,"file":"OptimizerReader.d.ts","sourceRoot":"","sources":["../../src/classes/OptimizerReader.ts"],"names":[],"mappings":"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"}
@@ -5,13 +5,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.OptimizerReader = void 0;
7
7
  const ethers_1 = require("ethers");
8
+ const decimal_js_1 = __importDefault(require("decimal.js"));
8
9
  const OptimizerReader_json_1 = __importDefault(require("../abis/OptimizerReader.json"));
10
+ const helpers_1 = require("../helpers");
9
11
  const OPTIMIZER_VIEW_ABI = [
10
12
  "function asset() view returns (address)",
11
13
  "function totalAssets() view returns (uint256)",
12
14
  "function exchangeRate() view returns (uint256)",
15
+ "function exchangeRateHighWatermark() view returns (uint256)",
13
16
  "function fee() view returns (uint256)",
14
17
  "function getApprovedMarkets() view returns (address[])",
18
+ "function allocationCaps(address cToken) view returns (uint256)",
15
19
  ];
16
20
  const BORROWABLE_CTOKEN_VIEW_ABI = [
17
21
  "function balanceOf(address owner) view returns (uint256)",
@@ -34,6 +38,33 @@ function normalizeAllocationBound(bound) {
34
38
  maxBps: BigInt(bound.maxBps),
35
39
  };
36
40
  }
41
+ function calculateAllocationCapUtilizationBps(totalAssets, allocatedAssets, allocationCap) {
42
+ const maxAllocation = (totalAssets * allocationCap) / helpers_1.WAD;
43
+ return maxAllocation === 0n ? 0n : (allocatedAssets * helpers_1.BPS) / maxAllocation;
44
+ }
45
+ function normalizeRebalanceResult(data) {
46
+ const actions = data.actions ?? data[0] ?? [];
47
+ const bounds = data.bounds ?? data[1] ?? [];
48
+ return {
49
+ actions: actions.map((action) => normalizeReallocationAction(action)),
50
+ bounds: bounds.map((bound) => normalizeAllocationBound(bound)),
51
+ };
52
+ }
53
+ function getDefaultMarkets() {
54
+ return (require("../setup").all_markets ?? []);
55
+ }
56
+ function buildTokenIndex(markets) {
57
+ const tokens = new Map();
58
+ for (const market of markets) {
59
+ for (const token of market.tokens) {
60
+ const key = token.address.toLowerCase();
61
+ if (!tokens.has(key)) {
62
+ tokens.set(key, token);
63
+ }
64
+ }
65
+ }
66
+ return tokens;
67
+ }
37
68
  class OptimizerReader {
38
69
  provider;
39
70
  address;
@@ -52,68 +83,98 @@ class OptimizerReader {
52
83
  return BigInt(await this.contract.getOptimizerAPY(optimizer));
53
84
  }
54
85
  async getOptimizerMarketData(optimizers) {
55
- try {
56
- const data = await this.contract.getOptimizerMarketData.staticCall(optimizers);
57
- return Promise.all(data.map((opt) => this.normalizeOptimizerMarketData(opt)));
58
- }
59
- catch (error) {
60
- if (!this.shouldFallbackToViewOnlyOptimizerReads(error)) {
61
- throw error;
62
- }
63
- return Promise.all(optimizers.map((optimizer) => this.getOptimizerMarketDataViewOnly(optimizer)));
64
- }
65
- }
66
- shouldFallbackToViewOnlyOptimizerReads(error) {
67
- const message = String(error?.shortMessage ?? error?.reason ?? error?.message ?? error);
68
- return /static|state|write|non-view|call exception|execution reverted/i.test(message);
69
- }
70
- async getOptimizerMarketDataViewOnly(optimizer) {
71
- const opt = new ethers_1.Contract(optimizer, OPTIMIZER_VIEW_ABI, this.provider);
72
- const [asset, totalAssets, sharePrice, performanceFee, markets] = await Promise.all([
73
- opt.asset(),
74
- opt.totalAssets(),
75
- opt.exchangeRate(),
76
- opt.fee(),
77
- opt.getApprovedMarkets(),
78
- ]);
79
- const marketRows = await Promise.all(markets.map(async (market) => {
80
- const cToken = new ethers_1.Contract(market, BORROWABLE_CTOKEN_VIEW_ABI, this.provider);
81
- const shareBalance = await cToken.balanceOf(optimizer);
82
- const [allocatedAssets, liquidity] = await Promise.all([
83
- cToken.convertToAssets(shareBalance),
84
- cToken.assetsHeld(),
86
+ return Promise.all(optimizers.map(async (optimizer) => {
87
+ const opt = new ethers_1.Contract(optimizer, OPTIMIZER_VIEW_ABI, this.provider);
88
+ const [asset, totalAssets, sharePrice, exchangeRateHighWatermark, performanceFee, markets,] = await Promise.all([
89
+ opt.asset(),
90
+ opt.totalAssets(),
91
+ opt.exchangeRate(),
92
+ opt.exchangeRateHighWatermark(),
93
+ opt.fee(),
94
+ opt.getApprovedMarkets(),
85
95
  ]);
96
+ const totalAssetsBig = BigInt(totalAssets);
97
+ const marketRows = await Promise.all(markets.map(async (market) => {
98
+ const cToken = new ethers_1.Contract(market, BORROWABLE_CTOKEN_VIEW_ABI, this.provider);
99
+ const [shareBalance, allocationCap] = await Promise.all([
100
+ cToken.balanceOf(optimizer),
101
+ opt.allocationCaps(market),
102
+ ]);
103
+ const [allocatedAssets, liquidity] = await Promise.all([
104
+ cToken.convertToAssets(shareBalance),
105
+ cToken.assetsHeld(),
106
+ ]);
107
+ const allocatedAssetsBig = BigInt(allocatedAssets);
108
+ const allocationCapBig = BigInt(allocationCap);
109
+ return {
110
+ address: market,
111
+ allocatedAssets: allocatedAssetsBig,
112
+ liquidity: BigInt(liquidity),
113
+ allocationCap: allocationCapBig,
114
+ allocationCapUtilizationBps: calculateAllocationCapUtilizationBps(totalAssetsBig, allocatedAssetsBig, allocationCapBig),
115
+ };
116
+ }));
86
117
  return {
87
- address: market,
88
- allocatedAssets: BigInt(allocatedAssets),
89
- liquidity: BigInt(liquidity),
118
+ address: optimizer,
119
+ asset: asset,
120
+ totalAssets: totalAssetsBig,
121
+ markets: marketRows,
122
+ totalLiquidity: marketRows.reduce((sum, market) => sum + market.liquidity, 0n),
123
+ sharePrice: BigInt(sharePrice),
124
+ exchangeRateHighWatermark: BigInt(exchangeRateHighWatermark),
125
+ performanceFee: BigInt(performanceFee),
126
+ numApprovedMarkets: BigInt(markets.length),
127
+ apy: await this.getOptimizerAPY(optimizer),
90
128
  };
91
129
  }));
92
- return {
93
- address: optimizer,
94
- asset: asset,
95
- totalAssets: BigInt(totalAssets),
96
- markets: marketRows,
97
- totalLiquidity: marketRows.reduce((sum, market) => sum + market.liquidity, 0n),
98
- sharePrice: BigInt(sharePrice),
99
- performanceFee: BigInt(performanceFee),
100
- apy: await this.getOptimizerAPY(optimizer),
101
- };
102
130
  }
103
- async normalizeOptimizerMarketData(opt) {
131
+ /**
132
+ * Returns the optimizer APY model plus weighted Merkl LEND rewards.
133
+ *
134
+ * The native optimizer APY comes from `getOptimizerMarketData().apy`, which
135
+ * mirrors the on-chain reader's weighted supply APY. Per-market Merkl APYs
136
+ * come from SDK market tokens hydrated during `Market.getAll`/`setupChain`.
137
+ */
138
+ async getOptimizerAPYBreakdown(optimizer, markets = getDefaultMarkets()) {
139
+ const [data] = await this.getOptimizerMarketData([optimizer]);
140
+ if (data == undefined) {
141
+ throw new Error(`OptimizerReader.getOptimizerAPYBreakdown: no data returned for ${optimizer}.`);
142
+ }
143
+ const tokenIndex = buildTokenIndex(markets);
144
+ const totalAssetsDecimal = new decimal_js_1.default(data.totalAssets.toString());
145
+ const nativeApy = new decimal_js_1.default(data.apy.toString()).div(helpers_1.WAD_DECIMAL);
146
+ let merklApy = new decimal_js_1.default(0);
147
+ const rows = [];
148
+ for (const marketData of data.markets) {
149
+ const token = tokenIndex.get(marketData.address.toLowerCase());
150
+ if (token == undefined) {
151
+ throw new Error(`OptimizerReader.getOptimizerAPYBreakdown: approved market ${marketData.address} ` +
152
+ `is not present in the provided SDK markets.`);
153
+ }
154
+ const allocationWeight = data.totalAssets === 0n
155
+ ? new decimal_js_1.default(0)
156
+ : new decimal_js_1.default(marketData.allocatedAssets.toString()).div(totalAssetsDecimal);
157
+ const tokenNativeApy = token.getApy();
158
+ const tokenMerklApy = new decimal_js_1.default(token.incentiveSupplyApy ?? 0);
159
+ merklApy = merklApy.add(tokenMerklApy.mul(allocationWeight));
160
+ rows.push({
161
+ cToken: marketData.address,
162
+ market: token.market?.address ?? null,
163
+ assetSymbol: token.asset?.symbol ?? marketData.address,
164
+ allocatedAssets: marketData.allocatedAssets,
165
+ allocationWeight,
166
+ nativeApy: tokenNativeApy,
167
+ merklApy: tokenMerklApy,
168
+ totalApy: tokenNativeApy.add(tokenMerklApy),
169
+ });
170
+ }
104
171
  return {
105
- address: opt._address,
106
- asset: opt.asset,
107
- totalAssets: BigInt(opt.totalAssets),
108
- markets: opt.markets.map((m) => ({
109
- address: m._address,
110
- allocatedAssets: BigInt(m.allocatedAssets),
111
- liquidity: BigInt(m.liquidity)
112
- })),
113
- totalLiquidity: BigInt(opt.totalLiquidity),
114
- sharePrice: BigInt(opt.sharePrice),
115
- performanceFee: BigInt(opt.performanceFee),
116
- apy: opt.apy == null ? await this.getOptimizerAPY(opt._address) : BigInt(opt.apy),
172
+ optimizer: data.address,
173
+ totalAssets: data.totalAssets,
174
+ nativeApy,
175
+ merklApy,
176
+ averageApy: nativeApy.add(merklApy),
177
+ markets: rows,
117
178
  };
118
179
  }
119
180
  async getOptimizerUserData(optimizers, account) {
@@ -124,14 +185,24 @@ class OptimizerReader {
124
185
  redeemable: BigInt(opt.redeemable)
125
186
  }));
126
187
  }
188
+ async assetsAtTimestamp(account, cToken, timestamp) {
189
+ return BigInt(await this.contract.assetsAtTimestamp(account, cToken, timestamp));
190
+ }
191
+ async isBad(optimizer) {
192
+ const markets = await this.contract.isBad(optimizer);
193
+ return markets.map((market) => market);
194
+ }
195
+ async multiIsBadCheck(optimizers) {
196
+ const markets = await this.contract.multiIsBadCheck(optimizers);
197
+ return markets.map((row) => row.map((market) => market));
198
+ }
127
199
  async optimalRebalance(optimizer, slippageBps = 0n) {
128
200
  const data = await this.contract.optimalRebalance(optimizer, slippageBps);
129
- const actions = data.actions ?? data[0] ?? [];
130
- const bounds = data.bounds ?? data[1] ?? [];
131
- return {
132
- actions: actions.map((action) => normalizeReallocationAction(action)),
133
- bounds: bounds.map((bound) => normalizeAllocationBound(bound)),
134
- };
201
+ return normalizeRebalanceResult(data);
202
+ }
203
+ async optimalRebalanceAt(optimizer, slippageBps, timestamp) {
204
+ const data = await this.contract.optimalRebalanceAt(optimizer, slippageBps, timestamp);
205
+ return normalizeRebalanceResult(data);
135
206
  }
136
207
  }
137
208
  exports.OptimizerReader = OptimizerReader;
@@ -1 +1 @@
1
- {"version":3,"file":"OptimizerReader.js","sourceRoot":"","sources":["../../src/classes/OptimizerReader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OptimizerReader.js","sourceRoot":"","sources":["../../src/classes/OptimizerReader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { Contract, TransactionResponse } from "ethers";
2
+ import { address, bytes, curvance_signer } from "../types";
3
+ import { Calldata } from "./Calldata";
4
+ import type { SetupConfigSnapshot } from "../setup";
5
+ import type IDexAgg from "./DexAggregators/IDexAgg";
6
+ import type { LendingOptimizer } from "./LendingOptimizer";
7
+ import type { Swap } from "./Zapper";
8
+ export interface IOptimizerZapper {
9
+ swapAndDeposit(optimizer: address, depositAsWrappedNative: boolean, swapAction: Swap, expectedShares: bigint, receiver: address): Promise<TransactionResponse>;
10
+ }
11
+ export declare class OptimizerZapper extends Calldata<IOptimizerZapper> {
12
+ signer: curvance_signer;
13
+ contract: Contract & IOptimizerZapper;
14
+ address: address;
15
+ setup: SetupConfigSnapshot;
16
+ dexAgg: IDexAgg;
17
+ constructor(address: address, signer: curvance_signer, setup: SetupConfigSnapshot, dexAgg: IDexAgg);
18
+ deposit(optimizer: LendingOptimizer, inputToken: address, amount: bigint, slippage: bigint, receiver?: address): Promise<TransactionResponse>;
19
+ getDepositCalldata(optimizer: LendingOptimizer, inputToken: address, amount: bigint, slippage: bigint, receiver?: address): Promise<bytes>;
20
+ getNativeDepositCalldata(optimizer: LendingOptimizer, amount: bigint, wrapped?: boolean, receiver?: address): Promise<bytes>;
21
+ private getOptimizerAsset;
22
+ private getExpectedShares;
23
+ }
24
+ //# sourceMappingURL=OptimizerZapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptimizerZapper.d.ts","sourceRoot":"","sources":["../../src/classes/OptimizerZapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAIrC,MAAM,WAAW,gBAAgB;IAC7B,cAAc,CACV,SAAS,EAAE,OAAO,EAClB,sBAAsB,EAAE,OAAO,EAC/B,UAAU,EAAE,IAAI,EAChB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,OAAO,GAClB,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACnC;AAED,qBAAa,eAAgB,SAAQ,QAAQ,CAAC,gBAAgB,CAAC;IAC3D,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,QAAQ,GAAG,gBAAgB,CAAC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;gBAEJ,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,OAAO;IAe5F,OAAO,CACT,SAAS,EAAE,gBAAgB,EAC3B,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,OAAwC,GACnD,OAAO,CAAC,mBAAmB,CAAC;IAQzB,kBAAkB,CACpB,SAAS,EAAE,gBAAgB,EAC3B,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,OAAwC,GACnD,OAAO,CAAC,KAAK,CAAC;IAoEX,wBAAwB,CAC1B,SAAS,EAAE,gBAAgB,EAC3B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,OAAe,EACxB,QAAQ,GAAE,OAAwC,GACnD,OAAO,CAAC,KAAK,CAAC;YAqBH,iBAAiB;YAIjB,iBAAiB;CAIlC"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OptimizerZapper = void 0;
7
+ const helpers_1 = require("../helpers");
8
+ const Calldata_1 = require("./Calldata");
9
+ const OptimizerZapper_json_1 = __importDefault(require("../abis/OptimizerZapper.json"));
10
+ const OPTIMIZER_ZAP_SHARES_BUFFER_BPS = 2n;
11
+ class OptimizerZapper extends Calldata_1.Calldata {
12
+ signer;
13
+ contract;
14
+ address;
15
+ setup;
16
+ dexAgg;
17
+ constructor(address, signer, setup, dexAgg) {
18
+ super();
19
+ this.address = address;
20
+ this.signer = signer;
21
+ this.setup = setup;
22
+ if (dexAgg == undefined) {
23
+ throw new Error("OptimizerZapper requires a setup-bound DEX aggregator. " +
24
+ "Pass the dexAgg returned by setupChain(...).");
25
+ }
26
+ this.dexAgg = dexAgg;
27
+ this.contract = (0, helpers_1.contractSetup)(signer, address, OptimizerZapper_json_1.default);
28
+ }
29
+ async deposit(optimizer, inputToken, amount, slippage, receiver = this.signer.address) {
30
+ const calldata = await this.getDepositCalldata(optimizer, inputToken, amount, slippage, receiver);
31
+ const overrides = inputToken.toLowerCase() === helpers_1.NATIVE_ADDRESS.toLowerCase()
32
+ ? { value: amount }
33
+ : {};
34
+ return this.executeCallData(calldata, overrides);
35
+ }
36
+ async getDepositCalldata(optimizer, inputToken, amount, slippage, receiver = this.signer.address) {
37
+ const outputToken = await this.getOptimizerAsset(optimizer);
38
+ const isNative = inputToken.toLowerCase() === helpers_1.NATIVE_ADDRESS.toLowerCase();
39
+ const wrappedNative = this.setup.assets.wrapped_native;
40
+ if (isNative && outputToken.toLowerCase() === wrappedNative.toLowerCase()) {
41
+ return this.getNativeDepositCalldata(optimizer, amount, true, receiver);
42
+ }
43
+ const swapInputToken = isNative ? wrappedNative : inputToken;
44
+ if (swapInputToken.toLowerCase() === outputToken.toLowerCase()) {
45
+ const swap = {
46
+ inputToken: isNative ? helpers_1.NATIVE_ADDRESS : inputToken,
47
+ inputAmount: amount,
48
+ outputToken,
49
+ target: helpers_1.EMPTY_ADDRESS,
50
+ slippage: 0n,
51
+ call: helpers_1.EMPTY_BYTES,
52
+ };
53
+ const expectedShares = await this.getExpectedShares(optimizer, amount);
54
+ return this.getCallData("swapAndDeposit", [
55
+ optimizer.address,
56
+ isNative,
57
+ swap,
58
+ expectedShares,
59
+ receiver,
60
+ ]);
61
+ }
62
+ const feeBps = this.setup.feePolicy.getFeeBps({
63
+ operation: "zap",
64
+ inputToken: isNative ? helpers_1.NATIVE_ADDRESS : inputToken,
65
+ outputToken,
66
+ inputAmount: amount,
67
+ currentLeverage: null,
68
+ targetLeverage: null,
69
+ });
70
+ const feeReceiver = feeBps > 0n ? this.setup.feePolicy.feeReceiver : undefined;
71
+ const quote = await this.dexAgg.quote(this.address, swapInputToken, outputToken, amount, slippage, feeBps, feeReceiver);
72
+ const swap = {
73
+ inputToken: isNative ? helpers_1.NATIVE_ADDRESS : inputToken,
74
+ inputAmount: amount,
75
+ outputToken,
76
+ target: quote.to,
77
+ slippage: (0, helpers_1.toContractSwapSlippage)(slippage, feeBps),
78
+ call: quote.calldata,
79
+ };
80
+ const expectedShares = await this.getExpectedShares(optimizer, BigInt(quote.min_out));
81
+ return this.getCallData("swapAndDeposit", [
82
+ optimizer.address,
83
+ isNative,
84
+ swap,
85
+ expectedShares,
86
+ receiver,
87
+ ]);
88
+ }
89
+ async getNativeDepositCalldata(optimizer, amount, wrapped = false, receiver = this.signer.address) {
90
+ const outputToken = wrapped ? this.setup.assets.wrapped_native : helpers_1.NATIVE_ADDRESS;
91
+ const swap = {
92
+ inputToken: helpers_1.NATIVE_ADDRESS,
93
+ inputAmount: amount,
94
+ outputToken,
95
+ target: helpers_1.EMPTY_ADDRESS,
96
+ slippage: 0n,
97
+ call: helpers_1.EMPTY_BYTES,
98
+ };
99
+ const expectedShares = await this.getExpectedShares(optimizer, amount);
100
+ return this.getCallData("swapAndDeposit", [
101
+ optimizer.address,
102
+ wrapped,
103
+ swap,
104
+ expectedShares,
105
+ receiver,
106
+ ]);
107
+ }
108
+ async getOptimizerAsset(optimizer) {
109
+ return optimizer.contract.asset();
110
+ }
111
+ async getExpectedShares(optimizer, assets) {
112
+ const shares = await optimizer.convertToShares(assets);
113
+ return shares * (helpers_1.BPS - OPTIMIZER_ZAP_SHARES_BUFFER_BPS) / helpers_1.BPS;
114
+ }
115
+ }
116
+ exports.OptimizerZapper = OptimizerZapper;
117
+ //# sourceMappingURL=OptimizerZapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptimizerZapper.js","sourceRoot":"","sources":["../../src/classes/OptimizerZapper.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,7 @@ export declare class PositionManager extends Calldata<IPositionManager> {
33
33
  constructor(address: address, signer: curvance_signer, type: PositionManagerTypes);
34
34
  static emptySwapAction(): Swap;
35
35
  static getExpectedShares(deposit_ctoken: CToken, amount: bigint): Promise<bigint>;
36
+ private static assertVaultExpectedSharesTokensMatch;
36
37
  static getVaultExpectedShares(deposit_ctoken: CToken, borrow_ctoken: CToken, borrow_amount: TokenInput): Promise<bigint>;
37
38
  getDeleverageCalldata(action: DeleverageAction, slippage: bigint): `0x${string}`;
38
39
  getLeverageCalldata(action: LeverageAction, slippage: bigint): `0x${string}`;
@@ -1 +1 @@
1
- {"version":3,"file":"PositionManager.d.ts","sourceRoot":"","sources":["../../src/classes/PositionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGhC,OAAO,EAAE,MAAM,EAAY,MAAM,UAAU,CAAC;AAG5C,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;AACvE,MAAM,WAAW,cAAc;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACjF,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC3G,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACxF;AAED,qBAAa,eAAgB,SAAQ,QAAQ,CAAC,gBAAgB,CAAC;IAC3D,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,gBAAgB,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,oBAAoB,CAAC;gBAEf,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,oBAAoB;IAQjF,MAAM,CAAC,eAAe,IAAI,IAAI;WAWjB,iBAAiB,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;WAIxD,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU;IAK5G,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM;IAIhE,mBAAmB,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM;IAI5D,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM;CAGzF"}
1
+ {"version":3,"file":"PositionManager.d.ts","sourceRoot":"","sources":["../../src/classes/PositionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGhC,OAAO,EAAE,MAAM,EAAY,MAAM,UAAU,CAAC;AAG5C,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;AACvE,MAAM,WAAW,cAAc;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACjF,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC3G,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACxF;AAED,qBAAa,eAAgB,SAAQ,QAAQ,CAAC,gBAAgB,CAAC;IAC3D,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,gBAAgB,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,oBAAoB,CAAC;gBAEf,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,oBAAoB;IAQjF,MAAM,CAAC,eAAe,IAAI,IAAI;WAWjB,iBAAiB,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAIrE,OAAO,CAAC,MAAM,CAAC,oCAAoC;WAgCtC,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU;IAM5G,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM;IAIhE,mBAAmB,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM;IAI5D,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM;CAGzF"}
@@ -33,7 +33,32 @@ class PositionManager extends Calldata_1.Calldata {
33
33
  static async getExpectedShares(deposit_ctoken, amount) {
34
34
  return deposit_ctoken.convertToShares(amount);
35
35
  }
36
+ static assertVaultExpectedSharesTokensMatch(deposit_ctoken, borrow_ctoken) {
37
+ const depositMarket = deposit_ctoken.market;
38
+ const borrowMarket = borrow_ctoken.market;
39
+ if (depositMarket == undefined || borrowMarket == undefined) {
40
+ return;
41
+ }
42
+ if (depositMarket === borrowMarket) {
43
+ return;
44
+ }
45
+ const depositChain = depositMarket.setup?.chain;
46
+ const borrowChain = borrowMarket.setup?.chain;
47
+ const sameMarket = depositMarket.address?.toLowerCase() === borrowMarket.address?.toLowerCase();
48
+ const sameChain = depositChain != null && borrowChain != null && depositChain === borrowChain;
49
+ const depositReaderKey = depositMarket.reader?.batchKey ?? null;
50
+ const borrowReaderKey = borrowMarket.reader?.batchKey ?? null;
51
+ const sameReaderDeployment = depositMarket.reader === borrowMarket.reader ||
52
+ (depositReaderKey != null && depositReaderKey === borrowReaderKey);
53
+ if (!sameMarket || !sameChain || !sameReaderDeployment) {
54
+ throw new Error(`Vault expected shares for deposit token ${deposit_ctoken.address} on ` +
55
+ `${depositChain ?? "unknown"} market ${depositMarket.address ?? "unknown"} cannot use ` +
56
+ `borrow token ${borrow_ctoken.address} from ${borrowChain ?? "unknown"} ` +
57
+ `market ${borrowMarket.address ?? "unknown"} with a different reader deployment.`);
58
+ }
59
+ }
36
60
  static async getVaultExpectedShares(deposit_ctoken, borrow_ctoken, borrow_amount) {
61
+ PositionManager.assertVaultExpectedSharesTokensMatch(deposit_ctoken, borrow_ctoken);
37
62
  const borrow_amount_as_bn = FormatConverter_1.default.decimalToBigInt(borrow_amount, borrow_ctoken.asset.decimals);
38
63
  return deposit_ctoken.getExpectedVaultShares(borrow_amount_as_bn);
39
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PositionManager.js","sourceRoot":"","sources":["../../src/classes/PositionManager.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAsC;AAEtC,wCAA0D;AAC1D,oGAAqD;AAErD,wEAAgD;AA2BhD,MAAa,eAAgB,SAAQ,mBAA0B;IAC3D,MAAM,CAAkB;IACxB,QAAQ,CAA8B;IACtC,OAAO,CAAU;IACjB,IAAI,CAAuB;IAE3B,YAAY,OAAgB,EAAE,MAAuB,EAAE,IAA0B;QAC7E,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAA,uBAAa,EAAmB,MAAM,EAAE,OAAO,EAAE,oCAAG,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,eAAe;QAClB,OAAO;YACH,UAAU,EAAE,uBAAa;YACzB,WAAW,EAAE,EAAE;YACf,WAAW,EAAE,uBAAa;YAC1B,MAAM,EAAE,uBAAa;YACrB,QAAQ,EAAE,EAAE;YACZ,IAAI,EAAE,IAAI;SACb,CAAA;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,cAAsB,EAAE,MAAc;QACjE,OAAO,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,cAAsB,EAAE,aAAqB,EAAE,aAAyB;QACxG,MAAM,mBAAmB,GAAG,yBAAe,CAAC,eAAe,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzG,OAAO,cAAc,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,CAAC;IACtE,CAAC;IAED,qBAAqB,CAAC,MAAwB,EAAE,QAAgB;QAC5D,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,mBAAmB,CAAC,MAAsB,EAAE,QAAgB;QACxD,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,6BAA6B,CAAC,MAAc,EAAE,MAAsB,EAAE,QAAgB;QAClF,OAAO,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9E,CAAC;CACJ;AA7CD,0CA6CC"}
1
+ {"version":3,"file":"PositionManager.js","sourceRoot":"","sources":["../../src/classes/PositionManager.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAsC;AAEtC,wCAA0D;AAC1D,oGAAqD;AAErD,wEAAgD;AA2BhD,MAAa,eAAgB,SAAQ,mBAA0B;IAC3D,MAAM,CAAkB;IACxB,QAAQ,CAA8B;IACtC,OAAO,CAAU;IACjB,IAAI,CAAuB;IAE3B,YAAY,OAAgB,EAAE,MAAuB,EAAE,IAA0B;QAC7E,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAA,uBAAa,EAAmB,MAAM,EAAE,OAAO,EAAE,oCAAG,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,eAAe;QAClB,OAAO;YACH,UAAU,EAAE,uBAAa;YACzB,WAAW,EAAE,EAAE;YACf,WAAW,EAAE,uBAAa;YAC1B,MAAM,EAAE,uBAAa;YACrB,QAAQ,EAAE,EAAE;YACZ,IAAI,EAAE,IAAI;SACb,CAAA;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,cAAsB,EAAE,MAAc;QACjE,OAAO,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAEO,MAAM,CAAC,oCAAoC,CAAC,cAAsB,EAAE,aAAqB;QAC7F,MAAM,aAAa,GAAI,cAA4C,CAAC,MAAM,CAAC;QAC3E,MAAM,YAAY,GAAI,aAA2C,CAAC,MAAM,CAAC;QAEzE,IAAI,aAAa,IAAI,SAAS,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;YAC1D,OAAO;QACX,CAAC;QAED,IAAI,aAAa,KAAK,YAAY,EAAE,CAAC;YACjC,OAAO;QACX,CAAC;QAED,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC;QAChD,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC;QAC9C,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC;QAChG,MAAM,SAAS,GAAG,YAAY,IAAI,IAAI,IAAI,WAAW,IAAI,IAAI,IAAI,YAAY,KAAK,WAAW,CAAC;QAC9F,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC;QAChE,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC;QAC9D,MAAM,oBAAoB,GACtB,aAAa,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM;YAC5C,CAAC,gBAAgB,IAAI,IAAI,IAAI,gBAAgB,KAAK,eAAe,CAAC,CAAC;QAEvE,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CACX,2CAA2C,cAAc,CAAC,OAAO,MAAM;gBACvE,GAAG,YAAY,IAAI,SAAS,WAAW,aAAa,CAAC,OAAO,IAAI,SAAS,cAAc;gBACvF,gBAAgB,aAAa,CAAC,OAAO,SAAS,WAAW,IAAI,SAAS,GAAG;gBACzE,UAAU,YAAY,CAAC,OAAO,IAAI,SAAS,sCAAsC,CACpF,CAAC;QACN,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,cAAsB,EAAE,aAAqB,EAAE,aAAyB;QACxG,eAAe,CAAC,oCAAoC,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QACpF,MAAM,mBAAmB,GAAG,yBAAe,CAAC,eAAe,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzG,OAAO,cAAc,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,CAAC;IACtE,CAAC;IAED,qBAAqB,CAAC,MAAwB,EAAE,QAAgB;QAC5D,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,mBAAmB,CAAC,MAAsB,EAAE,QAAgB;QACxD,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,6BAA6B,CAAC,MAAc,EAAE,MAAsB,EAAE,QAAgB;QAClF,OAAO,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9E,CAAC;CACJ;AA9ED,0CA8EC"}
@@ -110,6 +110,7 @@ export interface UserData {
110
110
  markets: UserMarket[];
111
111
  }
112
112
  export interface IProtocolReader {
113
+ centralRegistry(): Promise<address>;
113
114
  getAllDynamicState(account: address): Promise<any>;
114
115
  getMarketSummaries(markets: address[], account: address): Promise<any>;
115
116
  getMarketStates(markets: address[], account: address): Promise<any>;
@@ -137,6 +138,8 @@ export declare class ProtocolReader {
137
138
  readonly batchKey: string | null;
138
139
  private readonly staticMarketCacheKey;
139
140
  constructor(address: address, provider?: curvance_read_provider, cacheNamespace?: string | null);
141
+ private assertTokenBelongsToReader;
142
+ getDaoAddress(): Promise<address>;
140
143
  getAllMarketData(account?: address | null): Promise<{
141
144
  staticMarket: StaticMarketData[];
142
145
  dynamicMarket: DynamicMarketData[];