@gearbox-protocol/sdk 0.0.101 → 0.0.104

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.
Files changed (139) hide show
  1. package/.eslintignore +5 -0
  2. package/.eslintrc.js +52 -0
  3. package/.husky/pre-push +4 -0
  4. package/lib/apy/convexAPY.js +7 -9
  5. package/lib/apy/lidoAPY.js +35 -29
  6. package/lib/contracts/contracts.d.ts +5 -2
  7. package/lib/contracts/contracts.js +19 -18
  8. package/lib/contracts/contractsRegister.js +13 -1
  9. package/lib/core/constants.d.ts +5 -3
  10. package/lib/core/constants.js +8 -6
  11. package/lib/core/creditAccount.d.ts +2 -2
  12. package/lib/core/creditAccount.js +12 -11
  13. package/lib/core/creditManager.d.ts +1 -1
  14. package/lib/core/creditManager.js +4 -10
  15. package/lib/core/creditSession.js +14 -3
  16. package/lib/core/eventOrTx.d.ts +1 -1
  17. package/lib/core/events.d.ts +19 -19
  18. package/lib/core/events.js +23 -21
  19. package/lib/core/pool.d.ts +1 -1
  20. package/lib/core/pool.js +1 -7
  21. package/lib/core/price.d.ts +1 -3
  22. package/lib/core/price.js +9 -7
  23. package/lib/core/strategy.d.ts +8 -6
  24. package/lib/core/strategy.js +25 -25
  25. package/lib/core/tokenDistributor.js +1 -1
  26. package/lib/core/transactions.d.ts +18 -3
  27. package/lib/core/transactions.js +39 -3
  28. package/lib/index.d.ts +8 -2
  29. package/lib/index.js +8 -1
  30. package/lib/oracles/priceFeeds.js +1 -1
  31. package/lib/pathfinder/convexLP.d.ts +1 -1
  32. package/lib/pathfinder/convexLP.js +26 -29
  33. package/lib/pathfinder/curveLP.d.ts +1 -1
  34. package/lib/pathfinder/curveLP.js +5 -7
  35. package/lib/pathfinder/path.d.ts +1 -1
  36. package/lib/pathfinder/path.js +38 -42
  37. package/lib/pathfinder/trade.d.ts +1 -2
  38. package/lib/pathfinder/tradeTypes.d.ts +5 -5
  39. package/lib/pathfinder/yVault.d.ts +2 -2
  40. package/lib/pathfinder/yVault.js +22 -22
  41. package/lib/payload/creditAccount.d.ts +4 -4
  42. package/lib/payload/creditManager.d.ts +3 -13
  43. package/lib/payload/pool.d.ts +2 -2
  44. package/lib/strategies/convex.d.ts +12 -0
  45. package/lib/strategies/convex.js +74 -1
  46. package/lib/strategies/creditFacade.d.ts +1 -0
  47. package/lib/strategies/creditFacade.js +3 -0
  48. package/lib/strategies/curve.d.ts +15 -60
  49. package/lib/strategies/curve.js +74 -1
  50. package/lib/strategies/lido.d.ts +6 -0
  51. package/lib/strategies/lido.js +23 -1
  52. package/lib/strategies/uniswapV2.d.ts +1 -0
  53. package/lib/strategies/uniswapV2.js +6 -19
  54. package/lib/strategies/uniswapV3.d.ts +1 -0
  55. package/lib/strategies/uniswapV3.js +4 -1
  56. package/lib/strategies/yearn.d.ts +8 -0
  57. package/lib/strategies/yearn.js +92 -12
  58. package/lib/tokens/convex.d.ts +3 -3
  59. package/lib/tokens/curveLP.d.ts +7 -2
  60. package/lib/tokens/curveLP.js +8 -1
  61. package/lib/tokens/gear.d.ts +2 -2
  62. package/lib/tokens/gear.js +1 -1
  63. package/lib/tokens/normal.d.ts +1 -1
  64. package/lib/tokens/token.js +8 -8
  65. package/lib/tokens/tokenData.d.ts +3 -1
  66. package/lib/tokens/tokenData.js +10 -8
  67. package/lib/tokens/yearn.d.ts +6 -2
  68. package/lib/tokens/yearn.js +6 -0
  69. package/lib/utils/errors.d.ts +6 -0
  70. package/lib/utils/errors.js +13 -0
  71. package/lib/utils/formatter.d.ts +1 -1
  72. package/lib/utils/formatter.js +17 -14
  73. package/lib/utils/loading.d.ts +2 -1
  74. package/lib/utils/loading.js +9 -13
  75. package/lib/utils/mappers.js +2 -2
  76. package/lib/utils/network.js +2 -2
  77. package/lib/utils/repeater.js +12 -24
  78. package/lib/utils/validate.js +1 -1
  79. package/package.json +24 -7
  80. package/src/apy/convexAPY.ts +13 -12
  81. package/src/apy/lidoAPY.ts +35 -27
  82. package/src/contracts/contracts.ts +27 -17
  83. package/src/contracts/contractsRegister.ts +16 -1
  84. package/src/core/constants.ts +8 -5
  85. package/src/core/creditAccount.ts +42 -16
  86. package/src/core/creditManager.ts +33 -7
  87. package/src/core/creditOperation.ts +7 -7
  88. package/src/core/creditSession.ts +25 -5
  89. package/src/core/errors.ts +1 -0
  90. package/src/core/eventOrTx.ts +8 -5
  91. package/src/core/events.ts +85 -24
  92. package/src/core/history.ts +46 -46
  93. package/src/core/operations.ts +6 -0
  94. package/src/core/pool.ts +16 -4
  95. package/src/core/price.ts +10 -13
  96. package/src/core/strategy.ts +54 -43
  97. package/src/core/tokenDistributor.ts +2 -2
  98. package/src/core/transactions.ts +427 -350
  99. package/src/index.ts +10 -3
  100. package/src/oracles/priceFeeds.ts +523 -523
  101. package/src/pathfinder/contracts.ts +15 -13
  102. package/src/pathfinder/convexLP.ts +29 -25
  103. package/src/pathfinder/curveLP.ts +57 -53
  104. package/src/pathfinder/path.ts +17 -9
  105. package/src/pathfinder/priority.ts +11 -11
  106. package/src/pathfinder/trade.ts +84 -77
  107. package/src/pathfinder/tradeTypes.ts +98 -94
  108. package/src/pathfinder/yVault.ts +32 -17
  109. package/src/payload/creditAccount.ts +4 -4
  110. package/src/payload/creditManager.ts +3 -13
  111. package/src/payload/pool.ts +2 -2
  112. package/src/payload/token.ts +3 -3
  113. package/src/strategies/convex.ts +360 -186
  114. package/src/strategies/creditFacade.ts +74 -53
  115. package/src/strategies/curve.ts +400 -189
  116. package/src/strategies/lido.ts +70 -32
  117. package/src/strategies/uniswapV2.ts +93 -111
  118. package/src/strategies/uniswapV3.ts +118 -91
  119. package/src/strategies/yearn.ts +187 -60
  120. package/src/tokens/connectors.ts +6 -6
  121. package/src/tokens/convex.ts +297 -296
  122. package/src/tokens/curveLP.ts +176 -165
  123. package/src/tokens/gear.ts +47 -45
  124. package/src/tokens/normal.ts +801 -802
  125. package/src/tokens/token.ts +13 -9
  126. package/src/tokens/tokenData.ts +19 -9
  127. package/src/tokens/tokenType.ts +11 -11
  128. package/src/tokens/yearn.ts +130 -124
  129. package/src/utils/errors.ts +11 -0
  130. package/src/utils/formatter.ts +22 -18
  131. package/src/utils/loading.ts +14 -6
  132. package/src/utils/mappers.ts +8 -6
  133. package/src/utils/multicall.ts +2 -0
  134. package/src/utils/network.ts +21 -21
  135. package/src/utils/repeater.ts +2 -2
  136. package/src/utils/validate.ts +1 -1
  137. package/lib/utils/events.d.ts +0 -2
  138. package/lib/utils/events.js +0 -13
  139. package/src/utils/events.ts +0 -10
