@gearbox-protocol/sdk 1.7.11 → 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.
- 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/creditManager.d.ts +1 -0
- package/lib/core/creditManager.js +1 -0
- 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/core/trade.js +4 -7
- package/lib/oracles/oracles.d.ts +5 -1
- package/lib/oracles/oracles.js +1 -0
- package/lib/oracles/priceFeeds.js +6 -0
- package/lib/payload/creditAccount.d.ts +2 -1
- package/lib/payload/creditManager.d.ts +2 -1
- package/lib/payload/pool.d.ts +2 -1
- 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/utils/types.d.ts +6 -0
- package/package.json +1 -2
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";
|
|
@@ -24,6 +24,7 @@ export declare class CreditManagerData {
|
|
|
24
24
|
readonly degenNFT: string;
|
|
25
25
|
readonly isIncreaseDebtForbidden: boolean;
|
|
26
26
|
readonly forbiddenTokenMask: BigNumber;
|
|
27
|
+
readonly maxEnabledTokensLength: number;
|
|
27
28
|
readonly feeInterest: number;
|
|
28
29
|
readonly feeLiquidation: number;
|
|
29
30
|
readonly liquidationDiscount: number;
|
|
@@ -43,6 +43,7 @@ var CreditManagerData = /** @class */ (function () {
|
|
|
43
43
|
this.pool = payload.pool.toLowerCase();
|
|
44
44
|
this.isWETH = payload.isWETH;
|
|
45
45
|
this.canBorrow = payload.canBorrow;
|
|
46
|
+
this.maxEnabledTokensLength = payload.maxEnabledTokensLength;
|
|
46
47
|
this.borrowRate = payload.borrowRate
|
|
47
48
|
.mul(payload.feeInterest + constants_1.PERCENTAGE_FACTOR)
|
|
48
49
|
.mul(constants_1.PERCENTAGE_DECIMALS)
|
|
@@ -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/core/trade.js
CHANGED
|
@@ -37,7 +37,6 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.Trade = void 0;
|
|
40
|
-
var txParser_1 = require("../parsers/txParser");
|
|
41
40
|
var decimals_1 = require("../tokens/decimals");
|
|
42
41
|
var token_1 = require("../tokens/token");
|
|
43
42
|
var formatter_1 = require("../utils/formatter");
|
|
@@ -86,12 +85,10 @@ var Trade = /** @class */ (function () {
|
|
|
86
85
|
var receipt;
|
|
87
86
|
return __generator(this, function (_a) {
|
|
88
87
|
switch (_a.label) {
|
|
89
|
-
case 0:
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
data: call.callData,
|
|
94
|
-
})];
|
|
88
|
+
case 0: return [4 /*yield*/, signer.sendTransaction({
|
|
89
|
+
to: call.target,
|
|
90
|
+
data: call.callData,
|
|
91
|
+
})];
|
|
95
92
|
case 1:
|
|
96
93
|
receipt = _a.sent();
|
|
97
94
|
return [2 /*return*/, new transactions_1.TXSwap({
|
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,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { CreditAccountDataStruct, CreditAccountDataStructOutput } from "../types/contracts/interfaces/IDataCompressor.sol/IDataCompressor";
|
|
2
|
+
import { ExcludeArrayProps } from "../utils/types";
|
|
2
3
|
export declare type TokenBalancePayload = CreditAccountDataStruct["balances"];
|
|
3
|
-
export declare type CreditAccountDataPayload = CreditAccountDataStructOutput
|
|
4
|
+
export declare type CreditAccountDataPayload = ExcludeArrayProps<CreditAccountDataStructOutput>;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { BigNumberish } from "ethers";
|
|
2
2
|
import { CreditManagerDataStructOutput } from "../types/contracts/interfaces/IDataCompressor.sol/IDataCompressor";
|
|
3
|
+
import { ExcludeArrayProps } from "../utils/types";
|
|
3
4
|
export interface AdapterPayload {
|
|
4
5
|
allowedContract: string;
|
|
5
6
|
adapter: string;
|
|
6
7
|
}
|
|
7
|
-
export declare type CreditManagerDataPayload = CreditManagerDataStructOutput
|
|
8
|
+
export declare type CreditManagerDataPayload = ExcludeArrayProps<CreditManagerDataStructOutput>;
|
|
8
9
|
export interface CreditManagerStatPayload extends CreditManagerDataPayload {
|
|
9
10
|
allowedContracts?: Array<string>;
|
|
10
11
|
uniqueUsers: number;
|
package/lib/payload/pool.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { PoolDataStruct } from "../types/contracts/interfaces/IDataCompressor.sol/IDataCompressor";
|
|
2
|
-
|
|
2
|
+
import { ExcludeArrayProps } from "../utils/types";
|
|
3
|
+
export declare type PoolDataPayload = ExcludeArrayProps<PoolDataStruct>;
|
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",
|
package/lib/utils/types.d.ts
CHANGED
|
@@ -2,3 +2,9 @@ export declare type PartialRecord<K extends keyof any, T> = {
|
|
|
2
2
|
[P in K]?: T;
|
|
3
3
|
};
|
|
4
4
|
export declare type AwaitedRes<T extends (...args: any) => any> = Awaited<ReturnType<T>>;
|
|
5
|
+
declare type ArrayMethodKeys = keyof [] & {};
|
|
6
|
+
declare type NonArrayKeys<T> = T extends `${number}` | number | ArrayMethodKeys ? never : T;
|
|
7
|
+
export declare type ExcludeArrayProps<T> = {
|
|
8
|
+
[K in keyof T as NonArrayKeys<K>]: T[K];
|
|
9
|
+
};
|
|
10
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gearbox-protocol/sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"description": "Gearbox SDK",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
"dev": "tsc -w",
|
|
16
16
|
"pub": "rm -rf ./src/types/hardhat.ts && cp ./src/types/*.d.ts ./lib/types && tsc && yarn publish",
|
|
17
17
|
"copyTypes": "node ./scripts/copyTypes.js",
|
|
18
|
-
"prepush": "yarn lint --max-warnings=0",
|
|
19
18
|
"prepare": "husky install",
|
|
20
19
|
"prettier": "prettier --write .",
|
|
21
20
|
"prettier:ci": "npx prettier --check .",
|