@gearbox-protocol/sdk 0.0.100 → 0.0.101

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 (86) hide show
  1. package/lib/apy/convexAPY.d.ts +8 -0
  2. package/lib/apy/convexAPY.js +202 -0
  3. package/lib/apy/lidoAPY.d.ts +4 -0
  4. package/lib/apy/lidoAPY.js +97 -0
  5. package/lib/config.d.ts +1 -0
  6. package/lib/config.js +2 -1
  7. package/lib/contracts/contracts.d.ts +6 -1
  8. package/lib/contracts/contracts.js +51 -13
  9. package/lib/contracts/contractsRegister.js +3 -3
  10. package/lib/core/constants.d.ts +4 -0
  11. package/lib/core/constants.js +8 -4
  12. package/lib/core/creditAccount.d.ts +2 -0
  13. package/lib/core/creditAccount.js +31 -30
  14. package/lib/core/creditManager.d.ts +13 -2
  15. package/lib/core/creditManager.js +79 -29
  16. package/lib/core/errors.d.ts +10 -0
  17. package/lib/core/errors.js +16 -1
  18. package/lib/core/events.js +9 -9
  19. package/lib/core/multicall.d.ts +1 -1
  20. package/lib/core/pool.d.ts +1 -1
  21. package/lib/core/pool.js +7 -5
  22. package/lib/core/price.d.ts +4 -0
  23. package/lib/core/price.js +12 -0
  24. package/lib/core/strategy.d.ts +34 -0
  25. package/lib/core/strategy.js +57 -0
  26. package/lib/index.d.ts +7 -1
  27. package/lib/index.js +8 -3
  28. package/lib/pathfinder/path.js +1 -1
  29. package/lib/pathfinder/yVault.js +7 -4
  30. package/lib/payload/creditAccount.d.ts +4 -26
  31. package/lib/payload/creditManager.d.ts +12 -24
  32. package/lib/payload/pool.d.ts +2 -17
  33. package/lib/payload/pool.js +0 -1
  34. package/lib/tokens/token.js +2 -2
  35. package/lib/utils/formatter.d.ts +1 -0
  36. package/lib/utils/formatter.js +6 -1
  37. package/lib/utils/mappers.d.ts +2 -1
  38. package/lib/utils/mappers.js +13 -5
  39. package/lib/utils/multicall.js +4 -3
  40. package/lib/utils/types.d.ts +1 -0
  41. package/package.json +1 -1
  42. package/src/apy/convexAPY.ts +249 -0
  43. package/src/apy/lidoAPY.ts +81 -0
  44. package/src/config.ts +2 -1
  45. package/src/contracts/contracts.ts +68 -15
  46. package/src/contracts/contractsRegister.ts +3 -3
  47. package/src/core/constants.ts +7 -3
  48. package/src/core/creditAccount.ts +39 -33
  49. package/src/core/creditManager.ts +230 -148
  50. package/src/core/errors.ts +24 -0
  51. package/src/core/events.ts +921 -915
  52. package/src/core/multicall.ts +1 -1
  53. package/src/core/pool.ts +56 -51
  54. package/src/core/price.ts +16 -0
  55. package/src/core/strategy.ts +123 -0
  56. package/src/index.ts +8 -1
  57. package/src/pathfinder/path.ts +154 -154
  58. package/src/pathfinder/yVault.ts +57 -56
  59. package/src/payload/creditAccount.ts +4 -26
  60. package/src/payload/creditManager.ts +13 -25
  61. package/src/payload/pool.ts +2 -19
  62. package/src/tokens/token.ts +8 -3
  63. package/src/utils/formatter.ts +5 -1
  64. package/src/utils/mappers.ts +12 -5
  65. package/src/utils/multicall.ts +4 -9
  66. package/src/utils/types.ts +6 -2
  67. package/lib/core/adapters.d.ts +0 -15
  68. package/lib/core/adapters.js +0 -19
  69. package/lib/core/contracts.d.ts +0 -67
  70. package/lib/core/contracts.js +0 -254
  71. package/lib/core/contractsRegister.d.ts +0 -2
  72. package/lib/core/contractsRegister.js +0 -58
  73. package/lib/core/creditCard.d.ts +0 -13
  74. package/lib/core/creditCard.js +0 -2
  75. package/lib/core/oracles.d.ts +0 -38
  76. package/lib/core/oracles.js +0 -12
  77. package/lib/core/priceFeeds.d.ts +0 -3
  78. package/lib/core/priceFeeds.js +0 -492
  79. package/lib/core/protocols.d.ts +0 -13
  80. package/lib/core/protocols.js +0 -39
  81. package/lib/core/swap.d.ts +0 -4
  82. package/lib/core/swap.js +0 -8
  83. package/lib/core/trade.d.ts +0 -35
  84. package/lib/core/trade.js +0 -62
  85. package/lib/core/tradeTypes.d.ts +0 -79
  86. package/lib/core/tradeTypes.js +0 -21
