@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,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 "src/contracts/contracts";
8
+ import { ADDRESS_0X0, NetworkType } from "src/core/constants";
9
+ import { CreditManagerData } from "src/core/creditManager";
10
+ import { CurveLPTokenData } from "src/tokens/curveLP";
11
+ import { supportedTokens, tokenDataByNetwork } from "src/tokens/token";
12
+ import { TokenType } from "src/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
+ ];