@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
package/lib/index.d.ts CHANGED
@@ -23,12 +23,10 @@ export * from "./payload/token";
23
23
  export * from "./utils/formatter";
24
24
  export * from "./utils/loading";
25
25
  export * from "./utils/validate";
26
- export * from "./utils/events";
27
26
  export * from "./utils/math";
28
27
  export * from "./payload/graphPayload";
29
28
  export * from "./types/index";
30
29
  export * from "./core/strategy";
31
- export type { IDataCompressor, IWETHGateway } from "./types";
32
30
  export { TokenType } from "./tokens/tokenType";
33
31
  export * from "./tokens/token";
34
32
  export * from "./tokens/tokenData";
@@ -43,6 +41,14 @@ export * from "./apy/convexAPY";
43
41
  export * from "./core/history";
44
42
  export * from "./utils/multicall";
45
43
  export * from "./utils/types";
44
+ export * from "./utils/errors";
45
+ export * from "./strategies/convex";
46
+ export * from "./strategies/creditFacade";
47
+ export * from "./strategies/curve";
48
+ export * from "./strategies/lido";
49
+ export * from "./strategies/uniswapV2";
50
+ export * from "./strategies/uniswapV3";
51
+ export * from "./strategies/yearn";
46
52
  export { callRepeater } from "./utils/repeater";
47
53
  export { getContractName } from "./contracts/contractsRegister";
48
54
  export { AdapterInterface } from "./contracts/adapters";
package/lib/index.js CHANGED
@@ -40,7 +40,6 @@ __exportStar(require("./payload/token"), exports);
40
40
  __exportStar(require("./utils/formatter"), exports);
41
41
  __exportStar(require("./utils/loading"), exports);
42
42
  __exportStar(require("./utils/validate"), exports);
43
- __exportStar(require("./utils/events"), exports);
44
43
  __exportStar(require("./utils/math"), exports);
45
44
  __exportStar(require("./payload/graphPayload"), exports);
46
45
  __exportStar(require("./types/index"), exports);
@@ -61,6 +60,14 @@ __exportStar(require("./apy/convexAPY"), exports);
61
60
  __exportStar(require("./core/history"), exports);
62
61
  __exportStar(require("./utils/multicall"), exports);
63
62
  __exportStar(require("./utils/types"), exports);
63
+ __exportStar(require("./utils/errors"), exports);
64
+ __exportStar(require("./strategies/convex"), exports);
65
+ __exportStar(require("./strategies/creditFacade"), exports);
66
+ __exportStar(require("./strategies/curve"), exports);
67
+ __exportStar(require("./strategies/lido"), exports);
68
+ __exportStar(require("./strategies/uniswapV2"), exports);
69
+ __exportStar(require("./strategies/uniswapV3"), exports);
70
+ __exportStar(require("./strategies/yearn"), exports);
64
71
  var repeater_1 = require("./utils/repeater");
65
72
  Object.defineProperty(exports, "callRepeater", { enumerable: true, get: function () { return repeater_1.callRepeater; } });
66
73
  var contractsRegister_1 = require("./contracts/contractsRegister");
@@ -446,7 +446,7 @@ exports.priceFeedsByNetwork = {
446
446
  curveSymbol: "gusd3CRV"
447
447
  }
448
448
  },