@@ -1,101 +1,105 @@
1
- import {ConvexPoolContract, CurvePoolContract, UniswapV2Contract, YearnVaultContract} from "../contracts/contracts";
2
- import {NormalToken} from "../tokens/normal";
3
- import {CurveLPToken} from "../tokens/curveLP";
4
- import {YearnLPToken} from "../tokens/yearn";
5
- import {ConvexLPToken, ConvexStakedPhantomToken} from "../tokens/convex";
6
-
1
+ import type {
2
+ ConvexPoolContract,
3
+ CurvePoolContract,
4
+ UniswapV2Contract,
5
+ YearnVaultContract
6
+ } from "../contracts/contracts";
7
+ import type { NormalToken } from "../tokens/normal";
8
+ import type { CurveLPToken } from "../tokens/curveLP";
9
+ import type { YearnLPToken } from "../tokens/yearn";
10
+ import type { ConvexLPToken, ConvexStakedPhantomToken } from "../tokens/convex";
7
11
 
8
12
  export enum TradeType {
9
- UniswapV2Swap,
10
- UniswapV3Swap,
11
- CurveExchange,
12
- CurveExchangeUnderlying,
13
- CurveDepositLP,
14
- CurveWithdrawLP,
15
- YearnDeposit,
16
- YearnWithdraw,
17
- LidoStake,
18
- ConvexDepositLP,
19
- ConvexStake,
20
- ConvexDepositLPAndStake,
21
- ConvexWithdrawLP,
22
- ConvexWithdraw,
23
- ConvexWithdrawAndUnwrap
13
+ UniswapV2Swap,
14
+ UniswapV3Swap,
15
+ CurveExchange,
16
+ CurveExchangeUnderlying,
17
+ CurveDepositLP,
18
+ CurveWithdrawLP,
19
+ YearnDeposit,
20
+ YearnWithdraw,
21
+ LidoStake,
22
+ ConvexDepositLP,
23
+ ConvexStake,
24
+ ConvexDepositLPAndStake,
25
+ ConvexWithdrawLP,
26
+ ConvexWithdraw,
27
+ ConvexWithdrawAndUnwrap
24
28
  }
