@gearbox-protocol/sdk 3.0.0-next.110 → 3.0.0-next.111
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 -1
- package/lib/apy/convexAPY.js +6 -3
- package/lib/apy/curveAPY.d.ts +4 -4
- package/lib/apy/curveAPY.js +4 -10
- package/lib/apy/defiLamaAPY.d.ts +3 -0
- package/lib/apy/defiLamaAPY.js +72 -0
- package/lib/apy/index.d.ts +3 -3
- package/lib/apy/index.js +5 -1
- package/lib/apy/lidoAPY.d.ts +3 -1
- package/lib/apy/lidoAPY.js +6 -3
- package/lib/apy/yearnAPY.d.ts +3 -3
- package/lib/apy/yearnAPY.js +7 -7
- package/lib/pathfinder/pathfinder.d.ts +2 -3
- package/lib/pathfinder/pathfinder.js +2 -10
- package/lib/pathfinder/pathfinder.spec.js +18 -5
- package/package.json +2 -2
- package/lib/apy/maker.d.ts +0 -39
- package/lib/apy/maker.js +0 -68
package/lib/apy/convexAPY.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export interface GetConvexAPYBulkProps {
|
|
|
10
10
|
generated: GetConvexAPYBulkCallsReturns;
|
|
11
11
|
response: Array<BigNumberish>;
|
|
12
12
|
}
|
|
13
|
-
export declare function getConvexAPYBulk(props: GetConvexAPYBulkProps):
|
|
13
|
+
export declare function getConvexAPYBulk(props: GetConvexAPYBulkProps): number[];
|
|
14
14
|
interface PoolInfo {
|
|
15
15
|
cvxPool: ConvexPoolParams;
|
|
16
16
|
cvxPoolAddress: string;
|
package/lib/apy/convexAPY.js
CHANGED
|
@@ -143,7 +143,7 @@ function calculateConvexAPY(props) {
|
|
|
143
143
|
const vPrice = getVirtualPrice(props);
|
|
144
144
|
const virtualSupply = (props.cvxPoolSupply * vPrice) / sdk_gov_1.WAD;
|
|
145
145
|
if (!virtualSupply)
|
|
146
|
-
return
|
|
146
|
+
return 0;
|
|
147
147
|
const crvPerUnderlying = (crvPerSecond * sdk_gov_1.WAD) / virtualSupply;
|
|
148
148
|
const crvPerYear = crvPerUnderlying * BigInt(sdk_gov_1.SECONDS_PER_YEAR);
|
|
149
149
|
const cvxPerYear = getCVXMintAmount(crvPerYear, props.cvxTokenSupply);
|
|
@@ -162,8 +162,11 @@ function calculateConvexAPY(props) {
|
|
|
162
162
|
return finished ? 0n : extraAPY;
|
|
163
163
|
});
|
|
164
164
|
const extraAPYTotal = extraAPRs.reduce((acc, apy) => acc + apy, 0n);
|
|
165
|
-
const
|
|
166
|
-
|
|
165
|
+
const baseApy = props.curveAPY[crvToken].base;
|
|
166
|
+
const apyTotal = crvAPY + cvxAPY + extraAPYTotal;
|
|
167
|
+
const apyTotalInPercent = apyTotal * sdk_gov_1.PERCENTAGE_DECIMALS * sdk_gov_1.PERCENTAGE_FACTOR;
|
|
168
|
+
const r = baseApy + Math.round(Number((apyTotalInPercent * 10n) / sdk_gov_1.WAD) / 10);
|
|
169
|
+
return r;
|
|
167
170
|
}
|
|
168
171
|
function getTimestampInSeconds() {
|
|
169
172
|
return Math.floor(Date.now() / 1000);
|
package/lib/apy/curveAPY.d.ts
CHANGED
|
@@ -2,10 +2,10 @@ import { CurveLPToken } from "@gearbox-protocol/sdk-gov/lib/tokens/curveLP";
|
|
|
2
2
|
import { GearboxToken } from "@gearbox-protocol/sdk-gov/lib/tokens/gear";
|
|
3
3
|
type CurveAPYTokens = CurveLPToken | GearboxToken;
|
|
4
4
|
interface CurveAPY {
|
|
5
|
-
base:
|
|
6
|
-
crv:
|
|
7
|
-
gauge: Array<[string,
|
|
5
|
+
base: number;
|
|
6
|
+
crv: number;
|
|
7
|
+
gauge: Array<[string, number]>;
|
|
8
8
|
}
|
|
9
9
|
export type CurveAPYResult = Record<CurveAPYTokens, CurveAPY>;
|
|
10
|
-
export declare function getCurveAPY(): Promise<CurveAPYResult
|
|
10
|
+
export declare function getCurveAPY(): Promise<CurveAPYResult>;
|
|
11
11
|
export {};
|
package/lib/apy/curveAPY.js
CHANGED
|
@@ -6,8 +6,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.getCurveAPY = void 0;
|
|
7
7
|
const sdk_gov_1 = require("@gearbox-protocol/sdk-gov");
|
|
8
8
|
const axios_1 = __importDefault(require("axios"));
|
|
9
|
-
const formatter_1 = require("../utils/formatter");
|
|
10
|
-
// !& wstETHCRV
|
|
11
9
|
const APY_DICTIONARY = {
|
|
12
10
|
"3Crv": "0",
|
|
13
11
|
FRAX3CRV: "34",
|
|
@@ -27,9 +25,9 @@ const APY_DICTIONARY = {
|
|
|
27
25
|
crvUSDUSDT: "factory-crvusd-1",
|
|
28
26
|
crvUSDFRAX: "factory-crvusd-4",
|
|
29
27
|
crvUSDETHCRV: "factory-tricrypto-4",
|
|
30
|
-
rETH_f: "factory-crypto-210",
|
|
28
|
+
rETH_f: "factory-crypto-210",
|
|
29
|
+
wstETHCRV: "unknown",
|
|
31
30
|
};
|
|
32
|
-
const CRV_APY_RESPONSE_DECIMALS = 100;
|
|
33
31
|
// const CRYPTO = "https://api.curve.fi/api/getPools/ethereum/crypto";
|
|
34
32
|
// const FACTORY = "https://api.curve.fi/api/getPools/ethereum/factory";
|
|
35
33
|
const CURVE_APY_URL = "https://www.convexfinance.com/api/curve-apys";
|
|
@@ -57,12 +55,8 @@ async function getCurveAPY() {
|
|
|
57
55
|
.flat(1));
|
|
58
56
|
const curveAPY = sdk_gov_1.TypedObjectUtils.entries(APY_DICTIONARY).reduce((acc, [curveSymbol, poolId]) => {
|
|
59
57
|
const { baseApy, crvApy } = apys[poolId] || {};
|
|
60
|
-
if (baseApy === undefined)
|
|
61
|
-
console.warn(`No base apy for: ${curveSymbol}, ${poolId}`);
|
|
62
58
|
const pool = poolDataByID[poolId];
|
|
63
59
|
const { gaugeRewards = [] } = pool || {};
|
|
64
|
-
if (pool === undefined)
|
|
65
|
-
console.warn(`No pool data for: ${curveSymbol}, ${poolId}`);
|
|
66
60
|
const extraRewards = gaugeRewards.map(({ apy = 0, symbol }) => [
|
|
67
61
|
symbol.toLowerCase(),
|
|
68
62
|
curveAPYToBn(apy),
|
|
@@ -79,10 +73,10 @@ async function getCurveAPY() {
|
|
|
79
73
|
}
|
|
80
74
|
catch (e) {
|
|
81
75
|
console.error(e);
|
|
82
|
-
return
|
|
76
|
+
return {};
|
|
83
77
|
}
|
|
84
78
|
}
|
|
85
79
|
exports.getCurveAPY = getCurveAPY;
|
|
86
80
|
function curveAPYToBn(baseApy) {
|
|
87
|
-
return
|
|
81
|
+
return Math.round(baseApy * Number(sdk_gov_1.PERCENTAGE_FACTOR));
|
|
88
82
|
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getDefiLamaAPY = void 0;
|
|
7
|
+
const sdk_gov_1 = require("@gearbox-protocol/sdk-gov");
|
|
8
|
+
const axios_1 = __importDefault(require("axios"));
|
|
9
|
+
const LAMA_URL = "https://yields.llama.fi/pools";
|
|
10
|
+
async function getDefiLamaAPY(networkType) {
|
|
11
|
+
try {
|
|
12
|
+
const res = await axios_1.default.get(LAMA_URL);
|
|
13
|
+
const networkLama = NETWORK_TO_LAMA[networkType];
|
|
14
|
+
const chainItems = res.data.data.reduce((acc, item) => {
|
|
15
|
+
if (item.chain === networkLama) {
|
|
16
|
+
acc[item.pool] = item;
|
|
17
|
+
}
|
|
18
|
+
return acc;
|
|
19
|
+
}, {});
|
|
20
|
+
const currentNormal = NORMAL_TO_LAMA[networkType];
|
|
21
|
+
const allAPY = sdk_gov_1.TypedObjectUtils.fromEntries(sdk_gov_1.TypedObjectUtils.entries(currentNormal).map(([symbol, pool]) => {
|
|
22
|
+
const { apy = 0 } = chainItems[pool] || {};
|
|
23
|
+
return [symbol, Math.round(apy * Number(sdk_gov_1.PERCENTAGE_FACTOR))];
|
|
24
|
+
}));
|
|
25
|
+
return allAPY;
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
console.error(e);
|
|
29
|
+
return {};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.getDefiLamaAPY = getDefiLamaAPY;
|
|
33
|
+
const NETWORK_TO_LAMA = {
|
|
34
|
+
Mainnet: "Ethereum",
|
|
35
|
+
Optimism: "Optimism",
|
|
36
|
+
Arbitrum: "Arbitrum",
|
|
37
|
+
};
|
|
38
|
+
const NORMAL_TO_LAMA = {
|
|
39
|
+
Mainnet: {
|
|
40
|
+
sDAI: "c8a24fee-ec00-4f38-86c0-9f6daebc4225",
|
|
41
|
+
rETH: "d4b3c522-6127-4b89-bedf-83641cdcd2eb",
|
|
42
|
+
osETH: "4d01599c-69ae-41a3-bae1-5fab896f04c8",
|
|
43
|
+
},
|
|
44
|
+
Optimism: { rETH: "d4b3c522-6127-4b89-bedf-83641cdcd2eb" },
|
|
45
|
+
Arbitrum: {},
|
|
46
|
+
};
|
|
47
|
+
// const CONVEX_TO_LAMA: Record<
|
|
48
|
+
// NetworkType,
|
|
49
|
+
// Record<ConvexStakedPhantomToken, string>
|
|
50
|
+
// > = {
|
|
51
|
+
// Mainnet: {
|
|
52
|
+
// stkcvx3Crv: "7394f1bc-840a-4ff0-9e87-5e0ef932943a",
|
|
53
|
+
// stkcvxFRAX3CRV: "844a8a29-4653-42e6-b675-a6b43fac3678", // !!
|
|
54
|
+
// stkcvxgusd3CRV: "dc81639c-9391-4e56-96b9-76cfbcda61d4",
|
|
55
|
+
// stkcvxLUSD3CRV: "b61ef013-6391-4cdd-b057-b344ab852088", // !!
|
|
56
|
+
// stkcvxcrvPlain3andSUSD: "45f74ed5-5832-4d6d-8f2c-2929b6ac5e9c", // !!
|
|
57
|
+
// stkcvxsteCRV: "5ce23e7e-3800-4c9c-ad30-6db3db0515a1", // !!
|
|
58
|
+
// stkcvxcrvFRAX: "bd072651-d99c-4154-aeae-51f12109c054",
|
|
59
|
+
// stkcvxOHMFRAXBP: "42de7839-da37-4a99-8992-d6352177c4db", // !!
|
|
60
|
+
// stkcvxMIM_3LP3CRV: "8a20c472-142c-4442-b724-40f2183c073e",
|
|
61
|
+
// stkcvxcrvCRVETH: "disabled",
|
|
62
|
+
// stkcvxcrvCVXETH: "25d9dc49-3182-493a-bda4-0db53b25f457",
|
|
63
|
+
// stkcvxcrvUSDTWBTCWETH: "3be97c90-d4a8-42b3-a0d0-2906ae4e9d27",
|
|
64
|
+
// stkcvxLDOETH: "69361f05-1a95-4323-9b6f-44338ad22e98",
|
|
65
|
+
// stkcvxcrvUSDUSDC: "755fcec6-f4fd-4150-9184-60f099206694",
|
|
66
|
+
// stkcvxcrvUSDUSDT: "a3ffd3fe-b21c-44eb-94d5-22c80057a600",
|
|
67
|
+
// stkcvxcrvUSDFRAX: "411af006-56b0-480a-9586-1071bccbd178",
|
|
68
|
+
// stkcvxcrvUSDETHCRV: "654ac683-141b-42d3-b28d-b2f77eedd595",
|
|
69
|
+
// },
|
|
70
|
+
// Optimism: {} as any,
|
|
71
|
+
// Arbitrum: {} as any,
|
|
72
|
+
// };
|
package/lib/apy/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { LPTokens, PartialRecord, SupportedToken } from "@gearbox-protocol/sdk-gov";
|
|
2
|
-
export type AdditionalTokenWithAPY = Extract<SupportedToken, "STETH">;
|
|
2
|
+
export type AdditionalTokenWithAPY = Extract<SupportedToken, "STETH" | "weETH" | "osETH" | "rETH" | "wstETH">;
|
|
3
3
|
export declare const additionalTokensWIthAPY: Record<AdditionalTokenWithAPY, true>;
|
|
4
|
-
export type TokensWithAPY = LPTokens |
|
|
4
|
+
export type TokensWithAPY = LPTokens | AdditionalTokenWithAPY;
|
|
5
5
|
export type LpTokensAPY = PartialRecord<TokensWithAPY, number>;
|
|
6
6
|
export declare const isTokenWithAPY: (t: unknown) => t is TokensWithAPY;
|
|
7
7
|
export * from "./convexAPY";
|
|
8
8
|
export * from "./curveAPY";
|
|
9
|
+
export * from "./defiLamaAPY";
|
|
9
10
|
export * from "./lidoAPY";
|
|
10
|
-
export * from "./maker";
|
|
11
11
|
export * from "./yearnAPY";
|
package/lib/apy/index.js
CHANGED
|
@@ -18,6 +18,10 @@ exports.isTokenWithAPY = exports.additionalTokensWIthAPY = void 0;
|
|
|
18
18
|
const sdk_gov_1 = require("@gearbox-protocol/sdk-gov");
|
|
19
19
|
exports.additionalTokensWIthAPY = {
|
|
20
20
|
STETH: true,
|
|
21
|
+
weETH: true,
|
|
22
|
+
osETH: true,
|
|
23
|
+
rETH: true,
|
|
24
|
+
wstETH: true,
|
|
21
25
|
};
|
|
22
26
|
const isTokenWithAPY = (t) => typeof t === "string" &&
|
|
23
27
|
(!!sdk_gov_1.lpTokens[t] ||
|
|
@@ -25,6 +29,6 @@ const isTokenWithAPY = (t) => typeof t === "string" &&
|
|
|
25
29
|
exports.isTokenWithAPY = isTokenWithAPY;
|
|
26
30
|
__exportStar(require("./convexAPY"), exports);
|
|
27
31
|
__exportStar(require("./curveAPY"), exports);
|
|
32
|
+
__exportStar(require("./defiLamaAPY"), exports);
|
|
28
33
|
__exportStar(require("./lidoAPY"), exports);
|
|
29
|
-
__exportStar(require("./maker"), exports);
|
|
30
34
|
__exportStar(require("./yearnAPY"), exports);
|
package/lib/apy/lidoAPY.d.ts
CHANGED
package/lib/apy/lidoAPY.js
CHANGED
|
@@ -6,17 +6,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.getLidoAPY = void 0;
|
|
7
7
|
const sdk_gov_1 = require("@gearbox-protocol/sdk-gov");
|
|
8
8
|
const axios_1 = __importDefault(require("axios"));
|
|
9
|
-
const formatter_1 = require("../utils/formatter");
|
|
10
9
|
const LIDO_URL = "https://eth-api.lido.fi/v1/protocol/steth/apr/sma";
|
|
11
10
|
async function getLidoAPY() {
|
|
12
11
|
try {
|
|
13
12
|
const res = await axios_1.default.get(LIDO_URL);
|
|
14
13
|
const { smaApr = 0 } = res?.data?.data || {};
|
|
15
|
-
|
|
14
|
+
const r = Math.round(smaApr * Number(sdk_gov_1.PERCENTAGE_FACTOR));
|
|
15
|
+
return {
|
|
16
|
+
STETH: r,
|
|
17
|
+
wstETH: r,
|
|
18
|
+
};
|
|
16
19
|
}
|
|
17
20
|
catch (e) {
|
|
18
21
|
console.error(e);
|
|
19
|
-
return
|
|
22
|
+
return {};
|
|
20
23
|
}
|
|
21
24
|
}
|
|
22
25
|
exports.getLidoAPY = getLidoAPY;
|
package/lib/apy/yearnAPY.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { YearnLPToken } from "@gearbox-protocol/sdk-gov";
|
|
2
|
-
export type YearnAPYResult = Record<YearnLPToken,
|
|
3
|
-
export declare function getYearnAPY(): Promise<YearnAPYResult
|
|
1
|
+
import { NetworkType, YearnLPToken } from "@gearbox-protocol/sdk-gov";
|
|
2
|
+
export type YearnAPYResult = Record<YearnLPToken, number>;
|
|
3
|
+
export declare function getYearnAPY(network: NetworkType): Promise<YearnAPYResult>;
|
package/lib/apy/yearnAPY.js
CHANGED
|
@@ -6,13 +6,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.getYearnAPY = void 0;
|
|
7
7
|
const sdk_gov_1 = require("@gearbox-protocol/sdk-gov");
|
|
8
8
|
const axios_1 = __importDefault(require("axios"));
|
|
9
|
-
const
|
|
10
|
-
const RESPONSE_DECIMALS = 1;
|
|
11
|
-
const URL = "https://ydaemon.yearn.finance/vaults/all?chainids=1&limit=2500";
|
|
9
|
+
const getUrl = (chainId) => `https://ydaemon.yearn.finance/vaults/all?chainids=${chainId}&limit=2500`;
|
|
12
10
|
const transformSymbol = (s) => s.replaceAll("_", "-").toLowerCase();
|
|
13
|
-
async function getYearnAPY() {
|
|
11
|
+
async function getYearnAPY(network) {
|
|
14
12
|
try {
|
|
15
|
-
const
|
|
13
|
+
const chainId = sdk_gov_1.CHAINS[network];
|
|
14
|
+
const { data } = await axios_1.default.get(getUrl(chainId));
|
|
16
15
|
const dataBySymbol = data.reduce((acc, d) => {
|
|
17
16
|
acc[d.symbol.toLowerCase()] = d;
|
|
18
17
|
return acc;
|
|
@@ -23,13 +22,14 @@ async function getYearnAPY() {
|
|
|
23
22
|
const { apr: apy } = data || {};
|
|
24
23
|
const { netAPR } = apy || {};
|
|
25
24
|
const netApy = netAPR || 0;
|
|
26
|
-
|
|
25
|
+
const r = Math.round(netApy * Number(sdk_gov_1.PERCENTAGE_FACTOR) * Number(sdk_gov_1.PERCENTAGE_DECIMALS));
|
|
26
|
+
acc[yearnSymbol] = r;
|
|
27
27
|
return acc;
|
|
28
28
|
}, {});
|
|
29
29
|
return yearnAPY;
|
|
30
30
|
}
|
|
31
31
|
catch (e) {
|
|
32
|
-
return
|
|
32
|
+
return {};
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
exports.getYearnAPY = getYearnAPY;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { NetworkType
|
|
1
|
+
import { NetworkType } from "@gearbox-protocol/sdk-gov";
|
|
2
2
|
import { providers, Signer } from "ethers";
|
|
3
3
|
import { Asset } from "../core/assets";
|
|
4
4
|
import { CreditAccountData } from "../core/creditAccount";
|
|
@@ -39,9 +39,8 @@ interface FindOpenStrategyPathProps {
|
|
|
39
39
|
export declare class PathFinder {
|
|
40
40
|
pathFinder: IRouterV3;
|
|
41
41
|
network: NetworkType;
|
|
42
|
-
static connectors: Array<SupportedToken>;
|
|
43
42
|
protected readonly _connectors: Array<string>;
|
|
44
|
-
constructor(address: string, provider: Signer | providers.Provider, network?: NetworkType
|
|
43
|
+
constructor(address: string, provider: Signer | providers.Provider, network?: NetworkType);
|
|
45
44
|
findAllSwaps({ creditAccount, swapOperation, tokenIn, tokenOut, amount, leftoverAmount, slippage, }: FindAllSwapsProps): Promise<Array<PathFinderResult>>;
|
|
46
45
|
findOneTokenPath({ creditAccount, tokenIn, tokenOut, amount, slippage, }: FindOneTokenPathProps): Promise<PathFinderResult>;
|
|
47
46
|
/**
|
|
@@ -9,19 +9,11 @@ const GAS_PER_BLOCK = 400e6;
|
|
|
9
9
|
class PathFinder {
|
|
10
10
|
pathFinder;
|
|
11
11
|
network;
|
|
12
|
-
static connectors = [
|
|
13
|
-
"USDC",
|
|
14
|
-
"WETH",
|
|
15
|
-
"USDT",
|
|
16
|
-
"FRAX",
|
|
17
|
-
];
|
|
18
12
|
_connectors;
|
|
19
|
-
constructor(address, provider, network = "Mainnet"
|
|
13
|
+
constructor(address, provider, network = "Mainnet") {
|
|
20
14
|
this.pathFinder = types_1.IRouterV3__factory.connect(address, provider);
|
|
21
15
|
this.network = network;
|
|
22
|
-
this._connectors =
|
|
23
|
-
.map(c => sdk_gov_1.tokenDataByNetwork[this.network][c]?.toLowerCase())
|
|
24
|
-
.filter(t => !!t);
|
|
16
|
+
this._connectors = (0, sdk_gov_1.getConnectors)(network);
|
|
25
17
|
}
|
|
26
18
|
async findAllSwaps({ creditAccount, swapOperation, tokenIn, tokenOut, amount, leftoverAmount, slippage, }) {
|
|
27
19
|
const connectors = this.getAvailableConnectors(creditAccount.balances);
|
|
@@ -26,18 +26,31 @@ describe("PathFinder test", () => {
|
|
|
26
26
|
it("has all expected connectors", () => {
|
|
27
27
|
const pf = new pathfinder_1.PathFinder("", new ethers_1.providers.JsonRpcProvider(), "Mainnet");
|
|
28
28
|
const allowedTokens = {
|
|
29
|
-
[sdk_gov_1.tokenDataByNetwork.Mainnet.USDC.toLowerCase()]: true,
|
|
30
29
|
[sdk_gov_1.tokenDataByNetwork.Mainnet.WETH.toLowerCase()]: true,
|
|
31
30
|
[sdk_gov_1.tokenDataByNetwork.Mainnet.DAI.toLowerCase()]: true,
|
|
31
|
+
[sdk_gov_1.tokenDataByNetwork.Mainnet.USDC.toLowerCase()]: true,
|
|
32
32
|
[sdk_gov_1.tokenDataByNetwork.Mainnet.FRAX.toLowerCase()]: true,
|
|
33
|
-
[sdk_gov_1.tokenDataByNetwork.Mainnet.
|
|
33
|
+
[sdk_gov_1.tokenDataByNetwork.Mainnet.rETH.toLowerCase()]: true,
|
|
34
34
|
};
|
|
35
35
|
(0, chai_1.expect)(pf.getAvailableConnectors(allowedTokens)).to.be.deep.equal([
|
|
36
|
-
sdk_gov_1.tokenDataByNetwork.Mainnet.USDC.toLowerCase(),
|
|
37
36
|
sdk_gov_1.tokenDataByNetwork.Mainnet.WETH.toLowerCase(),
|
|
38
|
-
|
|
39
|
-
sdk_gov_1.tokenDataByNetwork.Mainnet.
|
|
37
|
+
sdk_gov_1.tokenDataByNetwork.Mainnet.DAI.toLowerCase(),
|
|
38
|
+
sdk_gov_1.tokenDataByNetwork.Mainnet.USDC.toLowerCase(),
|
|
40
39
|
sdk_gov_1.tokenDataByNetwork.Mainnet.FRAX.toLowerCase(),
|
|
40
|
+
sdk_gov_1.tokenDataByNetwork.Mainnet.rETH.toLowerCase(),
|
|
41
|
+
]);
|
|
42
|
+
});
|
|
43
|
+
it("has all expected connectors, when gew are disabled", () => {
|
|
44
|
+
const pf = new pathfinder_1.PathFinder("", new ethers_1.providers.JsonRpcProvider(), "Mainnet");
|
|
45
|
+
const allowedTokens = {
|
|
46
|
+
[sdk_gov_1.tokenDataByNetwork.Mainnet.WETH.toLowerCase()]: true,
|
|
47
|
+
[sdk_gov_1.tokenDataByNetwork.Mainnet.DAI.toLowerCase()]: true,
|
|
48
|
+
[sdk_gov_1.tokenDataByNetwork.Mainnet.rETH.toLowerCase()]: true,
|
|
49
|
+
};
|
|
50
|
+
(0, chai_1.expect)(pf.getAvailableConnectors(allowedTokens)).to.be.deep.equal([
|
|
51
|
+
sdk_gov_1.tokenDataByNetwork.Mainnet.WETH.toLowerCase(),
|
|
52
|
+
sdk_gov_1.tokenDataByNetwork.Mainnet.DAI.toLowerCase(),
|
|
53
|
+
sdk_gov_1.tokenDataByNetwork.Mainnet.rETH.toLowerCase(),
|
|
41
54
|
]);
|
|
42
55
|
});
|
|
43
56
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gearbox-protocol/sdk",
|
|
3
|
-
"version": "3.0.0-next.
|
|
3
|
+
"version": "3.0.0-next.111",
|
|
4
4
|
"description": "Gearbox SDK",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"test": "npx mocha -r ts-node/register -r dotenv/config 'src/**/*.spec.ts'"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@gearbox-protocol/sdk-gov": "^1.
|
|
33
|
+
"@gearbox-protocol/sdk-gov": "^1.28.2",
|
|
34
34
|
"axios": "^1.2.6",
|
|
35
35
|
"decimal.js-light": "^2.5.1",
|
|
36
36
|
"deep-eql": "^4.1.0",
|
package/lib/apy/maker.d.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { ERC4626Params, ERC4626VaultContract, NetworkType } from "@gearbox-protocol/sdk-gov";
|
|
2
|
-
import { BigNumberish } from "ethers";
|
|
3
|
-
import { Interface } from "ethers/lib/utils";
|
|
4
|
-
export declare const MAKER_VAULT_ABI: {
|
|
5
|
-
inputs: never[];
|
|
6
|
-
name: string;
|
|
7
|
-
outputs: {
|
|
8
|
-
internalType: string;
|
|
9
|
-
name: string;
|
|
10
|
-
type: string;
|
|
11
|
-
}[];
|
|
12
|
-
stateMutability: string;
|
|
13
|
-
type: string;
|
|
14
|
-
}[];
|
|
15
|
-
export declare const MAKER_VAULT_INTERFACE: Interface;
|
|
16
|
-
export type MakerPoolContract = Extract<ERC4626VaultContract, "MAKER_DSR_VAULT">;
|
|
17
|
-
interface PoolInfo {
|
|
18
|
-
pool: ERC4626Params;
|
|
19
|
-
poolAddress: string;
|
|
20
|
-
}
|
|
21
|
-
export interface GetMakerAPYBulkCallsProps {
|
|
22
|
-
pools: Array<MakerPoolContract>;
|
|
23
|
-
networkType: NetworkType;
|
|
24
|
-
}
|
|
25
|
-
export declare function getMakerAPYBulkCalls({ pools, networkType, }: GetMakerAPYBulkCallsProps): {
|
|
26
|
-
poolsInfo: PoolInfo[];
|
|
27
|
-
calls: {
|
|
28
|
-
address: string;
|
|
29
|
-
interface: Interface;
|
|
30
|
-
method: string;
|
|
31
|
-
}[];
|
|
32
|
-
};
|
|
33
|
-
type GetMakerAPYBulkCallsReturns = ReturnType<typeof getMakerAPYBulkCalls>;
|
|
34
|
-
export interface GetMakerAPYBulkProps {
|
|
35
|
-
generated: GetMakerAPYBulkCallsReturns;
|
|
36
|
-
response: Array<BigNumberish>;
|
|
37
|
-
}
|
|
38
|
-
export declare function getMakerAPYBulk(props: GetMakerAPYBulkProps): bigint[];
|
|
39
|
-
export {};
|
package/lib/apy/maker.js
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getMakerAPYBulk = exports.getMakerAPYBulkCalls = exports.MAKER_VAULT_INTERFACE = exports.MAKER_VAULT_ABI = void 0;
|
|
4
|
-
const sdk_gov_1 = require("@gearbox-protocol/sdk-gov");
|
|
5
|
-
const utils_1 = require("ethers/lib/utils");
|
|
6
|
-
const formatter_1 = require("../utils/formatter");
|
|
7
|
-
exports.MAKER_VAULT_ABI = [
|
|
8
|
-
{
|
|
9
|
-
inputs: [],
|
|
10
|
-
name: "dsr",
|
|
11
|
-
outputs: [
|
|
12
|
-
{
|
|
13
|
-
internalType: "uint256",
|
|
14
|
-
name: "",
|
|
15
|
-
type: "uint256",
|
|
16
|
-
},
|
|
17
|
-
],
|
|
18
|
-
stateMutability: "view",
|
|
19
|
-
type: "function",
|
|
20
|
-
},
|
|
21
|
-
];
|
|
22
|
-
exports.MAKER_VAULT_INTERFACE = new utils_1.Interface(exports.MAKER_VAULT_ABI);
|
|
23
|
-
const MAKER_BY_NETWORK = {
|
|
24
|
-
Mainnet: {
|
|
25
|
-
MAKER_DSR_VAULT: "0x197E90f9FAD81970bA7976f33CbD77088E5D7cf7",
|
|
26
|
-
},
|
|
27
|
-
Arbitrum: {
|
|
28
|
-
MAKER_DSR_VAULT: "",
|
|
29
|
-
},
|
|
30
|
-
Optimism: {
|
|
31
|
-
MAKER_DSR_VAULT: "",
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
function getMakerAPYBulkCalls({ pools, networkType, }) {
|
|
35
|
-
const poolsInfo = pools.map((pool) => {
|
|
36
|
-
const poolParams = sdk_gov_1.contractParams[pool];
|
|
37
|
-
const basePoolAddress = MAKER_BY_NETWORK[networkType][pool];
|
|
38
|
-
return {
|
|
39
|
-
pool: poolParams,
|
|
40
|
-
poolAddress: basePoolAddress,
|
|
41
|
-
};
|
|
42
|
-
});
|
|
43
|
-
const calls = poolsInfo.map(info => ({
|
|
44
|
-
address: info.poolAddress,
|
|
45
|
-
interface: exports.MAKER_VAULT_INTERFACE,
|
|
46
|
-
method: "dsr()",
|
|
47
|
-
}));
|
|
48
|
-
return { poolsInfo, calls };
|
|
49
|
-
}
|
|
50
|
-
exports.getMakerAPYBulkCalls = getMakerAPYBulkCalls;
|
|
51
|
-
function getMakerAPYBulk(props) {
|
|
52
|
-
const { poolsInfo } = props.generated;
|
|
53
|
-
const apyList = props.response.map((baseApy, i) => {
|
|
54
|
-
const apy = calculateMakerAPY({
|
|
55
|
-
baseApy: (0, sdk_gov_1.toBigInt)(baseApy),
|
|
56
|
-
poolInfo: poolsInfo[i],
|
|
57
|
-
});
|
|
58
|
-
return apy;
|
|
59
|
-
});
|
|
60
|
-
return apyList;
|
|
61
|
-
}
|
|
62
|
-
exports.getMakerAPYBulk = getMakerAPYBulk;
|
|
63
|
-
const POW = 3600 * 24 * 365;
|
|
64
|
-
function calculateMakerAPY(props) {
|
|
65
|
-
const rateFloat = Number((0, formatter_1.toSignificant)(props.baseApy, 27, 27));
|
|
66
|
-
const rate = Math.max(0, rateFloat ** POW - 1);
|
|
67
|
-
return (0, formatter_1.toBN)(rate.toString(), sdk_gov_1.WAD_DECIMALS_POW);
|
|
68
|
-
}
|