@gearbox-protocol/sdk 0.0.101 → 0.0.104

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 (139) hide show
  1. package/.eslintignore +5 -0
  2. package/.eslintrc.js +52 -0
  3. package/.husky/pre-push +4 -0
  4. package/lib/apy/convexAPY.js +7 -9
  5. package/lib/apy/lidoAPY.js +35 -29
  6. package/lib/contracts/contracts.d.ts +5 -2
  7. package/lib/contracts/contracts.js +19 -18
  8. package/lib/contracts/contractsRegister.js +13 -1
  9. package/lib/core/constants.d.ts +5 -3
  10. package/lib/core/constants.js +8 -6
  11. package/lib/core/creditAccount.d.ts +2 -2
  12. package/lib/core/creditAccount.js +12 -11
  13. package/lib/core/creditManager.d.ts +1 -1
  14. package/lib/core/creditManager.js +4 -10
  15. package/lib/core/creditSession.js +14 -3
  16. package/lib/core/eventOrTx.d.ts +1 -1
  17. package/lib/core/events.d.ts +19 -19
  18. package/lib/core/events.js +23 -21
  19. package/lib/core/pool.d.ts +1 -1
  20. package/lib/core/pool.js +1 -7
  21. package/lib/core/price.d.ts +1 -3
  22. package/lib/core/price.js +9 -7
  23. package/lib/core/strategy.d.ts +8 -6
  24. package/lib/core/strategy.js +25 -25
  25. package/lib/core/tokenDistributor.js +1 -1
  26. package/lib/core/transactions.d.ts +18 -3
  27. package/lib/core/transactions.js +39 -3
  28. package/lib/index.d.ts +8 -2
  29. package/lib/index.js +8 -1
  30. package/lib/oracles/priceFeeds.js +1 -1
  31. package/lib/pathfinder/convexLP.d.ts +1 -1
  32. package/lib/pathfinder/convexLP.js +26 -29
  33. package/lib/pathfinder/curveLP.d.ts +1 -1
  34. package/lib/pathfinder/curveLP.js +5 -7
  35. package/lib/pathfinder/path.d.ts +1 -1
  36. package/lib/pathfinder/path.js +38 -42
  37. package/lib/pathfinder/trade.d.ts +1 -2
  38. package/lib/pathfinder/tradeTypes.d.ts +5 -5
  39. package/lib/pathfinder/yVault.d.ts +2 -2
  40. package/lib/pathfinder/yVault.js +22 -22
  41. package/lib/payload/creditAccount.d.ts +4 -4
  42. package/lib/payload/creditManager.d.ts +3 -13
  43. package/lib/payload/pool.d.ts +2 -2
  44. package/lib/strategies/convex.d.ts +12 -0
  45. package/lib/strategies/convex.js +74 -1
  46. package/lib/strategies/creditFacade.d.ts +1 -0
  47. package/lib/strategies/creditFacade.js +3 -0
  48. package/lib/strategies/curve.d.ts +15 -60
  49. package/lib/strategies/curve.js +74 -1
  50. package/lib/strategies/lido.d.ts +6 -0
  51. package/lib/strategies/lido.js +23 -1
  52. package/lib/strategies/uniswapV2.d.ts +1 -0
  53. package/lib/strategies/uniswapV2.js +6 -19
  54. package/lib/strategies/uniswapV3.d.ts +1 -0
  55. package/lib/strategies/uniswapV3.js +4 -1
  56. package/lib/strategies/yearn.d.ts +8 -0
  57. package/lib/strategies/yearn.js +92 -12
  58. package/lib/tokens/convex.d.ts +3 -3
  59. package/lib/tokens/curveLP.d.ts +7 -2
  60. package/lib/tokens/curveLP.js +8 -1
  61. package/lib/tokens/gear.d.ts +2 -2
  62. package/lib/tokens/gear.js +1 -1
  63. package/lib/tokens/normal.d.ts +1 -1
  64. package/lib/tokens/token.js +8 -8
  65. package/lib/tokens/tokenData.d.ts +3 -1
  66. package/lib/tokens/tokenData.js +10 -8
  67. package/lib/tokens/yearn.d.ts +6 -2
  68. package/lib/tokens/yearn.js +6 -0
  69. package/lib/utils/errors.d.ts +6 -0
  70. package/lib/utils/errors.js +13 -0
  71. package/lib/utils/formatter.d.ts +1 -1
  72. package/lib/utils/formatter.js +17 -14
  73. package/lib/utils/loading.d.ts +2 -1
  74. package/lib/utils/loading.js +9 -13
  75. package/lib/utils/mappers.js +2 -2
  76. package/lib/utils/network.js +2 -2
  77. package/lib/utils/repeater.js +12 -24
  78. package/lib/utils/validate.js +1 -1
  79. package/package.json +24 -7
  80. package/src/apy/convexAPY.ts +13 -12
  81. package/src/apy/lidoAPY.ts +35 -27
  82. package/src/contracts/contracts.ts +27 -17
  83. package/src/contracts/contractsRegister.ts +16 -1
  84. package/src/core/constants.ts +8 -5
  85. package/src/core/creditAccount.ts +42 -16
  86. package/src/core/creditManager.ts +33 -7
  87. package/src/core/creditOperation.ts +7 -7
  88. package/src/core/creditSession.ts +25 -5
  89. package/src/core/errors.ts +1 -0
  90. package/src/core/eventOrTx.ts +8 -5
  91. package/src/core/events.ts +85 -24
  92. package/src/core/history.ts +46 -46
  93. package/src/core/operations.ts +6 -0
  94. package/src/core/pool.ts +16 -4
  95. package/src/core/price.ts +10 -13
  96. package/src/core/strategy.ts +54 -43
  97. package/src/core/tokenDistributor.ts +2 -2
  98. package/src/core/transactions.ts +427 -350
  99. package/src/index.ts +10 -3
  100. package/src/oracles/priceFeeds.ts +523 -523
  101. package/src/pathfinder/contracts.ts +15 -13
  102. package/src/pathfinder/convexLP.ts +29 -25
  103. package/src/pathfinder/curveLP.ts +57 -53
  104. package/src/pathfinder/path.ts +17 -9
  105. package/src/pathfinder/priority.ts +11 -11
  106. package/src/pathfinder/trade.ts +84 -77
  107. package/src/pathfinder/tradeTypes.ts +98 -94
  108. package/src/pathfinder/yVault.ts +32 -17
  109. package/src/payload/creditAccount.ts +4 -4
  110. package/src/payload/creditManager.ts +3 -13
  111. package/src/payload/pool.ts +2 -2
  112. package/src/payload/token.ts +3 -3
  113. package/src/strategies/convex.ts +360 -186
  114. package/src/strategies/creditFacade.ts +74 -53
  115. package/src/strategies/curve.ts +400 -189
  116. package/src/strategies/lido.ts +70 -32
  117. package/src/strategies/uniswapV2.ts +93 -111
  118. package/src/strategies/uniswapV3.ts +118 -91
  119. package/src/strategies/yearn.ts +187 -60
  120. package/src/tokens/connectors.ts +6 -6
  121. package/src/tokens/convex.ts +297 -296
  122. package/src/tokens/curveLP.ts +176 -165
  123. package/src/tokens/gear.ts +47 -45
  124. package/src/tokens/normal.ts +801 -802
  125. package/src/tokens/token.ts +13 -9
  126. package/src/tokens/tokenData.ts +19 -9
  127. package/src/tokens/tokenType.ts +11 -11
  128. package/src/tokens/yearn.ts +130 -124
  129. package/src/utils/errors.ts +11 -0
  130. package/src/utils/formatter.ts +22 -18
  131. package/src/utils/loading.ts +14 -6
  132. package/src/utils/mappers.ts +8 -6
  133. package/src/utils/multicall.ts +2 -0
  134. package/src/utils/network.ts +21 -21
  135. package/src/utils/repeater.ts +2 -2
  136. package/src/utils/validate.ts +1 -1
  137. package/lib/utils/events.d.ts +0 -2
  138. package/lib/utils/events.js +0 -13
  139. package/src/utils/events.ts +0 -10
