@gearbox-protocol/sdk 0.0.102 → 0.0.105
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/.eslintignore +5 -0
- package/.eslintrc.js +52 -0
- package/.husky/pre-push +4 -0
- package/lib/apy/convexAPY.js +3 -5
- package/lib/apy/lidoAPY.js +8 -9
- package/lib/contracts/contracts.d.ts +5 -2
- package/lib/contracts/contracts.js +19 -18
- package/lib/core/constants.d.ts +1 -1
- package/lib/core/constants.js +2 -2
- package/lib/core/creditAccount.js +7 -5
- package/lib/core/creditManager.d.ts +1 -1
- package/lib/core/creditManager.js +1 -7
- package/lib/core/creditSession.js +14 -3
- package/lib/core/eventOrTx.d.ts +1 -1
- package/lib/core/events.d.ts +19 -19
- package/lib/core/events.js +23 -21
- package/lib/core/pool.d.ts +1 -1
- package/lib/core/pool.js +1 -7
- package/lib/core/price.js +6 -1
- package/lib/core/strategy.d.ts +1 -3
- package/lib/core/strategy.js +14 -13
- package/lib/core/tokenDistributor.js +1 -1
- package/lib/core/transactions.d.ts +18 -3
- package/lib/core/transactions.js +39 -3
- package/lib/index.d.ts +8 -2
- package/lib/index.js +8 -1
- package/lib/oracles/priceFeeds.js +1 -1
- package/lib/pathfinder/convexLP.d.ts +1 -1
- package/lib/pathfinder/convexLP.js +26 -29
- package/lib/pathfinder/curveLP.d.ts +1 -1
- package/lib/pathfinder/curveLP.js +5 -7
- package/lib/pathfinder/path.d.ts +1 -1
- package/lib/pathfinder/path.js +38 -42
- package/lib/pathfinder/trade.d.ts +1 -2
- package/lib/pathfinder/tradeTypes.d.ts +5 -5
- package/lib/pathfinder/yVault.d.ts +2 -2
- package/lib/pathfinder/yVault.js +18 -15
- package/lib/strategies/convex.d.ts +12 -0
- package/lib/strategies/convex.js +74 -1
- package/lib/strategies/creditFacade.d.ts +1 -0
- package/lib/strategies/creditFacade.js +3 -0
- package/lib/strategies/curve.d.ts +15 -60
- package/lib/strategies/curve.js +74 -1
- package/lib/strategies/lido.d.ts +6 -0
- package/lib/strategies/lido.js +23 -1
- package/lib/strategies/uniswapV2.d.ts +1 -0
- package/lib/strategies/uniswapV2.js +6 -19
- package/lib/strategies/uniswapV3.d.ts +1 -0
- package/lib/strategies/uniswapV3.js +4 -1
- package/lib/strategies/yearn.d.ts +8 -0
- package/lib/strategies/yearn.js +92 -12
- package/lib/tokens/convex.d.ts +3 -3
- package/lib/tokens/curveLP.d.ts +7 -2
- package/lib/tokens/curveLP.js +8 -1
- package/lib/tokens/gear.d.ts +2 -2
- package/lib/tokens/gear.js +1 -1
- package/lib/tokens/normal.d.ts +1 -1
- package/lib/tokens/token.js +4 -4
- package/lib/tokens/tokenData.d.ts +3 -1
- package/lib/tokens/tokenData.js +10 -8
- package/lib/tokens/yearn.d.ts +6 -2
- package/lib/tokens/yearn.js +6 -0
- package/lib/utils/errors.d.ts +6 -0
- package/lib/utils/errors.js +13 -0
- package/lib/utils/formatter.d.ts +1 -1
- package/lib/utils/formatter.js +17 -14
- package/lib/utils/loading.d.ts +2 -1
- package/lib/utils/loading.js +9 -13
- package/lib/utils/mappers.js +2 -2
- package/lib/utils/network.js +2 -2
- package/lib/utils/repeater.js +12 -24
- package/lib/utils/validate.js +1 -1
- package/package.json +24 -7
- package/src/apy/convexAPY.ts +6 -6
- package/src/apy/lidoAPY.ts +12 -11
- package/src/contracts/contracts.ts +27 -17
- package/src/core/constants.ts +1 -1
- package/src/core/creditAccount.ts +28 -5
- package/src/core/creditManager.ts +29 -4
- package/src/core/creditOperation.ts +7 -7
- package/src/core/creditSession.ts +25 -5
- package/src/core/errors.ts +1 -0
- package/src/core/eventOrTx.ts +8 -5
- package/src/core/events.ts +85 -24
- package/src/core/history.ts +46 -46
- package/src/core/operations.ts +6 -0
- package/src/core/pool.ts +16 -4
- package/src/core/price.ts +7 -3
- package/src/core/strategy.ts +27 -23
- package/src/core/tokenDistributor.ts +2 -2
- package/src/core/transactions.ts +427 -350
- package/src/index.ts +10 -3
- package/src/oracles/priceFeeds.ts +523 -523
- package/src/pathfinder/contracts.ts +15 -13
- package/src/pathfinder/convexLP.ts +29 -25
- package/src/pathfinder/curveLP.ts +57 -53
- package/src/pathfinder/path.ts +17 -9
- package/src/pathfinder/priority.ts +11 -11
- package/src/pathfinder/trade.ts +84 -77
- package/src/pathfinder/tradeTypes.ts +98 -94
- package/src/pathfinder/yVault.ts +26 -11
- package/src/payload/token.ts +3 -3
- package/src/strategies/convex.ts +361 -186
- package/src/strategies/creditFacade.ts +74 -53
- package/src/strategies/curve.ts +400 -189
- package/src/strategies/lido.ts +70 -32
- package/src/strategies/uniswapV2.ts +93 -111
- package/src/strategies/uniswapV3.ts +118 -91
- package/src/strategies/yearn.ts +187 -60
- package/src/tokens/connectors.ts +6 -6
- package/src/tokens/convex.ts +297 -296
- package/src/tokens/curveLP.ts +176 -165
- package/src/tokens/gear.ts +47 -45
- package/src/tokens/normal.ts +801 -802
- package/src/tokens/token.ts +9 -5
- package/src/tokens/tokenData.ts +19 -9
- package/src/tokens/tokenType.ts +11 -11
- package/src/tokens/yearn.ts +130 -124
- package/src/utils/errors.ts +11 -0
- package/src/utils/formatter.ts +22 -18
- package/src/utils/loading.ts +14 -6
- package/src/utils/mappers.ts +8 -6
- package/src/utils/multicall.ts +2 -0
- package/src/utils/network.ts +21 -21
- package/src/utils/repeater.ts +2 -2
- package/src/utils/validate.ts +1 -1
- package/lib/utils/events.d.ts +0 -2
- package/lib/utils/events.js +0 -13
- package/src/utils/events.ts +0 -10
package/src/tokens/token.ts
CHANGED
|
@@ -139,7 +139,7 @@ export const tokenDataByNetwork: Record<
|
|
|
139
139
|
yvCurve_stETH: "0xdCD90C7f6324cfa40d7169ef80b12031770B4325",
|
|
140
140
|
yvCurve_FRAX: "0xB4AdA607B9d6b2c9Ee07A275e9616B84AC560139",
|
|
141
141
|
|
|
142
|
-
//GEARBOX
|
|
142
|
+
// GEARBOX
|
|
143
143
|
dDAI: "0x6CFaF95457d7688022FC53e7AbE052ef8DFBbdBA",
|
|
144
144
|
dUSDC: "0xc411dB5f5Eb3f7d552F9B8454B2D74097ccdE6E3",
|
|
145
145
|
dWBTC: "0xe753260F1955e8678DCeA8887759e07aa57E8c54",
|
|
@@ -217,7 +217,7 @@ export const tokenDataByNetwork: Record<
|
|
|
217
217
|
stkcvxsteCRV: "0xd8bAbB7EfBF7F931a69B209f71b27421F8b18516",
|
|
218
218
|
stkcvxcrvPlain3andSUSD: "0x6b45Cab756B41a7204973b71362ef5F73E67F6DA",
|
|
219
219
|
|
|
220
|
-
//GEARBOX
|
|
220
|
+
// GEARBOX
|
|
221
221
|
dDAI: "0x077a3Ce0D572b72436F6644793Fc7721353aF1f4",
|
|
222
222
|
dUSDC: "0x8147e00456c8A3128182730bFFdFd9D1E6bbC048",
|
|
223
223
|
dWBTC: "0x34D9B3c13B25632879B2DaabBde702F612902238",
|
|
@@ -229,6 +229,10 @@ export const tokenDataByNetwork: Record<
|
|
|
229
229
|
|
|
230
230
|
export const tokenSymbolByAddress = objectEntries(tokenDataByNetwork).reduce<
|
|
231
231
|
Record<string, SupportedToken>
|
|
232
|
-
>(
|
|
233
|
-
|
|
234
|
-
|
|
232
|
+
>(
|
|
233
|
+
(acc, [, tokens]) => ({
|
|
234
|
+
...acc,
|
|
235
|
+
...filterEmptyKeys(keyToLowercase(swapKeyValue(tokens)))
|
|
236
|
+
}),
|
|
237
|
+
{}
|
|
238
|
+
);
|
package/src/tokens/tokenData.ts
CHANGED
|
@@ -4,22 +4,32 @@ import { STATIC_TOKEN } from "../config";
|
|
|
4
4
|
import { NetworkType } from "../core/constants";
|
|
5
5
|
import { SupportedToken, tokenDataByNetwork } from "./token";
|
|
6
6
|
|
|
7
|
+
type SymbolReplacements = Record<string, string>;
|
|
8
|
+
const defaultSymbolReplacement: SymbolReplacements = {
|
|
9
|
+
dWETH: "dETH",
|
|
10
|
+
WETH: "ETH"
|
|
11
|
+
};
|
|
12
|
+
|
|
7
13
|
export class TokenData {
|
|
8
14
|
public readonly id: string;
|
|
15
|
+
|
|
9
16
|
// public readonly name: string;
|
|
10
17
|
public readonly symbol: string;
|
|
18
|
+
|
|
11
19
|
public readonly address: string;
|
|
20
|
+
|
|
12
21
|
public readonly decimals: number;
|
|
22
|
+
|
|
13
23
|
public readonly icon?: string;
|
|
14
24
|
|
|
15
|
-
constructor(
|
|
25
|
+
constructor(
|
|
26
|
+
payload: TokenDataPayload,
|
|
27
|
+
symbolReplacements: SymbolReplacements = defaultSymbolReplacement
|
|
28
|
+
) {
|
|
16
29
|
this.id = payload.addr;
|
|
17
30
|
this.address = payload.addr;
|
|
18
31
|
// this.name = payload.name;
|
|
19
|
-
this.symbol = payload.symbol;
|
|
20
|
-
if (this.symbol === "WETH" || this.symbol === "dWETH") {
|
|
21
|
-
this.symbol = this.symbol.replace("WETH", "ETH");
|
|
22
|
-
}
|
|
32
|
+
this.symbol = symbolReplacements[payload.symbol] || payload.symbol;
|
|
23
33
|
this.decimals = payload.decimals;
|
|
24
34
|
this.icon = `${STATIC_TOKEN}${payload.symbol?.toLowerCase()}.svg`;
|
|
25
35
|
}
|
|
@@ -41,7 +51,7 @@ export interface TokenAllowance {
|
|
|
41
51
|
|
|
42
52
|
export const WETHToken: Record<NetworkType, string> = {
|
|
43
53
|
Mainnet: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
|
|
44
|
-
Kovan: "0xd0a1e359811322d97991e03f863a0c30c2cf029c"
|
|
54
|
+
Kovan: "0xd0a1e359811322d97991e03f863a0c30c2cf029c"
|
|
45
55
|
};
|
|
46
56
|
|
|
47
57
|
export const connectors: Record<NetworkType, Array<SupportedToken>> = {
|
|
@@ -51,7 +61,7 @@ export const connectors: Record<NetworkType, Array<SupportedToken>> = {
|
|
|
51
61
|
"DAI",
|
|
52
62
|
"USDC",
|
|
53
63
|
// "USDT",
|
|
54
|
-
"WBTC"
|
|
64
|
+
"WBTC"
|
|
55
65
|
// "stETH",
|
|
56
66
|
// "PAX",
|
|
57
67
|
// "TUSD",
|
|
@@ -59,11 +69,11 @@ export const connectors: Record<NetworkType, Array<SupportedToken>> = {
|
|
|
59
69
|
// "BAL",
|
|
60
70
|
// "sUSD",
|
|
61
71
|
],
|
|
62
|
-
Kovan: ["WETH", "DAI", "USDC", "WBTC"]
|
|
72
|
+
Kovan: ["WETH", "DAI", "USDC", "WBTC"]
|
|
63
73
|
};
|
|
64
74
|
|
|
65
75
|
export function getConnectors(networkType: NetworkType) {
|
|
66
|
-
return connectors[networkType].map(
|
|
76
|
+
return connectors[networkType].map(e => {
|
|
67
77
|
const result =
|
|
68
78
|
e === "WETH"
|
|
69
79
|
? WETHToken[networkType]
|
package/src/tokens/tokenType.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
export enum TokenType {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
2
|
+
CONNECTOR,
|
|
3
|
+
NORMAL_TOKEN,
|
|
4
|
+
CURVE_LP,
|
|
5
|
+
META_CURVE_LP,
|
|
6
|
+
YEARN_VAULT,
|
|
7
|
+
YEARN_VAULT_OF_CURVE_LP,
|
|
8
|
+
YEARN_VAULT_OF_META_CURVE_LP,
|
|
9
|
+
CONVEX_LP_TOKEN,
|
|
10
|
+
CONVEX_STAKED_PHANTOM_TOKEN,
|
|
11
|
+
DIESEL_LP_TOKEN
|
|
12
|
+
}
|
package/src/tokens/yearn.ts
CHANGED
|
@@ -1,137 +1,143 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import type { YearnVaultContract } from "../contracts/contracts";
|
|
2
|
+
import { TradeAction, TradeType } from "../pathfinder/tradeTypes";
|
|
3
|
+
import type { TokenBase } from "./token";
|
|
4
|
+
import type { CurveLPToken } from "./curveLP";
|
|
5
|
+
import { NormalToken } from "./normal";
|
|
6
|
+
import { TokenType } from "./tokenType";
|
|
6
7
|
|
|
7
8
|
export type YearnLPToken =
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
| "yvDAI"
|
|
10
|
+
| "yvUSDC"
|
|
11
|
+
| "yvWETH"
|
|
12
|
+
| "yvWBTC"
|
|
13
|
+
| "yvCurve_stETH"
|
|
14
|
+
| "yvCurve_FRAX";
|
|
14
15
|
|
|
15
16
|
export type YearnVaultTokenData = {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
symbol: YearnLPToken;
|
|
18
|
+
type: TokenType.YEARN_VAULT;
|
|
19
|
+
underlying: NormalToken;
|
|
20
|
+
lpActions: Array<TradeAction>;
|
|
21
|
+
vault: YearnVaultContract;
|
|
20
22
|
} & TokenBase;
|
|
21
23
|
|
|
22
24
|
export type YearnVaultOfCurveLPTokenData = {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
symbol: YearnLPToken;
|
|
26
|
+
type: TokenType.YEARN_VAULT_OF_CURVE_LP;
|
|
27
|
+
underlying: CurveLPToken;
|
|
28
|
+
lpActions: Array<TradeAction>;
|
|
29
|
+
vault: YearnVaultContract;
|
|
27
30
|
} & TokenBase;
|
|
28
31
|
|
|
29
32
|
export type YearnVaultOfMetaCurveLPTokenData = {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
symbol: YearnLPToken;
|
|
34
|
+
type: TokenType.YEARN_VAULT_OF_META_CURVE_LP;
|
|
35
|
+
underlying: CurveLPToken;
|
|
36
|
+
lpActions: Array<TradeAction>;
|
|
37
|
+
vault: YearnVaultContract;
|
|
34
38
|
} & TokenBase;
|
|
35
39
|
|
|
36
|
-
export const yearnTokens: Record<
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
40
|
+
export const yearnTokens: Record<
|
|
41
|
+
YearnLPToken,
|
|
42
|
+
| YearnVaultTokenData
|
|
43
|
+
| YearnVaultOfCurveLPTokenData
|
|
44
|
+
| YearnVaultOfMetaCurveLPTokenData
|
|
45
|
+
> = {
|
|
46
|
+
// YEARN TOKENS
|
|
47
|
+
yvDAI: {
|
|
48
|
+
name: "yvDAI",
|
|
49
|
+
decimals: 18,
|
|
50
|
+
symbol: "yvDAI",
|
|
51
|
+
type: TokenType.YEARN_VAULT,
|
|
52
|
+
underlying: "DAI",
|
|
53
|
+
vault: "YEARN_DAI_VAULT",
|
|
54
|
+
lpActions: [
|
|
55
|
+
{
|
|
56
|
+
type: TradeType.YearnWithdraw,
|
|
57
|
+
contract: "YEARN_DAI_VAULT",
|
|
58
|
+
tokenOut: "DAI"
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
yvUSDC: {
|
|
64
|
+
name: "yvUSDC",
|
|
65
|
+
decimals: 6,
|
|
66
|
+
symbol: "yvUSDC",
|
|
67
|
+
type: TokenType.YEARN_VAULT,
|
|
68
|
+
underlying: "USDC",
|
|
69
|
+
vault: "YEARN_USDC_VAULT",
|
|
70
|
+
lpActions: [
|
|
71
|
+
{
|
|
72
|
+
type: TradeType.YearnWithdraw,
|
|
73
|
+
contract: "YEARN_USDC_VAULT",
|
|
74
|
+
tokenOut: "USDC"
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
|
|
79
|
+
yvWETH: {
|
|
80
|
+
name: "yvWETH",
|
|
81
|
+
decimals: 18,
|
|
82
|
+
symbol: "yvWETH",
|
|
83
|
+
type: TokenType.YEARN_VAULT,
|
|
84
|
+
underlying: "WETH",
|
|
85
|
+
vault: "YEARN_WETH_VAULT",
|
|
86
|
+
lpActions: [
|
|
87
|
+
{
|
|
88
|
+
type: TradeType.YearnWithdraw,
|
|
89
|
+
contract: "YEARN_WETH_VAULT",
|
|
90
|
+
tokenOut: "WETH"
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
yvWBTC: {
|
|
96
|
+
name: "yvWBTC",
|
|
97
|
+
decimals: 8,
|
|
98
|
+
symbol: "yvWBTC",
|
|
99
|
+
type: TokenType.YEARN_VAULT,
|
|
100
|
+
underlying: "WBTC",
|
|
101
|
+
vault: "YEARN_WBTC_VAULT",
|
|
102
|
+
lpActions: [
|
|
103
|
+
{
|
|
104
|
+
type: TradeType.YearnWithdraw,
|
|
105
|
+
contract: "YEARN_WBTC_VAULT",
|
|
106
|
+
tokenOut: "WBTC"
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
// YEARN- CURVE TOKENS
|
|
112
|
+
yvCurve_stETH: {
|
|
113
|
+
name: "yvCurve-stETH",
|
|
114
|
+
decimals: 18,
|
|
115
|
+
symbol: "yvCurve_stETH",
|
|
116
|
+
type: TokenType.YEARN_VAULT_OF_CURVE_LP,
|
|
117
|
+
underlying: "steCRV",
|
|
118
|
+
vault: "YEARN_CURVE_STETH_VAULT",
|
|
119
|
+
lpActions: [
|
|
120
|
+
{
|
|
121
|
+
type: TradeType.YearnWithdraw,
|
|
122
|
+
contract: "YEARN_CURVE_STETH_VAULT",
|
|
123
|
+
tokenOut: "steCRV"
|
|
124
|
+
}
|
|
125
|
+
]
|
|
126
|
+
},
|
|
127
|
+
|
|
128
|
+
yvCurve_FRAX: {
|
|
129
|
+
name: "yvCurve-FRAX",
|
|
130
|
+
decimals: 18,
|
|
131
|
+
symbol: "yvCurve_FRAX",
|
|
132
|
+
type: TokenType.YEARN_VAULT_OF_META_CURVE_LP,
|
|
133
|
+
underlying: "FRAX3CRV",
|
|
134
|
+
vault: "YEARN_CURVE_FRAX_VAULT",
|
|
135
|
+
lpActions: [
|
|
136
|
+
{
|
|
137
|
+
type: TradeType.YearnWithdraw,
|
|
138
|
+
contract: "YEARN_CURVE_FRAX_VAULT",
|
|
139
|
+
tokenOut: "FRAX3CRV"
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
}
|
|
137
143
|
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface IMetamaskError {
|
|
2
|
+
code: number;
|
|
3
|
+
message: string;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export const isMetamaskError = (e: any): e is IMetamaskError => {
|
|
7
|
+
if (!e) return false;
|
|
8
|
+
if (typeof e !== "object") return false;
|
|
9
|
+
if (typeof e.code !== "number" || typeof e.message !== "string") return false;
|
|
10
|
+
return true;
|
|
11
|
+
};
|
package/src/utils/formatter.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BigNumber, BigNumberish } from "ethers";
|
|
2
|
-
import { PERCENTAGE_FACTOR, RAY, LEVERAGE_DECIMALS } from "../core/constants";
|
|
3
2
|
import Decimal from "decimal.js-light";
|
|
3
|
+
import { PERCENTAGE_FACTOR, RAY, LEVERAGE_DECIMALS } from "../core/constants";
|
|
4
4
|
|
|
5
5
|
export function rayToNumber(num: BigNumberish): number {
|
|
6
6
|
return (
|
|
@@ -13,10 +13,13 @@ export function formatRAY(num?: BigNumber): string {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
export function formatBN(
|
|
16
|
-
|
|
16
|
+
numArg: BigNumberish | undefined,
|
|
17
17
|
decimals: number,
|
|
18
|
-
|
|
18
|
+
precisionArg?: number
|
|
19
19
|
): string {
|
|
20
|
+
let num = numArg;
|
|
21
|
+
let precision = precisionArg;
|
|
22
|
+
|
|
20
23
|
if (!num) return "-";
|
|
21
24
|
|
|
22
25
|
// if (BigNumber.from(num).gt(BigNumber.from(10).pow(37))) {
|
|
@@ -64,23 +67,24 @@ export function formatBn4dig(num: BigNumber, precision: number = 2): string {
|
|
|
64
67
|
let numStr = num.toString();
|
|
65
68
|
if (numStr.length < 6) numStr = "0".repeat(6 - numStr.length) + numStr;
|
|
66
69
|
return numStr.length <= 6
|
|
67
|
-
?
|
|
68
|
-
: numStr.slice(0, numStr.length - 6)
|
|
69
|
-
|
|
70
|
-
numStr.
|
|
70
|
+
? `0.${numStr.slice(0, precision)}`
|
|
71
|
+
: `${numStr.slice(0, numStr.length - 6)}.${numStr.slice(
|
|
72
|
+
numStr.length - 6,
|
|
73
|
+
numStr.length - 6 + precision
|
|
74
|
+
)}`;
|
|
71
75
|
}
|
|
72
76
|
|
|
73
77
|
export function toHumanFormat(num: BigNumber, precision: number = 2): string {
|
|
74
78
|
if (num.gte(1e15)) {
|
|
75
|
-
return formatBn4dig(num.div(1e9), precision)
|
|
79
|
+
return `${formatBn4dig(num.div(1e9), precision)}Bn`;
|
|
76
80
|
}
|
|
77
81
|
|
|
78
82
|
if (num.gte(1e12)) {
|
|
79
|
-
return formatBn4dig(num.div(1e6), precision)
|
|
83
|
+
return `${formatBn4dig(num.div(1e6), precision)}M`;
|
|
80
84
|
}
|
|
81
85
|
|
|
82
86
|
if (num.gte(1e9)) {
|
|
83
|
-
return formatBn4dig(num.div(1e3), precision)
|
|
87
|
+
return `${formatBn4dig(num.div(1e3), precision)}K`;
|
|
84
88
|
}
|
|
85
89
|
|
|
86
90
|
return formatBn4dig(num, precision);
|
|
@@ -112,23 +116,23 @@ export function shortHash(address?: string): string {
|
|
|
112
116
|
|
|
113
117
|
export const formatRate = (rate: BigNumberish | undefined) =>
|
|
114
118
|
rate
|
|
115
|
-
? (
|
|
119
|
+
? `${(
|
|
116
120
|
BigNumber.from(rate)
|
|
117
121
|
.mul(PERCENTAGE_FACTOR)
|
|
118
122
|
.mul(100)
|
|
119
123
|
.div(RAY)
|
|
120
124
|
.toNumber() / PERCENTAGE_FACTOR
|
|
121
|
-
).toFixed(2)
|
|
125
|
+
).toFixed(2)}%`
|
|
122
126
|
: "0.00%";
|
|
123
127
|
|
|
124
128
|
export function formatDate(date: Date): string {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
+
const d = new Date(date);
|
|
130
|
+
let month = `${d.getMonth() + 1}`;
|
|
131
|
+
let day = `${d.getDate()}`;
|
|
132
|
+
const year = d.getFullYear();
|
|
129
133
|
|
|
130
|
-
if (month.length < 2) month =
|
|
131
|
-
if (day.length < 2) day =
|
|
134
|
+
if (month.length < 2) month = `0${month}`;
|
|
135
|
+
if (day.length < 2) day = `0${day}`;
|
|
132
136
|
|
|
133
137
|
return [year, month, day].join("-");
|
|
134
138
|
}
|
package/src/utils/loading.ts
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
let isLoaded: number = 0;
|
|
1
|
+
const isLoaded = (v: unknown) => v !== undefined;
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
export function allLoaded(itemsToLoad: Array<unknown>): boolean {
|
|
4
|
+
return itemsToLoad.reduce<boolean>(
|
|
5
|
+
(acc, item) => acc && isLoaded(item),
|
|
6
|
+
true
|
|
7
|
+
);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function loadingProgress(itemsToLoad: Array<unknown>): number {
|
|
11
|
+
const loaded = itemsToLoad.reduce<number>(
|
|
12
|
+
(acc, item) => (isLoaded(item) ? acc + 1 : acc),
|
|
13
|
+
0
|
|
14
|
+
);
|
|
7
15
|
|
|
8
|
-
return Math.floor((
|
|
16
|
+
return Math.floor((loaded / itemsToLoad.length) * 100);
|
|
9
17
|
}
|
package/src/utils/mappers.ts
CHANGED
|
@@ -7,9 +7,10 @@ const objectEntries = <K extends SupportedValue, T>(
|
|
|
7
7
|
const swapKeyValue = <K extends SupportedValue, T extends SupportedValue>(
|
|
8
8
|
o: Record<K, T>
|
|
9
9
|
): Record<T, K> =>
|
|
10
|
-
objectEntries(o).reduce(
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
objectEntries(o).reduce(
|
|
11
|
+
(acc, [key, value]) => ({ ...acc, [value]: key }),
|
|
12
|
+
{} as Record<T, K>
|
|
13
|
+
);
|
|
13
14
|
|
|
14
15
|
const keyToLowercase = <K extends SupportedValue, T extends SupportedValue>(
|
|
15
16
|
o: Record<K, T>
|
|
@@ -22,9 +23,10 @@ const keyToLowercase = <K extends SupportedValue, T extends SupportedValue>(
|
|
|
22
23
|
const filterEmptyKeys = <K extends SupportedValue, T extends SupportedValue>(
|
|
23
24
|
o: Record<K, T>
|
|
24
25
|
): Record<K, T> =>
|
|
25
|
-
objectEntries(o).reduce(
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
objectEntries(o).reduce(
|
|
27
|
+
(acc, [key, value]) => (key ? { ...acc, [key]: value } : acc),
|
|
28
|
+
{} as Record<K, T>
|
|
29
|
+
);
|
|
28
30
|
|
|
29
31
|
export type { SupportedValue };
|
|
30
32
|
export { objectEntries, swapKeyValue, keyToLowercase, filterEmptyKeys };
|
package/src/utils/multicall.ts
CHANGED
|
@@ -36,7 +36,9 @@ export async function multicall<R extends Array<any>>(
|
|
|
36
36
|
|
|
37
37
|
export class MultiCallContract<T extends ethers.utils.Interface> {
|
|
38
38
|
private readonly _address: string;
|
|
39
|
+
|
|
39
40
|
private readonly _interface: T;
|
|
41
|
+
|
|
40
42
|
protected _multiCall: Multicall2;
|
|
41
43
|
|
|
42
44
|
constructor(
|
package/src/utils/network.ts
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import {ethers} from "ethers";
|
|
2
|
-
import {tokenDataByNetwork} from "../tokens/token";
|
|
3
|
-
import {ERC20__factory} from "../types";
|
|
4
|
-
import {
|
|
1
|
+
import { ethers } from "ethers";
|
|
2
|
+
import { tokenDataByNetwork } from "../tokens/token";
|
|
3
|
+
import { ERC20__factory } from "../types";
|
|
4
|
+
import { ADDRESS_0X0, NetworkType } from "../core/constants";
|
|
5
5
|
|
|
6
6
|
export async function detectNetwork(
|
|
7
|
-
|
|
7
|
+
provider: ethers.providers.Provider
|
|
8
8
|
): Promise<NetworkType> {
|
|
9
|
+
try {
|
|
10
|
+
const usdcMainnet = ERC20__factory.connect(
|
|
11
|
+
tokenDataByNetwork.Mainnet.USDC,
|
|
12
|
+
provider
|
|
13
|
+
);
|
|
14
|
+
await usdcMainnet.balanceOf(ADDRESS_0X0);
|
|
15
|
+
return "Mainnet";
|
|
16
|
+
} catch {
|
|
9
17
|
try {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
18
|
+
const usdcMainnet = ERC20__factory.connect(
|
|
19
|
+
tokenDataByNetwork.Kovan.USDC,
|
|
20
|
+
provider
|
|
21
|
+
);
|
|
22
|
+
await usdcMainnet.balanceOf(ADDRESS_0X0);
|
|
23
|
+
return "Kovan";
|
|
16
24
|
} catch {
|
|
17
|
-
|
|
18
|
-
const usdcMainnet = ERC20__factory.connect(
|
|
19
|
-
tokenDataByNetwork.Kovan.USDC,
|
|
20
|
-
provider
|
|
21
|
-
);
|
|
22
|
-
await usdcMainnet.balanceOf(ADDRESS_0x0);
|
|
23
|
-
return "Kovan";
|
|
24
|
-
} catch {
|
|
25
|
-
throw new Error("Unknown network");
|
|
26
|
-
}
|
|
25
|
+
throw new Error("Unknown network");
|
|
27
26
|
}
|
|
27
|
+
}
|
|
28
28
|
}
|
package/src/utils/repeater.ts
CHANGED
|
@@ -4,9 +4,9 @@ export async function callRepeater<T>(
|
|
|
4
4
|
call: () => Promise<T>,
|
|
5
5
|
step: number = 0
|
|
6
6
|
): Promise<T> {
|
|
7
|
-
return new Promise<T>(
|
|
7
|
+
return new Promise<T>((resolve, reject) => {
|
|
8
8
|
try {
|
|
9
|
-
|
|
9
|
+
call().then(r => resolve(r));
|
|
10
10
|
} catch (e) {
|
|
11
11
|
console.error(`Error ${step}: ${e}`);
|
|
12
12
|
if (step > 5 || (e as MetamaskError).code !== -32000) reject(e);
|
package/src/utils/validate.ts
CHANGED
package/lib/utils/events.d.ts
DELETED
package/lib/utils/events.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.typedEventsComparator = void 0;
|
|
4
|
-
var typedEventsComparator = function (a, b) {
|
|
5
|
-
return a.blockNumber === b.blockNumber
|
|
6
|
-
? a.logIndex > b.logIndex
|
|
7
|
-
? 1
|
|
8
|
-
: -1
|
|
9
|
-
: a.blockNumber > b.blockNumber
|
|
10
|
-
? 1
|
|
11
|
-
: -1;
|
|
12
|
-
};
|
|
13
|
-
exports.typedEventsComparator = typedEventsComparator;
|
package/src/utils/events.ts
DELETED