@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.
Files changed (129) 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 +3 -5
  5. package/lib/apy/lidoAPY.js +8 -9
  6. package/lib/contracts/contracts.d.ts +5 -2
  7. package/lib/contracts/contracts.js +19 -18
  8. package/lib/core/constants.d.ts +1 -1
  9. package/lib/core/constants.js +2 -2
  10. package/lib/core/creditAccount.js +7 -5
  11. package/lib/core/creditManager.d.ts +1 -1
  12. package/lib/core/creditManager.js +1 -7
  13. package/lib/core/creditSession.js +14 -3
  14. package/lib/core/eventOrTx.d.ts +1 -1
  15. package/lib/core/events.d.ts +19 -19
  16. package/lib/core/events.js +23 -21
  17. package/lib/core/pool.d.ts +1 -1
  18. package/lib/core/pool.js +1 -7
  19. package/lib/core/price.js +6 -1
  20. package/lib/core/strategy.d.ts +1 -3
  21. package/lib/core/strategy.js +14 -13
  22. package/lib/core/tokenDistributor.js +1 -1
  23. package/lib/core/transactions.d.ts +18 -3
  24. package/lib/core/transactions.js +39 -3
  25. package/lib/index.d.ts +8 -2
  26. package/lib/index.js +8 -1
  27. package/lib/oracles/priceFeeds.js +1 -1
  28. package/lib/pathfinder/convexLP.d.ts +1 -1
  29. package/lib/pathfinder/convexLP.js +26 -29
  30. package/lib/pathfinder/curveLP.d.ts +1 -1
  31. package/lib/pathfinder/curveLP.js +5 -7
  32. package/lib/pathfinder/path.d.ts +1 -1
  33. package/lib/pathfinder/path.js +38 -42
  34. package/lib/pathfinder/trade.d.ts +1 -2
  35. package/lib/pathfinder/tradeTypes.d.ts +5 -5
  36. package/lib/pathfinder/yVault.d.ts +2 -2
  37. package/lib/pathfinder/yVault.js +18 -15
  38. package/lib/strategies/convex.d.ts +12 -0
  39. package/lib/strategies/convex.js +74 -1
  40. package/lib/strategies/creditFacade.d.ts +1 -0
  41. package/lib/strategies/creditFacade.js +3 -0
  42. package/lib/strategies/curve.d.ts +15 -60
  43. package/lib/strategies/curve.js +74 -1
  44. package/lib/strategies/lido.d.ts +6 -0
  45. package/lib/strategies/lido.js +23 -1
  46. package/lib/strategies/uniswapV2.d.ts +1 -0
  47. package/lib/strategies/uniswapV2.js +6 -19
  48. package/lib/strategies/uniswapV3.d.ts +1 -0
  49. package/lib/strategies/uniswapV3.js +4 -1
  50. package/lib/strategies/yearn.d.ts +8 -0
  51. package/lib/strategies/yearn.js +92 -12
  52. package/lib/tokens/convex.d.ts +3 -3
  53. package/lib/tokens/curveLP.d.ts +7 -2
  54. package/lib/tokens/curveLP.js +8 -1
  55. package/lib/tokens/gear.d.ts +2 -2
  56. package/lib/tokens/gear.js +1 -1
  57. package/lib/tokens/normal.d.ts +1 -1
  58. package/lib/tokens/token.js +4 -4
  59. package/lib/tokens/tokenData.d.ts +3 -1
  60. package/lib/tokens/tokenData.js +10 -8
  61. package/lib/tokens/yearn.d.ts +6 -2
  62. package/lib/tokens/yearn.js +6 -0
  63. package/lib/utils/errors.d.ts +6 -0
  64. package/lib/utils/errors.js +13 -0
  65. package/lib/utils/formatter.d.ts +1 -1
  66. package/lib/utils/formatter.js +17 -14
  67. package/lib/utils/loading.d.ts +2 -1
  68. package/lib/utils/loading.js +9 -13
  69. package/lib/utils/mappers.js +2 -2
  70. package/lib/utils/network.js +2 -2
  71. package/lib/utils/repeater.js +12 -24
  72. package/lib/utils/validate.js +1 -1
  73. package/package.json +24 -7
  74. package/src/apy/convexAPY.ts +6 -6
  75. package/src/apy/lidoAPY.ts +12 -11
  76. package/src/contracts/contracts.ts +27 -17
  77. package/src/core/constants.ts +1 -1
  78. package/src/core/creditAccount.ts +28 -5
  79. package/src/core/creditManager.ts +29 -4
  80. package/src/core/creditOperation.ts +7 -7
  81. package/src/core/creditSession.ts +25 -5
  82. package/src/core/errors.ts +1 -0
  83. package/src/core/eventOrTx.ts +8 -5
  84. package/src/core/events.ts +85 -24
  85. package/src/core/history.ts +46 -46
  86. package/src/core/operations.ts +6 -0
  87. package/src/core/pool.ts +16 -4
  88. package/src/core/price.ts +7 -3
  89. package/src/core/strategy.ts +27 -23
  90. package/src/core/tokenDistributor.ts +2 -2
  91. package/src/core/transactions.ts +427 -350
  92. package/src/index.ts +10 -3
  93. package/src/oracles/priceFeeds.ts +523 -523
  94. package/src/pathfinder/contracts.ts +15 -13
  95. package/src/pathfinder/convexLP.ts +29 -25
  96. package/src/pathfinder/curveLP.ts +57 -53
  97. package/src/pathfinder/path.ts +17 -9
  98. package/src/pathfinder/priority.ts +11 -11
  99. package/src/pathfinder/trade.ts +84 -77
  100. package/src/pathfinder/tradeTypes.ts +98 -94
  101. package/src/pathfinder/yVault.ts +26 -11
  102. package/src/payload/token.ts +3 -3
  103. package/src/strategies/convex.ts +361 -186
  104. package/src/strategies/creditFacade.ts +74 -53
  105. package/src/strategies/curve.ts +400 -189
  106. package/src/strategies/lido.ts +70 -32
  107. package/src/strategies/uniswapV2.ts +93 -111
  108. package/src/strategies/uniswapV3.ts +118 -91
  109. package/src/strategies/yearn.ts +187 -60
  110. package/src/tokens/connectors.ts +6 -6
  111. package/src/tokens/convex.ts +297 -296
  112. package/src/tokens/curveLP.ts +176 -165
  113. package/src/tokens/gear.ts +47 -45
  114. package/src/tokens/normal.ts +801 -802
  115. package/src/tokens/token.ts +9 -5
  116. package/src/tokens/tokenData.ts +19 -9
  117. package/src/tokens/tokenType.ts +11 -11
  118. package/src/tokens/yearn.ts +130 -124
  119. package/src/utils/errors.ts +11 -0
  120. package/src/utils/formatter.ts +22 -18
  121. package/src/utils/loading.ts +14 -6
  122. package/src/utils/mappers.ts +8 -6
  123. package/src/utils/multicall.ts +2 -0
  124. package/src/utils/network.ts +21 -21
  125. package/src/utils/repeater.ts +2 -2
  126. package/src/utils/validate.ts +1 -1
  127. package/lib/utils/events.d.ts +0 -2
  128. package/lib/utils/events.js +0 -13
  129. package/src/utils/events.ts +0 -10