@@ -1,233 +1,407 @@
1
1
  import { BigNumberish } from "ethers";
2
+ import {
3
+ contractParams,
4
+ contractsByNetwork,
5
+ ConvexPoolContract,
6
+ ConvexPoolParams
7
+ } from "src/contracts/contracts";
8
+ import { NetworkType } from "src/core/constants";
9
+ import { CreditManagerData } from "src/core/creditManager";
10
+ import { ConvexPhantomTokenData } from "src/tokens/convex";
11
+ import { CurveLPTokenData } from "src/tokens/curveLP";
12
+ import { supportedTokens, tokenDataByNetwork } from "src/tokens/token";
2
13
 
3
14
  import {
4
- ConvexV1BoosterAdapter__factory,
5
- ConvexV1BaseRewardPoolAdapter__factory,
6
- ConvexV1ClaimZapAdapter__factory
7
- } from "../types"
15
+ ConvexV1BoosterAdapter__factory,
16
+ ConvexV1BaseRewardPoolAdapter__factory,
17
+ ConvexV1ClaimZapAdapter__factory
18
+ } from "../types";
8
19
 
9
20
  import { MultiCallStruct } from "../types/contracts/interfaces/ICreditFacade.sol/ICreditFacade";
21
+ import { CurveStrategies } from "./curve";
22
+ import { UniswapV2Multicaller } from "./uniswapV2";
10
23
 
