@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,44 @@
1
+ import type { Address } from "viem";
2
+
3
+ import type { NetworkType } from "../../chain";
4
+ import { NOT_DEPLOYED } from "../../constants";
5
+ import type { SupportedToken } from "./token";
6
+ import { tokenDataByNetwork } from "./token";
7
+
8
+ export const connectors: Record<NetworkType, Array<SupportedToken>> = {
9
+ Mainnet: [
10
+ "WETH",
11
+ "DAI",
12
+ "USDC",
13
+ "USDe",
14
+ "FRAX",
15
+ "rETH",
16
+ "ezETH",
17
+ "GHO",
18
+ "weETH",
19
+ "wstETH",
20
+ "STETH",
21
+ "WBTC",
22
+ "USDS",
23
+ "eBTC",
24
+ "LBTC",
25
+ "solvBTC",
26
+ "pumpBTC",
27
+ ],
28
+ Arbitrum: ["WETH", "DAI", "USDC", "USDT", "rETH", "USDC_e", "wstETH"],
29
+ Optimism: ["WETH", "USDC", "USDT", "USDC_e", "wstETH"],
30
+ Base: ["WETH", "USDC", "USDT"],
31
+ Sonic: ["wS"],
32
+ };
33
+
34
+ export function getConnectors(networkType: NetworkType): Address[] {
35
+ return connectors[networkType].map(e => {
36
+ const result = tokenDataByNetwork[networkType][e];
37
+
38
+ if (!result || result === NOT_DEPLOYED) {
39
+ throw new Error(`connector token ${e} not found`);
40
+ }
41
+
42
+ return result.toLowerCase() as Address;
43
+ });
44
+ }
@@ -0,0 +1,33 @@
1
+ import type { NetworkType } from "../../chain";
2
+
3
+ export enum TokenType {
4
+ NO_TOKEN,
5
+ NORMAL_TOKEN,
6
+ CURVE_LP_TOKEN,
7
+ YEARN_ON_NORMAL_TOKEN,
8
+ YEARN_ON_CURVE_TOKEN,
9
+ CONVEX_LP_TOKEN,
10
+ CONVEX_STAKED_TOKEN,
11
+ DIESEL_LP_TOKEN,
12
+ GEAR_TOKEN,
13
+ COMPOUND_V2_C_TOKEN,
14
+ BALANCER_LP_TOKEN,
15
+ AAVE_V2_A_TOKEN,
16
+ WRAPPED_AAVE_V2_TOKEN,
17
+ ERC4626_VAULT_TOKEN,
18
+ WRAPPED_TOKEN,
19
+ AURA_LP_TOKEN,
20
+ AURA_STAKED_TOKEN,
21
+ CONVEX_L2_STAKED_TOKEN,
22
+ ZIRCUIT_STAKED_TOKEN,
23
+ STAKING_REWARDS_PHANTOM_TOKEN,
24
+ }
25
+
26
+ export enum PhantomTokenType {
27
+ NO_TOKEN,
28
+ CONVEX_PHANTOM_TOKEN,
29
+ ZIRCUIT_PHANTOM_TOKEN,
30
+ STAKING_REWARDS_PHANTOM_TOKEN,
31
+ }
32
+
33
+ export type TokenNetwork = NetworkType | "AllNetworks";
@@ -0,0 +1,28 @@
1
+ import type { TokenBase } from "./token";
2
+ import type { TokenNetwork } from "./tokenType";
3
+ import { TokenType } from "./tokenType";
4
+
5
+ export type WrappedToken = "sfrxETH";
6
+
7
+ export type WrappedTokenData = {
8
+ symbol: WrappedToken;
9
+ type: Partial<
10
+ Record<TokenNetwork, TokenType.WRAPPED_TOKEN | TokenType.NORMAL_TOKEN>
11
+ >;
12
+ } & TokenBase;
13
+
14
+ export const wrappedTokens: Record<WrappedToken, WrappedTokenData> = {
15
+ sfrxETH: {
16
+ name: "sfrxETH",
17
+
18
+ symbol: "sfrxETH",
19
+ type: {
20
+ Mainnet: TokenType.WRAPPED_TOKEN,
21
+ Arbitrum: TokenType.NORMAL_TOKEN,
22
+ Optimism: TokenType.NORMAL_TOKEN,
23
+ },
24
+ },
25
+ };
26
+
27
+ export const isWrappedToken = (t: unknown): t is WrappedToken =>
28
+ typeof t === "string" && !!wrappedTokens[t as WrappedToken];
@@ -0,0 +1,122 @@
1
+ import type { YearnVaultContract } from "../contracts";
2
+ import type { CurveLPToken } from "./curveLP";
3
+ import type { NormalToken } from "./normal";
4
+ import type { TokenBase } from "./token";
5
+ import type { TokenNetwork } from "./tokenType";
6
+ import { TokenType } from "./tokenType";
7
+
8
+ export type YearnLPToken =
9
+ | "yvDAI"
10
+ | "yvUSDC"
11
+ | "yvUSDC_e"
12
+ | "yvWETH"
13
+ | "yvWBTC"
14
+ | "yvUSDT"
15
+ | "yvOP"
16
+ | "yvCurve_stETH"
17
+ | "yvCurve_FRAX";
18
+
19
+ export type YearnVaultTokenData = {
20
+ symbol: YearnLPToken;
21
+ type: Partial<Record<TokenNetwork, TokenType.YEARN_ON_NORMAL_TOKEN>>;
22
+ underlying: NormalToken;
23
+ vault: YearnVaultContract;
24
+ } & TokenBase;
25
+
26
+ export type YearnVaultOfCurveLPTokenData = {
27
+ symbol: YearnLPToken;
28
+ type: Partial<Record<TokenNetwork, TokenType.YEARN_ON_CURVE_TOKEN>>;
29
+ underlying: CurveLPToken;
30
+ vault: YearnVaultContract;
31
+ } & TokenBase;
32
+
33
+ export type YearnVaultOfMetaCurveLPTokenData = {
34
+ symbol: YearnLPToken;
35
+ type: Partial<Record<TokenNetwork, TokenType.YEARN_ON_CURVE_TOKEN>>;
36
+ underlying: CurveLPToken;
37
+ vault: YearnVaultContract;
38
+ } & TokenBase;
39
+
40
+ export const yearnTokens: Record<
41
+ YearnLPToken,
42
+ | YearnVaultTokenData
43
+ | YearnVaultOfCurveLPTokenData
44
+ | YearnVaultOfMetaCurveLPTokenData
45
+ > = {
46
+ // YEARN TOKENS
47
+ yvDAI: {
48
+ name: "Yearn yvDAI",
49
+ symbol: "yvDAI",
50
+ type: { AllNetworks: TokenType.YEARN_ON_NORMAL_TOKEN },
51
+ underlying: "DAI",
52
+ vault: "YEARN_DAI_VAULT",
53
+ },
54
+
55
+ yvUSDC: {
56
+ name: "Yearn yvUSDC",
57
+ symbol: "yvUSDC",
58
+ type: { AllNetworks: TokenType.YEARN_ON_NORMAL_TOKEN },
59
+ underlying: "USDC",
60
+ vault: "YEARN_USDC_VAULT",
61
+ },
62
+
63
+ yvUSDC_e: {
64
+ name: "Yearn yvUSDC.e",
65
+ symbol: "yvUSDC_e",
66
+ type: { AllNetworks: TokenType.YEARN_ON_NORMAL_TOKEN },
67
+ underlying: "USDC_e",
68
+ vault: "YEARN_USDC_E_VAULT",
69
+ },
70
+
71
+ yvWETH: {
72
+ name: "Yearn yvWETH",
73
+ symbol: "yvWETH",
74
+ type: { AllNetworks: TokenType.YEARN_ON_NORMAL_TOKEN },
75
+ underlying: "WETH",
76
+ vault: "YEARN_WETH_VAULT",
77
+ },
78
+
79
+ yvWBTC: {
80
+ name: "Yearn yvWBTC",
81
+ symbol: "yvWBTC",
82
+ type: { AllNetworks: TokenType.YEARN_ON_NORMAL_TOKEN },
83
+ underlying: "WBTC",
84
+ vault: "YEARN_WBTC_VAULT",
85
+ },
86
+
87
+ yvUSDT: {
88
+ name: "Yearn yvUSDT",
89
+ symbol: "yvUSDT",
90
+ type: { AllNetworks: TokenType.YEARN_ON_NORMAL_TOKEN },
91
+ underlying: "USDT",
92
+ vault: "YEARN_USDT_VAULT",
93
+ },
94
+
95
+ yvOP: {
96
+ name: "Yearn yvOP",
97
+ symbol: "yvOP",
98
+ type: { AllNetworks: TokenType.YEARN_ON_NORMAL_TOKEN },
99
+ underlying: "OP",
100
+ vault: "YEARN_OP_VAULT",
101
+ },
102
+
103
+ // YEARN- CURVE TOKENS
104
+ yvCurve_stETH: {
105
+ name: "Yearn yvCurve-stETH",
106
+ symbol: "yvCurve_stETH",
107
+ type: { AllNetworks: TokenType.YEARN_ON_CURVE_TOKEN },
108
+ underlying: "steCRV",
109
+ vault: "YEARN_CURVE_STETH_VAULT",
110
+ },
111
+
112
+ yvCurve_FRAX: {
113
+ name: "Yearn yvCurve-FRAX",
114
+ symbol: "yvCurve_FRAX",
115
+ type: { AllNetworks: TokenType.YEARN_ON_CURVE_TOKEN },
116
+ underlying: "FRAX3CRV",
117
+ vault: "YEARN_CURVE_FRAX_VAULT",
118
+ },
119
+ };
120
+
121
+ export const isYearnLPToken = (t: unknown): t is YearnLPToken =>
122
+ typeof t === "string" && !!yearnTokens[t as YearnLPToken];
@@ -0,0 +1,44 @@
1
+ import type { SupportedToken, TokenBase } from "./token";
2
+ import type { TokenNetwork } from "./tokenType";
3
+ import { TokenType } from "./tokenType";
4
+
5
+ export type ZircuitStakedPhantomToken = "zpufETH";
6
+
7
+ export type ZircuitPhantomTokenData = {
8
+ symbol: ZircuitStakedPhantomToken;
9
+ type: Partial<Record<TokenNetwork, TokenType.ZIRCUIT_STAKED_TOKEN>>;
10
+ underlying: SupportedToken;
11
+ } & TokenBase;
12
+
13
+ export const zircuitStakedPhantomTokens: Record<
14
+ ZircuitStakedPhantomToken,
15
+ ZircuitPhantomTokenData
16
+ > = {
17
+ zpufETH: {
18
+ name: "Zircuit staked pufETH",
19
+ symbol: "zpufETH",
20
+ type: {
21
+ AllNetworks: TokenType.ZIRCUIT_STAKED_TOKEN,
22
+ },
23
+ underlying: "pufETH",
24
+ },
25
+ };
26
+
27
+ export const zircuitTokens: Record<
28
+ ZircuitStakedPhantomToken,
29
+ ZircuitPhantomTokenData
30
+ > = {
31
+ ...zircuitStakedPhantomTokens,
32
+ };
33
+
34
+ export const isZircuitStakedPhantomToken = (
35
+ t: unknown,
36
+ ): t is ZircuitStakedPhantomToken =>
37
+ typeof t === "string" && !!zircuitTokens[t as ZircuitStakedPhantomToken];
38
+
39
+ export const zircuitStakedTokenByToken = Object.values(
40
+ zircuitStakedPhantomTokens,
41
+ ).reduce<Partial<Record<SupportedToken, SupportedToken>>>((acc, value) => {
42
+ acc[value.underlying] = value.symbol;
43
+ return acc;
44
+ }, {});
@@ -0,0 +1,149 @@
1
+ import type { Address } from "viem";
2
+
3
+ import type { LPTokens, SupportedToken } from "../../sdk-gov-legacy";
4
+ import { isLPToken } from "../../sdk-gov-legacy";
5
+ import type { PartialRecord } from "../../utils";
6
+
7
+ // all extra tokens
8
+ type ExtraFarmTokens = Extract<
9
+ SupportedToken,
10
+ | "STETH"
11
+ | "rETH"
12
+ | "osETH"
13
+ | "cbETH"
14
+ | "wstETH"
15
+ | "weETH"
16
+ | "ezETH"
17
+ | "sfrxETH"
18
+ | "USDe"
19
+ | "rsETH"
20
+ | "rswETH"
21
+ | "pufETH"
22
+ | "pzETH"
23
+ | "rstETH"
24
+ | "steakLRT"
25
+ | "amphrETH"
26
+ | "LBTC"
27
+ | "Re7LRT"
28
+ | "PT_ezETH_26DEC2024"
29
+ | "PT_eETH_26DEC2024"
30
+ | "PT_sUSDe_26DEC2024"
31
+ | "PT_eBTC_26DEC2024"
32
+ | "PT_LBTC_27MAR2025"
33
+ | "eBTC"
34
+ | "PT_cornLBTC_26DEC2024"
35
+ | "PT_corn_eBTC_27MAR2025"
36
+ | "PT_corn_pumpBTC_26DEC2024"
37
+ | "pumpBTC"
38
+ | "PT_sUSDe_27MAR2025"
39
+ | "DVstETH"
40
+ | "beraSTONE"
41
+ | "PT_sUSDe_29MAY2025"
42
+ | "tETH"
43
+ | "PT_beraSTONE_10APR2025"
44
+ | "stS"
45
+ | "csUSDL"
46
+ | "scUSD"
47
+ >;
48
+
49
+ // tokens with apy among them
50
+ type ExtraTokensWithAPY = Extract<
51
+ ExtraFarmTokens,
52
+ | "STETH"
53
+ | "rETH"
54
+ | "osETH"
55
+ | "cbETH"
56
+ | "wstETH"
57
+ | "sfrxETH"
58
+ | "pzETH"
59
+ | "ezETH"
60
+ | "Re7LRT"
61
+ | "rsETH"
62
+ | "weETH"
63
+ | "rswETH"
64
+ | "rstETH"
65
+ | "steakLRT"
66
+ | "amphrETH"
67
+ | "pufETH"
68
+ | "PT_ezETH_26DEC2024"
69
+ | "PT_eETH_26DEC2024"
70
+ | "PT_sUSDe_26DEC2024"
71
+ | "PT_eBTC_26DEC2024"
72
+ | "PT_LBTC_27MAR2025"
73
+ | "PT_cornLBTC_26DEC2024"
74
+ | "PT_corn_eBTC_27MAR2025"
75
+ | "PT_corn_pumpBTC_26DEC2024"
76
+ | "PT_sUSDe_27MAR2025"
77
+ | "DVstETH"
78
+ | "PT_sUSDe_29MAY2025"
79
+ | "tETH"
80
+ | "PT_beraSTONE_10APR2025"
81
+ | "stS"
82
+ | "csUSDL"
83
+ | "scUSD"
84
+ >;
85
+
86
+ // LRT & LST tokens among them
87
+ type LRTAndLSTTokens = Exclude<ExtraFarmTokens, "USDe">;
88
+
89
+ const EXTRA_FARM_TOKENS: Record<ExtraFarmTokens, true> = {
90
+ STETH: true,
91
+ rETH: true,
92
+ osETH: true,
93
+ cbETH: true,
94
+ wstETH: true,
95
+ weETH: true,
96
+ ezETH: true,
97
+ sfrxETH: true,
98
+ USDe: true,
99
+ rsETH: true,
100
+ rswETH: true,
101
+ pufETH: true,
102
+ pzETH: true,
103
+ rstETH: true,
104
+ steakLRT: true,
105
+ amphrETH: true,
106
+ LBTC: true,
107
+ Re7LRT: true,
108
+ PT_ezETH_26DEC2024: true,
109
+ PT_eETH_26DEC2024: true,
110
+ PT_sUSDe_26DEC2024: true,
111
+ PT_eBTC_26DEC2024: true,
112
+ PT_LBTC_27MAR2025: true,
113
+ eBTC: true,
114
+ PT_cornLBTC_26DEC2024: true,
115
+ PT_corn_eBTC_27MAR2025: true,
116
+ PT_corn_pumpBTC_26DEC2024: true,
117
+ pumpBTC: true,
118
+ PT_sUSDe_27MAR2025: true,
119
+ DVstETH: true,
120
+ beraSTONE: true,
121
+ PT_sUSDe_29MAY2025: true,
122
+ tETH: true,
123
+ PT_beraSTONE_10APR2025: true,
124
+ stS: true,
125
+ csUSDL: true,
126
+ scUSD: true,
127
+ };
128
+
129
+ export const isExtraFarmToken = (t: unknown): t is ExtraFarmTokens => {
130
+ if (typeof t !== "string") return false;
131
+ return !!EXTRA_FARM_TOKENS[t as ExtraFarmTokens];
132
+ };
133
+
134
+ const { USDe, ...rest } = EXTRA_FARM_TOKENS;
135
+ const LRT_LST: Record<LRTAndLSTTokens, true> = rest;
136
+
137
+ export const isLRT_LSTToken = (t: unknown): t is LRTAndLSTTokens => {
138
+ if (typeof t !== "string") return false;
139
+ return !!LRT_LST[t as LRTAndLSTTokens];
140
+ };
141
+
142
+ export type TokensWithAPY = LPTokens | ExtraTokensWithAPY;
143
+ export type TokensAPYList = PartialRecord<Address, number>;
144
+
145
+ export type AllLPTokens = LPTokens | ExtraFarmTokens;
146
+
147
+ export const isFarmToken = (t: unknown): t is AllLPTokens => {
148
+ return isLPToken(t) || isExtraFarmToken(t);
149
+ };
@@ -0,0 +1,200 @@
1
+ import type { Address } from "viem";
2
+
3
+ import type { Asset } from "../../router";
4
+ import type { TokenData } from "../tokens/tokenData";
5
+ import { BigIntMath } from "../utils/math";
6
+ import { PriceUtils } from "../utils/price";
7
+ import { CreditAccountData_Legacy } from "./creditAccount";
8
+
9
+ export interface AssetWithView extends Asset {
10
+ balanceView: string;
11
+ }
12
+
13
+ export interface AssetWithAmountInTarget extends Asset {
14
+ amountInTarget: bigint;
15
+ }
16
+
17
+ interface NextAssetProps<T extends Asset> {
18
+ allowedTokens: Array<Address>;
19
+ selectedAssets: Array<T>;
20
+ balances: Record<Address, bigint>;
21
+ tokensList: Record<Address, TokenData>;
22
+ prices?: Record<Address, bigint>;
23
+ }
24
+
25
+ export type WrapResult = [Array<Asset>, bigint, bigint];
26
+
27
+ export class AssetUtils {
28
+ static nextAsset<T extends Asset>({
29
+ allowedTokens,
30
+ selectedAssets,
31
+ balances,
32
+ tokensList,
33
+ prices = {},
34
+ }: NextAssetProps<T>): Address | undefined {
35
+ const selectedRecord = selectedAssets.reduce<Record<Address, true>>(
36
+ (acc, { token }) => {
37
+ acc[token.toLowerCase() as Address] = true;
38
+ return acc;
39
+ },
40
+ {},
41
+ );
42
+
43
+ const notSelected = allowedTokens.filter(allowedToken => {
44
+ const alreadySelected =
45
+ selectedRecord[allowedToken.toLowerCase() as Address];
46
+ return !alreadySelected;
47
+ });
48
+
49
+ const sorted = CreditAccountData_Legacy.sortBalances(
50
+ AssetUtils.getBalances(notSelected, balances),
51
+ prices,
52
+ tokensList,
53
+ );
54
+
55
+ const [address] = sorted[0] || [];
56
+
57
+ return address;
58
+ }
59
+
60
+ static getBalances(
61
+ allowedTokens: Array<Address>,
62
+ externalBalances: Record<Address, bigint>,
63
+ ): Record<Address, bigint> {
64
+ return allowedTokens.reduce((acc, address) => {
65
+ const addressLc = address.toLowerCase() as Address;
66
+ return {
67
+ ...acc,
68
+ [addressLc]: externalBalances[addressLc] || 0n,
69
+ };
70
+ }, {});
71
+ }
72
+
73
+ static constructAssetRecord<A extends Asset>(a: Array<A>) {
74
+ const record = a.reduce<Record<Address, A>>((acc, asset) => {
75
+ acc[asset.token] = asset;
76
+ return acc;
77
+ }, {});
78
+ return record;
79
+ }
80
+
81
+ static memoWrap = (
82
+ unwrappedAddress: Address,
83
+ wrappedAddress: Address,
84
+ prices: Record<Address, bigint>,
85
+ tokensList: Record<Address, TokenData>,
86
+ ) =>
87
+ function wrap(assets: Array<Asset>): WrapResult {
88
+ const assetsRecord = AssetUtils.constructAssetRecord(assets);
89
+
90
+ const unwrapped = assetsRecord[unwrappedAddress];
91
+
92
+ const wrapped = assetsRecord[wrappedAddress];
93
+ const { balance: wrappedAmount = 0n } = wrapped || {};
94
+
95
+ // if there unwrapped token
96
+ if (unwrapped) {
97
+ const { balance: unwrappedAmount = 0n } = unwrapped || {};
98
+
99
+ const unwrappedToken = tokensList[unwrappedAddress];
100
+ const unwrappedPrice = prices[unwrappedAddress] || 0n;
101
+
102
+ const wrappedToken = tokensList[wrappedAddress];
103
+ const wrappedPrice = prices[wrappedAddress] || 0n;
104
+
105
+ // convert unwrapped into wrapped by price
106
+ const unwrappedInWrapped = PriceUtils.convertByPrice(
107
+ PriceUtils.calcTotalPrice(
108
+ unwrappedPrice,
109
+ BigIntMath.max(0n, unwrappedAmount),
110
+ unwrappedToken.decimals,
111
+ ),
112
+ {
113
+ price: wrappedPrice,
114
+ decimals: wrappedToken.decimals,
115
+ },
116
+ );
117
+
118
+ // sum them
119
+ assetsRecord[wrappedAddress] = {
120
+ token: wrappedAddress,
121
+ balance: BigIntMath.max(0n, wrappedAmount) + unwrappedInWrapped,
122
+ };
123
+ // remove unwrapped
124
+ delete assetsRecord[unwrappedAddress];
125
+
126
+ return [Object.values(assetsRecord), unwrappedInWrapped, wrappedAmount];
127
+ }
128
+ // else no actions needed
129
+ return [Object.values(assetsRecord), 0n, wrappedAmount];
130
+ };
131
+
132
+ /**
133
+ * Sums the the second assets list into the first assets list
134
+ * Balances cant be negative; creates new assets.
135
+ */
136
+ static sumAssets<A extends Asset, B extends Asset>(
137
+ a: Array<A>,
138
+ b: Array<B>,
139
+ ): Array<A | B> {
140
+ const aRecord = AssetUtils.constructAssetRecord(a);
141
+
142
+ const resRecord = b.reduce<Record<Address, A | B>>((acc, bAsset) => {
143
+ const aAsset = acc[bAsset.token];
144
+ const { balance: amount = 0n } = aAsset || {};
145
+
146
+ const amountSum =
147
+ BigIntMath.max(0n, bAsset.balance) + BigIntMath.max(0n, amount);
148
+ const aOrB = aAsset || bAsset;
149
+
150
+ acc[bAsset.token] = {
151
+ ...aOrB,
152
+ balance: amountSum,
153
+ };
154
+
155
+ return acc;
156
+ }, aRecord);
157
+
158
+ return Object.values(resRecord);
159
+ }
160
+
161
+ /**
162
+ * Sums the the second assets list into the first assets list
163
+ * Balances cant be negative; doesn't create new assets.
164
+ */
165
+ static addBalances<A extends Asset, B extends Asset>(
166
+ a: Array<A>,
167
+ b: Array<B>,
168
+ ): Array<A | B> {
169
+ const bRecord = AssetUtils.constructAssetRecord(b);
170
+
171
+ return a.map(asset => {
172
+ const bAsset = bRecord[asset.token];
173
+ const { balance: bAmount = 0n } = bAsset || {};
174
+
175
+ const amountSum =
176
+ BigIntMath.max(0n, asset.balance) + BigIntMath.max(0n, bAmount);
177
+ return { ...asset, balance: amountSum };
178
+ });
179
+ }
180
+
181
+ /**
182
+ * Subtracts the the second assets list from the first assets list
183
+ * Balances cant be negative; doesn't create new assets.
184
+ */
185
+ static subAssets<A extends Asset, B extends Asset>(
186
+ a: Array<A>,
187
+ b: Array<B>,
188
+ ): Array<A> {
189
+ const bRecord = AssetUtils.constructAssetRecord(b);
190
+
191
+ return a.map(asset => {
192
+ const bAsset = bRecord[asset.token];
193
+ const { balance: bAmount = 0n } = bAsset || {};
194
+
195
+ const amountSub =
196
+ BigIntMath.max(0n, asset.balance) - BigIntMath.max(0n, bAmount);
197
+ return { ...asset, balance: BigIntMath.max(0n, amountSub) };
198
+ });
199
+ }
200
+ }