@gearbox-protocol/sdk 1.7.12 → 1.8.0

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.
@@ -10,3 +10,4 @@ export interface GetConvexAPYProps {
10
10
  curveAPY: CurveAPYResult;
11
11
  }
12
12
  export declare function getConvexAPY({ pool, provider, networkType, getTokenPrice, curveAPY, }: GetConvexAPYProps): Promise<BigNumber>;
13
+ export declare function getCVXMintAmount(crvAmount: BigNumber, cvxSupply: BigNumber): BigNumber;
@@ -45,7 +45,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
45
45
  return to.concat(ar || Array.prototype.slice.call(from));
46
46
  };
47
47
  Object.defineProperty(exports, "__esModule", { value: true });
48
- exports.getConvexAPY = void 0;
48
+ exports.getCVXMintAmount = exports.getConvexAPY = void 0;
49
49
  var ethers_1 = require("ethers");
50
50
  var contracts_1 = require("../contracts/contracts");
51
51
  var constants_1 = require("../core/constants");
@@ -123,6 +123,7 @@ function getCVXMintAmount(crvAmount, cvxSupply) {
123
123
  }
124
124
  return ethers_1.BigNumber.from(0);
125
125
  }
126
+ exports.getCVXMintAmount = getCVXMintAmount;
126
127
  function getPoolData(_a) {
127
128
  var basePoolAddress = _a.basePoolAddress, swapPoolAddress = _a.swapPoolAddress, cvxAddress = _a.cvxAddress, extraPoolAddresses = _a.extraPoolAddresses, provider = _a.provider;
128
129
  return __awaiter(this, void 0, void 0, function () {
@@ -13,5 +13,6 @@ export declare enum AdapterInterface {
13
13
  CONVEX_V1_BOOSTER = 11,
14
14
  CONVEX_V1_CLAIM_ZAP = 12,
15
15
  LIDO_V1 = 13,
16
- UNIVERSAL = 14
16
+ UNIVERSAL = 14,
17
+ LIDO_WSTETH = 15
17
18
  }
@@ -18,4 +18,5 @@ var AdapterInterface;
18
18
  AdapterInterface[AdapterInterface["CONVEX_V1_CLAIM_ZAP"] = 12] = "CONVEX_V1_CLAIM_ZAP";
19
19
  AdapterInterface[AdapterInterface["LIDO_V1"] = 13] = "LIDO_V1";
20
20
  AdapterInterface[AdapterInterface["UNIVERSAL"] = 14] = "UNIVERSAL";
21
+ AdapterInterface[AdapterInterface["LIDO_WSTETH"] = 15] = "LIDO_WSTETH";
21
22
  })(AdapterInterface = exports.AdapterInterface || (exports.AdapterInterface = {}));
@@ -23,3 +23,6 @@ export declare const LEVERAGE_DECIMALS = 100;
23
23
  export declare const SLIPPAGE_DECIMALS = 100;
24
24
  export declare const ADDRESS_0X0 = "0x0000000000000000000000000000000000000000";
25
25
  export declare const DUMB_ADDRESS = "0xC4375B7De8af5a38a93548eb8453a498222C4fF2";
26
+ export declare const DUMB_ADDRESS2 = "0x93548eB8453a498222C4FF2C4375b7De8af5A38a";
27
+ export declare const DUMB_ADDRESS3 = "0x822293548EB8453A49c4fF2c4375B7DE8AF5a38A";
28
+ export declare const DUMB_ADDRESS4 = "0x498222C4Ff2C4393548eb8453a75B7dE8AF5A38a";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DUMB_ADDRESS = 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.PRICE_DECIMALS = exports.PRICE_DECIMALS_POW = exports.WAD = exports.WAD_DECIMALS_POW = exports.halfRAY = exports.RAY = exports.RAY_DECIMALS_POW = exports.getNetworkType = exports.HARDHAT_NETWORK = exports.LOCAL_NETWORK = exports.GOERLI_NETWORK = exports.MAINNET_NETWORK = exports.MAX_INT = void 0;
3
+ exports.DUMB_ADDRESS4 = exports.DUMB_ADDRESS3 = exports.DUMB_ADDRESS2 = exports.DUMB_ADDRESS = 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.PRICE_DECIMALS = exports.PRICE_DECIMALS_POW = exports.WAD = exports.WAD_DECIMALS_POW = exports.halfRAY = exports.RAY = exports.RAY_DECIMALS_POW = exports.getNetworkType = exports.HARDHAT_NETWORK = exports.LOCAL_NETWORK = exports.GOERLI_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;
@@ -43,3 +43,6 @@ exports.SLIPPAGE_DECIMALS = 100;
43
43
  exports.ADDRESS_0X0 = "0x0000000000000000000000000000000000000000";
44
44
  // Used in tests
45
45
  exports.DUMB_ADDRESS = "0xC4375B7De8af5a38a93548eb8453a498222C4fF2";
46
+ exports.DUMB_ADDRESS2 = "0x93548eB8453a498222C4FF2C4375b7De8af5A38a";
47
+ exports.DUMB_ADDRESS3 = "0x822293548EB8453A49c4fF2c4375B7DE8AF5a38A";
48
+ exports.DUMB_ADDRESS4 = "0x498222C4Ff2C4393548eb8453a75B7dE8AF5A38a";
@@ -0,0 +1,19 @@
1
+ import { BigNumber, providers } from "ethers";
2
+ import { SupportedContract } from "../contracts/contracts";
3
+ import { MultiCall } from "../pathfinder/core";
4
+ import { SupportedToken } from "../tokens/token";
5
+ import { NetworkType } from "./constants";
6
+ import { CreditAccountData } from "./creditAccount";
7
+ import { CreditManagerData } from "./creditManager";
8
+ export interface Rewards {
9
+ contract: SupportedContract;
10
+ rewards: Partial<Record<SupportedToken, BigNumber>>;
11
+ calls: Array<MultiCall>;
12
+ }
13
+ export interface AdapterWithType {
14
+ adapter: string;
15
+ contract: SupportedContract;
16
+ }
17
+ export declare class RewardClaimer {
18
+ static findRewards(ca: CreditAccountData, cm: CreditManagerData, network: NetworkType, provider: providers.Provider): Promise<Array<Rewards>>;
19
+ }
@@ -0,0 +1,53 @@
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.RewardClaimer = void 0;
40
+ var rewardConvex_1 = require("./rewardConvex");
41
+ var RewardClaimer = /** @class */ (function () {
42
+ function RewardClaimer() {
43
+ }
44
+ RewardClaimer.findRewards = function (ca, cm, network, provider) {
45
+ return __awaiter(this, void 0, void 0, function () {
46
+ return __generator(this, function (_a) {
47
+ return [2 /*return*/, rewardConvex_1.RewardConvex.findRewards(ca, cm, network, provider)];
48
+ });
49
+ });
50
+ };
51
+ return RewardClaimer;
52
+ }());
53
+ exports.RewardClaimer = RewardClaimer;
@@ -0,0 +1,26 @@
1
+ import { BigNumber, providers } from "ethers";
2
+ import { SupportedContract } from "../contracts/contracts";
3
+ import { SupportedToken } from "../tokens/token";
4
+ import { IConvexV1BaseRewardPoolAdapterInterface } from "../types/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/IConvexV1BaseRewardPoolAdapter";
5
+ import { MCall } from "../utils/multicall";
6
+ import { NetworkType } from "./constants";
7
+ import { CreditAccountData } from "./creditAccount";
8
+ import { CreditManagerData } from "./creditManager";
9
+ import { AdapterWithType, Rewards } from "./rewardClaimer";
10
+ export interface RewardDistribution {
11
+ adapter: string;
12
+ contract: SupportedContract;
13
+ token: SupportedToken;
14
+ }
15
+ interface MCallPreparation {
16
+ calls: Array<MCall<IConvexV1BaseRewardPoolAdapterInterface>>;
17
+ distribution: Array<RewardDistribution>;
18
+ }
19
+ export declare class RewardConvex {
20
+ static poolInterface: IConvexV1BaseRewardPoolAdapterInterface;
21
+ static findRewards(ca: CreditAccountData, cm: CreditManagerData, network: NetworkType, provider: providers.Provider): Promise<Array<Rewards>>;
22
+ static findAdapters(cm: CreditManagerData): Array<AdapterWithType>;
23
+ static prepareMultiCalls(creditAccount: string, cm: CreditManagerData, network: NetworkType): MCallPreparation;
24
+ static parseResults(creditAccount: string, rewards: Array<BigNumber>, distribution: Array<RewardDistribution>): Array<Rewards>;
25
+ }
26
+ export {};
@@ -0,0 +1,161 @@
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.RewardConvex = void 0;
40
+ var ethers_1 = require("ethers");
41
+ var apy_1 = require("../apy");
42
+ var adapters_1 = require("../contracts/adapters");
43
+ var contracts_1 = require("../contracts/contracts");
44
+ var token_1 = require("../tokens/token");
45
+ var types_1 = require("../types");
46
+ var multicall_1 = require("../utils/multicall");
47
+ var RewardConvex = /** @class */ (function () {
48
+ function RewardConvex() {
49
+ }
50
+ RewardConvex.findRewards = function (ca, cm, network, provider) {
51
+ return __awaiter(this, void 0, void 0, function () {
52
+ var _a, calls, distribution, mcalls, rewards, totalSupply, results;
53
+ return __generator(this, function (_b) {
54
+ switch (_b.label) {
55
+ case 0:
56
+ _a = RewardConvex.prepareMultiCalls(ca.addr, cm, network), calls = _a.calls, distribution = _a.distribution;
57
+ mcalls = calls;
58
+ mcalls.push({
59
+ address: token_1.tokenDataByNetwork[network].CVX,
60
+ interface: types_1.IConvexToken__factory.createInterface(),
61
+ method: "totalSupply()",
62
+ });
63
+ return [4 /*yield*/, (0, multicall_1.multicall)(mcalls, provider)];
64
+ case 1:
65
+ rewards = _b.sent();
66
+ totalSupply = rewards.pop();
67
+ results = RewardConvex.parseResults(ca.addr, rewards, distribution);
68
+ results.forEach(function (r) {
69
+ r.rewards.CVX = (0, apy_1.getCVXMintAmount)(r.rewards.CRV || ethers_1.BigNumber.from(0), totalSupply);
70
+ });
71
+ return [2 /*return*/, results];
72
+ }
73
+ });
74
+ });
75
+ };
76
+ RewardConvex.findAdapters = function (cm) {
77
+ var convexPools = Object.entries(contracts_1.contractParams)
78
+ .filter(function (_a) {
79
+ var _ = _a[0], params = _a[1];
80
+ return params.type === adapters_1.AdapterInterface.CONVEX_V1_BASE_REWARD_POOL;
81
+ })
82
+ .map(function (_a) {
83
+ var contract = _a[0];
84
+ return contract;
85
+ });
86
+ return Object.entries(cm.adapters)
87
+ .map(function (_a) {
88
+ var adapter = _a[0], contact = _a[1];
89
+ return ({
90
+ adapter: adapter,
91
+ contract: contracts_1.contractsByAddress[contact.toLowerCase()],
92
+ });
93
+ })
94
+ .filter(function (a) { return convexPools.includes(a.contract); });
95
+ };
96
+ RewardConvex.prepareMultiCalls = function (creditAccount, cm, network) {
97
+ var calls = [];
98
+ var distribution = [];
99
+ var adapters = this.findAdapters(cm);
100
+ for (var _i = 0, adapters_2 = adapters; _i < adapters_2.length; _i++) {
101
+ var a = adapters_2[_i];
102
+ calls.push({
103
+ address: a.adapter,
104
+ interface: RewardConvex.poolInterface,
105
+ method: "earned(address)",
106
+ params: [creditAccount],
107
+ });
108
+ distribution.push({
109
+ adapter: a.adapter,
110
+ contract: a.contract,
111
+ token: "CRV",
112
+ });
113
+ var params = contracts_1.contractParams[a.contract];
114
+ for (var _a = 0, _b = params.extraRewards; _a < _b.length; _a++) {
115
+ var er = _b[_a];
116
+ calls.push({
117
+ address: er.poolAddress[network],
118
+ interface: RewardConvex.poolInterface,
119
+ method: "earned(address)",
120
+ params: [creditAccount],
121
+ });
122
+ distribution.push({
123
+ adapter: a.adapter,
124
+ contract: a.contract,
125
+ token: er.rewardToken,
126
+ });
127
+ }
128
+ }
129
+ return {
130
+ calls: calls,
131
+ distribution: distribution,
132
+ };
133
+ };
134
+ RewardConvex.parseResults = function (creditAccount, rewards, distribution) {
135
+ var result = {};
136
+ var callData = RewardConvex.poolInterface.encodeFunctionData("getReward(address,bool)", [creditAccount, true]);
137
+ for (var i = 0; i < rewards.length; i++) {
138
+ var _a = distribution[i], contract = _a.contract, adapter = _a.adapter, token = _a.token;
139
+ var reward = rewards[i];
140
+ if (!reward.isZero()) {
141
+ if (!result[contract]) {
142
+ result[contract] = {
143
+ contract: contract,
144
+ rewards: {},
145
+ calls: [
146
+ {
147
+ target: adapter,
148
+ callData: callData,
149
+ },
150
+ ],
151
+ };
152
+ }
153
+ result[contract].rewards[token] = reward;
154
+ }
155
+ }
156
+ return Object.values(result);
157
+ };
158
+ RewardConvex.poolInterface = types_1.IConvexV1BaseRewardPoolAdapter__factory.createInterface();
159
+ return RewardConvex;
160
+ }());
161
+ exports.RewardConvex = RewardConvex;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var chai_1 = require("chai");
4
+ var ethers_1 = require("ethers");
5
+ var contracts_1 = require("../contracts/contracts");
6
+ var constants_1 = require("./constants");
7
+ var rewardConvex_1 = require("./rewardConvex");
8
+ var ADAPTER_CONVEX_3CRV_POOL = constants_1.DUMB_ADDRESS;
9
+ var ADAPTER_CURVE_FRAX_POOL = constants_1.DUMB_ADDRESS2;
10
+ var ADAPTER_CONVEX_FRAX3CRV_POOL = constants_1.DUMB_ADDRESS3;
11
+ var CREDIT_ACCOUNT = constants_1.DUMB_ADDRESS4;
12
+ describe("RewardConvex test", function () {
13
+ it("findAdapters find convex adapters correctly", function () {
14
+ var _a;
15
+ var cm = {
16
+ adapters: (_a = {},
17
+ _a[ADAPTER_CONVEX_3CRV_POOL] = contracts_1.contractsByNetwork.Mainnet.CONVEX_3CRV_POOL,
18
+ _a[ADAPTER_CURVE_FRAX_POOL] = contracts_1.contractsByNetwork.Mainnet.CURVE_FRAX_POOL,
19
+ _a[ADAPTER_CONVEX_FRAX3CRV_POOL] = contracts_1.contractsByNetwork.Goerli.CONVEX_FRAX3CRV_POOL,
20
+ _a),
21
+ };
22
+ var expectedResult = [
23
+ {
24
+ adapter: ADAPTER_CONVEX_3CRV_POOL,
25
+ contract: "CONVEX_3CRV_POOL",
26
+ },
27
+ {
28
+ adapter: ADAPTER_CONVEX_FRAX3CRV_POOL,
29
+ contract: "CONVEX_FRAX3CRV_POOL",
30
+ },
31
+ ];
32
+ var result = rewardConvex_1.RewardConvex.findAdapters(cm);
33
+ (0, chai_1.expect)(result).to.be.eql(expectedResult);
34
+ });
35
+ it("prepareMultiCalls prepares multicall data correctly", function () {
36
+ var _a;
37
+ var cm = {
38
+ adapters: (_a = {},
39
+ _a[ADAPTER_CONVEX_3CRV_POOL] = contracts_1.contractsByNetwork.Mainnet.CONVEX_3CRV_POOL,
40
+ _a[ADAPTER_CURVE_FRAX_POOL] = contracts_1.contractsByNetwork.Mainnet.CURVE_FRAX_POOL,
41
+ _a[ADAPTER_CONVEX_FRAX3CRV_POOL] = contracts_1.contractsByNetwork.Goerli.CONVEX_FRAX3CRV_POOL,
42
+ _a),
43
+ };
44
+ var calls = [
45
+ {
46
+ address: ADAPTER_CONVEX_3CRV_POOL,
47
+ interface: rewardConvex_1.RewardConvex.poolInterface,
48
+ method: "earned(address)",
49
+ params: [CREDIT_ACCOUNT],
50
+ },
51
+ {
52
+ address: ADAPTER_CONVEX_FRAX3CRV_POOL,
53
+ interface: rewardConvex_1.RewardConvex.poolInterface,
54
+ method: "earned(address)",
55
+ params: [CREDIT_ACCOUNT],
56
+ },
57
+ {
58
+ address: contracts_1.contractParams.CONVEX_FRAX3CRV_POOL
59
+ .extraRewards[0].poolAddress.Mainnet,
60
+ interface: rewardConvex_1.RewardConvex.poolInterface,
61
+ method: "earned(address)",
62
+ params: [CREDIT_ACCOUNT],
63
+ },
64
+ ];
65
+ var distribution = [
66
+ {
67
+ adapter: ADAPTER_CONVEX_3CRV_POOL,
68
+ contract: "CONVEX_3CRV_POOL",
69
+ token: "CRV",
70
+ },
71
+ {
72
+ adapter: ADAPTER_CONVEX_FRAX3CRV_POOL,
73
+ contract: "CONVEX_FRAX3CRV_POOL",
74
+ token: "CRV",
75
+ },
76
+ {
77
+ adapter: ADAPTER_CONVEX_FRAX3CRV_POOL,
78
+ contract: "CONVEX_FRAX3CRV_POOL",
79
+ token: "FXS",
80
+ },
81
+ ];
82
+ var result = rewardConvex_1.RewardConvex.prepareMultiCalls(CREDIT_ACCOUNT, cm, "Mainnet");
83
+ console.log(result);
84
+ (0, chai_1.expect)(result).to.be.eql({ calls: calls, distribution: distribution });
85
+ });
86
+ it("parseResults parse data correctly", function () {
87
+ var rewards = [
88
+ ethers_1.BigNumber.from(1000),
89
+ ethers_1.BigNumber.from(2000),
90
+ ethers_1.BigNumber.from(4000),
91
+ ];
92
+ var distribution = [
93
+ {
94
+ adapter: ADAPTER_CONVEX_3CRV_POOL,
95
+ contract: "CONVEX_3CRV_POOL",
96
+ token: "CRV",
97
+ },
98
+ {
99
+ adapter: ADAPTER_CONVEX_FRAX3CRV_POOL,
100
+ contract: "CONVEX_FRAX3CRV_POOL",
101
+ token: "CRV",
102
+ },
103
+ {
104
+ adapter: ADAPTER_CONVEX_FRAX3CRV_POOL,
105
+ contract: "CONVEX_FRAX3CRV_POOL",
106
+ token: "FXS",
107
+ },
108
+ ];
109
+ var parsed = rewardConvex_1.RewardConvex.parseResults(CREDIT_ACCOUNT, rewards, distribution);
110
+ var callData = rewardConvex_1.RewardConvex.poolInterface.encodeFunctionData("getReward(address,bool)", [CREDIT_ACCOUNT, true]);
111
+ var expected = [
112
+ {
113
+ contract: "CONVEX_3CRV_POOL",
114
+ rewards: {
115
+ CRV: ethers_1.BigNumber.from(1000),
116
+ },
117
+ calls: [
118
+ {
119
+ target: ADAPTER_CONVEX_3CRV_POOL,
120
+ callData: callData,
121
+ },
122
+ ],
123
+ },
124
+ {
125
+ contract: "CONVEX_FRAX3CRV_POOL",
126
+ rewards: {
127
+ CRV: ethers_1.BigNumber.from(2000),
128
+ FXS: ethers_1.BigNumber.from(4000),
129
+ },
130
+ calls: [
131
+ {
132
+ target: ADAPTER_CONVEX_FRAX3CRV_POOL,
133
+ callData: callData,
134
+ },
135
+ ],
136
+ },
137
+ ];
138
+ (0, chai_1.expect)(parsed).to.be.eql(expected);
139
+ });
140
+ });
@@ -10,7 +10,8 @@ export declare enum OracleType {
10
10
  CURVE_LP_TOKEN_ORACLE = 2,
11
11
  YEARN_CURVE_LP_TOKEN_ORACLE = 3,
12
12
  ZERO_ORACLE = 4,
13
- LIKE_CURVE_LP_TOKEN_ORACLE = 5
13
+ LIKE_CURVE_LP_TOKEN_ORACLE = 5,
14
+ WSTETH_ORACLE = 6
14
15
  }
15
16
  export declare type PriceFeedData = {
16
17
  type: OracleType.CHAINLINK_ORACLE;
@@ -29,6 +30,9 @@ export declare type PriceFeedData = {
29
30
  } | {
30
31
  type: OracleType.LIKE_CURVE_LP_TOKEN_ORACLE;
31
32
  curveSymbol: SupportedToken;
33
+ } | {
34
+ type: OracleType.WSTETH_ORACLE;
35
+ token: SupportedToken;
32
36
  };
33
37
  export interface TokenPriceFeedData {
34
38
  priceFeedETH?: PriceFeedData;
@@ -9,4 +9,5 @@ var OracleType;
9
9
  OracleType[OracleType["YEARN_CURVE_LP_TOKEN_ORACLE"] = 3] = "YEARN_CURVE_LP_TOKEN_ORACLE";
10
10
  OracleType[OracleType["ZERO_ORACLE"] = 4] = "ZERO_ORACLE";
11
11
  OracleType[OracleType["LIKE_CURVE_LP_TOKEN_ORACLE"] = 5] = "LIKE_CURVE_LP_TOKEN_ORACLE";
12
+ OracleType[OracleType["WSTETH_ORACLE"] = 6] = "WSTETH_ORACLE";
12
13
  })(OracleType = exports.OracleType || (exports.OracleType = {}));
@@ -263,6 +263,12 @@ exports.priceFeedsByNetwork = {
263
263
  },
264
264
  },