11
24
  export class ConvexBoosterCalls {
12
- public static deposit(pid: BigNumberish, amount: BigNumberish, stake: boolean) {
13
- return ConvexV1BoosterAdapter__factory.createInterface().encodeFunctionData(
14
- "deposit",
15
- [pid, amount, stake]
16
- );
17
- }
25
+ public static deposit(
26
+ pid: BigNumberish,
27
+ amount: BigNumberish,
28
+ stake: boolean
29
+ ) {
30
+ return ConvexV1BoosterAdapter__factory.createInterface().encodeFunctionData(
31
+ "deposit",
32
+ [pid, amount, stake]
33
+ );
34
+ }
18
35
 
19
- public static depositAll(pid: BigNumberish, stake: boolean) {
20
- return ConvexV1BoosterAdapter__factory.createInterface().encodeFunctionData(
21
- "depositAll",
22
- [pid, stake]
23
- );
24
- }
36
+ public static depositAll(pid: BigNumberish, stake: boolean) {
37
+ return ConvexV1BoosterAdapter__factory.createInterface().encodeFunctionData(
38
+ "depositAll",
39
+ [pid, stake]
40
+ );
41
+ }
25
42
 
26
- public static withdraw(pid: BigNumberish, amount: BigNumberish) {
27
- return ConvexV1BoosterAdapter__factory.createInterface().encodeFunctionData(
28
- "withdraw",
29
- [pid, amount]
30
- );
31
- }
43
+ public static withdraw(pid: BigNumberish, amount: BigNumberish) {
44
+ return ConvexV1BoosterAdapter__factory.createInterface().encodeFunctionData(
45
+ "withdraw",
46
+ [pid, amount]
47
+ );
48
+ }
32
49
 
33
- public static withdrawAll(pid: BigNumberish) {
34
- return ConvexV1BoosterAdapter__factory.createInterface().encodeFunctionData(
35
- "withdrawAll",
36
- [pid]
37
- );
38
- }
50
+ public static withdrawAll(pid: BigNumberish) {
51
+ return ConvexV1BoosterAdapter__factory.createInterface().encodeFunctionData(
52
+ "withdrawAll",
53
+ [pid]
54
+ );
55
+ }
39
56
  }
40
57
 
