@gearbox-protocol/sdk 1.7.12 → 1.8.1
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.
- package/lib/apy/convexAPY.d.ts +1 -0
- package/lib/apy/convexAPY.js +2 -1
- package/lib/contracts/adapters.d.ts +2 -1
- package/lib/contracts/adapters.js +1 -0
- package/lib/core/constants.d.ts +3 -0
- package/lib/core/constants.js +4 -1
- package/lib/core/rewardClaimer.d.ts +19 -0
- package/lib/core/rewardClaimer.js +53 -0
- package/lib/core/rewardConvex.d.ts +26 -0
- package/lib/core/rewardConvex.js +161 -0
- package/lib/core/rewardConvex.spec.d.ts +1 -0
- package/lib/core/rewardConvex.spec.js +140 -0
- package/lib/oracles/oracles.d.ts +5 -1
- package/lib/oracles/oracles.js +1 -0
- package/lib/oracles/priceFeeds.js +6 -0
- package/lib/tokens/decimals.js +1 -0
- package/lib/tokens/normal.d.ts +1 -1
- package/lib/tokens/normal.js +25 -0
- package/lib/tokens/token.js +2 -0
- package/lib/types/contracts/integrations/lido/IwstETH.sol/IwstETH.d.ts +234 -0
- package/lib/types/contracts/{test/suites/mainnet/ITokenTestSuite.js → integrations/lido/IwstETH.sol/IwstETH.js} +0 -0
- package/lib/types/contracts/integrations/lido/IwstETH.sol/IwstETHGetters.d.ts +202 -0
- package/lib/types/contracts/{test/suites/mainnet/SupportedContracts.sol/ISupportedContracts.js → integrations/lido/IwstETH.sol/IwstETHGetters.js} +0 -0
- package/lib/types/contracts/integrations/lido/IwstETH.sol/index.d.ts +2 -0
- package/lib/types/contracts/{test/suites/mainnet/SupportedContracts.sol → integrations/lido/IwstETH.sol}/index.js +0 -0
- package/lib/types/contracts/integrations/lido/index.d.ts +2 -0
- package/lib/types/contracts/interfaces/IACL.sol/IACL.d.ts +9 -1
- package/lib/types/contracts/interfaces/adapters/lido/IwstETHV1Adapter.d.ts +218 -0
- package/lib/types/contracts/{test/suites/mainnet/Tokens.sol/IToken.js → interfaces/adapters/lido/IwstETHV1Adapter.js} +0 -0
- package/lib/types/contracts/interfaces/adapters/lido/index.d.ts +1 -0
- package/lib/types/contracts/test/suites/index.d.ts +2 -2
- package/lib/types/contracts/test/suites/{mainnet → live}/ITokenTestSuite.d.ts +0 -0
- package/lib/types/contracts/test/suites/{mainnet/Tokens.sol/index.js → live/ITokenTestSuite.js} +0 -0
- package/lib/types/contracts/test/suites/{mainnet → live}/SupportedContracts.sol/ISupportedContracts.d.ts +9 -1
- package/lib/types/contracts/test/suites/{mainnet/index.js → live/SupportedContracts.sol/ISupportedContracts.js} +0 -0
- package/lib/types/contracts/test/suites/{mainnet → live}/SupportedContracts.sol/index.d.ts +0 -0
- package/lib/types/contracts/test/suites/live/SupportedContracts.sol/index.js +2 -0
- package/lib/types/contracts/test/suites/{mainnet → live}/Tokens.sol/IToken.d.ts +0 -0
- package/lib/types/contracts/test/suites/live/Tokens.sol/IToken.js +2 -0
- package/lib/types/contracts/test/suites/{mainnet → live}/Tokens.sol/index.d.ts +0 -0
- package/lib/types/contracts/test/suites/live/Tokens.sol/index.js +2 -0
- package/lib/types/contracts/test/suites/{mainnet → live}/index.d.ts +0 -0
- package/lib/types/contracts/test/suites/live/index.js +2 -0
- package/lib/types/factories/contracts/integrations/lido/IwstETH.sol/IwstETHGetters__factory.d.ts +35 -0
- package/lib/types/factories/contracts/integrations/lido/IwstETH.sol/IwstETHGetters__factory.js +321 -0
- package/lib/types/factories/contracts/integrations/lido/IwstETH.sol/IwstETH__factory.d.ts +35 -0
- package/lib/types/factories/contracts/integrations/lido/IwstETH.sol/IwstETH__factory.js +359 -0
- package/lib/types/factories/contracts/integrations/lido/IwstETH.sol/index.d.ts +2 -0
- package/lib/types/factories/contracts/integrations/lido/IwstETH.sol/index.js +10 -0
- package/lib/types/factories/contracts/integrations/lido/index.d.ts +1 -0
- package/lib/types/factories/contracts/integrations/lido/index.js +2 -1
- package/lib/types/factories/contracts/interfaces/IACL.sol/IACL__factory.js +13 -0
- package/lib/types/factories/contracts/interfaces/adapters/lido/IwstETHV1Adapter__factory.d.ts +32 -0
- package/lib/types/factories/contracts/interfaces/adapters/lido/IwstETHV1Adapter__factory.js +321 -0
- package/lib/types/factories/contracts/interfaces/adapters/lido/index.d.ts +1 -0
- package/lib/types/factories/contracts/interfaces/adapters/lido/index.js +3 -1
- package/lib/types/factories/contracts/test/suites/index.d.ts +1 -1
- package/lib/types/factories/contracts/test/suites/index.js +2 -2
- package/lib/types/factories/contracts/test/suites/{mainnet → live}/ITokenTestSuite__factory.d.ts +1 -1
- package/lib/types/factories/contracts/test/suites/{mainnet → live}/ITokenTestSuite__factory.js +0 -0
- package/lib/types/factories/contracts/test/suites/{mainnet → live}/SupportedContracts.sol/ISupportedContracts__factory.d.ts +1 -1
- package/lib/types/factories/contracts/test/suites/{mainnet → live}/SupportedContracts.sol/ISupportedContracts__factory.js +19 -0
- package/lib/types/factories/contracts/test/suites/{mainnet → live}/SupportedContracts.sol/index.d.ts +0 -0
- package/lib/types/factories/contracts/test/suites/{mainnet → live}/SupportedContracts.sol/index.js +0 -0
- package/lib/types/factories/contracts/test/suites/{mainnet → live}/Tokens.sol/IToken__factory.d.ts +1 -1
- package/lib/types/factories/contracts/test/suites/{mainnet → live}/Tokens.sol/IToken__factory.js +0 -0
- package/lib/types/factories/contracts/test/suites/{mainnet → live}/Tokens.sol/index.d.ts +0 -0
- package/lib/types/factories/contracts/test/suites/{mainnet → live}/Tokens.sol/index.js +0 -0
- package/lib/types/factories/contracts/test/suites/{mainnet → live}/index.d.ts +0 -0
- package/lib/types/factories/contracts/test/suites/{mainnet → live}/index.js +0 -0
- package/lib/types/index.d.ts +12 -6
- package/lib/types/index.js +12 -6
- package/package.json +1 -1
package/lib/apy/convexAPY.d.ts
CHANGED
|
@@ -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;
|
package/lib/apy/convexAPY.js
CHANGED
|
@@ -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 () {
|
|
@@ -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 = {}));
|
package/lib/core/constants.d.ts
CHANGED
|
@@ -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";
|
package/lib/core/constants.js
CHANGED
|
@@ -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
|
+
});
|
package/lib/oracles/oracles.d.ts
CHANGED
|
@@ -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;
|
package/lib/oracles/oracles.js
CHANGED
|
@@ -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,
|
package/lib/tokens/decimals.js
CHANGED
package/lib/tokens/normal.d.ts
CHANGED
|
@@ -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;
|
package/lib/tokens/normal.js
CHANGED
|
@@ -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,
|
package/lib/tokens/token.js
CHANGED
|
@@ -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",
|