449
- //GEARBOX
449
+ // GEARBOX
450
450
  dDAI: {
451
451
  priceFeedETH: {
452
452
  type: oracles_1.OracleType.CHAINLINK_ORACLE,
@@ -1,4 +1,4 @@
1
- import { LPWithdrawPathFinder, Path } from "./path";
1
+ import type { LPWithdrawPathFinder, Path } from "./path";
2
2
  export declare class ConvexLPPathFinder implements LPWithdrawPathFinder {
3
3
  findWithdrawPaths(p: Path): Promise<Array<Path>>;
4
4
  }
@@ -38,40 +38,37 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.ConvexLPPathFinder = void 0;
40
40
  var convex_1 = require("../tokens/convex");
41
+ var mappers_1 = require("../utils/mappers");
41
42
  var ConvexLPPathFinder = /** @class */ (function () {
42
43
  function ConvexLPPathFinder() {
43
44
  }
45
+ // eslint-disable-next-line class-methods-use-this
44
46
  ConvexLPPathFinder.prototype.findWithdrawPaths = function (p) {
45
47
  return __awaiter(this, void 0, void 0, function () {
46
- var pids, _i, _a, _b, cvxToken, tokenData, currentBalance;
47
- return __generator(this, function (_c) {
48
- switch (_c.label) {
49
- case 0:
50
- pids = new Set();
51
- for (_i = 0, _a = Object.entries(convex_1.convexTokens); _i < _a.length; _i++) {
52
- _b = _a[_i], cvxToken = _b[0], tokenData = _b[1];
53
- currentBalance = p.popBalance(cvxToken);
54
- if (currentBalance.gt(1)) {
55
- pids.add(tokenData.pid);
56
- }
57
- }
58
- return [4 /*yield*/, p.withdrawTokens()];
59
- case 1:
60
- // const convexPathFinder = ConvexPathFinder__factory.connect(
61
- // pathFindersByNetwork[p.networkType].CONVEX_PATH_FINDER,
62
- // p.provider
63
- // );
64
- // const tokenBalances = await convexPathFinder.calcRewards(
65
- // p.creditAccount.addr,
66
- // Array.from(pids)
67
- // );
68
- // for (let balance of tokenBalances) {
69
- // p.balances[balance.token] = p.balances[balance.token].add(
70
- // balance.balance
71
- // );
72
- // }
73
- return [2 /*return*/, _c.sent()];
74
- }
48
+ var pids;
49
+ return __generator(this, function (_a) {
50
+ pids = (0, mappers_1.objectEntries)(convex_1.convexTokens).reduce(function (acc, _a) {
51
+ var cvxToken = _a[0], tokenData = _a[1];
52
+ var currentBalance = p.popBalance(cvxToken);
53
+ if (currentBalance.gt(1)) {
54
+ pids.add(tokenData.pid);
55
+ }
56
+ return acc;
57
+ }, new Set());
58
+ // const convexPathFinder = ConvexPathFinder__factory.connect(
59
+ // pathFindersByNetwork[p.networkType].CONVEX_PATH_FINDER,
60
+ // p.provider
61
+ // );
62
+ // const tokenBalances = await convexPathFinder.calcRewards(
63
+ // p.creditAccount.addr,
64
+ // Array.from(pids)
65
+ // );
66
+ // for (let balance of tokenBalances) {
67
+ // p.balances[balance.token] = p.balances[balance.token].add(
68
+ // balance.balance
69
+ // );
70
+ // }
71
+ return [2 /*return*/, p.withdrawTokens()];
75
72
  });
76
73
  });
77
74
  };
@@ -1,4 +1,4 @@
1
- import { LPWithdrawPathFinder, Path } from "./path";
1
+ import type { LPWithdrawPathFinder, Path } from "./path";
2
2
  import { CurveLPToken } from "../tokens/curveLP";
3
3
  import { CurvePoolContract } from "../contracts/contracts";
4
4
  export declare class CurvePathFinder implements LPWithdrawPathFinder {
@@ -45,12 +45,11 @@ var types_1 = require("../types");
45
45
  var CurvePathFinder = /** @class */ (function () {
46
46
  function CurvePathFinder(token) {
47
47
  this.lpToken = token;
48
- var curvePools = curveLP_1.curveTokens[this.lpToken].lpActions.filter(function (a) { return a.type == tradeTypes_1.TradeType.CurveWithdrawLP; });
48
+ var curvePools = curveLP_1.curveTokens[this.lpToken].lpActions.filter(function (a) { return a.type === tradeTypes_1.TradeType.CurveWithdrawLP; });
49
49
  if (curvePools.length !== 1)
50
50
  throw new Error("Cant find Withdrawer");
51
51
  this.contract = curvePools[0].contract;
52
- var wrapper = contracts_1.contractParams[curvePools[0].contract]
53
- .wrapper;
52
+ var wrapper = contracts_1.contractParams[curvePools[0].contract].wrapper;
54
53
  if (wrapper) {
55
54
  this.contract = wrapper;
56
55
  }
@@ -66,9 +65,8 @@ var CurvePathFinder = /** @class */ (function () {
66
65
  lpBalance = p.popBalance(this.lpToken);
67
66
  multiCallContract = new multicall_1.MultiCallContract(contracts_1.contractsByAddress[this.contract], types_1.ICurvePool__factory.createInterface(), p.provider);
68
67
  data = [];
69
- for (i = 0; i < nCoins; i++) {
68
+ for (i = 0; i < nCoins; i += 1) {
70
69
  data.push({
71
- // @ts-ignore
72
70
  method: "calc_withdraw_one_coin(uint256,int128)",
73
71
  params: [lpBalance, i]
74
72
  });
@@ -76,9 +74,9 @@ var CurvePathFinder = /** @class */ (function () {
76
74
  return [4 /*yield*/, multiCallContract.call(data)];
77
75
  case 1:
78
76
  balances = _a.sent();
79
- console.log(balances);
77
+ console.debug(balances);
80
78
  paths = [];
81
- for (i = 0; i < nCoins; i++) {
79
+ for (i = 0; i < nCoins; i += 1) {
82
80
  newPath = p.clone();
83
81
  // newPath.balances[coins[i]] = newPath.balances[coins[i]].add(balances[i]);
84
82
  // newPath.calls.push({
@@ -24,7 +24,7 @@ export declare class Path {
24
24
  totalGasLimit: number;
25
25
  });
26
26
  popBalance(token: SupportedToken): BigNumber;
27
- private comparedByPriority;
27
+ private static comparedByPriority;
28
28
  static findBestPath(creditAccount: CreditAccountData, creditManager: CreditManagerData, provider: ethers.providers.Provider): Promise<void>;
29
29
  withdrawTokens(): Promise<Array<Path>>;
30
30
  clone(): Path;
@@ -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;
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,21 +80,17 @@ 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]));
84
- // !!!!!!!!!
85
- // p.calls.push({
86
- // targetContract:
87
- // p.creditManager.adapters[tokenDataByNetwork[p.networkType][vault]],
88
- // callData:
89
- // IYVault__factory.createInterface().encodeFunctionData("withdraw()")
90
- // });
88
+ tokenAddress = token_1.tokenDataByNetwork[p.networkType][vault];
89
+ adapterAddress = p.creditManager.adapters[tokenAddress];
90
+ callData = types_1.IYVault__factory.createInterface().encodeFunctionData("withdraw()");
91
+ p.calls.push({ target: adapterAddress, callData: callData });
91
92
  }
92
- return [4 /*yield*/, p.withdrawTokens()];
93
- case 2: return [2 /*return*/, _c.sent()];
93
+ return [2 /*return*/, p.withdrawTokens()];
94
94
  }
95
95
  });
96
96
  });
@@ -1,4 +1,4 @@
1
- import { CreditAccountDataStructOutput } from "../types/contracts/core/DataCompressor";
2
- export declare type TokenBalancePayload = CreditAccountDataStructOutput["balances"];
3
- export declare type CreditAccountDataPayload = CreditAccountDataStructOutput;
4
- export declare type CreditAccountDataExtendedPayload = CreditAccountDataStructOutput;
1
+ import { CreditAccountDataStruct } from "../types/contracts/core/DataCompressor";
2
+ export declare type TokenBalancePayload = CreditAccountDataStruct["balances"];
3
+ export declare type CreditAccountDataPayload = CreditAccountDataStruct;
4
+ export declare type CreditAccountDataExtendedPayload = CreditAccountDataStruct;
@@ -1,21 +1,11 @@
1
- import { BigNumberish, BigNumber } from "ethers";
2
- import { CreditManagerDataStructOutput } from "../types/contracts/interfaces/IDataCompressor.sol/IDataCompressor";
1
+ import { BigNumberish } from "ethers";
2
+ import { CreditManagerDataStruct } from "../types/contracts/interfaces/IDataCompressor.sol/IDataCompressor";
3
3
  export interface AdapterPayload {
4
4
  allowedContract: string;
5
5
  adapter: string;
6
6
  }
7
- export declare type CreditManagerDataPayload = CreditManagerDataStructOutput;
7
+ export declare type CreditManagerDataPayload = CreditManagerDataStruct;
8
8
  export interface CreditManagerStatPayload extends CreditManagerDataPayload {
9
- addr: string;
10
- underlyingToken?: string;
11
- isWETH: boolean;
12
- canBorrow: boolean;
13
- borrowRate: BigNumber;
14
- minAmount: BigNumber;
15
- maxAmount: BigNumber;
16
- maxLeverageFactor: BigNumber;
17
- availableLiquidity: BigNumber;
18
- allowedTokens: Array<string>;
19
9
  allowedContracts?: Array<string>;
20
10
  uniqueUsers: number;
21
11
  openedAccountsCount?: number;
@@ -1,2 +1,2 @@
1
- import { PoolDataStructOutput } from "../types/contracts/interfaces/IDataCompressor.sol/IDataCompressor";
2
- export declare type PoolDataPayload = PoolDataStructOutput;
1
+ import { PoolDataStruct } from "../types/contracts/interfaces/IDataCompressor.sol/IDataCompressor";
2
+ export declare type PoolDataPayload = PoolDataStruct;
@@ -1,4 +1,7 @@
1
1
  import { BigNumberish } from "ethers";
2
+ import { ConvexPoolContract } from "src/contracts/contracts";
3
+ import { NetworkType } from "src/core/constants";
4
+ import { CreditManagerData } from "src/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("src/contracts/contracts");
5
+ var token_1 = require("src/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,