25
29
 
26
30
  export type TradeAction =
27
- | {
28
- type: TradeType.UniswapV2Swap;
29
- contract: UniswapV2Contract;
30
- tokenOut?: NormalToken;
31
- }
32
- | {
33
- type: TradeType.UniswapV3Swap;
34
- contract: "UNISWAP_V3_ROUTER";
35
- tokenOut?: NormalToken;
36
- }
37
- | {
38
- type: TradeType.CurveExchange;
39
- contract: CurvePoolContract;
40
- tokenOut: Array<NormalToken | CurveLPToken>;
41
- }
42
- | {
43
- type: TradeType.CurveDepositLP;
44
- contract: CurvePoolContract;
45
- tokenOut: CurveLPToken;
46
- }
47
- | {
48
- type: TradeType.CurveWithdrawLP;
49
- contract: CurvePoolContract;
50
- tokenOut: Array<CurveLPToken | NormalToken>;
51
- }
52
- | {
53
- type: TradeType.YearnDeposit;
54
- contract: YearnVaultContract;
55
- tokenOut: YearnLPToken;
56
- }
57
- | {
58
- type: TradeType.YearnWithdraw;
59
- contract: YearnVaultContract;
60
- tokenOut: NormalToken | CurveLPToken;
61
- }
62
- | {
63
- type: TradeType.LidoStake;
64
- contract: "LIDO_STETH_GATEWAY";
65
- tokenOut: NormalToken;
66
- }
67
- | {
68
- type: TradeType.ConvexDepositLP;
69
- contract: "CONVEX_BOOSTER";
70
- tokenOut: ConvexLPToken;
71
- }
72
- | {
73
- type: TradeType.ConvexStake;
74
- contract: ConvexPoolContract;
75
- tokenOut: ConvexStakedPhantomToken;
76
- }
77
- | {
78
- type: TradeType.ConvexDepositLPAndStake;
79
- contract: "CONVEX_BOOSTER";
80
- tokenOut: ConvexStakedPhantomToken;
81
- }
82
- | {
83
- type: TradeType.ConvexWithdrawLP;
84
- contract: "CONVEX_BOOSTER";
85
- tokenOut: CurveLPToken;
86
- }
87
- | {
88
- type: TradeType.ConvexWithdraw;
89
- contract: ConvexPoolContract;
90
- tokenOut: ConvexLPToken;
91
- }
92
- | {
93
- type: TradeType.ConvexWithdrawAndUnwrap;
94
- contract: ConvexPoolContract;
95
- tokenOut: CurveLPToken;
96
- };
31
+ | {
32
+ type: TradeType.UniswapV2Swap;
33
+ contract: UniswapV2Contract;
34
+ tokenOut?: NormalToken;
35
+ }
36
+ | {
37
+ type: TradeType.UniswapV3Swap;
38
+ contract: "UNISWAP_V3_ROUTER";
39
+ tokenOut?: NormalToken;
40
+ }
41
+ | {
42
+ type: TradeType.CurveExchange;
43
+ contract: CurvePoolContract;
44
+ tokenOut: Array<NormalToken | CurveLPToken>;
45
+ }
46
+ | {
47
+ type: TradeType.CurveDepositLP;
48
+ contract: CurvePoolContract;
49
+ tokenOut: CurveLPToken;
50
+ }
51
+ | {
52
+ type: TradeType.CurveWithdrawLP;
53
+ contract: CurvePoolContract;
54
+ tokenOut: Array<CurveLPToken | NormalToken>;
55
+ }
56
+ | {
57
+ type: TradeType.YearnDeposit;
58
+ contract: YearnVaultContract;
59
+ tokenOut: YearnLPToken;
60
+ }
61
+ | {
62
+ type: TradeType.YearnWithdraw;
63
+ contract: YearnVaultContract;
64
+ tokenOut: NormalToken | CurveLPToken;
65
+ }
66
+ | {
67
+ type: TradeType.LidoStake;
68
+ contract: "LIDO_STETH_GATEWAY";
69
+ tokenOut: NormalToken;
70
+ }
71
+ | {
72
+ type: TradeType.ConvexDepositLP;
73
+ contract: "CONVEX_BOOSTER";
74
+ tokenOut: ConvexLPToken;
75
+ }
76
+ | {
77
+ type: TradeType.ConvexStake;
78
+ contract: ConvexPoolContract;
79
+ tokenOut: ConvexStakedPhantomToken;
80
+ }
81
+ | {
82
+ type: TradeType.ConvexDepositLPAndStake;
83
+ contract: "CONVEX_BOOSTER";
84
+ tokenOut: ConvexStakedPhantomToken;
85
+ }
86
+ | {
87
+ type: TradeType.ConvexWithdrawLP;
88
+ contract: "CONVEX_BOOSTER";
89
+ tokenOut: CurveLPToken;
90
+ }
91
+ | {
92
+ type: TradeType.ConvexWithdraw;
93
+ contract: ConvexPoolContract;
94
+ tokenOut: ConvexLPToken;
95
+ }
96
+ | {
97
+ type: TradeType.ConvexWithdrawAndUnwrap;
98
+ contract: ConvexPoolContract;
99
+ tokenOut: CurveLPToken;
100
+ };
97
101
 