265
265
  },
266
+ wstETH: {
267
+ priceFeedUSD: {
268
+ type: oracles_1.OracleType.WSTETH_ORACLE,
269
+ token: "STETH",
270
+ },
271
+ },
266
272
  CVX: {
267
273
  priceFeedUSD: {
268
274
  type: oracles_1.OracleType.CHAINLINK_ORACLE,
@@ -18,6 +18,7 @@ exports.decimals = {
18
18
  WETH: 18,
19
19
  YFI: 18,
20
20
  STETH: 18,
21
+ wstETH: 18,
21
22
  CVX: 18,
22
23
  FRAX: 18,
23
24
  FXS: 18,
@@ -1,7 +1,7 @@
1
1
  import { TradeAction } from "../pathfinder/tradeTypes";
2
2
  import type { TokenBase } from "./token";
3
3
  import { TokenType } from "./tokenType";
4
- export declare type NormalToken = "1INCH" | "AAVE" | "COMP" | "CRV" | "DPI" | "FEI" | "LINK" | "SNX" | "UNI" | "USDT" | "USDC" | "DAI" | "WETH" | "WBTC" | "YFI" | "STETH" | "CVX" | "FRAX" | "FXS" | "LDO" | "LUSD" | "sUSD" | "GUSD" | "LQTY";
4
+ export declare type NormalToken = "1INCH" | "AAVE" | "COMP" | "CRV" | "DPI" | "FEI" | "LINK" | "SNX" | "UNI" | "USDT" | "USDC" | "DAI" | "WETH" | "WBTC" | "YFI" | "STETH" | "wstETH" | "CVX" | "FRAX" | "FXS" | "LDO" | "LUSD" | "sUSD" | "GUSD" | "LQTY";
5
5
  export declare type NormalTokenData = {
6
6
  symbol: NormalToken;
7
7
  type: TokenType.NORMAL_TOKEN;
@@ -433,6 +433,31 @@ exports.normalTokens = {
433
433
  },
434
434
  ],
435
435
  },
436
+ wstETH: {
437
+ name: "wstETH",
438
+ decimals: 18,
439
+ symbol: "wstETH",
440
+ type: tokenType_1.TokenType.NORMAL_TOKEN,
441
+ swapActions: [
442
+ {
443
+ type: tradeTypes_1.TradeType.UniswapV3Swap,
444
+ contract: "UNISWAP_V3_ROUTER",
445
+ },
446
+ {
447
+ type: tradeTypes_1.TradeType.UniswapV2Swap,
448
+ contract: "UNISWAP_V2_ROUTER",
449
+ },
450
+ {
451
+ type: tradeTypes_1.TradeType.UniswapV2Swap,
452
+ contract: "SUSHISWAP_ROUTER",
453
+ },
454
+ {
455
+ type: tradeTypes_1.TradeType.CurveExchange,
456
+ contract: "CURVE_STETH_GATEWAY",
457
+ tokenOut: ["WETH"],
458
+ },
459
+ ],
460
+ },
436
461
  CVX: {
437
462
  name: "CVX",
438
463
  decimals: 18,
@@ -42,6 +42,7 @@ exports.tokenDataByNetwork = {
42
42
  YFI: "0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e",
43
43
  /// UPDATE
44
44
  STETH: "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84",
45
+ wstETH: "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0",
45
46
  CVX: "0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B",
46
47
  FRAX: "0x853d955aCEf822Db058eb8505911ED77F175b99e",
47
48
  FXS: "0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0",
@@ -108,6 +109,7 @@ exports.tokenDataByNetwork = {
108
109
  YFI: "0xCad5D7701e0A85fe50B3aCaBDcdF7e75672F326e",
109
110
  /// UPDATE
110
111
  STETH: "0xd628baa42b3080593a231016bF3F229161C9F745",
112
+ wstETH: "DEPLOY ME",
111
113
  CVX: "0x6D75eb70402CF06a0cB5B8fdc1836dAe29702B17",
112
114
  FRAX: "0x92d43093959C7DDa89896418bCE9DE0B87879646",
113
115
  FXS: "0x34C035818Dd308f3aC20e68bC03C3E4FC8924d9d",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gearbox-protocol/sdk",
3
- "version": "1.7.12",
3
+ "version": "1.8.0",
4
4
  "description": "Gearbox SDK",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",