@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,4 +1,6 @@
1
- import { LEVERAGE_DECIMALS } from "../core/constants";
1
+ import { BigNumber } from "ethers";
2
+ import { LEVERAGE_DECIMALS, PERCENTAGE_FACTOR, WAD } from "./constants";
3
+ import { calcTotalPrice } from "./price";
2
4
 
3
5
  export interface StrategyPayload {
4
6
  apy?: number;
@@ -19,14 +21,23 @@ interface PoolStats {
19
21
 
20
22
  type PoolList = Record<string, PoolStats>;
21
23
 
24
+ interface TokenDescription {
25
+ price: BigNumber;
26
+ amount: BigNumber;
27
+ decimals: number | undefined;
28
+ }
29
+
22
30
  export class Strategy {
23
31
  apy: number | undefined;
24
32
 
25
33
  name: string;
34
+
26
35
  lpToken: string;
36
+
27
37
  pools: Array<string>;
28
38
 
29
39
  unleveragableCollateral: Array<string>;
40
+
30
41
  leveragableCollateral: Array<string>;
31
42
 
32
43
  baseAssets: Array<string>;
@@ -42,10 +53,15 @@ export class Strategy {
42
53
  this.baseAssets = payload.baseAssets;
43
54
  }
44
55
 
45
- public roiMax(apy: number, maxLeverage: number, poolApy: PoolList) {
46
- const minApy = this.minBorrowApy(poolApy);
56
+ public maxAPY(maxLeverage: number, poolApy: PoolList) {
57
+ const minApy = minBorrowApy(poolApy);
47
58
 
48
- return this.roi(apy, maxLeverage, maxLeverage - LEVERAGE_DECIMALS, minApy);
59
+ return roi(
60
+ this.apy || 0,
61
+ maxLeverage,
62
+ maxLeverage - LEVERAGE_DECIMALS,
63
+ minApy
64
+ );
49
65
  }
50
66
 
51
67
  public overallAPY(
@@ -56,50 +72,33 @@ export class Strategy {
56
72
  ) {
57
73
  const farmLev = this.farmLev(leverage, depositCollateral);
58
74
 
59
- return this.roi(apy, farmLev, leverage - LEVERAGE_DECIMALS, borrowAPY);
75
+ return roi(apy, farmLev, leverage - LEVERAGE_DECIMALS, borrowAPY);
60
76
  }
61
77
 
78
+ // eslint-disable-next-line class-methods-use-this
62
79
  public liquidationPrice(
63
- leverage: number,
64
-
65
- ltStrategy: number,
66
- ltCollateral: number,
67
-
68
- depositCollateral: string
80
+ borrowed: TokenDescription,
81
+ collateral: TokenDescription,
82
+ lp: TokenDescription,
83
+ ltCollateral: BigNumber
69
84
  ) {
70
- const farmLev = this.farmLev(leverage, depositCollateral);
71
-
72
- return (
73
- 1 -
74
- (leverage - LEVERAGE_DECIMALS - ltCollateral * (leverage - farmLev)) /
75
- (ltStrategy * farmLev)
85
+ const borrowedMoney = calcTotalPrice(
86
+ borrowed.price,
87
+ borrowed.amount,
88
+ borrowed.decimals
76
89
  );
77
- }
78
-
79
- public ltStrategyLP(maxLeverage: number) {
80
- return 1 - LEVERAGE_DECIMALS / maxLeverage;
81
- }
82
-
83
- public maxLeverage(ltStrategyLP: number) {
84
- const leverage = Math.floor(1 / (1 - ltStrategyLP));
85
- return Math.floor(leverage * LEVERAGE_DECIMALS);
86
- }
87
-
88
- private roi(
89
- apy: number,
90
- farmLev: number,
91
- debtLev: number,
92
- borrowAPY: number
93
- ) {
94
- return (apy * farmLev - borrowAPY * debtLev) / LEVERAGE_DECIMALS;
95
- }
96
-
97
- private minBorrowApy(poolApy: PoolList) {
98
- const apys = Object.values(poolApy).sort(
99
- (a, b) => a.borrowRate - b.borrowRate
100
- );
101
-
102
- return apys.length > 0 ? apys[0].borrowRate : 0;
90
+ const collateralMoney = calcTotalPrice(
91
+ collateral.price,
92
+ collateral.amount,
93
+ collateral.decimals
94
+ )
95
+ .mul(ltCollateral)
96
+ .div(PERCENTAGE_FACTOR);
97
+ const lpMoney = calcTotalPrice(lp.price, lp.amount, lp.decimals);
98
+
99
+ return lpMoney.gt(0)
100
+ ? borrowedMoney.sub(collateralMoney).mul(WAD).div(lpMoney)
101
+ : BigNumber.from(0);
103
102
  }
104
103
 
105
104
  private farmLev(leverage: number, depositCollateral: string) {
@@ -121,3 +120,15 @@ export class Strategy {
121
120
  );
122
121
  }
123
122
  }
123
+
124
+ function roi(apy: number, farmLev: number, debtLev: number, borrowAPY: number) {
125
+ return (apy * farmLev - borrowAPY * debtLev) / LEVERAGE_DECIMALS;
126
+ }
127
+
128
+ function minBorrowApy(poolApy: PoolList) {
129
+ const apys = Object.values(poolApy).sort(
130
+ (a, b) => a.borrowRate - b.borrowRate
131
+ );
132
+
133
+ return apys.length > 0 ? apys[0].borrowRate : 0;
134
+ }
@@ -1,4 +1,4 @@
1
- import {BigNumber} from "ethers";
1
+ import { BigNumber } from "ethers";
2
2
 
3
3
  export interface TokenShare {
4
4
  holder: string;
@@ -10,5 +10,5 @@ export interface TokenShare {
10
10
  export enum VotingPower {
11
11
  A, // A-type voting power & A-type vesting parameters
12
12
  B, // B-type voting power & B-type vesting parameters
13
- ZERO_VOTING_POWER, // zero voting power & B-type vesting parameters
13
+ ZERO_VOTING_POWER // zero voting power & B-type vesting parameters
14
14
  }