@@ -1,77 +1,204 @@
1
- import { BigNumberish } from "ethers"
2
-
3
-
1
+ import { BigNumberish } from "ethers";
4
2
  import {
5
- YearnV2Adapter__factory
6
- } from "../types"
3
+ contractParams,
4
+ contractsByNetwork,
5
+ YearnParams,
6
+ YearnVaultContract
7
+ } from "../contracts/contracts";
8
+ import { ADDRESS_0X0, NetworkType } from "../core/constants";
9
+ import { CreditManagerData } from "../core/creditManager";
10
+ import { CurveLPTokenData } from "../tokens/curveLP";
11
+ import { supportedTokens, tokenDataByNetwork } from "../tokens/token";
12
+ import { TokenType } from "../tokens/tokenType";
13
+
14
+ import { YearnV2Adapter__factory } from "../types";
7
15
 
8
16
  import { MultiCallStruct } from "../types/contracts/interfaces/ICreditFacade.sol/ICreditFacade";
17
+ import { CurveStrategies } from "./curve";
18
+ import { UniswapV2Multicaller } from "./uniswapV2";
9
19
 
10
20
  export class YearnV2Calls {
11
-
12
- public static deposit(amount?: BigNumberish, recipient?: string): string {
13
- let contractInterface = YearnV2Adapter__factory.createInterface();
14
- if (amount && recipient) {
15
- return contractInterface.encodeFunctionData(
16
- "deposit(uint256,address)",
17
- [amount, recipient]
18
- );
19
- } else if (amount) {
20
- return contractInterface.encodeFunctionData(
21
- "deposit(uint256)",
22
- [amount]
23
- );
24
- } else {
25
- return contractInterface.encodeFunctionData(
26
- "deposit()"
27
- );
28
- }
21
+ public static deposit(amount?: BigNumberish, recipient?: string): string {
22
+ const contractInterface = YearnV2Adapter__factory.createInterface();
23
+ if (amount && recipient) {
24
+ return contractInterface.encodeFunctionData("deposit(uint256,address)", [
25
+ amount,
26
+ recipient
27
+ ]);
28
+ }
29
+ if (amount) {
30
+ return contractInterface.encodeFunctionData("deposit(uint256)", [amount]);
29
31
  }
32
+ return contractInterface.encodeFunctionData("deposit()");
33
+ }
30
34
 
31
- public static withdraw(maxShares?: BigNumberish, recipient?: string, maxLoss?: BigNumberish): string {
32
- let contractInterface = YearnV2Adapter__factory.createInterface();
33
- if (maxShares && recipient && maxLoss) {
34
- return contractInterface.encodeFunctionData(
35
- "withdraw(uint256,address,uint256)",
36
- [maxShares, recipient, maxLoss]
37
- );
38
- }
39
- if (maxShares && recipient) {
40
- return contractInterface.encodeFunctionData(
41
- "withdraw(uint256,address)",
42
- [maxShares, recipient]
43
- );
44
- } else if (maxShares) {
45
- return contractInterface.encodeFunctionData(
46
- "withdraw(uint256)",
47
- [maxShares]
48
- );
49
- } else {
50
- return contractInterface.encodeFunctionData(
51
- "withdraw()"
52
- );
53
- }
35
+ public static withdraw(
36
+ maxShares?: BigNumberish,
37
+ recipient?: string,
38
+ maxLoss?: BigNumberish
39
+ ): string {
40
+ const contractInterface = YearnV2Adapter__factory.createInterface();
41
+ if (maxShares && recipient && maxLoss) {
42
+ return contractInterface.encodeFunctionData(
43
+ "withdraw(uint256,address,uint256)",
44
+ [maxShares, recipient, maxLoss]
45
+ );
54
46
  }
47
+ if (maxShares && recipient) {
48
+ return contractInterface.encodeFunctionData("withdraw(uint256,address)", [
49
+ maxShares,
50
+ recipient
51
+ ]);
52
+ }
53
+ if (maxShares) {
54
+ return contractInterface.encodeFunctionData("withdraw(uint256)", [
55
+ maxShares
56
+ ]);
57
+ }
58
+ return contractInterface.encodeFunctionData("withdraw()");
59
+ }
55
60
  }
56
61
 
57
62
  export class YearnV2Multicaller {
58
- private readonly _address: string;
63
+ private readonly _address: string;
59
64
 
60
- constructor(address: string) {
61
- this._address = address;
62
- }
65
+ constructor(address: string) {
66
+ this._address = address;
67
+ }
68
+
69
+ static connect(address: string) {
70
+ return new YearnV2Multicaller(address);
71
+ }
63
72
 
64
- deposit(amount?: BigNumberish, recipient?: string): MultiCallStruct {
65
- return {
66
- target: this._address,
67
- callData: YearnV2Calls.deposit(amount, recipient)
68
- };
73
+ deposit(amount?: BigNumberish, recipient?: string): MultiCallStruct {
74
+ return {
75
+ target: this._address,
76
+ callData: YearnV2Calls.deposit(amount, recipient)
77
+ };
78
+ }
79
+
80
+ withdraw(
81
+ maxShares?: BigNumberish,
82
+ recipient?: string,
83
+ maxLoss?: BigNumberish
84
+ ): MultiCallStruct {
85
+ return {
86
+ target: this._address,
87
+ callData: YearnV2Calls.withdraw(maxShares, recipient, maxLoss)
88
+ };
89
+ }
90
+ }
91
+
92
+ export class YearnV2Strategies {
93
+ static underlyingToYearn(
94
+ data: CreditManagerData,
95
+ network: NetworkType,
96
+ yearnVault: YearnVaultContract,
97
+ underlyingAmount: BigNumberish
98
+ ) {
99
+ let calls: Array<MultiCallStruct> = [];
100
+ const vaultParams = contractParams[yearnVault] as YearnParams;
101
+ const yearnToken = vaultParams.shareToken;
102
+ const yearnParams = supportedTokens[yearnToken];
103
+
104
+ if (yearnParams.type === TokenType.YEARN_VAULT) {
105
+ if (
106
+ data.underlyingToken !==
107
+ tokenDataByNetwork[network][yearnParams.underlying]
108
+ ) {
109
+ // This should be a pathfinder call
110
+ calls.push(
111
+ UniswapV2Multicaller.connect(
112
+ data.adapters[contractsByNetwork[network].UNISWAP_V2_ROUTER]
113
+ ).swapExactTokensForTokens(
114
+ underlyingAmount,
115
+ 0,
116
+ [
117
+ data.underlyingToken,
118
+ tokenDataByNetwork[network][yearnParams.underlying]
119
+ ],
120
+ ADDRESS_0X0,
121
+ Math.floor(new Date().getTime() / 1000) + 3600
122
+ )
123
+ );
124
+ }
125
+ } else if (
126
+ yearnParams.type === TokenType.YEARN_VAULT_OF_CURVE_LP ||
127
+ yearnParams.type === TokenType.YEARN_VAULT_OF_META_CURVE_LP
128
+ ) {
129
+ const curveTokenParams = supportedTokens[
130
+ yearnParams.underlying
131
+ ] as CurveLPTokenData;
132
+ const curvePool = curveTokenParams.pool;
133
+
134
+ calls = CurveStrategies.underlyingToCurveLP(
135
+ data,
136
+ network,
137
+ curvePool,
138
+ underlyingAmount
139
+ );
140
+ } else {
141
+ throw new Error("Yearn vault type unknown");
69
142
  }
70
143
 
71
- withdraw(maxShares?: BigNumberish, recipient?: string, maxLoss?: BigNumberish): MultiCallStruct {
72
- return {
73
- target: this._address,
74
- callData: YearnV2Calls.withdraw(maxShares, recipient, maxLoss)
75
- };
144
+ calls.push(
145
+ YearnV2Multicaller.connect(
146
+ data.adapters[contractsByNetwork[network][yearnVault]]
147
+ ).deposit()
148
+ );
149
+ }
150
+
151
+ static yearnToUnderlying(
152
+ data: CreditManagerData,
153
+ network: NetworkType,
154
+ yearnVault: YearnVaultContract,
155
+ yearnSharesAmount: BigNumberish
156
+ ) {
157
+ let calls: Array<MultiCallStruct> = [];
158
+ const vaultParams = contractParams[yearnVault] as YearnParams;
159
+ const yearnToken = vaultParams.shareToken;
160
+ const yearnParams = supportedTokens[yearnToken];
161
+
162
+ calls.push(
163
+ YearnV2Multicaller.connect(
164
+ data.adapters[contractsByNetwork[network][yearnVault]]
165
+ ).withdraw(yearnSharesAmount)
166
+ );
167
+
168
+ if (yearnParams.type === TokenType.YEARN_VAULT) {
169
+ if (
170
+ data.underlyingToken !==
171
+ tokenDataByNetwork[network][yearnParams.underlying]
172
+ ) {
173
+ // This should be a pathfinder call
174
+ calls.push(
175
+ UniswapV2Multicaller.connect(
176
+ data.adapters[contractsByNetwork[network].UNISWAP_V2_ROUTER]
177
+ ).swapAllTokensForTokens(
178
+ 0,
179
+ [
180
+ tokenDataByNetwork[network][yearnParams.underlying],
181
+ data.underlyingToken
182
+ ],
183
+ Math.floor(new Date().getTime() / 1000) + 3600
184
+ )
185
+ );
186
+ }
187
+ } else if (
188
+ yearnParams.type === TokenType.YEARN_VAULT_OF_CURVE_LP ||
189
+ yearnParams.type === TokenType.YEARN_VAULT_OF_META_CURVE_LP
190
+ ) {
191
+ const curveTokenParams = supportedTokens[
192
+ yearnParams.underlying
193
+ ] as CurveLPTokenData;
194
+ const curvePool = curveTokenParams.pool;
195
+
196
+ calls = [
197
+ ...calls,
198
+ ...CurveStrategies.allCurveLPToUnderlying(data, network, curvePool)
199
+ ];
200
+ } else {
201
+ throw new Error("Yearn vault type unknown");
76
202
  }
203
+ }
77
204
  }
@@ -1,8 +1,8 @@
1
- import {NormalToken} from "./normal";
1
+ import { NormalToken } from "./normal";
2
2
 
3
3
  export const connectorTokens: Array<NormalToken> = [
4
- "DAI",
5
- "USDC",
6
- "WETH",
7
- "WBTC"
8
- ];
4
+ "DAI",
5
+ "USDC",
6
+ "WETH",
7
+ "WBTC"
8
+ ];