98
102
  export enum SwapType {
99
- ExactInput = 1,
100
- ExactOutput = 2,
101
- }
103
+ ExactInput = 1,
104
+ ExactOutput = 2
105
+ }
@@ -1,14 +1,19 @@
1
1
  import { BigNumber } from "ethers";
2
- import { IYVault__factory } from "../types";
3
- import { Path, LPWithdrawPathFinder } from "./path";
2
+
4
3
  import { YearnLPToken, yearnTokens } from "../tokens/yearn";
5
4
  import { NormalToken } from "../tokens/normal";
6
5
  import { CurveLPToken } from "../tokens/curveLP";
7
6
  import { SupportedToken, tokenDataByNetwork } from "../tokens/token";
7
+
8
8
  import { PartialRecord } from "../utils/types";
9
9
  import { MCall, multicall } from "../utils/multicall";
10
+ import { objectEntries } from "../utils/mappers";
11
+
12
+ import { IYVault__factory } from "../types";
10
13
  import { IYVaultInterface } from "../types/contracts/integrations/yearn/IYVault";
11
14
 
15
+ import type { Path, LPWithdrawPathFinder } from "./path";
16
+
12
17
  interface WithdrawBalance {
13
18
  token: SupportedToken;
14
19
  balance: BigNumber;
@@ -16,6 +21,7 @@ interface WithdrawBalance {
16
21
 
17
22
  export class YearnVaultPathFinder implements LPWithdrawPathFinder {
18
23
  _vault: YearnLPToken;
24
+
19
25
  token: NormalToken | CurveLPToken;
20
26
 
21
27
  constructor(vault: YearnLPToken) {
@@ -27,18 +33,27 @@ export class YearnVaultPathFinder implements LPWithdrawPathFinder {
27
33
  this.token = currentTokenData.underlying;
28
34
  }
29
35
 
30
- async findWithdrawPaths(p: Path): Promise<Array<Path>> {
31
- let vaultBalances: PartialRecord<SupportedToken, WithdrawBalance> = {};
36
+ // eslint-disable-next-line class-methods-use-this
37
+ async findWithdrawPaths(path: Path): Promise<Array<Path>> {
38
+ // make path copy
39
+ const p: Path = Object.assign(
40
+ Object.create(Object.getPrototypeOf(path)),
41
+ path
42
+ );
32
43
 
33
- for (let [yVault, tokenData] of Object.entries(yearnTokens)) {
34
- const currentBalance = p.popBalance(yVault as YearnLPToken);
44
+ const vaultBalances = objectEntries(yearnTokens).reduce<
45
+ PartialRecord<SupportedToken, WithdrawBalance>
46
+ >((acc, [yVault, tokenData]) => {
47
+ const typedVault = yVault;
48
+ const currentBalance = p.popBalance(typedVault);
35
49
  if (currentBalance.gt(1)) {
36
- vaultBalances[yVault as YearnLPToken] = {
50
+ acc[typedVault] = {
37
51
  token: tokenData.underlying,
38
52
  balance: currentBalance
39
53
  };
40
54
  }
41
- }
55
+ return acc;
56
+ }, {});
42
57
 
43
58
  const vaultList = Object.keys(vaultBalances) as Array<SupportedToken>;
44
59
 
@@ -53,7 +68,7 @@ export class YearnVaultPathFinder implements LPWithdrawPathFinder {
53
68
 
54
69
  const prices = await multicall<Array<BigNumber>>(multicallData, p.provider);
55
70
 
56
- for (let i = 0; i < vaultList.length; i++) {
71
+ for (let i = 0; i < vaultList.length; i += 1) {
57
72
  const vault = vaultList[i];
58
73
  const vb = vaultBalances[vault];
59
74
 
@@ -61,15 +76,15 @@ export class YearnVaultPathFinder implements LPWithdrawPathFinder {
61
76
  BigNumber.from(vb?.balance || 0).mul(prices[i])
62
77
  );
63
78
 
64
- // !!!!!!!!!
65
- // p.calls.push({
66
- // targetContract:
67
- // p.creditManager.adapters[tokenDataByNetwork[p.networkType][vault]],
68
- // callData:
69
- // IYVault__factory.createInterface().encodeFunctionData("withdraw()")
70
- // });
79
+ const tokenAddress = tokenDataByNetwork[p.networkType][vault];
80
+ const adapterAddress = p.creditManager.adapters[tokenAddress];
81
+
82
+ const callData =
83
+ IYVault__factory.createInterface().encodeFunctionData("withdraw()");
84
+
85
+ p.calls.push({ target: adapterAddress, callData });
71
86
  }
72
87
 
73
- return await p.withdrawTokens();
88
+ return p.withdrawTokens();
74
89
  }
75
90
  }
@@ -1,7 +1,7 @@
1
- import { CreditAccountDataStructOutput } from "../types/contracts/core/DataCompressor";
1
+ import { CreditAccountDataStruct } from "../types/contracts/core/DataCompressor";
2
2
 
3
- export type TokenBalancePayload = CreditAccountDataStructOutput["balances"];
3
+ export type TokenBalancePayload = CreditAccountDataStruct["balances"];
4
4
 
5
- export type CreditAccountDataPayload = CreditAccountDataStructOutput;
5
+ export type CreditAccountDataPayload = CreditAccountDataStruct;
6
6
 
7
- export type CreditAccountDataExtendedPayload = CreditAccountDataStructOutput;
7
+ export type CreditAccountDataExtendedPayload = CreditAccountDataStruct;
@@ -1,24 +1,14 @@
1
- import { BigNumberish, BigNumber } from "ethers";
2
- import { CreditManagerDataStructOutput } from "../types/contracts/interfaces/IDataCompressor.sol/IDataCompressor";
1
+ import { BigNumberish } from "ethers";
2
+ import { CreditManagerDataStruct } from "../types/contracts/interfaces/IDataCompressor.sol/IDataCompressor";
3
3
 
4
4
  export interface AdapterPayload {
5
5
  allowedContract: string;
6
6
  adapter: string;
7
7
  }
8
8
 
9
- export type CreditManagerDataPayload = CreditManagerDataStructOutput;
9
+ export type CreditManagerDataPayload = CreditManagerDataStruct;
10
10
 
11
11
  export interface CreditManagerStatPayload extends CreditManagerDataPayload {
12
- addr: string;
13
- underlyingToken?: string;
14
- isWETH: boolean;
15
- canBorrow: boolean;
16
- borrowRate: BigNumber;
17
- minAmount: BigNumber;
18
- maxAmount: BigNumber;
19
- maxLeverageFactor: BigNumber;
20
- availableLiquidity: BigNumber;
21
- allowedTokens: Array<string>;
22
12
  allowedContracts?: Array<string>;
23
13
  uniqueUsers: number;
24
14
  openedAccountsCount?: number;
@@ -1,3 +1,3 @@
1
- import { PoolDataStructOutput } from "../types/contracts/interfaces/IDataCompressor.sol/IDataCompressor";
1
+ import { PoolDataStruct } from "../types/contracts/interfaces/IDataCompressor.sol/IDataCompressor";
2
2
 
3
- export type PoolDataPayload = PoolDataStructOutput;
3
+ export type PoolDataPayload = PoolDataStruct;
@@ -1,5 +1,5 @@
1
1
  export interface TokenDataPayload {
2
- addr: string;
3
- symbol: string;
4
- decimals: number;
2
+ addr: string;
3
+ symbol: string;
4
+ decimals: number;
5
5
  }