@gearbox-protocol/sdk 0.0.102 → 0.0.105

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 (129) 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 +3 -5
  5. package/lib/apy/lidoAPY.js +8 -9
  6. package/lib/contracts/contracts.d.ts +5 -2
  7. package/lib/contracts/contracts.js +19 -18
  8. package/lib/core/constants.d.ts +1 -1
  9. package/lib/core/constants.js +2 -2
  10. package/lib/core/creditAccount.js +7 -5
  11. package/lib/core/creditManager.d.ts +1 -1
  12. package/lib/core/creditManager.js +1 -7
  13. package/lib/core/creditSession.js +14 -3
  14. package/lib/core/eventOrTx.d.ts +1 -1
  15. package/lib/core/events.d.ts +19 -19
  16. package/lib/core/events.js +23 -21
  17. package/lib/core/pool.d.ts +1 -1
  18. package/lib/core/pool.js +1 -7
  19. package/lib/core/price.js +6 -1
  20. package/lib/core/strategy.d.ts +1 -3
  21. package/lib/core/strategy.js +14 -13
  22. package/lib/core/tokenDistributor.js +1 -1
  23. package/lib/core/transactions.d.ts +18 -3
  24. package/lib/core/transactions.js +39 -3
  25. package/lib/index.d.ts +8 -2
  26. package/lib/index.js +8 -1
  27. package/lib/oracles/priceFeeds.js +1 -1
  28. package/lib/pathfinder/convexLP.d.ts +1 -1
  29. package/lib/pathfinder/convexLP.js +26 -29
  30. package/lib/pathfinder/curveLP.d.ts +1 -1
  31. package/lib/pathfinder/curveLP.js +5 -7
  32. package/lib/pathfinder/path.d.ts +1 -1
  33. package/lib/pathfinder/path.js +38 -42
  34. package/lib/pathfinder/trade.d.ts +1 -2
  35. package/lib/pathfinder/tradeTypes.d.ts +5 -5
  36. package/lib/pathfinder/yVault.d.ts +2 -2
  37. package/lib/pathfinder/yVault.js +18 -15
  38. package/lib/strategies/convex.d.ts +12 -0
  39. package/lib/strategies/convex.js +74 -1
  40. package/lib/strategies/creditFacade.d.ts +1 -0
  41. package/lib/strategies/creditFacade.js +3 -0
  42. package/lib/strategies/curve.d.ts +15 -60
  43. package/lib/strategies/curve.js +74 -1
  44. package/lib/strategies/lido.d.ts +6 -0
  45. package/lib/strategies/lido.js +23 -1
  46. package/lib/strategies/uniswapV2.d.ts +1 -0
  47. package/lib/strategies/uniswapV2.js +6 -19
  48. package/lib/strategies/uniswapV3.d.ts +1 -0
  49. package/lib/strategies/uniswapV3.js +4 -1
  50. package/lib/strategies/yearn.d.ts +8 -0
  51. package/lib/strategies/yearn.js +92 -12
  52. package/lib/tokens/convex.d.ts +3 -3
  53. package/lib/tokens/curveLP.d.ts +7 -2
  54. package/lib/tokens/curveLP.js +8 -1
  55. package/lib/tokens/gear.d.ts +2 -2
  56. package/lib/tokens/gear.js +1 -1
  57. package/lib/tokens/normal.d.ts +1 -1
  58. package/lib/tokens/token.js +4 -4
  59. package/lib/tokens/tokenData.d.ts +3 -1
  60. package/lib/tokens/tokenData.js +10 -8
  61. package/lib/tokens/yearn.d.ts +6 -2
  62. package/lib/tokens/yearn.js +6 -0
  63. package/lib/utils/errors.d.ts +6 -0
  64. package/lib/utils/errors.js +13 -0
  65. package/lib/utils/formatter.d.ts +1 -1
  66. package/lib/utils/formatter.js +17 -14
  67. package/lib/utils/loading.d.ts +2 -1
  68. package/lib/utils/loading.js +9 -13
  69. package/lib/utils/mappers.js +2 -2
  70. package/lib/utils/network.js +2 -2
  71. package/lib/utils/repeater.js +12 -24
  72. package/lib/utils/validate.js +1 -1
  73. package/package.json +24 -7
  74. package/src/apy/convexAPY.ts +6 -6
  75. package/src/apy/lidoAPY.ts +12 -11
  76. package/src/contracts/contracts.ts +27 -17
  77. package/src/core/constants.ts +1 -1
  78. package/src/core/creditAccount.ts +28 -5
  79. package/src/core/creditManager.ts +29 -4
  80. package/src/core/creditOperation.ts +7 -7
  81. package/src/core/creditSession.ts +25 -5
  82. package/src/core/errors.ts +1 -0
  83. package/src/core/eventOrTx.ts +8 -5
  84. package/src/core/events.ts +85 -24
  85. package/src/core/history.ts +46 -46
  86. package/src/core/operations.ts +6 -0
  87. package/src/core/pool.ts +16 -4
  88. package/src/core/price.ts +7 -3
  89. package/src/core/strategy.ts +27 -23
  90. package/src/core/tokenDistributor.ts +2 -2
  91. package/src/core/transactions.ts +427 -350
  92. package/src/index.ts +10 -3
  93. package/src/oracles/priceFeeds.ts +523 -523
  94. package/src/pathfinder/contracts.ts +15 -13
  95. package/src/pathfinder/convexLP.ts +29 -25
  96. package/src/pathfinder/curveLP.ts +57 -53
  97. package/src/pathfinder/path.ts +17 -9
  98. package/src/pathfinder/priority.ts +11 -11
  99. package/src/pathfinder/trade.ts +84 -77
  100. package/src/pathfinder/tradeTypes.ts +98 -94
  101. package/src/pathfinder/yVault.ts +26 -11
  102. package/src/payload/token.ts +3 -3
  103. package/src/strategies/convex.ts +361 -186
  104. package/src/strategies/creditFacade.ts +74 -53
  105. package/src/strategies/curve.ts +400 -189
  106. package/src/strategies/lido.ts +70 -32
  107. package/src/strategies/uniswapV2.ts +93 -111
  108. package/src/strategies/uniswapV3.ts +118 -91
  109. package/src/strategies/yearn.ts +187 -60
  110. package/src/tokens/connectors.ts +6 -6
  111. package/src/tokens/convex.ts +297 -296
  112. package/src/tokens/curveLP.ts +176 -165
  113. package/src/tokens/gear.ts +47 -45
  114. package/src/tokens/normal.ts +801 -802
  115. package/src/tokens/token.ts +9 -5
  116. package/src/tokens/tokenData.ts +19 -9
  117. package/src/tokens/tokenType.ts +11 -11
  118. package/src/tokens/yearn.ts +130 -124
  119. package/src/utils/errors.ts +11 -0
  120. package/src/utils/formatter.ts +22 -18
  121. package/src/utils/loading.ts +14 -6
  122. package/src/utils/mappers.ts +8 -6
  123. package/src/utils/multicall.ts +2 -0
  124. package/src/utils/network.ts +21 -21
  125. package/src/utils/repeater.ts +2 -2
  126. package/src/utils/validate.ts +1 -1
  127. package/lib/utils/events.d.ts +0 -2
  128. package/lib/utils/events.js +0 -13
  129. package/src/utils/events.ts +0 -10