41
58
  export class ConvexPoolCalls {
42
- public static stake(amount: BigNumberish) {
43
- return ConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData(
44
- "stake",
45
- [amount]
46
- );
47
- }
59
+ public static stake(amount: BigNumberish) {
60
+ return ConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData(
61
+ "stake",
62
+ [amount]
63
+ );
64
+ }
48
65
 
49
- public static stakeAll() {
50
- return ConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData(
51
- "stakeAll"
52
- );
53
- }
66
+ public static stakeAll() {
67
+ return ConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData(
68
+ "stakeAll"
69
+ );
70
+ }
54
71
 
55
- public static withdraw(amount: BigNumberish, claim: boolean) {
56
- return ConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData(
57
- "withdraw",
58
- [amount, claim]
59
- );
60
- }
72
+ public static withdraw(amount: BigNumberish, claim: boolean) {
73
+ return ConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData(
74
+ "withdraw",
75
+ [amount, claim]
76
+ );
77
+ }
61
78
 
62
- public static withdrawAll(claim: boolean) {
63
- return ConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData(
64
- "withdrawAll",
65
- [claim]
66
- );
67
- }
79
+ public static withdrawAll(claim: boolean) {
80
+ return ConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData(
81
+ "withdrawAll",
82
+ [claim]
83
+ );
84
+ }
68
85
 
69
- public static withdrawAndUnwrap(amount: BigNumberish, claim: boolean) {
70
- return ConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData(
71
- "withdrawAndUnwrap",
72
- [amount, claim]
73
- );
74
- }
86
+ public static withdrawAndUnwrap(amount: BigNumberish, claim: boolean) {
87
+ return ConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData(
88
+ "withdrawAndUnwrap",
89
+ [amount, claim]
90
+ );
91
+ }
75
92
 
76
- public static withdrawAllAndUnwrap(claim: boolean) {
77
- return ConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData(
78
- "withdrawAllAndUnwrap",
79
- [claim]
80
- );
81
- }
93
+ public static withdrawAllAndUnwrap(claim: boolean) {
94
+ return ConvexV1BaseRewardPoolAdapter__factory.createInterface().encodeFunctionData(
95
+ "withdrawAllAndUnwrap",
96
+ [claim]
97
+ );
98
+ }
82
99
  }
83
100
 
84
-
85
101
  export class ConvexClaimZapCalls {
86
- public static claimRewards(
87
- rewardContracts: Array<string>,
88
- extraRewardContracts: Array<string>,
89
- tokenRewardContracts: Array<string>,
90
- tokenRewardTokens: Array<string>,
91
- depositCrvMaxAmount: BigNumberish,
92
- minAmountOut: BigNumberish,
93
- depositCvxMaxAmount: BigNumberish,
94
- spendCvxAmount: BigNumberish,
95
- options: BigNumberish
96
- ) {
97
- return ConvexV1ClaimZapAdapter__factory.createInterface().encodeFunctionData(
98
- "claimRewards",
99
- [
100
- rewardContracts,
101
- extraRewardContracts,
102
- tokenRewardContracts,
103
- tokenRewardTokens,
104
- depositCrvMaxAmount,
105
- minAmountOut,
106
- depositCvxMaxAmount,
107
- spendCvxAmount,
108
- options
109
- ]
110
- );
111
- }
102
+ public static claimRewards(
103
+ rewardContracts: Array<string>,
104
+ extraRewardContracts: Array<string>,
105
+ tokenRewardContracts: Array<string>,
106
+ tokenRewardTokens: Array<string>,
107
+ depositCrvMaxAmount: BigNumberish,
108
+ minAmountOut: BigNumberish,
109
+ depositCvxMaxAmount: BigNumberish,
110
+ spendCvxAmount: BigNumberish,
111
+ options: BigNumberish
112
+ ) {
113
+ return ConvexV1ClaimZapAdapter__factory.createInterface().encodeFunctionData(
114
+ "claimRewards",
115
+ [
116
+ rewardContracts,
117
+ extraRewardContracts,
118
+ tokenRewardContracts,
119
+ tokenRewardTokens,
120
+ depositCrvMaxAmount,
121
+ minAmountOut,
122
+ depositCvxMaxAmount,
123
+ spendCvxAmount,
124
+ options
125
+ ]
126
+ );
127
+ }
112
128
  }
113
129
 
