@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.
- package/.eslintignore +3 -0
- package/.github/workflows/lint_pr.yml +18 -0
- package/.github/workflows/pr.yml +39 -0
- package/.github/workflows/release.yml +47 -0
- package/.gitignore +19 -0
- package/.husky/commit-msg +1 -0
- package/.husky/pre-commit +1 -0
- package/.nvmrc +1 -0
- package/.releaserc.json +34 -0
- package/.vscode/extensions.json +7 -0
- package/.vscode/settings.json +16 -0
- package/.yarn/install-state.gz +0 -0
- package/.yarnrc.yml +1 -0
- package/ContributionAgreement +72 -0
- package/dist/cjs/abi/iZapper.cjs +85 -0
- package/dist/cjs/abi/iZapper.d.ts +123 -0
- package/dist/cjs/sdk/index.cjs +19830 -19764
- package/dist/cjs/sdk/index.d.ts +3746 -3061
- package/dist/esm/abi/iZapper.d.mts +123 -0
- package/dist/esm/abi/iZapper.mjs +83 -0
- package/dist/esm/sdk/index.d.mts +3746 -3061
- package/dist/esm/sdk/index.mjs +19807 -19765
- package/jest.config.js +7 -0
- package/package.json +32 -2
- package/scripts/example.ts +30 -0
- package/src/abi/compressors.ts +3962 -0
- package/src/abi/errors.ts +196 -0
- package/src/abi/iERC20.ts +122 -0
- package/src/abi/iPausable.ts +35 -0
- package/src/abi/iPriceFeedStore.ts +227 -0
- package/src/abi/iUpdatablePriceFeed.ts +16 -0
- package/src/abi/iVersion.ts +28 -0
- package/src/abi/iZapper.ts +84 -0
- package/src/abi/routerV300.ts +378 -0
- package/src/abi/v300.ts +4151 -0
- package/src/abi/v310.ts +5179 -0
- package/src/adapters/AbstractAdapter.ts +28 -0
- package/src/adapters/BalancerV2VaultAdapterContract.ts +19 -0
- package/src/adapters/BalancerV3RouterAdapterContract.ts +19 -0
- package/src/adapters/CamelotV3AdapterContract.ts +20 -0
- package/src/adapters/ConvexV1BaseRewardPoolAdapterContract.ts +20 -0
- package/src/adapters/ConvexV1BoosterAdapterContract.ts +20 -0
- package/src/adapters/Curve2AssetsAdapterContract.ts +20 -0
- package/src/adapters/Curve3AssetsAdapterContract.ts +20 -0
- package/src/adapters/Curve4AssetsAdapterContract.ts +20 -0
- package/src/adapters/CurveV1AdapterStETHContract.ts +20 -0
- package/src/adapters/CurveV1StableNGAdapterContract.ts +20 -0
- package/src/adapters/DaiUsdsAdapterContract.ts +21 -0
- package/src/adapters/ERC4626AdapterContract.ts +20 -0
- package/src/adapters/MellowERC4626VaultAdapterContract.ts +20 -0
- package/src/adapters/MellowVaultAdapterContract.ts +20 -0
- package/src/adapters/PendleRouterAdapterContract.ts +21 -0
- package/src/adapters/StakingRewardsAdapterContract.ts +21 -0
- package/src/adapters/UniswapV2AdapterContract.ts +20 -0
- package/src/adapters/UniswapV3AdapterContract.ts +170 -0
- package/src/adapters/VelodromeV2AdapterContract.ts +20 -0
- package/src/adapters/WstETHV1AdapterContract.ts +20 -0
- package/src/adapters/YearnV2AdapterContract.ts +20 -0
- package/src/adapters/abi/adapters.ts +4325 -0
- package/src/adapters/abi/iBalancerV3RouterAdapter.ts +126 -0
- package/src/adapters/abi/index.ts +2 -0
- package/src/adapters/index.ts +2 -0
- package/src/adapters/plugin.ts +90 -0
- package/src/adapters/types.ts +62 -0
- package/src/dev/AccountOpener.ts +611 -0
- package/src/dev/PriceFeedStore.ts +95 -0
- package/src/dev/SDKExample.ts +167 -0
- package/src/dev/abi.ts +14 -0
- package/src/dev/calcLiquidatableLTs.ts +77 -0
- package/src/dev/createAnvilClient.ts +155 -0
- package/src/dev/index.ts +7 -0
- package/src/dev/setLTZero.ts +127 -0
- package/src/dev/setLTs.ts +68 -0
- package/src/sdk/GearboxSDK.ts +488 -0
- package/src/sdk/abi/index.ts +1 -0
- package/src/sdk/abi/oracles.ts +4614 -0
- package/src/sdk/accounts/CreditAccountsService.ts +1123 -0
- package/src/sdk/accounts/index.ts +1 -0
- package/src/sdk/base/AddressLabeller.ts +35 -0
- package/src/sdk/base/BaseContract.ts +237 -0
- package/src/sdk/base/IAddressLabeller.ts +13 -0
- package/src/sdk/base/PlaceholderContract.ts +12 -0
- package/src/sdk/base/SDKConstruct.ts +35 -0
- package/src/sdk/base/TokensMeta.ts +45 -0
- package/src/sdk/base/index.ts +6 -0
- package/src/sdk/base/types.ts +102 -0
- package/src/sdk/bots/BotsService.ts +92 -0
- package/src/sdk/bots/index.ts +2 -0
- package/src/sdk/bots/utils.ts +19 -0
- package/src/sdk/chain/Provider.ts +99 -0
- package/src/sdk/chain/chains.ts +41 -0
- package/src/sdk/chain/detectChain.ts +21 -0
- package/src/sdk/chain/index.ts +3 -0
- package/src/sdk/constants/address-provider.ts +47 -0
- package/src/sdk/constants/addresses.ts +82 -0
- package/src/sdk/constants/bot-permissions.ts +36 -0
- package/src/sdk/constants/index.ts +6 -0
- package/src/sdk/constants/math.ts +23 -0
- package/src/sdk/constants/networks.ts +38 -0
- package/src/sdk/constants/periphery.ts +7 -0
- package/src/sdk/core/BotListV3Contract.ts +103 -0
- package/src/sdk/core/GearStakingV3Contract.ts +84 -0
- package/src/sdk/core/address-provider/AbstractAddressProviderContract.ts +101 -0
- package/src/sdk/core/address-provider/AddressProviderV3Contract.ts +105 -0
- package/src/sdk/core/address-provider/AddressProviderV3_1Contract.ts +92 -0
- package/src/sdk/core/address-provider/getAddressProvider.ts +45 -0
- package/src/sdk/core/address-provider/index.ts +4 -0
- package/src/sdk/core/address-provider/types.ts +17 -0
- package/src/sdk/core/index.ts +3 -0
- package/src/sdk/gauges/GaugeStakingService.ts +100 -0
- package/src/sdk/gauges/index.ts +2 -0
- package/src/sdk/gauges/utils.ts +25 -0
- package/src/sdk/index.ts +17 -0
- package/src/sdk/market/MarketConfiguratorContract.ts +78 -0
- package/src/sdk/market/MarketRegister.ts +330 -0
- package/src/sdk/market/MarketSuite.ts +83 -0
- package/src/sdk/market/adapters/PlaceholderAdapterContracts.ts +18 -0
- package/src/sdk/market/adapters/factory.ts +34 -0
- package/src/sdk/market/adapters/index.ts +3 -0
- package/src/sdk/market/adapters/types.ts +7 -0
- package/src/sdk/market/credit/CreditConfiguratorV300Contract.ts +164 -0
- package/src/sdk/market/credit/CreditConfiguratorV310Contract.ts +139 -0
- package/src/sdk/market/credit/CreditFacadeV300Contract.ts +206 -0
- package/src/sdk/market/credit/CreditFacadeV310Contract.ts +190 -0
- package/src/sdk/market/credit/CreditManagerV300Contract.ts +122 -0
- package/src/sdk/market/credit/CreditManagerV310Contract.ts +122 -0
- package/src/sdk/market/credit/CreditSuite.ts +65 -0
- package/src/sdk/market/credit/createCreditConfigurator.ts +18 -0
- package/src/sdk/market/credit/createCreditFacade.ts +18 -0
- package/src/sdk/market/credit/createCreditManager.ts +18 -0
- package/src/sdk/market/credit/index.ts +8 -0
- package/src/sdk/market/credit/types.ts +42 -0
- package/src/sdk/market/index.ts +7 -0
- package/src/sdk/market/oracle/PriceOracleBaseContract.ts +376 -0
- package/src/sdk/market/oracle/PriceOracleV300Contract.ts +71 -0
- package/src/sdk/market/oracle/PriceOracleV310Contract.ts +43 -0
- package/src/sdk/market/oracle/createPriceOracle.ts +22 -0
- package/src/sdk/market/oracle/index.ts +4 -0
- package/src/sdk/market/oracle/types.ts +48 -0
- package/src/sdk/market/pool/GaugeContract.ts +120 -0
- package/src/sdk/market/pool/LinearInterestRateModelContract.ts +75 -0
- package/src/sdk/market/pool/PoolQuotaKeeperV300Contract.ts +89 -0
- package/src/sdk/market/pool/PoolQuotaKeeperV310Contract.ts +89 -0
- package/src/sdk/market/pool/PoolSuite.ts +76 -0
- package/src/sdk/market/pool/PoolV300Contract.ts +144 -0
- package/src/sdk/market/pool/PoolV310Contract.ts +144 -0
- package/src/sdk/market/pool/TumblerContract.ts +73 -0
- package/src/sdk/market/pool/createInterestRateModel.ts +33 -0
- package/src/sdk/market/pool/createPool.ts +19 -0
- package/src/sdk/market/pool/createPoolQuotaKeeper.ts +20 -0
- package/src/sdk/market/pool/createRateKeeper.ts +25 -0
- package/src/sdk/market/pool/index.ts +6 -0
- package/src/sdk/market/pool/types.ts +28 -0
- package/src/sdk/market/pricefeeds/AbstractLPPriceFeed.ts +71 -0
- package/src/sdk/market/pricefeeds/AbstractPriceFeed.ts +137 -0
- package/src/sdk/market/pricefeeds/BalancerStablePriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/BalancerWeightedPriceFeed.ts +70 -0
- package/src/sdk/market/pricefeeds/BoundedPriceFeed.ts +34 -0
- package/src/sdk/market/pricefeeds/ChainlinkPriceFeed.ts +16 -0
- package/src/sdk/market/pricefeeds/CompositePriceFeed.ts +25 -0
- package/src/sdk/market/pricefeeds/CurveCryptoPriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/CurveStablePriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/CurveUSDPriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/Erc4626PriceFeed.ts +36 -0
- package/src/sdk/market/pricefeeds/MellowLRTPriceFeed.ts +26 -0
- package/src/sdk/market/pricefeeds/PendleTWAPPTPriceFeed.ts +44 -0
- package/src/sdk/market/pricefeeds/PriceFeedRef.ts +34 -0
- package/src/sdk/market/pricefeeds/PriceFeedsRegister.ts +293 -0
- package/src/sdk/market/pricefeeds/RedstonePriceFeed.ts +65 -0
- package/src/sdk/market/pricefeeds/RedstoneUpdater.ts +304 -0
- package/src/sdk/market/pricefeeds/WstETHPriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/YearnPriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/ZeroPriceFeed.ts +17 -0
- package/src/sdk/market/pricefeeds/index.ts +20 -0
- package/src/sdk/market/pricefeeds/types.ts +82 -0
- package/src/sdk/market/pricefeeds/utils.ts +24 -0
- package/src/sdk/plugins/index.ts +10 -0
- package/src/sdk/router/PathOptionFactory.ts +147 -0
- package/src/sdk/router/RouterV3Contract.ts +558 -0
- package/src/sdk/router/index.ts +2 -0
- package/src/sdk/router/types.ts +48 -0
- package/src/sdk/sdk-gov-legacy/contracts/adapters.ts +39 -0
- package/src/sdk/sdk-gov-legacy/contracts/contracts.ts +647 -0
- package/src/sdk/sdk-gov-legacy/contracts/index.ts +2 -0
- package/src/sdk/sdk-gov-legacy/core/constants.ts +11 -0
- package/src/sdk/sdk-gov-legacy/index.ts +4 -0
- package/src/sdk/sdk-gov-legacy/oracles/PriceFeedType.ts +24 -0
- package/src/sdk/sdk-gov-legacy/oracles/index.ts +1 -0
- package/src/sdk/sdk-gov-legacy/tokens/aave.ts +101 -0
- package/src/sdk/sdk-gov-legacy/tokens/aura.ts +284 -0
- package/src/sdk/sdk-gov-legacy/tokens/balancer.ts +421 -0
- package/src/sdk/sdk-gov-legacy/tokens/compound.ts +79 -0
- package/src/sdk/sdk-gov-legacy/tokens/convex.ts +561 -0
- package/src/sdk/sdk-gov-legacy/tokens/curveLP.ts +480 -0
- package/src/sdk/sdk-gov-legacy/tokens/decimals.ts +301 -0
- package/src/sdk/sdk-gov-legacy/tokens/erc4626.ts +75 -0
- package/src/sdk/sdk-gov-legacy/tokens/gear.ts +273 -0
- package/src/sdk/sdk-gov-legacy/tokens/index.ts +18 -0
- package/src/sdk/sdk-gov-legacy/tokens/normal.ts +613 -0
- package/src/sdk/sdk-gov-legacy/tokens/quoted.ts +10 -0
- package/src/sdk/sdk-gov-legacy/tokens/stakingRewards.ts +41 -0
- package/src/sdk/sdk-gov-legacy/tokens/token.ts +2354 -0
- package/src/sdk/sdk-gov-legacy/tokens/tokenData.ts +44 -0
- package/src/sdk/sdk-gov-legacy/tokens/tokenType.ts +33 -0
- package/src/sdk/sdk-gov-legacy/tokens/wrapped.ts +28 -0
- package/src/sdk/sdk-gov-legacy/tokens/yearn.ts +122 -0
- package/src/sdk/sdk-gov-legacy/tokens/zircuit.ts +44 -0
- package/src/sdk/sdk-legacy/apy/index.ts +149 -0
- package/src/sdk/sdk-legacy/core/assets.ts +200 -0
- package/src/sdk/sdk-legacy/core/creditAccount.spec.ts +1966 -0
- package/src/sdk/sdk-legacy/core/creditAccount.ts +816 -0
- package/src/sdk/sdk-legacy/core/creditManager.ts +316 -0
- package/src/sdk/sdk-legacy/core/creditSession.ts +352 -0
- package/src/sdk/sdk-legacy/core/endpoint.ts +131 -0
- package/src/sdk/sdk-legacy/core/eventOrTx.ts +101 -0
- package/src/sdk/sdk-legacy/core/pool.ts +439 -0
- package/src/sdk/sdk-legacy/core/strategy.ts +82 -0
- package/src/sdk/sdk-legacy/core/transactions.ts +865 -0
- package/src/sdk/sdk-legacy/gearboxRewards/api.ts +704 -0
- package/src/sdk/sdk-legacy/gearboxRewards/apy.ts +267 -0
- package/src/sdk/sdk-legacy/gearboxRewards/extraAPY.ts +165 -0
- package/src/sdk/sdk-legacy/gearboxRewards/index.ts +3 -0
- package/src/sdk/sdk-legacy/gearboxRewards/merklAPI.ts +151 -0
- package/src/sdk/sdk-legacy/index.ts +21 -0
- package/src/sdk/sdk-legacy/pathfinder/core.ts +18 -0
- package/src/sdk/sdk-legacy/pathfinder/index.ts +1 -0
- package/src/sdk/sdk-legacy/payload/creditAccount.ts +48 -0
- package/src/sdk/sdk-legacy/payload/creditManager.ts +133 -0
- package/src/sdk/sdk-legacy/payload/creditSession.ts +143 -0
- package/src/sdk/sdk-legacy/payload/graphPayload.ts +10 -0
- package/src/sdk/sdk-legacy/payload/pool.ts +198 -0
- package/src/sdk/sdk-legacy/payload/token.ts +13 -0
- package/src/sdk/sdk-legacy/tokens/tokenData.ts +57 -0
- package/src/sdk/sdk-legacy/types/IAirdropDistributor.ts +103 -0
- package/src/sdk/sdk-legacy/types/IBaseRewardPool.ts +249 -0
- package/src/sdk/sdk-legacy/types/IDataCompressorV3.ts +957 -0
- package/src/sdk/sdk-legacy/types/IDegenDistributor.ts +70 -0
- package/src/sdk/sdk-legacy/types/IERC20Permit.ts +35 -0
- package/src/sdk/sdk-legacy/types/IERC20ZapperDeposits.ts +99 -0
- package/src/sdk/sdk-legacy/types/IETHZapperDeposits.ts +27 -0
- package/src/sdk/sdk-legacy/types/IFarmingPool.ts +229 -0
- package/src/sdk/sdk-legacy/types/IInterestRateModel.ts +23 -0
- package/src/sdk/sdk-legacy/types/IMulticall3.ts +242 -0
- package/src/sdk/sdk-legacy/types/IOffchainOracle.ts +31 -0
- package/src/sdk/sdk-legacy/types/index.ts +11 -0
- package/src/sdk/sdk-legacy/utils/formatter.ts +46 -0
- package/src/sdk/sdk-legacy/utils/index.ts +3 -0
- package/src/sdk/sdk-legacy/utils/math.ts +6 -0
- package/src/sdk/sdk-legacy/utils/price.ts +27 -0
- package/src/sdk/types/index.ts +5 -0
- package/src/sdk/types/logger.ts +13 -0
- package/src/sdk/types/state-human.ts +224 -0
- package/src/sdk/types/state.ts +8 -0
- package/src/sdk/types/transactions.ts +22 -0
- package/src/sdk/types/tvl.ts +4 -0
- package/src/sdk/utils/AddressMap.ts +111 -0
- package/src/sdk/utils/bytes32ToString.ts +6 -0
- package/src/sdk/utils/childLogger.ts +8 -0
- package/src/sdk/utils/createRawTx.ts +86 -0
- package/src/sdk/utils/etherscan.ts +42 -0
- package/src/sdk/utils/filterDust.ts +20 -0
- package/src/sdk/utils/formatter.ts +124 -0
- package/src/sdk/utils/index.ts +10 -0
- package/src/sdk/utils/internal/Hooks.ts +51 -0
- package/src/sdk/utils/internal/index.ts +1 -0
- package/src/sdk/utils/json.ts +27 -0
- package/src/sdk/utils/mappers.ts +38 -0
- package/src/sdk/utils/retry.ts +24 -0
- package/src/sdk/utils/viem/detectNetwork.ts +27 -0
- package/src/sdk/utils/viem/index.ts +3 -0
- package/src/sdk/utils/viem/sendRawTx.ts +36 -0
- package/src/sdk/utils/viem/simulateMulticall.ts +262 -0
- package/tsconfig.build.json +4 -0
- package/tsconfig.json +16 -0
- package/tsup.config.ts +77 -0
|
@@ -0,0 +1,558 @@
|
|
|
1
|
+
import { type Address, encodeFunctionData, getContract } from "viem";
|
|
2
|
+
|
|
3
|
+
import { iRouterV300Abi, iSwapperV300Abi } from "../../abi/routerV300";
|
|
4
|
+
import { iCreditFacadeV300MulticallAbi } from "../../abi/v300";
|
|
5
|
+
import { BaseContract } from "../base";
|
|
6
|
+
import type { CreditAccountData } from "../base/types";
|
|
7
|
+
import { PERCENTAGE_FACTOR } from "../constants";
|
|
8
|
+
import type { GearboxSDK } from "../GearboxSDK";
|
|
9
|
+
import { getConnectors } from "../sdk-gov-legacy";
|
|
10
|
+
import { AddressMap } from "../utils";
|
|
11
|
+
import type { IHooks } from "../utils/internal";
|
|
12
|
+
import { Hooks } from "../utils/internal";
|
|
13
|
+
import { PathOptionFactory } from "./PathOptionFactory";
|
|
14
|
+
import type {
|
|
15
|
+
Asset,
|
|
16
|
+
OpenStrategyResult,
|
|
17
|
+
PathOptionSerie,
|
|
18
|
+
RouterCloseResult,
|
|
19
|
+
RouterResult,
|
|
20
|
+
SwapOperation,
|
|
21
|
+
SwapTask,
|
|
22
|
+
} from "./types";
|
|
23
|
+
|
|
24
|
+
const MAX_GAS_PER_ROUTE = 200_000_000n;
|
|
25
|
+
const GAS_PER_BLOCK = 400_000_000n;
|
|
26
|
+
const LOOPS_PER_TX = Number(GAS_PER_BLOCK / MAX_GAS_PER_ROUTE);
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Mapping to enums used by smart contract
|
|
30
|
+
*/
|
|
31
|
+
const SWAP_OPERATIONS: Record<SwapOperation, number> = {
|
|
32
|
+
EXACT_INPUT: 0,
|
|
33
|
+
EXACT_INPUT_ALL: 1,
|
|
34
|
+
EXACT_OUTPUT: 2,
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
type abi = typeof iRouterV300Abi;
|
|
38
|
+
|
|
39
|
+
interface FindAllSwapsProps {
|
|
40
|
+
creditAccount: CreditAccountDataSlice;
|
|
41
|
+
creditManager: CreditManagerSlice;
|
|
42
|
+
swapOperation: SwapOperation;
|
|
43
|
+
tokenIn: Address;
|
|
44
|
+
tokenOut: Address;
|
|
45
|
+
amount: bigint;
|
|
46
|
+
leftoverAmount: bigint;
|
|
47
|
+
slippage: number | bigint;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
interface FindOneTokenPathProps {
|
|
51
|
+
creditAccount: CreditAccountDataSlice;
|
|
52
|
+
creditManager: CreditManagerSlice;
|
|
53
|
+
tokenIn: Address;
|
|
54
|
+
tokenOut: Address;
|
|
55
|
+
amount: bigint;
|
|
56
|
+
slippage: number | bigint;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
interface FindOpenStrategyPathProps {
|
|
60
|
+
creditManager: CreditManagerSlice;
|
|
61
|
+
expectedBalances: Array<Asset>;
|
|
62
|
+
leftoverBalances: Array<Asset>;
|
|
63
|
+
target: Address;
|
|
64
|
+
slippage: number | bigint;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
interface FindBestClosePathProps {
|
|
68
|
+
creditAccount: CreditAccountDataSlice;
|
|
69
|
+
creditManager: CreditManagerSlice;
|
|
70
|
+
slippage: bigint | number;
|
|
71
|
+
balances?: ClosePathBalances;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export interface FindClosePathInput {
|
|
75
|
+
pathOptions: Array<PathOptionSerie>;
|
|
76
|
+
expected: Array<Asset>;
|
|
77
|
+
leftover: Array<Asset>;
|
|
78
|
+
connectors: Array<Address>;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export interface ClosePathBalances {
|
|
82
|
+
expectedBalances: Array<Asset>;
|
|
83
|
+
leftoverBalances: Array<Asset>;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
|
|
87
|
+
export type RouterHooks = {
|
|
88
|
+
/**
|
|
89
|
+
* Internal router event
|
|
90
|
+
*/
|
|
91
|
+
foundPathOptions: [{ creditAccount: Address } & FindClosePathInput];
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Slice of credit manager data required for router operations
|
|
96
|
+
*/
|
|
97
|
+
interface CreditManagerSlice {
|
|
98
|
+
address: Address;
|
|
99
|
+
creditFacade: Address;
|
|
100
|
+
collateralTokens: Array<Address>;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export type CreditAccountDataSlice = Pick<
|
|
104
|
+
CreditAccountData,
|
|
105
|
+
| "tokens"
|
|
106
|
+
| "enabledTokensMask"
|
|
107
|
+
| "underlying"
|
|
108
|
+
| "creditAccount"
|
|
109
|
+
| "creditFacade"
|
|
110
|
+
| "debt"
|
|
111
|
+
| "creditManager"
|
|
112
|
+
>;
|
|
113
|
+
|
|
114
|
+
const PT_IN = {
|
|
115
|
+
["0xEe9085fC268F6727d5D4293dBABccF901ffDCC29".toLowerCase()]:
|
|
116
|
+
"PT_sUSDe_26DEC2024",
|
|
117
|
+
["0xE00bd3Df25fb187d6ABBB620b3dfd19839947b81".toLowerCase()]:
|
|
118
|
+
"PT_sUSDe_27MAR20251",
|
|
119
|
+
["0xE00bd3Df25fb187d6ABBB620b3dfd19839947b81".toLowerCase()]:
|
|
120
|
+
"PT_sUSDe_29MAY2025",
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
const OUT = {
|
|
124
|
+
["0x9D39A5DE30e57443BfF2A8307A4256c8797A3497".toLowerCase()]: "sUSDe",
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
export class RouterV3Contract
|
|
128
|
+
extends BaseContract<abi>
|
|
129
|
+
implements IHooks<RouterHooks>
|
|
130
|
+
{
|
|
131
|
+
readonly #connectors: Array<Address>;
|
|
132
|
+
readonly #hooks = new Hooks<RouterHooks>();
|
|
133
|
+
|
|
134
|
+
constructor(sdk: GearboxSDK, address: Address) {
|
|
135
|
+
super(sdk, {
|
|
136
|
+
addr: address,
|
|
137
|
+
name: "RouterV3",
|
|
138
|
+
abi: iRouterV300Abi,
|
|
139
|
+
});
|
|
140
|
+
this.#connectors = getConnectors(sdk.provider.networkType);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
public addHook = this.#hooks.addHook.bind(this.#hooks);
|
|
144
|
+
public removeHook = this.#hooks.removeHook.bind(this.#hooks);
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Finds all available swaps for NORMAL tokens
|
|
148
|
+
* @param ca
|
|
149
|
+
* @param cm
|
|
150
|
+
* @param swapOperation
|
|
151
|
+
* @param tokenIn
|
|
152
|
+
* @param tokenOut
|
|
153
|
+
* @param amount
|
|
154
|
+
* @param leftoverAmount
|
|
155
|
+
* @param slippage
|
|
156
|
+
* @returns
|
|
157
|
+
*/
|
|
158
|
+
public async findAllSwaps({
|
|
159
|
+
creditAccount: ca,
|
|
160
|
+
creditManager: cm,
|
|
161
|
+
swapOperation,
|
|
162
|
+
tokenIn,
|
|
163
|
+
tokenOut,
|
|
164
|
+
amount,
|
|
165
|
+
leftoverAmount,
|
|
166
|
+
slippage,
|
|
167
|
+
}: FindAllSwapsProps): Promise<Array<RouterResult>> {
|
|
168
|
+
const connectors = this.getAvailableConnectors(cm.collateralTokens);
|
|
169
|
+
|
|
170
|
+
const swapTask: SwapTask = {
|
|
171
|
+
swapOperation: SWAP_OPERATIONS[swapOperation],
|
|
172
|
+
creditAccount: ca.creditAccount as Address,
|
|
173
|
+
tokenIn,
|
|
174
|
+
tokenOut,
|
|
175
|
+
connectors,
|
|
176
|
+
amount,
|
|
177
|
+
leftoverAmount,
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
const { result } = await this.contract.simulate.findAllSwaps(
|
|
181
|
+
[swapTask, BigInt(slippage)],
|
|
182
|
+
{
|
|
183
|
+
gas: GAS_PER_BLOCK,
|
|
184
|
+
},
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
const unique: Record<string, RouterResult> = {};
|
|
188
|
+
|
|
189
|
+
result.forEach(r => {
|
|
190
|
+
const key = `${r.minAmount.toString()}${r.calls
|
|
191
|
+
.map(c => `${c.target.toLowerCase()}${c.callData}`)
|
|
192
|
+
.join("-")}`;
|
|
193
|
+
|
|
194
|
+
unique[key] = {
|
|
195
|
+
amount: r.amount,
|
|
196
|
+
minAmount: r.minAmount,
|
|
197
|
+
calls: [...r.calls],
|
|
198
|
+
};
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
return Object.values(unique);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Finds best path to swap all Normal tokens and tokens "on the way" to target one and vice versa
|
|
206
|
+
* @param creditAccount
|
|
207
|
+
* @param creditManager
|
|
208
|
+
* @param tokenIn
|
|
209
|
+
* @param tokenOut
|
|
210
|
+
* @param amount
|
|
211
|
+
* @param slippage
|
|
212
|
+
* @returns
|
|
213
|
+
*/
|
|
214
|
+
async findOneTokenPath(props: FindOneTokenPathProps): Promise<RouterResult> {
|
|
215
|
+
const {
|
|
216
|
+
creditAccount,
|
|
217
|
+
creditManager,
|
|
218
|
+
tokenIn,
|
|
219
|
+
tokenOut,
|
|
220
|
+
amount,
|
|
221
|
+
slippage,
|
|
222
|
+
} = props;
|
|
223
|
+
|
|
224
|
+
const connectors = this.getAvailableConnectors(
|
|
225
|
+
creditManager.collateralTokens,
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
const isPTOverrideRedeem =
|
|
229
|
+
PT_IN[tokenIn.toLowerCase()] && OUT[tokenOut.toLowerCase()];
|
|
230
|
+
|
|
231
|
+
const { result } = await (isPTOverrideRedeem
|
|
232
|
+
? this.overridePTRedeem(props)
|
|
233
|
+
: this.contract.simulate.findOneTokenPath(
|
|
234
|
+
[
|
|
235
|
+
tokenIn,
|
|
236
|
+
amount,
|
|
237
|
+
tokenOut,
|
|
238
|
+
creditAccount.creditAccount,
|
|
239
|
+
connectors,
|
|
240
|
+
BigInt(slippage),
|
|
241
|
+
],
|
|
242
|
+
{
|
|
243
|
+
gas: GAS_PER_BLOCK,
|
|
244
|
+
},
|
|
245
|
+
));
|
|
246
|
+
|
|
247
|
+
return {
|
|
248
|
+
amount: result.amount,
|
|
249
|
+
minAmount: result.minAmount,
|
|
250
|
+
calls: [...result.calls],
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// TODO: remove me when new router will be added
|
|
255
|
+
async overridePTRedeem({
|
|
256
|
+
creditAccount,
|
|
257
|
+
creditManager,
|
|
258
|
+
tokenIn,
|
|
259
|
+
tokenOut,
|
|
260
|
+
amount,
|
|
261
|
+
slippage,
|
|
262
|
+
}: FindOneTokenPathProps) {
|
|
263
|
+
const pendleSwapperAddress = await this.contract.read.componentAddressById([
|
|
264
|
+
37,
|
|
265
|
+
]);
|
|
266
|
+
const cm = this.sdk.marketRegister.findCreditManager(creditManager.address);
|
|
267
|
+
|
|
268
|
+
const PENDLE_ROUTER_BY_NETWORK = {
|
|
269
|
+
Mainnet: "0x888888888889758F76e7103c6CbF23ABbF58F946",
|
|
270
|
+
Arbitrum: "0x0",
|
|
271
|
+
Optimism: "0x0",
|
|
272
|
+
Base: "0x0",
|
|
273
|
+
Sonic: "0x0",
|
|
274
|
+
} as const;
|
|
275
|
+
|
|
276
|
+
const pendleRouter =
|
|
277
|
+
PENDLE_ROUTER_BY_NETWORK[this.sdk.provider.networkType];
|
|
278
|
+
const pendleAdapter = cm.creditManager.adapters.mustGet(pendleRouter);
|
|
279
|
+
|
|
280
|
+
const pendleSwapper = getContract({
|
|
281
|
+
address: pendleSwapperAddress,
|
|
282
|
+
abi: iSwapperV300Abi,
|
|
283
|
+
client: this.sdk.provider.publicClient,
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
const result = await pendleSwapper.simulate.getBestDirectPairSwap([
|
|
287
|
+
{
|
|
288
|
+
swapOperation: 1,
|
|
289
|
+
creditAccount: creditAccount.creditAccount,
|
|
290
|
+
tokenIn: tokenIn,
|
|
291
|
+
tokenOut: tokenOut,
|
|
292
|
+
connectors: [],
|
|
293
|
+
amount,
|
|
294
|
+
leftoverAmount: 0n,
|
|
295
|
+
},
|
|
296
|
+
pendleAdapter.address,
|
|
297
|
+
]);
|
|
298
|
+
|
|
299
|
+
const minAmount =
|
|
300
|
+
(result.result.amount * (PERCENTAGE_FACTOR - BigInt(slippage))) /
|
|
301
|
+
PERCENTAGE_FACTOR;
|
|
302
|
+
|
|
303
|
+
const storeExpectedBalances = {
|
|
304
|
+
target: creditManager.creditFacade,
|
|
305
|
+
callData: encodeFunctionData({
|
|
306
|
+
abi: iCreditFacadeV300MulticallAbi,
|
|
307
|
+
functionName: "storeExpectedBalances",
|
|
308
|
+
args: [[{ token: tokenOut, amount: minAmount }]],
|
|
309
|
+
}),
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
const compareBalances = {
|
|
313
|
+
target: creditManager.creditFacade,
|
|
314
|
+
callData: encodeFunctionData({
|
|
315
|
+
abi: iCreditFacadeV300MulticallAbi,
|
|
316
|
+
functionName: "compareBalances",
|
|
317
|
+
args: [],
|
|
318
|
+
}),
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
return {
|
|
322
|
+
result: {
|
|
323
|
+
amount: result.result.amount,
|
|
324
|
+
minAmount,
|
|
325
|
+
calls: [
|
|
326
|
+
storeExpectedBalances,
|
|
327
|
+
result.result.multiCall,
|
|
328
|
+
compareBalances,
|
|
329
|
+
],
|
|
330
|
+
},
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* @dev Finds the best path for opening Credit Account and converting all NORMAL tokens and LP token in the way to TARGET
|
|
336
|
+
* @param creditManager CreditManagerData which represents credit manager you want to use to open Credit Account
|
|
337
|
+
* @param expectedBalances Expected balances which would be on account accounting also debt. For example,
|
|
338
|
+
* if you open an USDC Credit Account, borrow 50_000 USDC and provide 10 WETH and 10_USDC as collateral
|
|
339
|
+
* from your own funds, expectedBalances should be: { "USDC": 60_000 * (10**6), "<address of WETH>": WAD.mul(10) }
|
|
340
|
+
* @param leftoverBalances Balances to keep on account after opening
|
|
341
|
+
* @param target Address of symbol of desired token
|
|
342
|
+
* @param slippage Slippage in PERCENTAGE_FORMAT (100% = 10_000) per operation
|
|
343
|
+
* @returns PathFinderOpenStrategyResult which
|
|
344
|
+
*/
|
|
345
|
+
public async findOpenStrategyPath({
|
|
346
|
+
creditManager: cm,
|
|
347
|
+
expectedBalances,
|
|
348
|
+
leftoverBalances,
|
|
349
|
+
target,
|
|
350
|
+
slippage,
|
|
351
|
+
}: FindOpenStrategyPathProps): Promise<OpenStrategyResult> {
|
|
352
|
+
const [expectedMap, leftoverMap] = [
|
|
353
|
+
balancesMap(expectedBalances),
|
|
354
|
+
balancesMap(leftoverBalances),
|
|
355
|
+
];
|
|
356
|
+
const input: Array<Asset> = cm.collateralTokens.map(token => ({
|
|
357
|
+
token,
|
|
358
|
+
balance: expectedMap.get(token) ?? 0n,
|
|
359
|
+
}));
|
|
360
|
+
|
|
361
|
+
const leftover: Array<Asset> = cm.collateralTokens.map(token => ({
|
|
362
|
+
token,
|
|
363
|
+
balance: leftoverMap.get(token) ?? 0n,
|
|
364
|
+
}));
|
|
365
|
+
|
|
366
|
+
const connectors = this.getAvailableConnectors(cm.collateralTokens);
|
|
367
|
+
|
|
368
|
+
const {
|
|
369
|
+
result: [outBalances, result],
|
|
370
|
+
} = await this.contract.simulate.findOpenStrategyPath(
|
|
371
|
+
[cm.address, input, leftover, target, connectors, BigInt(slippage)],
|
|
372
|
+
{
|
|
373
|
+
gas: GAS_PER_BLOCK,
|
|
374
|
+
},
|
|
375
|
+
);
|
|
376
|
+
|
|
377
|
+
const balancesAfter = Object.fromEntries(
|
|
378
|
+
outBalances.map(b => [b.token.toLowerCase(), b.balance]),
|
|
379
|
+
);
|
|
380
|
+
|
|
381
|
+
return {
|
|
382
|
+
balances: {
|
|
383
|
+
...balancesAfter,
|
|
384
|
+
[target.toLowerCase()]: (expectedMap.get(target) ?? 0n) + result.amount,
|
|
385
|
+
},
|
|
386
|
+
minBalances: {
|
|
387
|
+
...balancesAfter,
|
|
388
|
+
[target.toLowerCase()]:
|
|
389
|
+
(expectedMap.get(target) ?? 0n) + result.minAmount,
|
|
390
|
+
},
|
|
391
|
+
amount: result.amount,
|
|
392
|
+
minAmount: result.minAmount,
|
|
393
|
+
calls: [...result.calls],
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* @dev Finds the path to swap / withdraw all assets from CreditAccount into underlying asset
|
|
399
|
+
* Can bu used for closing Credit Account and for liquidations as well.
|
|
400
|
+
* @param creditAccount CreditAccountStruct object used for close path computation
|
|
401
|
+
* @param creditManager CreditManagerSlice for corresponding credit manager
|
|
402
|
+
* @param slippage Slippage in PERCENTAGE_FORMAT (100% = 10_000) per operation
|
|
403
|
+
* @return The best option in PathFinderCloseResult format, which
|
|
404
|
+
* - underlyingBalance - total balance of underlying token
|
|
405
|
+
* - calls - list of calls which should be done to swap & unwrap everything to underlying token
|
|
406
|
+
*/
|
|
407
|
+
public async findBestClosePath({
|
|
408
|
+
creditAccount: ca,
|
|
409
|
+
creditManager: cm,
|
|
410
|
+
slippage,
|
|
411
|
+
balances,
|
|
412
|
+
}: FindBestClosePathProps): Promise<RouterCloseResult> {
|
|
413
|
+
const { pathOptions, expected, leftover, connectors } =
|
|
414
|
+
this.getFindClosePathInput(
|
|
415
|
+
ca,
|
|
416
|
+
cm,
|
|
417
|
+
balances
|
|
418
|
+
? {
|
|
419
|
+
expectedBalances: assetsMap(balances.expectedBalances),
|
|
420
|
+
leftoverBalances: assetsMap(balances.leftoverBalances),
|
|
421
|
+
}
|
|
422
|
+
: undefined,
|
|
423
|
+
);
|
|
424
|
+
await this.#hooks.triggerHooks("foundPathOptions", {
|
|
425
|
+
creditAccount: ca.creditAccount,
|
|
426
|
+
pathOptions,
|
|
427
|
+
expected,
|
|
428
|
+
leftover,
|
|
429
|
+
connectors,
|
|
430
|
+
});
|
|
431
|
+
|
|
432
|
+
let results: Array<RouterResult> = [];
|
|
433
|
+
for (const po of pathOptions) {
|
|
434
|
+
// TODO: maybe Promise.all?
|
|
435
|
+
const { result } = await this.contract.simulate.findBestClosePath(
|
|
436
|
+
[
|
|
437
|
+
ca.creditAccount as Address,
|
|
438
|
+
expected,
|
|
439
|
+
leftover,
|
|
440
|
+
connectors,
|
|
441
|
+
BigInt(slippage),
|
|
442
|
+
po,
|
|
443
|
+
BigInt(LOOPS_PER_TX),
|
|
444
|
+
false,
|
|
445
|
+
],
|
|
446
|
+
{
|
|
447
|
+
gas: GAS_PER_BLOCK,
|
|
448
|
+
},
|
|
449
|
+
);
|
|
450
|
+
results.push({
|
|
451
|
+
...result,
|
|
452
|
+
calls: [...result.calls],
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
const bestResult = results.reduce(compareRouterResults, {
|
|
457
|
+
amount: 0n,
|
|
458
|
+
minAmount: 0n,
|
|
459
|
+
calls: [],
|
|
460
|
+
});
|
|
461
|
+
const underlyingBalance =
|
|
462
|
+
ca.tokens.find(t => t.token === ca.underlying)?.balance ?? 0n;
|
|
463
|
+
|
|
464
|
+
const result = {
|
|
465
|
+
amount: bestResult.amount,
|
|
466
|
+
minAmount: bestResult.minAmount,
|
|
467
|
+
calls: bestResult.calls.map(c => ({
|
|
468
|
+
callData: c.callData,
|
|
469
|
+
target: c.target,
|
|
470
|
+
})),
|
|
471
|
+
underlyingBalance: underlyingBalance + bestResult.minAmount,
|
|
472
|
+
};
|
|
473
|
+
return result;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* Finds input to be used with findBestClosePath
|
|
478
|
+
* @param ca
|
|
479
|
+
* @param cm
|
|
480
|
+
* @returns
|
|
481
|
+
*/
|
|
482
|
+
public getFindClosePathInput(
|
|
483
|
+
ca: CreditAccountDataSlice,
|
|
484
|
+
cm: CreditManagerSlice,
|
|
485
|
+
balances?: ReturnType<RouterV3Contract["getDefaultExpectedAndLeftover"]>,
|
|
486
|
+
): FindClosePathInput {
|
|
487
|
+
const b = balances || this.getDefaultExpectedAndLeftover(ca);
|
|
488
|
+
const { leftoverBalances, expectedBalances } = b;
|
|
489
|
+
|
|
490
|
+
// TODO: PathOptionFactory deals with token data from SDK
|
|
491
|
+
// it needs to accept market data
|
|
492
|
+
const pathOptions = PathOptionFactory.generatePathOptions(
|
|
493
|
+
ca.tokens,
|
|
494
|
+
this.provider.networkType,
|
|
495
|
+
LOOPS_PER_TX,
|
|
496
|
+
);
|
|
497
|
+
|
|
498
|
+
const expected: Array<Asset> = cm.collateralTokens.map(token => {
|
|
499
|
+
// When we pass expected balances explicitly, we need to mimic router behaviour by filtering out leftover tokens
|
|
500
|
+
// for example, we can have stETH balance of 2, because 1 transforms to 2 because of rebasing
|
|
501
|
+
// https://github.com/Gearbox-protocol/router-v3/blob/c230a3aa568bb432e50463cfddc877fec8940cf5/contracts/RouterV3.sol#L222
|
|
502
|
+
const actual = expectedBalances.get(token)?.balance || 0n;
|
|
503
|
+
return {
|
|
504
|
+
token,
|
|
505
|
+
balance: actual > 10n ? actual : 0n,
|
|
506
|
+
};
|
|
507
|
+
});
|
|
508
|
+
|
|
509
|
+
const leftover: Array<Asset> = cm.collateralTokens.map(token => ({
|
|
510
|
+
token: token,
|
|
511
|
+
balance: leftoverBalances.get(token)?.balance || 1n,
|
|
512
|
+
}));
|
|
513
|
+
|
|
514
|
+
const connectors = this.getAvailableConnectors(cm.collateralTokens);
|
|
515
|
+
return { expected, leftover, connectors, pathOptions };
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
public getDefaultExpectedAndLeftover(ca: CreditAccountDataSlice) {
|
|
519
|
+
const expectedBalances = new AddressMap<Asset>();
|
|
520
|
+
const leftoverBalances = new AddressMap<Asset>();
|
|
521
|
+
for (const { token: t, balance, mask } of ca.tokens) {
|
|
522
|
+
const token = t as Address;
|
|
523
|
+
const isEnabled = (mask & ca.enabledTokensMask) !== 0n;
|
|
524
|
+
expectedBalances.upsert(token, { token, balance });
|
|
525
|
+
const decimals = this.sdk.tokensMeta.decimals(token);
|
|
526
|
+
// filter out dust, we don't want to swap it
|
|
527
|
+
const minBalance = 10n ** BigInt(Math.max(8, decimals) - 8);
|
|
528
|
+
// also: gearbox liquidator does not need to swap disabled tokens. third-party liquidators might want to do it
|
|
529
|
+
if (balance < minBalance || !isEnabled) {
|
|
530
|
+
leftoverBalances.upsert(token, { token, balance });
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
return { expectedBalances, leftoverBalances };
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
public getAvailableConnectors(
|
|
538
|
+
collateralTokens: Array<Address>,
|
|
539
|
+
): Array<Address> {
|
|
540
|
+
return collateralTokens.filter(t =>
|
|
541
|
+
this.#connectors.includes(t.toLowerCase() as Address),
|
|
542
|
+
);
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
function compareRouterResults(a: RouterResult, b: RouterResult): RouterResult {
|
|
547
|
+
return a.amount > b.amount ? a : b;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
export function balancesMap(assets: Array<Asset>): AddressMap<bigint> {
|
|
551
|
+
return new AddressMap(assets.map(({ token, balance }) => [token, balance]));
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
export function assetsMap<T extends Asset>(
|
|
555
|
+
assets: Array<T> | readonly T[],
|
|
556
|
+
): AddressMap<T> {
|
|
557
|
+
return new AddressMap(assets.map(a => [a.token, a]));
|
|
558
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Address } from "viem";
|
|
2
|
+
|
|
3
|
+
import type { MultiCall } from "../types";
|
|
4
|
+
|
|
5
|
+
export type SwapOperation = "EXACT_INPUT" | "EXACT_INPUT_ALL" | "EXACT_OUTPUT";
|
|
6
|
+
|
|
7
|
+
export interface PathOption {
|
|
8
|
+
target: Address;
|
|
9
|
+
option: number;
|
|
10
|
+
totalOptions: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type PathOptionSerie = Array<PathOption>;
|
|
14
|
+
|
|
15
|
+
export interface SwapTask {
|
|
16
|
+
swapOperation: number;
|
|
17
|
+
creditAccount: Address;
|
|
18
|
+
tokenIn: Address;
|
|
19
|
+
tokenOut: Address;
|
|
20
|
+
connectors: Array<Address>;
|
|
21
|
+
amount: bigint;
|
|
22
|
+
leftoverAmount: bigint;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface RouterResult {
|
|
26
|
+
amount: bigint;
|
|
27
|
+
minAmount: bigint;
|
|
28
|
+
calls: Array<MultiCall>;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface OpenStrategyResult extends RouterResult {
|
|
32
|
+
balances: Record<Address, bigint>;
|
|
33
|
+
minBalances: Record<Address, bigint>;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface RouterCloseResult extends RouterResult {
|
|
37
|
+
underlyingBalance: bigint;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface CurvePoolStruct {
|
|
41
|
+
curvePool: Address;
|
|
42
|
+
metapoolBase: Address;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface Asset {
|
|
46
|
+
token: Address;
|
|
47
|
+
balance: bigint;
|
|
48
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export enum AdapterInterface {
|
|
2
|
+
ABSTRACT,
|
|
3
|
+
UNISWAP_V2_ROUTER,
|
|
4
|
+
UNISWAP_V3_ROUTER,
|
|
5
|
+
CURVE_V1_EXCHANGE_ONLY,
|
|
6
|
+
YEARN_V2,
|
|
7
|
+
CURVE_V1_2ASSETS,
|
|
8
|
+
CURVE_V1_3ASSETS,
|
|
9
|
+
CURVE_V1_4ASSETS,
|
|
10
|
+
CURVE_V1_STECRV_POOL,
|
|
11
|
+
CURVE_V1_WRAPPER,
|
|
12
|
+
CONVEX_V1_BASE_REWARD_POOL,
|
|
13
|
+
CONVEX_V1_BOOSTER,
|
|
14
|
+
CONVEX_V1_CLAIM_ZAP,
|
|
15
|
+
LIDO_V1,
|
|
16
|
+
UNIVERSAL,
|
|
17
|
+
LIDO_WSTETH_V1,
|
|
18
|
+
BALANCER_VAULT,
|
|
19
|
+
AAVE_V2_LENDING_POOL,
|
|
20
|
+
AAVE_V2_WRAPPED_ATOKEN,
|
|
21
|
+
COMPOUND_V2_CERC20,
|
|
22
|
+
COMPOUND_V2_CETHER,
|
|
23
|
+
ERC4626_VAULT,
|
|
24
|
+
VELODROME_V2_ROUTER,
|
|
25
|
+
CURVE_STABLE_NG,
|
|
26
|
+
CAMELOT_V3_ROUTER,
|
|
27
|
+
CONVEX_L2_BOOSTER,
|
|
28
|
+
CONVEX_L2_REWARD_POOL,
|
|
29
|
+
AAVE_V3_LENDING_POOL,
|
|
30
|
+
ZIRCUIT_POOL,
|
|
31
|
+
SYMBIOTIC_DEFAULT_COLLATERAL,
|
|
32
|
+
MELLOW_LRT_VAULT,
|
|
33
|
+
PENDLE_ROUTER,
|
|
34
|
+
MELLOW_ERC4626_VAULT,
|
|
35
|
+
DAI_USDS_EXCHANGE,
|
|
36
|
+
STAKING_REWARDS,
|
|
37
|
+
EQUALIZER_ROUTER,
|
|
38
|
+
BALANCER_V3_ROUTER,
|
|
39
|
+
}
|