@gearbox-protocol/sdk 3.0.0-vfourabi.1 → 3.0.0-vfourabi.3

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 (275) hide show
  1. package/.eslintignore +3 -0
  2. package/.github/workflows/lint_pr.yml +18 -0
  3. package/.github/workflows/pr.yml +39 -0
  4. package/.github/workflows/release.yml +47 -0
  5. package/.gitignore +19 -0
  6. package/.husky/commit-msg +1 -0
  7. package/.husky/pre-commit +1 -0
  8. package/.nvmrc +1 -0
  9. package/.releaserc.json +34 -0
  10. package/.vscode/extensions.json +7 -0
  11. package/.vscode/settings.json +16 -0
  12. package/.yarn/install-state.gz +0 -0
  13. package/.yarnrc.yml +1 -0
  14. package/ContributionAgreement +72 -0
  15. package/dist/cjs/abi/iZapper.cjs +85 -0
  16. package/dist/cjs/abi/iZapper.d.ts +123 -0
  17. package/dist/cjs/sdk/index.cjs +19830 -19764
  18. package/dist/cjs/sdk/index.d.ts +3746 -3061
  19. package/dist/esm/abi/iZapper.d.mts +123 -0
  20. package/dist/esm/abi/iZapper.mjs +83 -0
  21. package/dist/esm/sdk/index.d.mts +3746 -3061
  22. package/dist/esm/sdk/index.mjs +19807 -19765
  23. package/jest.config.js +7 -0
  24. package/package.json +32 -2
  25. package/scripts/example.ts +30 -0
  26. package/src/abi/compressors.ts +3962 -0
  27. package/src/abi/errors.ts +196 -0
  28. package/src/abi/iERC20.ts +122 -0
  29. package/src/abi/iPausable.ts +35 -0
  30. package/src/abi/iPriceFeedStore.ts +227 -0
  31. package/src/abi/iUpdatablePriceFeed.ts +16 -0
  32. package/src/abi/iVersion.ts +28 -0
  33. package/src/abi/iZapper.ts +84 -0
  34. package/src/abi/routerV300.ts +378 -0
  35. package/src/abi/v300.ts +4151 -0
  36. package/src/abi/v310.ts +5179 -0
  37. package/src/adapters/AbstractAdapter.ts +28 -0
  38. package/src/adapters/BalancerV2VaultAdapterContract.ts +19 -0
  39. package/src/adapters/BalancerV3RouterAdapterContract.ts +19 -0
  40. package/src/adapters/CamelotV3AdapterContract.ts +20 -0
  41. package/src/adapters/ConvexV1BaseRewardPoolAdapterContract.ts +20 -0
  42. package/src/adapters/ConvexV1BoosterAdapterContract.ts +20 -0
  43. package/src/adapters/Curve2AssetsAdapterContract.ts +20 -0
  44. package/src/adapters/Curve3AssetsAdapterContract.ts +20 -0
  45. package/src/adapters/Curve4AssetsAdapterContract.ts +20 -0
  46. package/src/adapters/CurveV1AdapterStETHContract.ts +20 -0
  47. package/src/adapters/CurveV1StableNGAdapterContract.ts +20 -0
  48. package/src/adapters/DaiUsdsAdapterContract.ts +21 -0
  49. package/src/adapters/ERC4626AdapterContract.ts +20 -0
  50. package/src/adapters/MellowERC4626VaultAdapterContract.ts +20 -0
  51. package/src/adapters/MellowVaultAdapterContract.ts +20 -0
  52. package/src/adapters/PendleRouterAdapterContract.ts +21 -0
  53. package/src/adapters/StakingRewardsAdapterContract.ts +21 -0
  54. package/src/adapters/UniswapV2AdapterContract.ts +20 -0
  55. package/src/adapters/UniswapV3AdapterContract.ts +170 -0
  56. package/src/adapters/VelodromeV2AdapterContract.ts +20 -0
  57. package/src/adapters/WstETHV1AdapterContract.ts +20 -0
  58. package/src/adapters/YearnV2AdapterContract.ts +20 -0
  59. package/src/adapters/abi/adapters.ts +4325 -0
  60. package/src/adapters/abi/iBalancerV3RouterAdapter.ts +126 -0
  61. package/src/adapters/abi/index.ts +2 -0
  62. package/src/adapters/index.ts +2 -0
  63. package/src/adapters/plugin.ts +90 -0
  64. package/src/adapters/types.ts +62 -0
  65. package/src/dev/AccountOpener.ts +611 -0
  66. package/src/dev/PriceFeedStore.ts +95 -0
  67. package/src/dev/SDKExample.ts +167 -0
  68. package/src/dev/abi.ts +14 -0
  69. package/src/dev/calcLiquidatableLTs.ts +77 -0
  70. package/src/dev/createAnvilClient.ts +155 -0
  71. package/src/dev/index.ts +7 -0
  72. package/src/dev/setLTZero.ts +127 -0
  73. package/src/dev/setLTs.ts +68 -0
  74. package/src/sdk/GearboxSDK.ts +488 -0
  75. package/src/sdk/abi/index.ts +1 -0
  76. package/src/sdk/abi/oracles.ts +4614 -0
  77. package/src/sdk/accounts/CreditAccountsService.ts +1123 -0
  78. package/src/sdk/accounts/index.ts +1 -0
  79. package/src/sdk/base/AddressLabeller.ts +35 -0
  80. package/src/sdk/base/BaseContract.ts +237 -0
  81. package/src/sdk/base/IAddressLabeller.ts +13 -0
  82. package/src/sdk/base/PlaceholderContract.ts +12 -0
  83. package/src/sdk/base/SDKConstruct.ts +35 -0
  84. package/src/sdk/base/TokensMeta.ts +45 -0
  85. package/src/sdk/base/index.ts +6 -0
  86. package/src/sdk/base/types.ts +102 -0
  87. package/src/sdk/bots/BotsService.ts +92 -0
  88. package/src/sdk/bots/index.ts +2 -0
  89. package/src/sdk/bots/utils.ts +19 -0
  90. package/src/sdk/chain/Provider.ts +99 -0
  91. package/src/sdk/chain/chains.ts +41 -0
  92. package/src/sdk/chain/detectChain.ts +21 -0
  93. package/src/sdk/chain/index.ts +3 -0
  94. package/src/sdk/constants/address-provider.ts +47 -0
  95. package/src/sdk/constants/addresses.ts +82 -0
  96. package/src/sdk/constants/bot-permissions.ts +36 -0
  97. package/src/sdk/constants/index.ts +6 -0
  98. package/src/sdk/constants/math.ts +23 -0
  99. package/src/sdk/constants/networks.ts +38 -0
  100. package/src/sdk/constants/periphery.ts +7 -0
  101. package/src/sdk/core/BotListV3Contract.ts +103 -0
  102. package/src/sdk/core/GearStakingV3Contract.ts +84 -0
  103. package/src/sdk/core/address-provider/AbstractAddressProviderContract.ts +101 -0
  104. package/src/sdk/core/address-provider/AddressProviderV3Contract.ts +105 -0
  105. package/src/sdk/core/address-provider/AddressProviderV3_1Contract.ts +92 -0
  106. package/src/sdk/core/address-provider/getAddressProvider.ts +45 -0
  107. package/src/sdk/core/address-provider/index.ts +4 -0
  108. package/src/sdk/core/address-provider/types.ts +17 -0
  109. package/src/sdk/core/index.ts +3 -0
  110. package/src/sdk/gauges/GaugeStakingService.ts +100 -0
  111. package/src/sdk/gauges/index.ts +2 -0
  112. package/src/sdk/gauges/utils.ts +25 -0
  113. package/src/sdk/index.ts +17 -0
  114. package/src/sdk/market/MarketConfiguratorContract.ts +78 -0
  115. package/src/sdk/market/MarketRegister.ts +330 -0
  116. package/src/sdk/market/MarketSuite.ts +83 -0
  117. package/src/sdk/market/adapters/PlaceholderAdapterContracts.ts +18 -0
  118. package/src/sdk/market/adapters/factory.ts +34 -0
  119. package/src/sdk/market/adapters/index.ts +3 -0
  120. package/src/sdk/market/adapters/types.ts +7 -0
  121. package/src/sdk/market/credit/CreditConfiguratorV300Contract.ts +164 -0
  122. package/src/sdk/market/credit/CreditConfiguratorV310Contract.ts +139 -0
  123. package/src/sdk/market/credit/CreditFacadeV300Contract.ts +206 -0
  124. package/src/sdk/market/credit/CreditFacadeV310Contract.ts +190 -0
  125. package/src/sdk/market/credit/CreditManagerV300Contract.ts +122 -0
  126. package/src/sdk/market/credit/CreditManagerV310Contract.ts +122 -0
  127. package/src/sdk/market/credit/CreditSuite.ts +65 -0
  128. package/src/sdk/market/credit/createCreditConfigurator.ts +18 -0
  129. package/src/sdk/market/credit/createCreditFacade.ts +18 -0
  130. package/src/sdk/market/credit/createCreditManager.ts +18 -0
  131. package/src/sdk/market/credit/index.ts +8 -0
  132. package/src/sdk/market/credit/types.ts +42 -0
  133. package/src/sdk/market/index.ts +7 -0
  134. package/src/sdk/market/oracle/PriceOracleBaseContract.ts +376 -0
  135. package/src/sdk/market/oracle/PriceOracleV300Contract.ts +71 -0
  136. package/src/sdk/market/oracle/PriceOracleV310Contract.ts +43 -0
  137. package/src/sdk/market/oracle/createPriceOracle.ts +22 -0
  138. package/src/sdk/market/oracle/index.ts +4 -0
  139. package/src/sdk/market/oracle/types.ts +48 -0
  140. package/src/sdk/market/pool/GaugeContract.ts +120 -0
  141. package/src/sdk/market/pool/LinearInterestRateModelContract.ts +75 -0
  142. package/src/sdk/market/pool/PoolQuotaKeeperV300Contract.ts +89 -0
  143. package/src/sdk/market/pool/PoolQuotaKeeperV310Contract.ts +89 -0
  144. package/src/sdk/market/pool/PoolSuite.ts +76 -0
  145. package/src/sdk/market/pool/PoolV300Contract.ts +144 -0
  146. package/src/sdk/market/pool/PoolV310Contract.ts +144 -0
  147. package/src/sdk/market/pool/TumblerContract.ts +73 -0
  148. package/src/sdk/market/pool/createInterestRateModel.ts +33 -0
  149. package/src/sdk/market/pool/createPool.ts +19 -0
  150. package/src/sdk/market/pool/createPoolQuotaKeeper.ts +20 -0
  151. package/src/sdk/market/pool/createRateKeeper.ts +25 -0
  152. package/src/sdk/market/pool/index.ts +6 -0
  153. package/src/sdk/market/pool/types.ts +28 -0
  154. package/src/sdk/market/pricefeeds/AbstractLPPriceFeed.ts +71 -0
  155. package/src/sdk/market/pricefeeds/AbstractPriceFeed.ts +137 -0
  156. package/src/sdk/market/pricefeeds/BalancerStablePriceFeed.ts +24 -0
  157. package/src/sdk/market/pricefeeds/BalancerWeightedPriceFeed.ts +70 -0
  158. package/src/sdk/market/pricefeeds/BoundedPriceFeed.ts +34 -0
  159. package/src/sdk/market/pricefeeds/ChainlinkPriceFeed.ts +16 -0
  160. package/src/sdk/market/pricefeeds/CompositePriceFeed.ts +25 -0
  161. package/src/sdk/market/pricefeeds/CurveCryptoPriceFeed.ts +24 -0
  162. package/src/sdk/market/pricefeeds/CurveStablePriceFeed.ts +24 -0
  163. package/src/sdk/market/pricefeeds/CurveUSDPriceFeed.ts +24 -0
  164. package/src/sdk/market/pricefeeds/Erc4626PriceFeed.ts +36 -0
  165. package/src/sdk/market/pricefeeds/MellowLRTPriceFeed.ts +26 -0
  166. package/src/sdk/market/pricefeeds/PendleTWAPPTPriceFeed.ts +44 -0
  167. package/src/sdk/market/pricefeeds/PriceFeedRef.ts +34 -0
  168. package/src/sdk/market/pricefeeds/PriceFeedsRegister.ts +293 -0
  169. package/src/sdk/market/pricefeeds/RedstonePriceFeed.ts +65 -0
  170. package/src/sdk/market/pricefeeds/RedstoneUpdater.ts +304 -0
  171. package/src/sdk/market/pricefeeds/WstETHPriceFeed.ts +24 -0
  172. package/src/sdk/market/pricefeeds/YearnPriceFeed.ts +24 -0
  173. package/src/sdk/market/pricefeeds/ZeroPriceFeed.ts +17 -0
  174. package/src/sdk/market/pricefeeds/index.ts +20 -0
  175. package/src/sdk/market/pricefeeds/types.ts +82 -0
  176. package/src/sdk/market/pricefeeds/utils.ts +24 -0
  177. package/src/sdk/plugins/index.ts +10 -0
  178. package/src/sdk/router/PathOptionFactory.ts +147 -0
  179. package/src/sdk/router/RouterV3Contract.ts +558 -0
  180. package/src/sdk/router/index.ts +2 -0
  181. package/src/sdk/router/types.ts +48 -0
  182. package/src/sdk/sdk-gov-legacy/contracts/adapters.ts +39 -0
  183. package/src/sdk/sdk-gov-legacy/contracts/contracts.ts +647 -0
  184. package/src/sdk/sdk-gov-legacy/contracts/index.ts +2 -0
  185. package/src/sdk/sdk-gov-legacy/core/constants.ts +11 -0
  186. package/src/sdk/sdk-gov-legacy/index.ts +4 -0
  187. package/src/sdk/sdk-gov-legacy/oracles/PriceFeedType.ts +24 -0
  188. package/src/sdk/sdk-gov-legacy/oracles/index.ts +1 -0
  189. package/src/sdk/sdk-gov-legacy/tokens/aave.ts +101 -0
  190. package/src/sdk/sdk-gov-legacy/tokens/aura.ts +284 -0
  191. package/src/sdk/sdk-gov-legacy/tokens/balancer.ts +421 -0
  192. package/src/sdk/sdk-gov-legacy/tokens/compound.ts +79 -0
  193. package/src/sdk/sdk-gov-legacy/tokens/convex.ts +561 -0
  194. package/src/sdk/sdk-gov-legacy/tokens/curveLP.ts +480 -0
  195. package/src/sdk/sdk-gov-legacy/tokens/decimals.ts +301 -0
  196. package/src/sdk/sdk-gov-legacy/tokens/erc4626.ts +75 -0
  197. package/src/sdk/sdk-gov-legacy/tokens/gear.ts +273 -0
  198. package/src/sdk/sdk-gov-legacy/tokens/index.ts +18 -0
  199. package/src/sdk/sdk-gov-legacy/tokens/normal.ts +613 -0
  200. package/src/sdk/sdk-gov-legacy/tokens/quoted.ts +10 -0
  201. package/src/sdk/sdk-gov-legacy/tokens/stakingRewards.ts +41 -0
  202. package/src/sdk/sdk-gov-legacy/tokens/token.ts +2354 -0
  203. package/src/sdk/sdk-gov-legacy/tokens/tokenData.ts +44 -0
  204. package/src/sdk/sdk-gov-legacy/tokens/tokenType.ts +33 -0
  205. package/src/sdk/sdk-gov-legacy/tokens/wrapped.ts +28 -0
  206. package/src/sdk/sdk-gov-legacy/tokens/yearn.ts +122 -0
  207. package/src/sdk/sdk-gov-legacy/tokens/zircuit.ts +44 -0
  208. package/src/sdk/sdk-legacy/apy/index.ts +149 -0
  209. package/src/sdk/sdk-legacy/core/assets.ts +200 -0
  210. package/src/sdk/sdk-legacy/core/creditAccount.spec.ts +1966 -0
  211. package/src/sdk/sdk-legacy/core/creditAccount.ts +816 -0
  212. package/src/sdk/sdk-legacy/core/creditManager.ts +316 -0
  213. package/src/sdk/sdk-legacy/core/creditSession.ts +352 -0
  214. package/src/sdk/sdk-legacy/core/endpoint.ts +131 -0
  215. package/src/sdk/sdk-legacy/core/eventOrTx.ts +101 -0
  216. package/src/sdk/sdk-legacy/core/pool.ts +439 -0
  217. package/src/sdk/sdk-legacy/core/strategy.ts +82 -0
  218. package/src/sdk/sdk-legacy/core/transactions.ts +865 -0
  219. package/src/sdk/sdk-legacy/gearboxRewards/api.ts +704 -0
  220. package/src/sdk/sdk-legacy/gearboxRewards/apy.ts +267 -0
  221. package/src/sdk/sdk-legacy/gearboxRewards/extraAPY.ts +165 -0
  222. package/src/sdk/sdk-legacy/gearboxRewards/index.ts +3 -0
  223. package/src/sdk/sdk-legacy/gearboxRewards/merklAPI.ts +151 -0
  224. package/src/sdk/sdk-legacy/index.ts +21 -0
  225. package/src/sdk/sdk-legacy/pathfinder/core.ts +18 -0
  226. package/src/sdk/sdk-legacy/pathfinder/index.ts +1 -0
  227. package/src/sdk/sdk-legacy/payload/creditAccount.ts +48 -0
  228. package/src/sdk/sdk-legacy/payload/creditManager.ts +133 -0
  229. package/src/sdk/sdk-legacy/payload/creditSession.ts +143 -0
  230. package/src/sdk/sdk-legacy/payload/graphPayload.ts +10 -0
  231. package/src/sdk/sdk-legacy/payload/pool.ts +198 -0
  232. package/src/sdk/sdk-legacy/payload/token.ts +13 -0
  233. package/src/sdk/sdk-legacy/tokens/tokenData.ts +57 -0
  234. package/src/sdk/sdk-legacy/types/IAirdropDistributor.ts +103 -0
  235. package/src/sdk/sdk-legacy/types/IBaseRewardPool.ts +249 -0
  236. package/src/sdk/sdk-legacy/types/IDataCompressorV3.ts +957 -0
  237. package/src/sdk/sdk-legacy/types/IDegenDistributor.ts +70 -0
  238. package/src/sdk/sdk-legacy/types/IERC20Permit.ts +35 -0
  239. package/src/sdk/sdk-legacy/types/IERC20ZapperDeposits.ts +99 -0
  240. package/src/sdk/sdk-legacy/types/IETHZapperDeposits.ts +27 -0
  241. package/src/sdk/sdk-legacy/types/IFarmingPool.ts +229 -0
  242. package/src/sdk/sdk-legacy/types/IInterestRateModel.ts +23 -0
  243. package/src/sdk/sdk-legacy/types/IMulticall3.ts +242 -0
  244. package/src/sdk/sdk-legacy/types/IOffchainOracle.ts +31 -0
  245. package/src/sdk/sdk-legacy/types/index.ts +11 -0
  246. package/src/sdk/sdk-legacy/utils/formatter.ts +46 -0
  247. package/src/sdk/sdk-legacy/utils/index.ts +3 -0
  248. package/src/sdk/sdk-legacy/utils/math.ts +6 -0
  249. package/src/sdk/sdk-legacy/utils/price.ts +27 -0
  250. package/src/sdk/types/index.ts +5 -0
  251. package/src/sdk/types/logger.ts +13 -0
  252. package/src/sdk/types/state-human.ts +224 -0
  253. package/src/sdk/types/state.ts +8 -0
  254. package/src/sdk/types/transactions.ts +22 -0
  255. package/src/sdk/types/tvl.ts +4 -0
  256. package/src/sdk/utils/AddressMap.ts +111 -0
  257. package/src/sdk/utils/bytes32ToString.ts +6 -0
  258. package/src/sdk/utils/childLogger.ts +8 -0
  259. package/src/sdk/utils/createRawTx.ts +86 -0
  260. package/src/sdk/utils/etherscan.ts +42 -0
  261. package/src/sdk/utils/filterDust.ts +20 -0
  262. package/src/sdk/utils/formatter.ts +124 -0
  263. package/src/sdk/utils/index.ts +10 -0
  264. package/src/sdk/utils/internal/Hooks.ts +51 -0
  265. package/src/sdk/utils/internal/index.ts +1 -0
  266. package/src/sdk/utils/json.ts +27 -0
  267. package/src/sdk/utils/mappers.ts +38 -0
  268. package/src/sdk/utils/retry.ts +24 -0
  269. package/src/sdk/utils/viem/detectNetwork.ts +27 -0
  270. package/src/sdk/utils/viem/index.ts +3 -0
  271. package/src/sdk/utils/viem/sendRawTx.ts +36 -0
  272. package/src/sdk/utils/viem/simulateMulticall.ts +262 -0
  273. package/tsconfig.build.json +4 -0
  274. package/tsconfig.json +16 -0
  275. package/tsup.config.ts +77 -0