114
130
  export class ConvexBoosterMulticaller {
115
- private readonly _address: string;
131
+ private readonly _address: string;
116
132
 
117
- constructor(address: string) {
118
- this._address = address;
119
- }
133
+ constructor(address: string) {
134
+ this._address = address;
135
+ }
120
136
 
121
- deposit(pid: BigNumberish, amount: BigNumberish, stake: boolean): MultiCallStruct {
122
- return {
123
- target: this._address,
124
- callData: ConvexBoosterCalls.deposit(pid, amount, stake)
125
- }
126
- }
137
+ static connect(address: string) {
138
+ return new ConvexBoosterMulticaller(address);
139
+ }
127
140
 
128
- depositAll(pid: BigNumberish, stake: boolean): MultiCallStruct {
129
- return {
130
- target: this._address,
131
- callData: ConvexBoosterCalls.depositAll(pid, stake)
132
- }
133
- }
141
+ deposit(
142
+ pid: BigNumberish,
143
+ amount: BigNumberish,
144
+ stake: boolean
145
+ ): MultiCallStruct {
146
+ return {
147
+ target: this._address,
148
+ callData: ConvexBoosterCalls.deposit(pid, amount, stake)
149
+ };
150
+ }
134
151
 
135
- withdraw(pid: BigNumberish, amount: BigNumberish): MultiCallStruct {
136
- return {
137
- target: this._address,
138
- callData: ConvexBoosterCalls.withdraw(pid, amount)
139
- }
140
- }
152
+ depositAll(pid: BigNumberish, stake: boolean): MultiCallStruct {
153
+ return {
154
+ target: this._address,
155
+ callData: ConvexBoosterCalls.depositAll(pid, stake)
156
+ };
157
+ }
141
158
 
142
- withdrawAll(pid: BigNumberish): MultiCallStruct {
143
- return {
144
- target: this._address,
145
- callData: ConvexBoosterCalls.withdrawAll(pid)
146
- }
147
- }
159
+ withdraw(pid: BigNumberish, amount: BigNumberish): MultiCallStruct {
160
+ return {
161
+ target: this._address,
162
+ callData: ConvexBoosterCalls.withdraw(pid, amount)
163
+ };
164
+ }
165
+
166
+ withdrawAll(pid: BigNumberish): MultiCallStruct {
167
+ return {
168
+ target: this._address,
169
+ callData: ConvexBoosterCalls.withdrawAll(pid)
170
+ };
171
+ }
148
172
  }
149
173
 
150
174
  export class ConvexPoolMulticaller {
151
- private readonly _address: string;
175
+ private readonly _address: string;
152
176
 
153
- constructor(address: string) {
154
- this._address = address;
155
- }
177
+ constructor(address: string) {
178
+ this._address = address;
179
+ }
156
180
 
157
- stake(amount: BigNumberish): MultiCallStruct {
158
- return {
159
- target: this._address,
160
- callData: ConvexPoolCalls.stake(amount)
161
- }
162
- }
181
+ static connect(address: string) {
182
+ return new ConvexPoolMulticaller(address);
183
+ }
163
184
 
164
- stakeAll(): MultiCallStruct {
165
- return {
166
- target: this._address,
167
- callData: ConvexPoolCalls.stakeAll()
168
- }
169
- }
185
+ stake(amount: BigNumberish): MultiCallStruct {
186
+ return {
187
+ target: this._address,
188
+ callData: ConvexPoolCalls.stake(amount)
189
+ };
190
+ }
170
191
 
171
- withdraw(amount: BigNumberish, claim: boolean): MultiCallStruct {
172
- return {
173
- target: this._address,
174
- callData: ConvexPoolCalls.withdraw(amount, claim)
175
- }
176
- }
192
+ stakeAll(): MultiCallStruct {
193
+ return {
194
+ target: this._address,
195
+ callData: ConvexPoolCalls.stakeAll()
196
+ };
197
+ }
177
198
 
178
- withdrawAll(claim: boolean): MultiCallStruct {
179
- return {
180
- target: this._address,
181
- callData: ConvexPoolCalls.withdrawAll(claim)
182
- }
183
- }
199
+ withdraw(amount: BigNumberish, claim: boolean): MultiCallStruct {
200
+ return {
201
+ target: this._address,
202
+ callData: ConvexPoolCalls.withdraw(amount, claim)
203
+ };
204
+ }
184
205
 
185
- withdrawAndUnwrap(amount: BigNumberish, claim: boolean): MultiCallStruct {
186
- return {
187
- target: this._address,
188
- callData: ConvexPoolCalls.withdrawAndUnwrap(amount, claim)
189
- }
190
- }
206
+ withdrawAll(claim: boolean): MultiCallStruct {
207
+ return {
208
+ target: this._address,
209
+ callData: ConvexPoolCalls.withdrawAll(claim)
210
+ };
211
+ }
191
212
 
192
- withdrawAllAndUnwrap(claim: boolean) {
193
- return {
194
- target: this._address,
195
- callData: ConvexPoolCalls.withdrawAllAndUnwrap(claim)
196
- }
197
- }
213
+ withdrawAndUnwrap(amount: BigNumberish, claim: boolean): MultiCallStruct {
214
+ return {
215
+ target: this._address,
216
+ callData: ConvexPoolCalls.withdrawAndUnwrap(amount, claim)
217
+ };
218
+ }
219
+
220
+ withdrawAllAndUnwrap(claim: boolean) {
221
+ return {
222
+ target: this._address,
223
+ callData: ConvexPoolCalls.withdrawAllAndUnwrap(claim)
224
+ };
225
+ }
198
226
  }