@@ -0,0 +1,8 @@
1
+ import { BigNumber, providers } from "ethers";
2
+ import { ConvexPoolContract } from "../contracts/contracts";
3
+ import { CurveLPToken } from "../tokens/curveLP";
4
+ import { NetworkType } from "../core/constants";
5
+ declare type SupportedPools = Extract<ConvexPoolContract, "CONVEX_3CRV_POOL" | "CONVEX_FRAX3CRV_POOL" | "CONVEX_LUSD3CRV_POOL" | "CONVEX_GUSD_POOL" | "CONVEX_SUSD_POOL">;
6
+ export declare function getConvexApy(pool: SupportedPools, provider: providers.Provider, networkType: NetworkType, getTokenPrice: (tokenAddress: string) => BigNumber): Promise<BigNumber>;
7
+ export declare function getCurveBaseApy(curveLPToken: CurveLPToken): Promise<BigNumber>;
8
+ export {};
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
39
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
40
+ if (ar || !(i in from)) {
41
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
42
+ ar[i] = from[i];
43
+ }
44
+ }
45
+ return to.concat(ar || Array.prototype.slice.call(from));
46
+ };
47
+ var __importDefault = (this && this.__importDefault) || function (mod) {
48
+ return (mod && mod.__esModule) ? mod : { "default": mod };
49
+ };
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ exports.getCurveBaseApy = exports.getConvexApy = void 0;
52
+ var ethers_1 = require("ethers");
53
+ var axios_1 = __importDefault(require("axios"));
54
+ var contracts_1 = require("../contracts/contracts");
55
+ var token_1 = require("../tokens/token");
56
+ var types_1 = require("../types");
57
+ var multicall_1 = require("../utils/multicall");
58
+ var formatter_1 = require("../utils/formatter");
59
+ var constants_1 = require("../core/constants");
60
+ var curveSwapByPool = {
61
+ CONVEX_3CRV_POOL: "CURVE_3CRV_POOL",
62
+ CONVEX_FRAX3CRV_POOL: "CURVE_FRAX_POOL",
63
+ CONVEX_LUSD3CRV_POOL: "CURVE_LUSD_POOL",
64
+ CONVEX_GUSD_POOL: "CURVE_GUSD_POOL",
65
+ CONVEX_SUSD_POOL: "CURVE_SUSD_POOL"
66
+ };
67
+ function getConvexApy(pool, provider, networkType, getTokenPrice) {
68
+ return __awaiter(this, void 0, void 0, function () {
69
+ var tokenList, contractsList, poolParams, stakedTokenParams, underlying, basePoolAddress, swapPoolAddress, cvxAddress, extraPoolAddresses, _a, basePoolRate, basePoolSupply, vPrice, cvxSupply, extra, cvxPrice, crvPrice, crvPerSecond, virtualSupply, crvPerUnderlying, crvPerYear, cvxPerYear, crvAPY, cvxAPY, extraAPRs, extraAPYTotal, baseApyRAY;
70
+ var _this = this;
71
+ return __generator(this, function (_b) {
72
+ switch (_b.label) {
73
+ case 0:
74
+ tokenList = token_1.tokenDataByNetwork[networkType];
75
+ contractsList = contracts_1.contractsByNetwork[networkType];
76
+ poolParams = contracts_1.contractParams[pool];
77
+ stakedTokenParams = token_1.supportedTokens[poolParams.stakedToken];
78
+ underlying = stakedTokenParams.underlying;
79
+ basePoolAddress = contractsList[pool];
80
+ swapPoolAddress = contractsList[curveSwapByPool[pool]];
81
+ cvxAddress = tokenList.CVX;
82
+ extraPoolAddresses = poolParams.extraRewards.map(function (d) {
83
+ return d.poolAddress[networkType];
84
+ });
85
+ return [4 /*yield*/, getPoolData(basePoolAddress, swapPoolAddress, cvxAddress, extraPoolAddresses, provider)];
86
+ case 1:
87
+ _a = _b.sent(), basePoolRate = _a[0], basePoolSupply = _a[1], vPrice = _a[2], cvxSupply = _a[3], extra = _a.slice(4);
88
+ cvxPrice = getTokenPrice(tokenList["CVX"]);
89
+ crvPrice = getTokenPrice(tokenList["CRV"]);
90
+ crvPerSecond = basePoolRate;
91
+ virtualSupply = basePoolSupply.mul(vPrice).div(constants_1.WAD);
92
+ crvPerUnderlying = crvPerSecond.mul(constants_1.WAD).div(virtualSupply);
93
+ crvPerYear = crvPerUnderlying.mul(constants_1.SECONDS_PER_YEAR);
94
+ cvxPerYear = getCVXMintAmount(crvPerYear, cvxSupply);
95
+ crvAPY = crvPerYear.mul(cvxPrice).div(constants_1.WAD);
96
+ cvxAPY = cvxPerYear.mul(crvPrice).div(constants_1.WAD);
97
+ return [4 /*yield*/, Promise.all(extraPoolAddresses.map(function (_, index) { return __awaiter(_this, void 0, void 0, function () {
98
+ var extraRewardSymbol, extraPoolRate, perUnderlying, perYear, extraPrise, extraAPY;
99
+ return __generator(this, function (_a) {
100
+ extraRewardSymbol = poolParams.extraRewards[index].rewardToken;
101
+ extraPoolRate = extra[index];
102
+ perUnderlying = extraPoolRate.mul(constants_1.WAD).div(virtualSupply);
103
+ perYear = perUnderlying.mul(constants_1.SECONDS_PER_YEAR);
104
+ extraPrise = getTokenPrice(tokenList[extraRewardSymbol]);
105
+ extraAPY = perYear.mul(extraPrise).div(constants_1.WAD);
106
+ return [2 /*return*/, extraAPY];
107
+ });
108
+ }); }))];
109
+ case 2:
110
+ extraAPRs = _b.sent();
111
+ extraAPYTotal = extraAPRs.reduce(function (acc, apy) { return acc.add(apy); }, ethers_1.BigNumber.from(0));
112
+ return [4 /*yield*/, getCurveBaseApy(underlying)];
113
+ case 3:
114
+ baseApyRAY = _b.sent();
115
+ return [2 /*return*/, baseApyRAY.add(crvAPY).add(cvxAPY).add(extraAPYTotal)];
116
+ }
117
+ });
118
+ });
119
+ }
120
+ exports.getConvexApy = getConvexApy;
121
+ var CVX_MAX_SUPPLY = constants_1.WAD.mul(100000000);
122
+ var CVX_REDUCTION_PER_CLIFF = ethers_1.BigNumber.from(100000);
123
+ var CVX_TOTAL_CLIFFS = constants_1.WAD.mul(1000);
124
+ function getCVXMintAmount(crvAmount, cvxSupply) {
125
+ var currentCliff = cvxSupply.div(CVX_REDUCTION_PER_CLIFF);
126
+ if (currentCliff.lt(CVX_TOTAL_CLIFFS)) {
127
+ var remainingCliffs = CVX_TOTAL_CLIFFS.sub(currentCliff);
128
+ var mintedAmount = crvAmount.mul(remainingCliffs).div(CVX_TOTAL_CLIFFS);
129
+ var amountTillMax = CVX_MAX_SUPPLY.sub(cvxSupply);
130
+ return mintedAmount.gt(amountTillMax) ? amountTillMax : mintedAmount;
131
+ }
132
+ return ethers_1.BigNumber.from(0);
133
+ }
134
+ function getPoolData(basePoolAddress, underlying, cvxAddress, extraPoolAddresses, provider) {
135
+ return __awaiter(this, void 0, void 0, function () {
136
+ var calls;
137
+ return __generator(this, function (_a) {
138
+ calls = __spreadArray([
139
+ {
140
+ address: basePoolAddress,
141
+ interface: types_1.IBaseRewardPool__factory.createInterface(),
142
+ method: "rewardRate()"
143
+ },
144
+ {
145
+ address: basePoolAddress,
146
+ interface: types_1.IBaseRewardPool__factory.createInterface(),
147
+ method: "totalSupply()"
148
+ },
149
+ {
150
+ address: underlying,
151
+ interface: types_1.CurveV1AdapterStETH__factory.createInterface(),
152
+ method: "get_virtual_price()"
153
+ },
154
+ {
155
+ address: cvxAddress,
156
+ interface: types_1.IConvexToken__factory.createInterface(),
157
+ method: "totalSupply()"
158
+ }
159
+ ], extraPoolAddresses.map(function (extraPoolAddress) { return ({
160
+ address: extraPoolAddress,
161
+ interface: types_1.IBaseRewardPool__factory.createInterface(),
162
+ method: "rewardRate()"
163
+ }); }), true);
164
+ return [2 /*return*/, (0, multicall_1.multicall)(calls, provider)];
165
+ });
166
+ });
167
+ }
168
+ var curveLPTokenToPoolName = {
169
+ "3Crv": "3pool",
170
+ FRAX3CRV: "frax",
171
+ gusd3CRV: "gusd",
172
+ LUSD3CRV: "lusd",
173
+ crvPlain3andSUSD: "susdv2",
174
+ steCRV: "steth"
175
+ };
176
+ var RESPONSE_DECIMALS = 100;
177
+ // https://www.convexfinance.com/api/curve-apys
178
+ function getCurveBaseApy(curveLPToken) {
179
+ return __awaiter(this, void 0, void 0, function () {
180
+ var poolName, url, result, _a, baseApy, e_1;
181
+ return __generator(this, function (_b) {
182
+ switch (_b.label) {
183
+ case 0:
184
+ poolName = curveLPTokenToPoolName[curveLPToken];
185
+ _b.label = 1;
186
+ case 1:
187
+ _b.trys.push([1, 3, , 4]);
188
+ url = "https://www.convexfinance.com/api/curve-apys";
189
+ return [4 /*yield*/, axios_1.default.get(url)];
190
+ case 2:
191
+ result = _b.sent();
192
+ _a = (result.data.apys[poolName] || {}).baseApy, baseApy = _a === void 0 ? 0 : _a;
193
+ return [2 /*return*/, (0, formatter_1.toBN)((baseApy / RESPONSE_DECIMALS).toString(), constants_1.WAD_DECIMALS)];
194
+ case 3:
195
+ e_1 = _b.sent();
196
+ return [2 /*return*/, ethers_1.BigNumber.from(0)];
197
+ case 4: return [2 /*return*/];
198
+ }
199
+ });
200
+ });
201
+ }
202
+ exports.getCurveBaseApy = getCurveBaseApy;
@@ -0,0 +1,4 @@
1
+ import { providers } from "ethers";
2
+ import { NetworkType } from "../core/constants";
3
+ export declare function getLidoApy(provider: providers.Provider, networkType: NetworkType): Promise<readonly [import("ethers").BigNumber, number]>;
4
+ export declare const LIDO_FEE_DECIMALS = 10000;
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.LIDO_FEE_DECIMALS = exports.getLidoApy = void 0;
40
+ var multicall_1 = require("../utils/multicall");
41
+ var constants_1 = require("../core/constants");
42
+ var types_1 = require("../types");
43
+ var lidoOracleAddress = {
44
+ Mainnet: "0x442af784A788A5bd6F42A01Ebe9F287a871243fb",
45
+ Kovan: ""
46
+ };
47
+ var lidoStEthAddress = {
48
+ Mainnet: "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84",
49
+ Kovan: ""
50
+ };
51
+ function getLidoApy(provider, networkType) {
52
+ return __awaiter(this, void 0, void 0, function () {
53
+ var _a, _b, postTotalPooledEther, preTotalPooledEther, timeElapsed, fee, lidoAPRRay;
54
+ return __generator(this, function (_c) {
55
+ switch (_c.label) {
56
+ case 0:
57
+ if (!lidoOracleAddress[networkType]) {
58
+ throw "No Lido APR oracle found on current network: ".concat(networkType);
59
+ }
60
+ if (!lidoStEthAddress[networkType]) {
61
+ throw "No Lido stETH found on current network: ".concat(networkType);
62
+ }
63
+ return [4 /*yield*/, geLidoData(lidoOracleAddress[networkType], lidoStEthAddress[networkType], provider)];
64
+ case 1:
65
+ _a = _c.sent(), _b = _a[0], postTotalPooledEther = _b.postTotalPooledEther, preTotalPooledEther = _b.preTotalPooledEther, timeElapsed = _b.timeElapsed, fee = _a[1];
66
+ lidoAPRRay = postTotalPooledEther
67
+ .sub(preTotalPooledEther)
68
+ .mul(constants_1.SECONDS_PER_YEAR)
69
+ .mul(constants_1.WAD)
70
+ .div(preTotalPooledEther.mul(timeElapsed));
71
+ return [2 /*return*/, [lidoAPRRay, fee]];
72
+ }
73
+ });
74
+ });
75
+ }
76
+ exports.getLidoApy = getLidoApy;
77
+ function geLidoData(lidoOracleAddress, stETHAddress, provider) {
78
+ return __awaiter(this, void 0, void 0, function () {
79
+ var calls;
80
+ return __generator(this, function (_a) {
81
+ calls = [
82
+ {
83
+ address: lidoOracleAddress,
84
+ interface: types_1.ILidoOracle__factory.createInterface(),
85
+ method: "getLastCompletedReportDelta()"
86
+ },
87
+ {
88
+ address: stETHAddress,
89
+ interface: types_1.IstETH__factory.createInterface(),
90
+ method: "getFee()"
91
+ }
92
+ ];
93
+ return [2 /*return*/, (0, multicall_1.multicall)(calls, provider)];
94
+ });
95
+ });
96
+ }
97
+ exports.LIDO_FEE_DECIMALS = 10000;
package/lib/config.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare const STATIC_TOKEN = "https://static.gearbox.fi/tokens/";
2
+ export declare const MULTICALL_ADDRESS = "0x5ba1e12693dc8f9c48aad8770482f4739beed696";
package/lib/config.js CHANGED
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.STATIC_TOKEN = void 0;
3
+ exports.MULTICALL_ADDRESS = exports.STATIC_TOKEN = void 0;
4
4
  exports.STATIC_TOKEN = "https://static.gearbox.fi/tokens/";