@@ -76,15 +76,15 @@ var Path = /** @class */ (function () {
76
76
  this.balances[token] = ethers_1.BigNumber.from(1);
77
77
  return currentBalance.sub(1);
78
78
  };
79
- Path.prototype.comparedByPriority = function (_a, _b) {
80
- var tokenA = _a[0], _balanceA = _a[1];
81
- var tokenB = _b[0], _balanceB = _b[1];
79
+ Path.comparedByPriority = function (_a, _b) {
80
+ var tokenA = _a[0];
81
+ var tokenB = _b[0];
82
82
  var priorityTokenA = priority_1.priority[token_1.supportedTokens[tokenA].type];
83
83
  var priorityTokenB = priority_1.priority[token_1.supportedTokens[tokenB].type];
84
84
  if (priorityTokenA > priorityTokenB) {
85
85
  return -1;
86
86
  }
87
- else if (priorityTokenA < priorityTokenB) {
87
+ if (priorityTokenA < priorityTokenB) {
88
88
  return 1;
89
89
  }
90
90
  return 0;
@@ -123,8 +123,8 @@ var Path = /** @class */ (function () {
123
123
  case 2:
124
124
  lpPaths = _a.sent();
125
125
  pathFinder = types_1.PathFinder__factory.connect(contracts_1.pathFindersByNetwork[networkType].PATH_FINDER, provider);
126
- console.log(lpPaths);
127
- console.log(pathFinder);
126
+ console.debug(lpPaths);
127
+ console.debug(pathFinder);
128
128
  return [2 /*return*/];
129
129
  }
130
130
  });
@@ -134,43 +134,39 @@ var Path = /** @class */ (function () {
134
134
  return __awaiter(this, void 0, void 0, function () {
135
135
  var existingTokens, nextToken, lpPathFinder;
136
136
  return __generator(this, function (_a) {
137
- switch (_a.label) {
138
- case 0:
139
- existingTokens = Object.entries(this.balances)
140
- .filter(function (_a) {
141
- var _token = _a[0], balance = _a[1];
142
- return balance.gt(1);
143
- })
144
- .sort(this.comparedByPriority);
145
- // TODO: Add checks for lenght
146
- if (existingTokens.length === 0)
147
- throw new Error("No tokens with balance >1");
148
- nextToken = existingTokens[0][0];
149
- // Get balances and keep non-zero only
150
- // Find token with highest priority
151
- // Get token type of this token
152
- switch (token_1.supportedTokens[nextToken].type) {
153
- case tokenType_1.TokenType.NORMAL_TOKEN:
154
- case tokenType_1.TokenType.CONNECTOR:
155
- return [2 /*return*/, [this]];
156
- case tokenType_1.TokenType.YEARN_VAULT_OF_CURVE_LP:
157
- case tokenType_1.TokenType.YEARN_VAULT_OF_META_CURVE_LP:
158
- case tokenType_1.TokenType.YEARN_VAULT:
159
- lpPathFinder = new yVault_1.YearnVaultPathFinder(nextToken);
160
- break;
161
- case tokenType_1.TokenType.CONVEX_LP_TOKEN:
162
- lpPathFinder = new convexLP_1.ConvexLPPathFinder();
163
- break;
164
- case tokenType_1.TokenType.META_CURVE_LP:
165
- case tokenType_1.TokenType.CURVE_LP:
166
- lpPathFinder = new curveLP_1.CurvePathFinder(nextToken);
167
- break;
168
- default:
169
- throw new Error("Token type not supported yet");
170
- }
171
- return [4 /*yield*/, lpPathFinder.findWithdrawPaths(this)];
172
- case 1: return [2 /*return*/, _a.sent()];
137
+ existingTokens = Object.entries(this.balances)
138
+ .filter(function (_a) {
139
+ var balance = _a[1];
140
+ return balance.gt(1);
141
+ })
142
+ .sort(Path.comparedByPriority);
143
+ // TODO: Add checks for lenght
144
+ if (existingTokens.length === 0)
145
+ throw new Error("No tokens with balance >1");
146
+ nextToken = existingTokens[0][0];
147
+ // Get balances and keep non-zero only
148
+ // Find token with highest priority
149
+ // Get token type of this token
150
+ switch (token_1.supportedTokens[nextToken].type) {
151
+ case tokenType_1.TokenType.NORMAL_TOKEN:
152
+ case tokenType_1.TokenType.CONNECTOR:
153
+ return [2 /*return*/, [this]];
154
+ case tokenType_1.TokenType.YEARN_VAULT_OF_CURVE_LP:
155
+ case tokenType_1.TokenType.YEARN_VAULT_OF_META_CURVE_LP:
156
+ case tokenType_1.TokenType.YEARN_VAULT:
157
+ lpPathFinder = new yVault_1.YearnVaultPathFinder(nextToken);
158
+ break;
159
+ case tokenType_1.TokenType.CONVEX_LP_TOKEN:
160
+ lpPathFinder = new convexLP_1.ConvexLPPathFinder();
161
+ break;
162
+ case tokenType_1.TokenType.META_CURVE_LP:
163
+ case tokenType_1.TokenType.CURVE_LP:
164
+ lpPathFinder = new curveLP_1.CurvePathFinder(nextToken);
165
+ break;
166
+ default:
167
+ throw new Error("Token type not supported yet");
173
168
  }
169
+ return [2 /*return*/, lpPathFinder.findWithdrawPaths(this)];
174
170
  });
175
171
  });
176
172
  };
@@ -1,5 +1,4 @@
1
- import { BigNumber } from "ethers";
2
- import { BytesLike } from "@ethersproject/bytes";
1
+ import { BigNumber, BytesLike } from "ethers";
3
2
  import { SwapType } from "./tradeTypes";
4
3
  export interface CloseTradePath {
5
4
  path: Array<string>;
@@ -1,8 +1,8 @@
1
- import { ConvexPoolContract, CurvePoolContract, UniswapV2Contract, YearnVaultContract } from "../contracts/contracts";
2
- import { NormalToken } from "../tokens/normal";
3
- import { CurveLPToken } from "../tokens/curveLP";
4
- import { YearnLPToken } from "../tokens/yearn";
5
- import { ConvexLPToken, ConvexStakedPhantomToken } from "../tokens/convex";
1
+ import type { ConvexPoolContract, CurvePoolContract, UniswapV2Contract, YearnVaultContract } from "../contracts/contracts";
2
+ import type { NormalToken } from "../tokens/normal";
3
+ import type { CurveLPToken } from "../tokens/curveLP";
4
+ import type { YearnLPToken } from "../tokens/yearn";
5
+ import type { ConvexLPToken, ConvexStakedPhantomToken } from "../tokens/convex";
6
6
  export declare enum TradeType {
7
7
  UniswapV2Swap = 0,
8
8
  UniswapV3Swap = 1,
@@ -1,10 +1,10 @@
1
- import { Path, LPWithdrawPathFinder } from "./path";
2
1
  import { YearnLPToken } from "../tokens/yearn";
3
2
  import { NormalToken } from "../tokens/normal";
4
3
  import { CurveLPToken } from "../tokens/curveLP";
4
+ import type { Path, LPWithdrawPathFinder } from "./path";
5
5
  export declare class YearnVaultPathFinder implements LPWithdrawPathFinder {
6
6
  _vault: YearnLPToken;
7
7
  token: NormalToken | CurveLPToken;
8
8
  constructor(vault: YearnLPToken);
9
- findWithdrawPaths(p: Path): Promise<Array<Path>>;
9
+ findWithdrawPaths(path: Path): Promise<Array<Path>>;
10
10
  }
@@ -38,10 +38,11 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.YearnVaultPathFinder = void 0;
40
40
  var ethers_1 = require("ethers");
41
- var types_1 = require("../types");
42
41
  var yearn_1 = require("../tokens/yearn");
43
42
  var token_1 = require("../tokens/token");
44
43
  var multicall_1 = require("../utils/multicall");
44
+ var mappers_1 = require("../utils/mappers");
45
+ var types_1 = require("../types");
45
46
  var YearnVaultPathFinder = /** @class */ (function () {
46
47
  function YearnVaultPathFinder(vault) {
47
48
  this._vault = vault;
@@ -49,23 +50,26 @@ var YearnVaultPathFinder = /** @class */ (function () {
49
50
  // Yearn Vault only has one lp action
50
51
  this.token = currentTokenData.underlying;
51
52
  }
52
- YearnVaultPathFinder.prototype.findWithdrawPaths = function (p) {
53
+ // eslint-disable-next-line class-methods-use-this
54
+ YearnVaultPathFinder.prototype.findWithdrawPaths = function (path) {
53
55
  return __awaiter(this, void 0, void 0, function () {
54
- var vaultBalances, _i, _a, _b, yVault, tokenData, currentBalance, vaultList, multicallData, prices, i, vault, vb, tokenAddress, adapterAddress, callData;
55
- return __generator(this, function (_c) {
56
- switch (_c.label) {
56
+ var p, vaultBalances, vaultList, multicallData, prices, i, vault, vb, tokenAddress, adapterAddress, callData;
57
+ return __generator(this, function (_a) {
58
+ switch (_a.label) {
57
59
  case 0:
58
- vaultBalances = {};
59
- for (_i = 0, _a = Object.entries(yearn_1.yearnTokens); _i < _a.length; _i++) {
60
- _b = _a[_i], yVault = _b[0], tokenData = _b[1];
61
- currentBalance = p.popBalance(yVault);
60
+ p = Object.assign(Object.create(Object.getPrototypeOf(path)), path);
61
+ vaultBalances = (0, mappers_1.objectEntries)(yearn_1.yearnTokens).reduce(function (acc, _a) {
62
+ var yVault = _a[0], tokenData = _a[1];
63
+ var typedVault = yVault;
64
+ var currentBalance = p.popBalance(typedVault);
62
65
  if (currentBalance.gt(1)) {
63
- vaultBalances[yVault] = {
66
+ acc[typedVault] = {
64
67
  token: tokenData.underlying,
65
68
  balance: currentBalance
66
69
  };
67
70
  }
68
- }
71
+ return acc;
72
+ }, {});
69
73
  vaultList = Object.keys(vaultBalances);
70
74
  multicallData = vaultList
71
75
  .map(function (t) { return token_1.tokenDataByNetwork[p.networkType][t]; })
@@ -76,8 +80,8 @@ var YearnVaultPathFinder = /** @class */ (function () {
76
80
  }); });
77
81
  return [4 /*yield*/, (0, multicall_1.multicall)(multicallData, p.provider)];
78
82
  case 1:
79
- prices = _c.sent();
80
- for (i = 0; i < vaultList.length; i++) {
83
+ prices = _a.sent();
84
+ for (i = 0; i < vaultList.length; i += 1) {
81
85
  vault = vaultList[i];
82
86
  vb = vaultBalances[vault];
83
87
  p.balances[vb.token] = (p.balances[vb.token] || ethers_1.BigNumber.from(0)).add(ethers_1.BigNumber.from((vb === null || vb === void 0 ? void 0 : vb.balance) || 0).mul(prices[i]));
@@ -86,8 +90,7 @@ var YearnVaultPathFinder = /** @class */ (function () {
86
90
  callData = types_1.IYVault__factory.createInterface().encodeFunctionData("withdraw()");
87
91
  p.calls.push({ target: adapterAddress, callData: callData });
88
92
  }
89
- return [4 /*yield*/, p.withdrawTokens()];
90
- case 2: return [2 /*return*/, _c.sent()];
93
+ return [2 /*return*/, p.withdrawTokens()];
91
94
  }
92
95
  });
93
96
  });
@@ -1,4 +1,7 @@
1
1
  import { BigNumberish } from "ethers";
2
+ import { ConvexPoolContract } from "../contracts/contracts";
3
+ import { NetworkType } from "../core/constants";
4
+ import { CreditManagerData } from "../core/creditManager";
2
5
  import { MultiCallStruct } from "../types/contracts/interfaces/ICreditFacade.sol/ICreditFacade";
3
6
  export declare class ConvexBoosterCalls {
4
7
  static deposit(pid: BigNumberish, amount: BigNumberish, stake: boolean): string;
@@ -20,6 +23,7 @@ export declare class ConvexClaimZapCalls {
20
23
  export declare class ConvexBoosterMulticaller {
21
24
  private readonly _address;
22
25
  constructor(address: string);
26
+ static connect(address: string): ConvexBoosterMulticaller;
23
27
  deposit(pid: BigNumberish, amount: BigNumberish, stake: boolean): MultiCallStruct;
24
28
  depositAll(pid: BigNumberish, stake: boolean): MultiCallStruct;
25
29
  withdraw(pid: BigNumberish, amount: BigNumberish): MultiCallStruct;
@@ -28,6 +32,7 @@ export declare class ConvexBoosterMulticaller {
28
32
  export declare class ConvexPoolMulticaller {
29
33
  private readonly _address;
30
34
  constructor(address: string);
35
+ static connect(address: string): ConvexPoolMulticaller;
31
36
  stake(amount: BigNumberish): MultiCallStruct;
32
37
  stakeAll(): MultiCallStruct;
33
38
  withdraw(amount: BigNumberish, claim: boolean): MultiCallStruct;
@@ -41,5 +46,12 @@ export declare class ConvexPoolMulticaller {
41
46
  export declare class ConvexClaimZapMulticaller {
42
47
  private readonly _address;
43
48
  constructor(address: string);
49
+ static connect(address: string): ConvexClaimZapMulticaller;
44
50
  claimRewards(rewardContracts: Array<string>, extraRewardContracts: Array<string>, tokenRewardContracts: Array<string>, tokenRewardTokens: Array<string>, depositCrvMaxAmount: BigNumberish, minAmountOut: BigNumberish, depositCvxMaxAmount: BigNumberish, spendCvxAmount: BigNumberish, options: BigNumberish): MultiCallStruct;
45
51
  }
52
+ export declare class ConvexStrategies {
53
+ static underlyingToStakedConvex(data: CreditManagerData, network: NetworkType, convexPool: ConvexPoolContract, underlyingAmount: BigNumberish): MultiCallStruct[];
54
+ static stakedConvexToUnderlying(data: CreditManagerData, network: NetworkType, convexPool: ConvexPoolContract, convexLpAmount: BigNumberish, sellRewards: boolean): MultiCallStruct[];
55
+ static allStakedConvexToUnderlying(data: CreditManagerData, network: NetworkType, convexPool: ConvexPoolContract, sellRewards: boolean): MultiCallStruct[];
56
+ static sellRewards(data: CreditManagerData, network: NetworkType, convexPool: ConvexPoolContract): MultiCallStruct[];
57
+ }
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ConvexClaimZapMulticaller = exports.ConvexPoolMulticaller = exports.ConvexBoosterMulticaller = exports.ConvexClaimZapCalls = exports.ConvexPoolCalls = exports.ConvexBoosterCalls = void 0;
3
+ exports.ConvexStrategies = exports.ConvexClaimZapMulticaller = exports.ConvexPoolMulticaller = exports.ConvexBoosterMulticaller = exports.ConvexClaimZapCalls = exports.ConvexPoolCalls = exports.ConvexBoosterCalls = void 0;
4
+ var contracts_1 = require("../contracts/contracts");
5
+ var token_1 = require("../tokens/token");
4
6
  var types_1 = require("../types");
7
+ var curve_1 = require("./curve");
8
+ var uniswapV2_1 = require("./uniswapV2");
5
9
  var ConvexBoosterCalls = /** @class */ (function () {
6
10
  function ConvexBoosterCalls() {
7
11
  }
@@ -67,6 +71,9 @@ var ConvexBoosterMulticaller = /** @class */ (function () {
67
71
  function ConvexBoosterMulticaller(address) {
68
72
  this._address = address;
69
73
  }
74
+ ConvexBoosterMulticaller.connect = function (address) {
75
+ return new ConvexBoosterMulticaller(address);
76
+ };
70
77
  ConvexBoosterMulticaller.prototype.deposit = function (pid, amount, stake) {
71
78
  return {
72
79
  target: this._address,
@@ -98,6 +105,9 @@ var ConvexPoolMulticaller = /** @class */ (function () {
98
105
  function ConvexPoolMulticaller(address) {
99
106
  this._address = address;
100
107
  }
108
+ ConvexPoolMulticaller.connect = function (address) {
109
+ return new ConvexPoolMulticaller(address);
110
+ };
101
111
  ConvexPoolMulticaller.prototype.stake = function (amount) {
102
112
  return {
103
113
  target: this._address,
@@ -141,6 +151,9 @@ var ConvexClaimZapMulticaller = /** @class */ (function () {
141
151
  function ConvexClaimZapMulticaller(address) {
142
152
  this._address = address;
143
153
  }
154
+ ConvexClaimZapMulticaller.connect = function (address) {
155
+ return new ConvexClaimZapMulticaller(address);
156
+ };
144
157
  ConvexClaimZapMulticaller.prototype.claimRewards = function (rewardContracts, extraRewardContracts, tokenRewardContracts, tokenRewardTokens, depositCrvMaxAmount, minAmountOut, depositCvxMaxAmount, spendCvxAmount, options) {
145
158
  return {
146
159
  target: this._address,
@@ -150,3 +163,63 @@ var ConvexClaimZapMulticaller = /** @class */ (function () {
150
163
  return ConvexClaimZapMulticaller;
151
164
  }());
152
165
  exports.ConvexClaimZapMulticaller = ConvexClaimZapMulticaller;
166
+ var ConvexStrategies = /** @class */ (function () {
167
+ function ConvexStrategies() {
168
+ }
169
+ ConvexStrategies.underlyingToStakedConvex = function (data, network, convexPool, underlyingAmount) {
170
+ var calls = [];
171
+ var convexParams = contracts_1.contractParams[convexPool];
172
+ var stakedToken = convexParams.stakedToken;
173
+ var stakedTokenParams = token_1.supportedTokens[stakedToken];
174
+ var curveLpToken = stakedTokenParams.underlying;
175
+ var curveLpTokenData = token_1.supportedTokens[curveLpToken];
176
+ var curvePool = curveLpTokenData.pool;
177
+ calls = curve_1.CurveStrategies.underlyingToCurveLP(data, network, curvePool, underlyingAmount);
178
+ calls.push(ConvexBoosterMulticaller.connect(data.adapters[contracts_1.contractsByNetwork[network].CONVEX_BOOSTER]).depositAll(stakedTokenParams.pid, true));
179
+ return calls;
180
+ };
181
+ ConvexStrategies.stakedConvexToUnderlying = function (data, network, convexPool, convexLpAmount, sellRewards) {
182
+ var calls = [];
183
+ var convexParams = contracts_1.contractParams[convexPool];
184
+ var stakedToken = convexParams.stakedToken;
185
+ var stakedTokenParams = token_1.supportedTokens[stakedToken];
186
+ var curveLpToken = stakedTokenParams.underlying;
187
+ var curveLpTokenData = token_1.supportedTokens[curveLpToken];
188
+ var curvePool = curveLpTokenData.pool;
189
+ calls.push(ConvexPoolMulticaller.connect(data.adapters[contracts_1.contractsByNetwork[network][convexPool]]).withdrawAndUnwrap(convexLpAmount, true));
190
+ calls.push.apply(calls, curve_1.CurveStrategies.allCurveLPToUnderlying(data, network, curvePool));
191
+ if (sellRewards) {
192
+ calls.push.apply(calls, ConvexStrategies.sellRewards(data, network, convexPool));
193
+ }
194
+ return calls;
195
+ };
196
+ ConvexStrategies.allStakedConvexToUnderlying = function (data, network, convexPool, sellRewards) {
197
+ var calls = [];
198
+ var convexParams = contracts_1.contractParams[convexPool];
199
+ var stakedToken = convexParams.stakedToken;
200
+ var stakedTokenParams = token_1.supportedTokens[stakedToken];
201
+ var curveLpToken = stakedTokenParams.underlying;
202
+ var curveLpTokenData = token_1.supportedTokens[curveLpToken];
203
+ var curvePool = curveLpTokenData.pool;
204
+ calls.push(ConvexPoolMulticaller.connect(data.adapters[contracts_1.contractsByNetwork[network][convexPool]]).withdrawAllAndUnwrap(true));
205
+ calls.push.apply(calls, curve_1.CurveStrategies.allCurveLPToUnderlying(data, network, curvePool));
206
+ if (sellRewards) {
207
+ calls.push.apply(calls, ConvexStrategies.sellRewards(data, network, convexPool));
208
+ }
209
+ return calls;
210
+ };
211
+ ConvexStrategies.sellRewards = function (data, network, convexPool) {
212
+ var calls = [];
213
+ var convexParams = contracts_1.contractParams[convexPool];
214
+ calls.push(uniswapV2_1.UniswapV2Multicaller.connect(data.adapters[contracts_1.contractsByNetwork[network].UNISWAP_V2_ROUTER]).swapAllTokensForTokens(0, [token_1.tokenDataByNetwork[network].CRV, data.underlyingToken], Math.floor(new Date().getTime() / 1000) + 3600), uniswapV2_1.UniswapV2Multicaller.connect(data.adapters[contracts_1.contractsByNetwork[network].UNISWAP_V2_ROUTER]).swapAllTokensForTokens(0, [token_1.tokenDataByNetwork[network].CVX, data.underlyingToken], Math.floor(new Date().getTime() / 1000) + 3600));
215
+ convexParams.extraRewards.forEach(function (extraReward) {
216
+ uniswapV2_1.UniswapV2Multicaller.connect(data.adapters[contracts_1.contractsByNetwork[network].UNISWAP_V2_ROUTER]).swapAllTokensForTokens(0, [
217
+ token_1.tokenDataByNetwork[network][extraReward.rewardToken],
218
+ data.underlyingToken
219
+ ], Math.floor(new Date().getTime() / 1000) + 3600);
220
+ });
221
+ return calls;
222
+ };
223
+ return ConvexStrategies;
224
+ }());
225
+ exports.ConvexStrategies = ConvexStrategies;
@@ -9,6 +9,7 @@ export declare class CreditFacadeCalls {
9
9
  export declare class CreditFacadeMulticaller {
10
10
  private readonly _address;
11
11
  constructor(address: string);
12
+ static connect(address: string): CreditFacadeMulticaller;
12
13
  addCollateral(onBehalfOf: string, token: string, amount: BigNumberish): MultiCallStruct;
13
14
  increaseDebt(amount: BigNumberish): MultiCallStruct;
14
15
  decreaseDebt(amount: BigNumberish): MultiCallStruct;
@@ -24,6 +24,9 @@ var CreditFacadeMulticaller = /** @class */ (function () {
24
24
  function CreditFacadeMulticaller(address) {
25
25
  this._address = address;
26
26
  }
27
+ CreditFacadeMulticaller.connect = function (address) {
28
+ return new CreditFacadeMulticaller(address);
29
+ };
27
30
  CreditFacadeMulticaller.prototype.addCollateral = function (onBehalfOf, token, amount) {
28
31
  return {
29
32
  target: this._address,
@@ -1,4 +1,7 @@
1
1
  import { BigNumberish } from "ethers";
2
+ import { CurvePoolContract } from "../contracts/contracts";
3
+ import { NetworkType } from "../core/constants";
4
+ import { CreditManagerData } from "../core/creditManager";
2
5
  import { MultiCallStruct } from "../types/contracts/interfaces/ICreditFacade.sol/ICreditFacade";
3
6
  export declare class CurveCalls {
4
7
  static exchange(i: BigNumberish, j: BigNumberish, dx: BigNumberish, min_dy: BigNumberish): string;
@@ -8,40 +11,14 @@ export declare class CurveCalls {
8
11
  static add_all_liquidity_one_coin(i: BigNumberish, rateMinRAY: BigNumberish): string;
9
12
  static remove_liquidity_one_coin(token_amount: BigNumberish, i: BigNumberish, min_amount: BigNumberish): string;
10
13
  static remove_all_liquidity_one_coin(i: BigNumberish, minRateRAY: BigNumberish): string;
11
- static add_liquidity(amounts: [BigNumberish, BigNumberish] | [
12
- BigNumberish,
13
- BigNumberish,
14
- BigNumberish
15
- ] | [
16
- BigNumberish,
17
- BigNumberish,
18
- BigNumberish,
19
- BigNumberish
20
- ], min_mint_amount: BigNumberish): string;
21
- static remove_liquidity(amount: BigNumberish, min_amounts: [BigNumberish, BigNumberish] | [
22
- BigNumberish,
23
- BigNumberish,
24
- BigNumberish
25
- ] | [
26
- BigNumberish,
27
- BigNumberish,
28
- BigNumberish,
29
- BigNumberish
30
- ]): string;
31
- static remove_liquidity_imbalance(amounts: [BigNumberish, BigNumberish] | [
32
- BigNumberish,
33
- BigNumberish,
34
- BigNumberish
35
- ] | [
36
- BigNumberish,
37
- BigNumberish,
38
- BigNumberish,
39
- BigNumberish
40
- ], max_burn_amount: BigNumberish): string;
14
+ static add_liquidity(amounts: [BigNumberish, BigNumberish] | [BigNumberish, BigNumberish, BigNumberish] | [BigNumberish, BigNumberish, BigNumberish, BigNumberish], min_mint_amount: BigNumberish): string;
15
+ static remove_liquidity(amount: BigNumberish, min_amounts: [BigNumberish, BigNumberish] | [BigNumberish, BigNumberish, BigNumberish] | [BigNumberish, BigNumberish, BigNumberish, BigNumberish]): string;
16
+ static remove_liquidity_imbalance(amounts: [BigNumberish, BigNumberish] | [BigNumberish, BigNumberish, BigNumberish] | [BigNumberish, BigNumberish, BigNumberish, BigNumberish], max_burn_amount: BigNumberish): string;
41
17
  }
42
18
  export declare class CurveMulticaller {
43
19
  private readonly _address;
44
20
  constructor(address: string);
21
+ static connect(address: string): CurveMulticaller;
45
22
  exchange(i: BigNumberish, j: BigNumberish, dx: BigNumberish, min_dy: BigNumberish): MultiCallStruct;
46
23
  exchange_all(i: BigNumberish, j: BigNumberish, rateMinRAY: BigNumberish): MultiCallStruct;
47
24
  exchange_underlying(i: BigNumberish, j: BigNumberish, dx: BigNumberish, min_dy: BigNumberish): MultiCallStruct;
@@ -55,34 +32,12 @@ export declare class CurveMulticaller {
55
32
  target: string;
56
33
  callData: string;
57
34
  };
58
- add_liquidity(amounts: [BigNumberish, BigNumberish] | [
59
- BigNumberish,
60
- BigNumberish,
61
- BigNumberish
62
- ] | [
63
- BigNumberish,
64
- BigNumberish,
65
- BigNumberish,
66
- BigNumberish
67
- ], min_mint_amount: BigNumberish): MultiCallStruct;
68
- remove_liquidity(amount: BigNumberish, min_amounts: [BigNumberish, BigNumberish] | [
69
- BigNumberish,
70
- BigNumberish,
71
- BigNumberish
72
- ] | [
73
- BigNumberish,
74
- BigNumberish,
75
- BigNumberish,
76
- BigNumberish
77
- ]): MultiCallStruct;
78
- remove_liquidity_imbalance(amounts: [BigNumberish, BigNumberish] | [
79
- BigNumberish,
80
- BigNumberish,
81
- BigNumberish
82
- ] | [
83
- BigNumberish,
84
- BigNumberish,
85
- BigNumberish,
86
- BigNumberish
87
- ], max_burn_amount: BigNumberish): MultiCallStruct;
35
+ add_liquidity(amounts: [BigNumberish, BigNumberish] | [BigNumberish, BigNumberish, BigNumberish] | [BigNumberish, BigNumberish, BigNumberish, BigNumberish], min_mint_amount: BigNumberish): MultiCallStruct;
36
+ remove_liquidity(amount: BigNumberish, min_amounts: [BigNumberish, BigNumberish] | [BigNumberish, BigNumberish, BigNumberish] | [BigNumberish, BigNumberish, BigNumberish, BigNumberish]): MultiCallStruct;
37
+ remove_liquidity_imbalance(amounts: [BigNumberish, BigNumberish] | [BigNumberish, BigNumberish, BigNumberish] | [BigNumberish, BigNumberish, BigNumberish, BigNumberish], max_burn_amount: BigNumberish): MultiCallStruct;
38
+ }
39
+ export declare class CurveStrategies {
40
+ static underlyingToCurveLP(data: CreditManagerData, network: NetworkType, curvePool: CurvePoolContract, underlyingAmount: BigNumberish): MultiCallStruct[];
41
+ static curveLPToUnderlying(data: CreditManagerData, network: NetworkType, curvePool: CurvePoolContract, curveLPAmount: BigNumberish): MultiCallStruct[];
42
+ static allCurveLPToUnderlying(data: CreditManagerData, network: NetworkType, curvePool: CurvePoolContract): MultiCallStruct[];
88
43
  }
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CurveMulticaller = exports.CurveCalls = void 0;
3
+ exports.CurveStrategies = exports.CurveMulticaller = exports.CurveCalls = void 0;
4
+ var contracts_1 = require("../contracts/contracts");
5
+ var constants_1 = require("../core/constants");
6
+ var token_1 = require("../tokens/token");
4
7
  var types_1 = require("../types");
8
+ var uniswapV2_1 = require("./uniswapV2");
5
9
  var CurveCalls = /** @class */ (function () {
6
10
  function CurveCalls() {
7
11
  }
@@ -34,6 +38,8 @@ var CurveCalls = /** @class */ (function () {
34
38
  return types_1.CurveV1Adapter3Assets__factory.createInterface().encodeFunctionData("add_liquidity", [amounts, min_mint_amount]);
35
39
  case 4:
36
40
  return types_1.CurveV1Adapter4Assets__factory.createInterface().encodeFunctionData("add_liquidity", [amounts, min_mint_amount]);
41
+ default:
42
+ throw new Error("Wrong calls number: add_liquidity");
37
43
  }
38
44
  };
39
45
  CurveCalls.remove_liquidity = function (amount, min_amounts) {
@@ -44,6 +50,8 @@ var CurveCalls = /** @class */ (function () {
44
50
  return types_1.CurveV1Adapter3Assets__factory.createInterface().encodeFunctionData("remove_liquidity", [amount, min_amounts]);
45
51
  case 4:
46
52
  return types_1.CurveV1Adapter4Assets__factory.createInterface().encodeFunctionData("remove_liquidity", [amount, min_amounts]);
53
+ default:
54
+ throw new Error("Wrong calls number: remove_liquidity");
47
55
  }
48
56
  };
49
57
  CurveCalls.remove_liquidity_imbalance = function (amounts, max_burn_amount) {
@@ -54,6 +62,8 @@ var CurveCalls = /** @class */ (function () {
54
62
  return types_1.CurveV1Adapter3Assets__factory.createInterface().encodeFunctionData("remove_liquidity_imbalance", [amounts, max_burn_amount]);
55
63
  case 4:
56
64
  return types_1.CurveV1Adapter4Assets__factory.createInterface().encodeFunctionData("remove_liquidity_imbalance", [amounts, max_burn_amount]);
65
+ default:
66
+ throw new Error("Wrong calls number: remove_liquidity_imbalance");
57
67
  }
58
68
  };
59
69
  return CurveCalls;
@@ -63,6 +73,9 @@ var CurveMulticaller = /** @class */ (function () {
63
73
  function CurveMulticaller(address) {
64
74
  this._address = address;
65
75
  }
76
+ CurveMulticaller.connect = function (address) {
77
+ return new CurveMulticaller(address);
78
+ };
66
79
  CurveMulticaller.prototype.exchange = function (i, j, dx, min_dy) {
67
80
  return {
68
81
  target: this._address,
@@ -126,3 +139,63 @@ var CurveMulticaller = /** @class */ (function () {
126
139
  return CurveMulticaller;
127
140
  }());
128
141
  exports.CurveMulticaller = CurveMulticaller;
142
+ var CurveStrategies = /** @class */ (function () {
143
+ function CurveStrategies() {
144
+ }
145
+ CurveStrategies.underlyingToCurveLP = function (data, network, curvePool, underlyingAmount) {
146
+ var calls = [];
147
+ var curveParams = contracts_1.contractParams[curvePool];
148
+ var tokenToDeposit = curveParams.tokens[0];
149
+ if (data.underlyingToken !== token_1.tokenDataByNetwork[network][tokenToDeposit]) {
150
+ calls.push(uniswapV2_1.UniswapV2Multicaller.connect(data.adapters[contracts_1.contractsByNetwork[network].UNISWAP_V2_ROUTER]).swapExactTokensForTokens(underlyingAmount, 0, [data.underlyingToken, token_1.tokenDataByNetwork[network][tokenToDeposit]], constants_1.ADDRESS_0X0, Math.floor(new Date().getTime() / 1000) + 3600));
151
+ }
152
+ calls.push(CurveMulticaller.connect(data.adapters[contracts_1.contractsByNetwork[network][curvePool]]).add_all_liquidity_one_coin(0, 0));
153
+ return calls;
154
+ };
155
+ CurveStrategies.curveLPToUnderlying = function (data, network, curvePool, curveLPAmount) {
156
+ var calls = [];
157
+ var curveParams = contracts_1.contractParams[curvePool];
158
+ var curveContractAddress;
159
+ if (curveParams.wrapper) {
160
+ curveContractAddress =
161
+ data.adapters[contracts_1.contractsByNetwork[network][curveParams.wrapper]];
162
+ }
163
+ else {
164
+ curveContractAddress =
165
+ data.adapters[contracts_1.contractsByNetwork[network][curvePool]];
166
+ }
167
+ calls.push(CurveMulticaller.connect(curveContractAddress).remove_liquidity_one_coin(curveLPAmount, 0, 0));
168
+ if (token_1.tokenDataByNetwork[network][curveParams.tokens[0]] !==
169
+ data.underlyingToken) {
170
+ calls.push(uniswapV2_1.UniswapV2Multicaller.connect(data.adapters[contracts_1.contractsByNetwork[network].UNISWAP_V2_ROUTER]).swapAllTokensForTokens(0, [
171
+ token_1.tokenDataByNetwork[network][curveParams.tokens[0]],
172
+ data.underlyingToken
173
+ ], Math.floor(new Date().getTime() / 1000) + 3600));
174
+ }
175
+ return calls;
176
+ };
177
+ CurveStrategies.allCurveLPToUnderlying = function (data, network, curvePool) {
178
+ var calls = [];
179
+ var curveParams = contracts_1.contractParams[curvePool];
180
+ var curveContractAddress;
181
+ if (curveParams.wrapper) {
182
+ curveContractAddress =
183
+ data.adapters[contracts_1.contractsByNetwork[network][curveParams.wrapper]];
184
+ }
185
+ else {
186
+ curveContractAddress =
187
+ data.adapters[contracts_1.contractsByNetwork[network][curvePool]];
188
+ }
189
+ calls.push(CurveMulticaller.connect(curveContractAddress).remove_all_liquidity_one_coin(0, 0));
190
+ if (token_1.tokenDataByNetwork[network][curveParams.tokens[0]] !==
191
+ data.underlyingToken) {
192
+ calls.push(uniswapV2_1.UniswapV2Multicaller.connect(data.adapters[contracts_1.contractsByNetwork[network].UNISWAP_V2_ROUTER]).swapAllTokensForTokens(0, [
193
+ token_1.tokenDataByNetwork[network][curveParams.tokens[0]],
194
+ data.underlyingToken
195
+ ], Math.floor(new Date().getTime() / 1000) + 3600));
196
+ }
197
+ return calls;
198
+ };
199
+ return CurveStrategies;
200
+ }());
201
+ exports.CurveStrategies = CurveStrategies;
@@ -1,4 +1,6 @@
1
1
  import { BigNumberish } from "ethers";
2
+ import { CreditManagerData } from "../core/creditManager";
3
+ import { NetworkType } from "../core/constants";
2
4
  import { MultiCallStruct } from "../types/contracts/interfaces/ICreditFacade.sol/ICreditFacade";
3
5
  export declare class LidoCalls {
4
6
  static submit(amount: BigNumberish): string;
@@ -7,6 +9,10 @@ export declare class LidoCalls {
7
9
  export declare class LidoMulticaller {
8
10
  private readonly _address;
9
11
  constructor(address: string);
12
+ static connect(address: string): LidoMulticaller;
10
13
  submit(amount: BigNumberish): MultiCallStruct;
11
14
  submitAll(): MultiCallStruct;
12
15
  }
16
+ export declare class LidoStrategies {
17
+ static mintSteth(data: CreditManagerData, network: NetworkType, underlyingAmount: BigNumberish): MultiCallStruct[];
18
+ }
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LidoMulticaller = exports.LidoCalls = void 0;
3
+ exports.LidoStrategies = exports.LidoMulticaller = exports.LidoCalls = void 0;
4
+ var constants_1 = require("../core/constants");
5
+ var contracts_1 = require("../contracts/contracts");
6
+ var token_1 = require("../tokens/token");
4
7
  var types_1 = require("../types");
8
+ var uniswapV2_1 = require("./uniswapV2");
5
9
  var LidoCalls = /** @class */ (function () {
6
10
  function LidoCalls() {
7
11
  }
@@ -18,6 +22,9 @@ var LidoMulticaller = /** @class */ (function () {
18
22
  function LidoMulticaller(address) {
19
23
  this._address = address;
20
24
  }
25
+ LidoMulticaller.connect = function (address) {
26
+ return new LidoMulticaller(address);
27
+ };
21
28
  LidoMulticaller.prototype.submit = function (amount) {
22
29
  return {
23
30
  target: this._address,
@@ -33,3 +40,18 @@ var LidoMulticaller = /** @class */ (function () {
33
40
  return LidoMulticaller;
34
41
  }());
35
42
  exports.LidoMulticaller = LidoMulticaller;
43
+ var LidoStrategies = /** @class */ (function () {
44
+ function LidoStrategies() {
45
+ }
46
+ LidoStrategies.mintSteth = function (data, network, underlyingAmount) {
47
+ var calls = [];
48
+ // This should be a pathfinder call
49
+ if (!data.isWETH) {
50
+ calls.push(uniswapV2_1.UniswapV2Multicaller.connect(data.adapters[contracts_1.contractsByNetwork[network].UNISWAP_V2_ROUTER]).swapExactTokensForTokens(underlyingAmount, 0, [data.underlyingToken, token_1.tokenDataByNetwork[network].WETH], constants_1.ADDRESS_0X0, Math.floor(new Date().getTime() / 1000) + 3600));
51
+ }
52
+ calls.push(LidoMulticaller.connect(data.adapters[contracts_1.contractsByNetwork[network].LIDO_STETH_GATEWAY]).submitAll());
53
+ return calls;
54
+ };
55
+ return LidoStrategies;
56
+ }());
57
+ exports.LidoStrategies = LidoStrategies;