@@ -0,0 +1,24 @@
1
+ import { iyVaultAbi, yearnPriceFeedAbi } from "../../abi";
2
+ import type { GearboxSDK } from "../../GearboxSDK";
3
+ import { AbstractLPPriceFeedContract } from "./AbstractLPPriceFeed";
4
+ import type { PartialPriceFeedTreeNode } from "./AbstractPriceFeed";
5
+
6
+ type abi = typeof yearnPriceFeedAbi;
7
+
8
+ export class YearnPriceFeedContract extends AbstractLPPriceFeedContract<abi> {
9
+ constructor(sdk: GearboxSDK, args: PartialPriceFeedTreeNode) {
10
+ super(sdk, {
11
+ ...args,
12
+ name: "YearnPriceFeed",
13
+ abi: yearnPriceFeedAbi,
14
+ });
15
+ }
16
+
17
+ public override async getValue(): Promise<bigint> {
18
+ return await this.sdk.provider.publicClient.readContract({
19
+ abi: iyVaultAbi,
20
+ address: this.lpContract,
21
+ functionName: "pricePerShare",
22
+ });
23
+ }
24
+ }
@@ -0,0 +1,17 @@
1
+ import { zeroPriceFeedAbi } from "../../abi";
2
+ import type { GearboxSDK } from "../../GearboxSDK";
3
+ import type { PartialPriceFeedTreeNode } from "./AbstractPriceFeed";
4
+ import { AbstractPriceFeedContract } from "./AbstractPriceFeed";
5
+
6
+ type abi = typeof zeroPriceFeedAbi;
7
+
8
+ export class ZeroPriceFeedContract extends AbstractPriceFeedContract<abi> {
9
+ constructor(sdk: GearboxSDK, args: PartialPriceFeedTreeNode) {
10
+ super(sdk, {
11
+ ...args,
12
+ name: "ZeroPriceFeed",
13
+ abi: zeroPriceFeedAbi,
14
+ decimals: 8,
15
+ });
16
+ }
17
+ }
@@ -0,0 +1,20 @@
1
+ export * from "./AbstractPriceFeed";
2
+ export * from "./BalancerStablePriceFeed";
3
+ export * from "./BalancerWeightedPriceFeed";
4
+ export * from "./BoundedPriceFeed";
5
+ export * from "./ChainlinkPriceFeed";
6
+ export * from "./CompositePriceFeed";
7
+ export * from "./CurveCryptoPriceFeed";
8
+ export * from "./CurveStablePriceFeed";
9
+ export * from "./CurveUSDPriceFeed";
10
+ export * from "./Erc4626PriceFeed";
11
+ export * from "./MellowLRTPriceFeed";
12
+ export * from "./PendleTWAPPTPriceFeed";
13
+ export * from "./PriceFeedRef";
14
+ export * from "./PriceFeedsRegister";
15
+ export * from "./RedstonePriceFeed";
16
+ export * from "./types";
17
+ export * from "./utils";
18
+ export * from "./WstETHPriceFeed";
19
+ export * from "./YearnPriceFeed";
20
+ export * from "./ZeroPriceFeed";
@@ -0,0 +1,82 @@
1
+ import type { UnionOmit } from "viem";
2
+
3
+ import type { IBaseContract } from "../../base";
4
+ import type { PriceFeedStateHuman, RawTx } from "../../types";
5
+ import type { PriceFeedRef } from "./PriceFeedRef";
6
+
7
+ export type PriceFeedUsageType = "Main" | "Reserve";
8
+
9
+ export type PriceFeedContractTypeLegacy =
10
+ | "PF_CHAINLINK_ORACLE"
11
+ | "PF_ZERO_ORACLE"
12
+ | "PF_COMPOSITE_ORACLE"
13
+ | "PF_BALANCER_STABLE_LP_ORACLE"
14
+ | "PF_CURVE_STABLE_LP_ORACLE"
15
+ | "PF_CURVE_CRYPTO_LP_ORACLE"
16
+ | "PF_CURVE_USD_ORACLE"
17
+ | "PF_ERC4626_ORACLE"
18
+ | "PF_WSTETH_ORACLE"
19
+ | "PF_YEARN_ORACLE"
20
+ | "PF_MELLOW_LRT_ORACLE"
21
+ | "PF_BALANCER_WEIGHTED_LP_ORACLE"
22
+ | "PF_BOUNDED_ORACLE"
23
+ | "PF_PYTH_ORACLE"
24
+ | "PF_REDSTONE_ORACLE"
25
+ | "PF_PENDLE_PT_TWAP_ORACLE";
26
+
27
+ export type PriceFeedContractType =
28
+ | "PRICE_FEED::EXTERNAL"
29
+ | "PRICE_FEED::ZERO"
30
+ | "PRICE_FEED::COMPOSITE"
31
+ | "PRICE_FEED::BALANCER_STABLE"
32
+ | "PRICE_FEED::CURVE_STABLE"
33
+ | "PRICE_FEED::CURVE_CRYPTO"
34
+ | "PRICE_FEED::CURVE_USD"
35
+ | "PRICE_FEED::ERC4626"
36
+ | "PRICE_FEED::WSTETH"
37
+ | "PRICE_FEED::YEARN"
38
+ | "PRICE_FEED::MELLOW_LRT"
39
+ | "PRICE_FEED::BALANCER_WEIGHTED"
40
+ | "PRICE_FEED::BOUNDED"
41
+ | "PRICE_FEED::PYTH"
42
+ | "PRICE_FEED::REDSTONE"
43
+ | "PRICE_FEED::PENDLE_PT_TWAP";
44
+
45
+ export interface IPriceFeedContract extends IBaseContract {
46
+ readonly hasLowerBoundCap: boolean;
47
+ readonly priceFeedType: PriceFeedContractType;
48
+ readonly decimals: number;
49
+ /**
50
+ * True if the contract deployed at this address implements IUpdatablePriceFeed interface
51
+ */
52
+ readonly updatable: boolean;
53
+ /**
54
+ * It's possible to create PriceFeed with base params only.
55
+ * This flag idicates that all the price feed data (decimals, skip check, dependencies...) has been loaded from compressor
56
+ */
57
+ readonly loaded: boolean;
58
+
59
+ readonly underlyingPriceFeeds: readonly PriceFeedRef[];
60
+
61
+ answer: (overrides?: { blockNumber?: bigint }) => Promise<bigint>;
62
+ stateHuman: (
63
+ raw?: boolean,
64
+ ) => UnionOmit<PriceFeedStateHuman, "stalenessPeriod">;
65
+
66
+ /**
67
+ * Returns all updatable depenedencies (uderlying price feeds) of this price feed, including price feed itself, if it's updatable
68
+ * @returns
69
+ */
70
+ updatableDependencies: () => IPriceFeedContract[];
71
+ }
72
+
73
+ export interface ILPPriceFeedContract extends IPriceFeedContract {
74
+ getValue: () => Promise<bigint>;
75
+ getLowerBound: () => Promise<bigint>;
76
+ currentLowerBound: () => Promise<bigint>;
77
+ }
78
+
79
+ export interface UpdatePriceFeedsResult {
80
+ txs: RawTx[];
81
+ timestamp: number;
82
+ }
@@ -0,0 +1,24 @@
1
+ import { decodeFunctionData } from "viem";
2
+
3
+ import { iUpdatablePriceFeedAbi } from "../../../abi/iUpdatablePriceFeed";
4
+ import type { RawTx } from "../../types";
5
+
6
+ /**
7
+ * Helper method to convert our RawTx into viem's multicall format
8
+ * Involves decoding what was previously encoded, but it's better than adding another method to PriceOracle
9
+ * @param tx
10
+ * @returns
11
+ */
12
+ export function rawTxToMulticallPriceUpdate(tx: RawTx) {
13
+ const { to, callData } = tx;
14
+ const { args, functionName } = decodeFunctionData({
15
+ abi: iUpdatablePriceFeedAbi,
16
+ data: callData,
17
+ });
18
+ return {
19
+ abi: iUpdatablePriceFeedAbi,
20
+ address: to,
21
+ functionName,
22
+ args,
23
+ };
24
+ }
@@ -0,0 +1,10 @@
1
+ import type { BaseState, IBaseContract } from "../base";
2
+ import type { GearboxSDK } from "../GearboxSDK";
3
+
4
+ export interface IGearboxSDKPlugin {
5
+ name: string;
6
+ createContract: (
7
+ sdk: GearboxSDK,
8
+ params: BaseState,
9
+ ) => IBaseContract | undefined;
10
+ }
@@ -0,0 +1,147 @@
1
+ import type { Address } from "viem";
2
+
3
+ import type { NetworkType } from "../chain";
4
+ import type {
5
+ AuraLPToken,
6
+ AuraStakedToken,
7
+ BalancerLPToken,
8
+ ConvexLPToken,
9
+ CurveLPToken,
10
+ YearnLPToken,
11
+ } from "../sdk-gov-legacy";
12
+ import {
13
+ auraTokens,
14
+ balancerLpTokens,
15
+ contractParams,
16
+ convexTokens,
17
+ curveTokens,
18
+ getTokenSymbol,
19
+ isBalancerLPToken,
20
+ isCurveLPToken,
21
+ tokenDataByNetwork,
22
+ yearnTokens,
23
+ } from "../sdk-gov-legacy";
24
+ import type { Asset, PathOptionSerie } from "./types";
25
+
26
+ export class PathOptionFactory {
27
+ // TODO: get rid of token data from SDK
28
+ static generatePathOptions(
29
+ balances: readonly Asset[],
30
+ network: NetworkType,
31
+ loopsInTx: number,
32
+ ): PathOptionSerie[] {
33
+ const curvePools = PathOptionFactory.getCurvePools(balances);
34
+ const balancerPools = PathOptionFactory.getBalancerPools(balances);
35
+
36
+ const curveInitPO: PathOptionSerie = curvePools.map(symbol => {
37
+ return {
38
+ target: tokenDataByNetwork[network][symbol],
39
+ option: 0,
40
+ totalOptions: contractParams[curveTokens[symbol].pool].tokens.length,
41
+ };
42
+ });
43
+ const balancerInitPO: PathOptionSerie = balancerPools.map(symbol => {
44
+ return {
45
+ target: tokenDataByNetwork[network][symbol],
46
+ option: 0,
47
+ totalOptions: balancerLpTokens[symbol].underlying.length,
48
+ };
49
+ });
50
+ const initPO = [...curveInitPO, ...balancerInitPO];
51
+
52
+ const totalLoops = initPO.reduce<number>(
53
+ (acc, item) => acc * item.totalOptions,
54
+ 1,
55
+ );
56
+
57
+ const result: PathOptionSerie[] = [];
58
+
59
+ let currentPo = [...initPO];
60
+
61
+ for (let i = 0; i < totalLoops; i++) {
62
+ if (i % loopsInTx === 0) {
63
+ result.push(currentPo);
64
+ }
65
+ if (i < totalLoops - 1) {
66
+ currentPo = PathOptionFactory.next(currentPo);
67
+ }
68
+ }
69
+
70
+ return result;
71
+ }
72
+
73
+ static getCurvePools(balances: readonly Asset[]): CurveLPToken[] {
74
+ const nonZeroBalances = balances.filter(b => b.balance > 1n);
75
+
76
+ const curvePools = nonZeroBalances
77
+ .map(b => getTokenSymbol(b.token))
78
+ .filter(symbol => isCurveLPToken(symbol)) as CurveLPToken[];
79
+
80
+ const yearnCurveTokens = Object.entries(yearnTokens)
81
+ .filter(([, data]) => isCurveLPToken(data.underlying))
82
+ .map(([token]) => token);
83
+
84
+ const curvePoolsFromYearn = nonZeroBalances
85
+ .map(b => getTokenSymbol(b.token)!)
86
+ .filter(symbol => yearnCurveTokens.includes(symbol))
87
+ .map(
88
+ symbol => yearnTokens[symbol as YearnLPToken].underlying,
89
+ ) as CurveLPToken[];
90
+
91
+ const convexCurveTokens = Object.entries(convexTokens)
92
+ .filter(([, data]) => isCurveLPToken(data.underlying))
93
+ .map(([token]) => token);
94
+
95
+ const curvePoolsFromConvex = nonZeroBalances
96
+ .map(b => getTokenSymbol(b.token)!)
97
+ .filter(symbol => convexCurveTokens.includes(symbol))
98
+ .map(symbol => convexTokens[symbol as ConvexLPToken].underlying);
99
+
100
+ const curveSet = new Set([
101
+ ...curvePools,
102
+ ...curvePoolsFromYearn,
103
+ ...curvePoolsFromConvex,
104
+ ]);
105
+ return Array.from(curveSet.values());
106
+ }
107
+
108
+ static getBalancerPools(balances: readonly Asset[]): BalancerLPToken[] {
109
+ const nonZeroBalances = Object.entries(balances).filter(
110
+ ([, balance]) => balance.balance > 1,
111
+ );
112
+
113
+ const balancerPools = nonZeroBalances
114
+ .map(([token]) => getTokenSymbol(token as Address)!)
115
+ .filter(symbol => isBalancerLPToken(symbol)) as BalancerLPToken[];
116
+
117
+ const balancerAuraTokens = Object.entries(auraTokens)
118
+ .filter(([, data]) => isBalancerLPToken(data.underlying))
119
+ .map(([token]) => token);
120
+
121
+ const balancerTokensFromAura = nonZeroBalances
122
+ .map(([token]) => getTokenSymbol(token as Address)!)
123
+ .filter(symbol => balancerAuraTokens.includes(symbol))
124
+ .map(
125
+ symbol =>
126
+ auraTokens[symbol as AuraLPToken | AuraStakedToken].underlying,
127
+ );
128
+
129
+ const balancerSet = new Set([...balancerPools, ...balancerTokensFromAura]);
130
+
131
+ return Array.from(balancerSet.values());
132
+ }
133
+
134
+ static next(path: PathOptionSerie): PathOptionSerie {
135
+ let newPath = [...path];
136
+ for (let i = path.length - 1; i >= 0; i--) {
137
+ const po = { ...newPath[i] };
138
+ po.option++;
139
+ newPath[i] = po;
140
+
141
+ if (po.option < po.totalOptions) return newPath;
142
+ po.option = 0;
143
+ }
144
+
145
+ throw new Error("Path options overflow");
146
+ }
147
+ }