199
227
 
200
228
  export class ConvexClaimZapMulticaller {
201
- private readonly _address: string;
229
+ private readonly _address: string;
230
+
231
+ constructor(address: string) {
232
+ this._address = address;
233
+ }
234
+
235
+ static connect(address: string) {
236
+ return new ConvexClaimZapMulticaller(address);
237
+ }
238
+
239
+ claimRewards(
240
+ rewardContracts: Array<string>,
241
+ extraRewardContracts: Array<string>,
242
+ tokenRewardContracts: Array<string>,
243
+ tokenRewardTokens: Array<string>,
244
+ depositCrvMaxAmount: BigNumberish,
245
+ minAmountOut: BigNumberish,
246
+ depositCvxMaxAmount: BigNumberish,
247
+ spendCvxAmount: BigNumberish,
248
+ options: BigNumberish
249
+ ): MultiCallStruct {
250
+ return {
251
+ target: this._address,
252
+ callData: ConvexClaimZapCalls.claimRewards(
253
+ rewardContracts,
254
+ extraRewardContracts,
255
+ tokenRewardContracts,
256
+ tokenRewardTokens,
257
+ depositCrvMaxAmount,
258
+ minAmountOut,
259
+ depositCvxMaxAmount,
260
+ spendCvxAmount,
261
+ options
262
+ )
263
+ };
264
+ }
265
+ }
266
+
267
+ export class ConvexStrategies {
268
+ static underlyingToStakedConvex(
269
+ data: CreditManagerData,
270
+ network: NetworkType,
271
+ convexPool: ConvexPoolContract,
272
+ underlyingAmount: BigNumberish
273
+ ) {
274
+ let calls: Array<MultiCallStruct> = [];
275
+ const convexParams = contractParams[convexPool] as ConvexPoolParams;
276
+ const { stakedToken } = convexParams;
277
+ const stakedTokenParams = supportedTokens[
278
+ stakedToken
279
+ ] as ConvexPhantomTokenData;
280
+ const curveLpToken = stakedTokenParams.underlying;
281
+ const curveLpTokenData = supportedTokens[curveLpToken] as CurveLPTokenData;
282
+ const curvePool = curveLpTokenData.pool;
283
+
284
+ calls = CurveStrategies.underlyingToCurveLP(
285
+ data,
286
+ network,
287
+ curvePool,
288
+ underlyingAmount
289
+ );
290
+
291
+ calls.push(
292
+ ConvexBoosterMulticaller.connect(
293
+ data.adapters[contractsByNetwork[network].CONVEX_BOOSTER]
294
+ ).depositAll(stakedTokenParams.pid, true)
295
+ );
296
+
297
+ return calls;
298
+ }
299
+
300
+ static stakedConvexToUnderlying(
301
+ data: CreditManagerData,
302
+ network: NetworkType,
303
+ convexPool: ConvexPoolContract,
304
+ convexLpAmount: BigNumberish,
305
+ sellRewards: boolean
306
+ ) {
307
+ const calls: Array<MultiCallStruct> = [];
308
+ const convexParams = contractParams[convexPool] as ConvexPoolParams;
309
+ const { stakedToken } = convexParams;
310
+ const stakedTokenParams = supportedTokens[
311
+ stakedToken
312
+ ] as ConvexPhantomTokenData;
313
+ const curveLpToken = stakedTokenParams.underlying;
314
+ const curveLpTokenData = supportedTokens[curveLpToken] as CurveLPTokenData;
315
+ const curvePool = curveLpTokenData.pool;
202
316
 
203
- constructor(address: string) {
204
- this._address = address;
317
+ calls.push(
318
+ ConvexPoolMulticaller.connect(
319
+ data.adapters[contractsByNetwork[network][convexPool]]
320
+ ).withdrawAndUnwrap(convexLpAmount, true)
321
+ );
322
+
323
+ calls.push(
324
+ ...CurveStrategies.allCurveLPToUnderlying(data, network, curvePool)
325
+ );
326
+
327
+ if (sellRewards) {
328
+ calls.push(...ConvexStrategies.sellRewards(data, network, convexPool));
205
329
  }
206
330
 
207
- claimRewards(
208
- rewardContracts: Array<string>,
209
- extraRewardContracts: Array<string>,
210
- tokenRewardContracts: Array<string>,
211
- tokenRewardTokens: Array<string>,
212
- depositCrvMaxAmount: BigNumberish,
213
- minAmountOut: BigNumberish,
214
- depositCvxMaxAmount: BigNumberish,
215
- spendCvxAmount: BigNumberish,
216
- options: BigNumberish
217
- ): MultiCallStruct {
218
- return {
219
- target: this._address,
220
- callData: ConvexClaimZapCalls.claimRewards(
221
- rewardContracts,
222
- extraRewardContracts,
223
- tokenRewardContracts,
224
- tokenRewardTokens,
225
- depositCrvMaxAmount,
226
- minAmountOut,
227
- depositCvxMaxAmount,
228
- spendCvxAmount,
229
- options
230
- )
231
- }
331
+ return calls;
332
+ }
333
+
334
+ static allStakedConvexToUnderlying(
335
+ data: CreditManagerData,
336
+ network: NetworkType,
337
+ convexPool: ConvexPoolContract,
338
+ sellRewards: boolean
339
+ ) {
340
+ const calls: Array<MultiCallStruct> = [];
341
+ const convexParams = contractParams[convexPool] as ConvexPoolParams;
342
+ const { stakedToken } = convexParams;
343
+ const stakedTokenParams = supportedTokens[
344
+ stakedToken
345
+ ] as ConvexPhantomTokenData;
346
+ const curveLpToken = stakedTokenParams.underlying;
347
+ const curveLpTokenData = supportedTokens[curveLpToken] as CurveLPTokenData;
348
+ const curvePool = curveLpTokenData.pool;
349
+
350
+ calls.push(
351
+ ConvexPoolMulticaller.connect(
352
+ data.adapters[contractsByNetwork[network][convexPool]]
353
+ ).withdrawAllAndUnwrap(true)
354
+ );
355
+
356
+ calls.push(
357
+ ...CurveStrategies.allCurveLPToUnderlying(data, network, curvePool)
358
+ );
359
+
360
+ if (sellRewards) {
361
+ calls.push(...ConvexStrategies.sellRewards(data, network, convexPool));
232
362
  }
363
+
364
+ return calls;
365
+ }
366
+
367
+ static sellRewards(
368
+ data: CreditManagerData,
369
+ network: NetworkType,
370
+ convexPool: ConvexPoolContract
371
+ ) {
372
+ const calls: Array<MultiCallStruct> = [];
373
+ const convexParams = contractParams[convexPool] as ConvexPoolParams;
374
+
375
+ calls.push(
376
+ UniswapV2Multicaller.connect(
377
+ data.adapters[contractsByNetwork[network].UNISWAP_V2_ROUTER]
378
+ ).swapAllTokensForTokens(
379
+ 0,
380
+ [tokenDataByNetwork[network].CRV, data.underlyingToken],
381
+ Math.floor(new Date().getTime() / 1000) + 3600
382
+ ),
383
+ UniswapV2Multicaller.connect(
384
+ data.adapters[contractsByNetwork[network].UNISWAP_V2_ROUTER]
385
+ ).swapAllTokensForTokens(
386
+ 0,
387
+ [tokenDataByNetwork[network].CVX, data.underlyingToken],
388
+ Math.floor(new Date().getTime() / 1000) + 3600
389
+ )
390
+ );
391
+
392
+ convexParams.extraRewards.forEach(extraReward => {
393
+ UniswapV2Multicaller.connect(
394
+ data.adapters[contractsByNetwork[network].UNISWAP_V2_ROUTER]
395
+ ).swapAllTokensForTokens(
396
+ 0,
397
+ [
398
+ tokenDataByNetwork[network][extraReward.rewardToken],
399
+ data.underlyingToken
400
+ ],
401
+ Math.floor(new Date().getTime() / 1000) + 3600
402
+ );
403
+ });
404
+
405
+ return calls;
406
+ }
233
407
  }