5
+ exports.MULTICALL_ADDRESS = "0x5ba1e12693dc8f9c48aad8770482f4739beed696";
@@ -44,10 +44,15 @@ declare type ConvexParams = {
44
44
  protocol: Protocols.Convex;
45
45
  type: AdapterInterface.CONVEX_V1_BOOSTER | AdapterInterface.CONVEX_V1_CLAIM_ZAP;
46
46
  } & BaseContractParams;
47
- declare type ConvexPoolParams = {
47
+ declare type ConvexExtraPoolParams = {
48
+ rewardToken: NormalToken;
49
+ poolAddress: Record<NetworkType, string>;
50
+ };
51
+ export declare type ConvexPoolParams = {
48
52
  protocol: Protocols.Convex;
49
53
  type: AdapterInterface.CONVEX_V1_BASE_REWARD_POOL;
50
54
  stakedToken: ConvexStakedPhantomToken;
55
+ extraRewards: Array<ConvexExtraPoolParams>;
51
56
  } & BaseContractParams;
52
57
  export declare type LidoParams = {
53
58
  protocol: Protocols.Lido;
@@ -197,46 +197,84 @@ exports.contractParams = {
197
197
  protocol: protocols_1.Protocols.Convex,
198
198
  type: adapters_1.AdapterInterface.CONVEX_V1_BOOSTER
199
199
  },
200
+ CONVEX_CLAIM_ZAP: {
201
+ name: "Convex ZAP",
202
+ protocol: protocols_1.Protocols.Convex,
203
+ type: adapters_1.AdapterInterface.CONVEX_V1_CLAIM_ZAP
204
+ },
200
205
  CONVEX_3CRV_POOL: {
201
206
  name: "Convex 3crv",
202
207
  protocol: protocols_1.Protocols.Convex,
203
208
  type: adapters_1.AdapterInterface.CONVEX_V1_BASE_REWARD_POOL,
204
- stakedToken: "stkcvx3Crv"
209
+ stakedToken: "stkcvx3Crv",
210
+ extraRewards: []
205
211
  },
206
212
  CONVEX_GUSD_POOL: {
207
213
  name: "Convex GUSD",
208
214
  protocol: protocols_1.Protocols.Convex,
209
215
  type: adapters_1.AdapterInterface.CONVEX_V1_BASE_REWARD_POOL,
210
- stakedToken: "stkcvxgusd3CRV"
216
+ stakedToken: "stkcvxgusd3CRV",
217
+ extraRewards: []
211
218
  },
212
219
  CONVEX_SUSD_POOL: {
213
220
  name: "Convex SUSD",
214
221
  protocol: protocols_1.Protocols.Convex,
215
222
  type: adapters_1.AdapterInterface.CONVEX_V1_BASE_REWARD_POOL,
216
- stakedToken: "stkcvxcrvPlain3andSUSD"
223
+ stakedToken: "stkcvxcrvPlain3andSUSD",
224
+ extraRewards: [
225
+ {
226
+ rewardToken: "SNX",
227
+ poolAddress: {
228
+ Mainnet: "0x81fCe3E10D12Da6c7266a1A169c4C96813435263",
229
+ Kovan: "0x26a535146557FA58FA37e3078FEAc523b554939C"
230
+ }
231
+ }
232
+ ]
217
233
  },
218
234
  CONVEX_STECRV_POOL: {
219
235
  name: "Convex STECRV",
220
236
  protocol: protocols_1.Protocols.Convex,
221
237
  type: adapters_1.AdapterInterface.CONVEX_V1_BASE_REWARD_POOL,
222
- stakedToken: "stkcvxsteCRV"
238
+ stakedToken: "stkcvxsteCRV",
239
+ extraRewards: [
240
+ {
241
+ rewardToken: "LDO",
242
+ poolAddress: {
243
+ Mainnet: "0x008aEa5036b819B4FEAEd10b2190FBb3954981E8",
244
+ Kovan: "0xd0B1CC3B4839363b1eC92F35eF45794CB07B1183"
245
+ }
246
+ }
247
+ ]
223
248
  },
224
249
  CONVEX_FRAX3CRV_POOL: {
225
250
  name: "Convex FRAX3CRV",
226
251
  protocol: protocols_1.Protocols.Convex,
227
252
  type: adapters_1.AdapterInterface.CONVEX_V1_BASE_REWARD_POOL,
228
- stakedToken: "stkcvxFRAX3CRV"
253
+ stakedToken: "stkcvxFRAX3CRV",
254
+ extraRewards: [
255
+ {
256
+ rewardToken: "FXS",
257
+ poolAddress: {
258
+ Mainnet: "0xcDEC6714eB482f28f4889A0c122868450CDBF0b0",
259
+ Kovan: "0x89869c2e79FC6EFf51e714F1239D53702B5CDFCD"
260
+ }
261
+ }
262
+ ]
229
263
  },
230
264
  CONVEX_LUSD3CRV_POOL: {
231
265
  name: "Convex LUSD3CRV",
232
266
  protocol: protocols_1.Protocols.Convex,
233
267
  type: adapters_1.AdapterInterface.CONVEX_V1_BASE_REWARD_POOL,
234
- stakedToken: "stkcvxLUSD3CRV"
235
- },
236
- CONVEX_CLAIM_ZAP: {
237
- name: "Convex ZAP",
238
- protocol: protocols_1.Protocols.Convex,
239
- type: adapters_1.AdapterInterface.CONVEX_V1_CLAIM_ZAP
268
+ stakedToken: "stkcvxLUSD3CRV",
269
+ extraRewards: [
270
+ {
271
+ rewardToken: "LQTY",
272
+ poolAddress: {
273
+ Mainnet: "0x55d59b791f06dc519B176791c4E037E8Cf2f6361",
274
+ Kovan: ""
275
+ }
276
+ }
277
+ ]
240
278
  },
241
279
  LIDO_STETH_GATEWAY: {
242
280
  name: "Lido STETH",
@@ -249,7 +287,7 @@ exports.contractParams = {
249
287
  lpToken: "steCRV"
250
288
  }
251
289
  };
252
- exports.contractsByAddress = (0, mappers_1.objectEntries)(exports.contractsByNetwork).reduce(function (sum, _a) {
290
+ exports.contractsByAddress = (0, mappers_1.objectEntries)(exports.contractsByNetwork).reduce(function (acc, _a) {
253
291
  var _ = _a[0], contracts = _a[1];
254
- return __assign(__assign({}, sum), (0, mappers_1.keyToLowercase)((0, mappers_1.swapKeyValue)(contracts)));
292
+ return __assign(__assign({}, acc), (0, mappers_1.filterEmptyKeys)((0, mappers_1.keyToLowercase)((0, mappers_1.swapKeyValue)(contracts))));
255
293
  }, {});
@@ -43,13 +43,13 @@ exports.deployedContracts = {
43
43
  // [YEARN_USDC_VAULT_KOVAN_MOCK]: "Yearn USDC",
44
44
  // [SUSHISWAP_KOVAN]: "Sushiswap"
45
45
  };
46
- var contractNames = Object.entries(contracts_1.contractsByAddress).reduce(function (sum, _a) {
46
+ var contractNames = Object.entries(contracts_1.contractsByAddress).reduce(function (acc, _a) {
47
47
  var _b;
48
48
  var addr = _a[0], cSymbol = _a[1];
49
49
  var params = contracts_1.contractParams[cSymbol];
50
50
  if (!params)
51
- return sum;
52
- return __assign(__assign({}, sum), (_b = {}, _b[addr] = params.name, _b));
51
+ return acc;
52
+ return __assign(__assign({}, acc), (_b = {}, _b[addr] = params.name, _b));
53
53
  }, {});
54
54
  var contractsFullList = __assign(__assign({}, (0, mappers_1.keyToLowercase)(exports.deployedContracts)), contractNames);
55
55
  function getContractName(address) {
@@ -5,13 +5,17 @@ export declare const KOVAN_NETWORK = 42;
5
5
  export declare const LOCAL_NETWORK = 1337;
6
6
  export declare type NetworkType = "Mainnet" | "Kovan";
7
7
  export declare const getNetworkType: (chainId: number) => NetworkType;
8
+ export declare const RAY_DECIMALS = 27;
8
9
  export declare const RAY: BigNumber;
9
10
  export declare const halfRAY: BigNumber;
11
+ export declare const WAD_DECIMALS = 18;
10
12
  export declare const WAD: BigNumber;
11
13
  export declare const SECONDS_PER_YEAR: number;
14
+ export declare const PERCENTAGE_DECIMALS = 100;
12
15
  export declare const PERCENTAGE_FACTOR = 10000;
13
16
  export declare const LIQUIDATION_DISCOUNTED_SUM = 9500;
14
17
  export declare const UNDERLYING_TOKEN_LIQUIDATION_THRESHOLD = 9300;
15
18
  export declare const timeRanges: Record<string, number>;
16
19
  export declare const LEVERAGE_DECIMALS = 100;
20
+ export declare const SLIPPAGE_DECIMALS = 100;
17
21
  export declare const ADDRESS_0x0 = "0x0000000000000000000000000000000000000000";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ADDRESS_0x0 = exports.LEVERAGE_DECIMALS = exports.timeRanges = exports.UNDERLYING_TOKEN_LIQUIDATION_THRESHOLD = exports.LIQUIDATION_DISCOUNTED_SUM = exports.PERCENTAGE_FACTOR = exports.SECONDS_PER_YEAR = exports.WAD = exports.halfRAY = exports.RAY = exports.getNetworkType = exports.LOCAL_NETWORK = exports.KOVAN_NETWORK = exports.MAINNET_NETWORK = exports.MAX_INT = void 0;
3
+ exports.ADDRESS_0x0 = exports.SLIPPAGE_DECIMALS = exports.LEVERAGE_DECIMALS = exports.timeRanges = exports.UNDERLYING_TOKEN_LIQUIDATION_THRESHOLD = exports.LIQUIDATION_DISCOUNTED_SUM = exports.PERCENTAGE_FACTOR = exports.PERCENTAGE_DECIMALS = exports.SECONDS_PER_YEAR = exports.WAD = exports.WAD_DECIMALS = exports.halfRAY = exports.RAY = exports.RAY_DECIMALS = exports.getNetworkType = exports.LOCAL_NETWORK = exports.KOVAN_NETWORK = exports.MAINNET_NETWORK = exports.MAX_INT = void 0;
4
4
  var ethers_1 = require("ethers");
5
5
  exports.MAX_INT = ethers_1.BigNumber.from("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
6
6
  exports.MAINNET_NETWORK = 1;
@@ -18,10 +18,13 @@ var getNetworkType = function (chainId) {
18
18
  }
19
19
  };
20
20
  exports.getNetworkType = getNetworkType;
21
- exports.RAY = ethers_1.BigNumber.from(10).pow(27);
21
+ exports.RAY_DECIMALS = 27;
22
+ exports.RAY = ethers_1.BigNumber.from(10).pow(exports.RAY_DECIMALS);
22
23
  exports.halfRAY = exports.RAY.div(2);
23
- exports.WAD = ethers_1.BigNumber.from(10).pow(18);
24
+ exports.WAD_DECIMALS = 18;
25
+ exports.WAD = ethers_1.BigNumber.from(10).pow(exports.WAD_DECIMALS);
24
26
  exports.SECONDS_PER_YEAR = 365 * 24 * 3600;
27
+ exports.PERCENTAGE_DECIMALS = 100;
25
28
  exports.PERCENTAGE_FACTOR = 1e4;
26
29
  exports.LIQUIDATION_DISCOUNTED_SUM = 9500;
27
30
  exports.UNDERLYING_TOKEN_LIQUIDATION_THRESHOLD = 9300;
@@ -30,7 +33,8 @@ exports.timeRanges = {
30
33
  "1D": 3600 * 24,
31
34
  "1W": 3600 * 24 * 7,
32
35
  "1M": 3600 * 24 * 30,
33
- "1Y": 3600 * 24 * 365,
36
+ "1Y": 3600 * 24 * 365
34
37
  };
35
38
  exports.LEVERAGE_DECIMALS = 100;
39
+ exports.SLIPPAGE_DECIMALS = 100;
36
40
  exports.ADDRESS_0x0 = "0x0000000000000000000000000000000000000000";
@@ -25,6 +25,8 @@ export declare class CreditAccountData {
25
25
  constructor(payload: CreditAccountDataPayload);
26
26
  balancesSorted(prices: Record<string, number>, tokens: Record<string, TokenData>): Array<Balance>;
27
27
  }
28
+ export declare function sortBalances(balances: Record<string, BigNumber>, prices: Record<string, number>, tokens: Record<string, TokenData>): [string, BigNumber][];
29
+ export declare function tokensAbcComparator(t1?: TokenData, t2?: TokenData): 1 | -1;
28
30
  export declare class CreditAccountDataExtended extends CreditAccountData {
29
31
  readonly repayAmount: BigNumber;
30
32
  readonly liquidationAmount: BigNumber;
@@ -15,9 +15,10 @@ var __extends = (this && this.__extends) || (function () {
15
15
  };
16
16
  })();
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.CreditAccountDataExtended = exports.CreditAccountData = void 0;
18
+ exports.CreditAccountDataExtended = exports.tokensAbcComparator = exports.sortBalances = exports.CreditAccountData = void 0;
19
19
  var ethers_1 = require("ethers");
20
20
  var constants_1 = require("./constants");
21
+ var price_1 = require("./price");
21
22
  var CreditAccountData = /** @class */ (function () {
22
23
  function CreditAccountData(payload) {
23
24
  var _this = this;
@@ -31,7 +32,7 @@ var CreditAccountData = /** @class */ (function () {
31
32
  this.borrower = payload.borrower;
32
33
  this.inUse = payload.inUse;
33
34
  this.creditManager = payload.creditManager;
34
- this.underlyingToken = payload.underlyingToken;
35
+ this.underlyingToken = payload.underlying;
35
36
  this.borrowedAmountPlusInterest = ethers_1.BigNumber.from(payload.borrowedAmountPlusInterest);
36
37
  this.totalValue = ethers_1.BigNumber.from(payload.totalValue);
37
38
  this.healthFactor =
@@ -39,7 +40,7 @@ var CreditAccountData = /** @class */ (function () {
39
40
  this.borrowRate =
40
41
  ethers_1.BigNumber.from(payload.borrowRate)
41
42
  .mul(constants_1.PERCENTAGE_FACTOR)
42
- .mul(100)
43
+ .mul(constants_1.PERCENTAGE_DECIMALS)
43
44
  .div(constants_1.RAY)
44
45
  .toNumber() / constants_1.PERCENTAGE_FACTOR;
45
46
  (payload.balances || []).forEach(function (b) {
@@ -53,34 +54,8 @@ var CreditAccountData = /** @class */ (function () {
53
54
  this.isDeleting = false;
54
55
  }
55
56
  CreditAccountData.prototype.balancesSorted = function (prices, tokens) {
56
- var priceCalc = function (addr, amount) {
57
- var price = prices[addr] || 0;
58
- var _a = (tokens[addr] || {}).decimals, decimals = _a === void 0 ? 18 : _a;
59
- return amount
60
- .mul(Math.floor(1000 * price))
61
- .div(ethers_1.BigNumber.from(10).pow(decimals));
62
- };
63
- var tokensAbcComparator = function (t1, t2) {
64
- var _a = (t1 || {}).symbol, symbol1 = _a === void 0 ? "" : _a;
65
- var _b = (t2 || {}).symbol, symbol2 = _b === void 0 ? "" : _b;
66
- return symbol1 > symbol2 ? 1 : -1;
67
- };
68
57
  var safeBalances = this.balances || [];
69
- return Object.entries(safeBalances)
70
- .sort(function (_a, _b) {
71
- var addr1 = _a[0], amount1 = _a[1];
72
- var addr2 = _b[0], amount2 = _b[1];
73
- var addr1Lc = addr1.toLowerCase();
74
- var addr2Lc = addr2.toLowerCase();
75
- var price1 = priceCalc(addr1Lc, amount1);
76
- var price2 = priceCalc(addr2Lc, amount2);
77
- return price1.eq(price2)
78
- ? tokensAbcComparator(tokens[addr1Lc], tokens[addr2Lc])
79
- : price1.gt(price2)
80
- ? -1
81
- : 1;
82
- })
83
- .map(function (_a) {
58
+ return sortBalances(safeBalances, prices, tokens).map(function (_a) {
84
59
  var address = _a[0], balance = _a[1];
85
60
  return ({ address: address, balance: balance });
86
61
  });
@@ -88,6 +63,32 @@ var CreditAccountData = /** @class */ (function () {
88
63
  return CreditAccountData;
89
64
  }());
90
65
  exports.CreditAccountData = CreditAccountData;
66
+ function sortBalances(balances, prices, tokens) {
67
+ return Object.entries(balances).sort(function (_a, _b) {
68
+ var addr1 = _a[0], amount1 = _a[1];
69
+ var addr2 = _b[0], amount2 = _b[1];
70
+ var addr1Lc = addr1.toLowerCase();
71
+ var addr2Lc = addr2.toLowerCase();
72
+ var token1 = tokens[addr1Lc];
73
+ var token2 = tokens[addr2Lc];
74
+ var price1 = prices[addr1Lc] || 1;
75
+ var price2 = prices[addr2Lc] || 1;
76
+ var assetValue1 = (0, price_1.priceCalc)(price1, amount1, token1);
77
+ var assetValue2 = (0, price_1.priceCalc)(price2, amount2, token2);
78
+ return assetValue1.eq(assetValue2)
79
+ ? tokensAbcComparator(token1, token2)
80
+ : assetValue1.gt(assetValue2)
81
+ ? -1
82
+ : 1;
83
+ });
84
+ }
85
+ exports.sortBalances = sortBalances;
86
+ function tokensAbcComparator(t1, t2) {
87
+ var _a = (t1 || {}).symbol, symbol1 = _a === void 0 ? "" : _a;
88
+ var _b = (t2 || {}).symbol, symbol2 = _b === void 0 ? "" : _b;
89
+ return symbol1 > symbol2 ? 1 : -1;
90
+ }
91
+ exports.tokensAbcComparator = tokensAbcComparator;
91
92
  var CreditAccountDataExtended = /** @class */ (function (_super) {
92
93
  __extends(CreditAccountDataExtended, _super);
93
94
  function CreditAccountDataExtended(payload) {