@eth-optimism/actions-sdk 0.3.0 → 0.4.0
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/dist/__mocks__/MockAssets.d.ts +17 -2
- package/dist/__mocks__/MockAssets.d.ts.map +1 -1
- package/dist/__mocks__/MockAssets.js +49 -6
- package/dist/__mocks__/MockAssets.js.map +1 -1
- package/dist/__tests__/actions.test.js +1 -1
- package/dist/__tests__/actions.test.js.map +1 -1
- package/dist/actions.d.ts +8 -13
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +35 -27
- package/dist/actions.js.map +1 -1
- package/dist/constants/assets.d.ts +215 -4
- package/dist/constants/assets.d.ts.map +1 -1
- package/dist/constants/assets.js +734 -11
- package/dist/constants/assets.js.map +1 -1
- package/dist/constants/providers.d.ts +6 -0
- package/dist/constants/providers.d.ts.map +1 -0
- package/dist/constants/providers.js +6 -0
- package/dist/constants/providers.js.map +1 -0
- package/dist/constants/supportedChains.d.ts +2 -2
- package/dist/constants/supportedChains.d.ts.map +1 -1
- package/dist/constants/supportedChains.js +12 -2
- package/dist/constants/supportedChains.js.map +1 -1
- package/dist/index.d.ts +4 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -4
- package/dist/index.js.map +1 -1
- package/dist/lend/__mocks__/MockLendProvider.d.ts +1 -1
- package/dist/lend/__mocks__/MockLendProvider.d.ts.map +1 -1
- package/dist/lend/__mocks__/MockLendProvider.js +7 -2
- package/dist/lend/__mocks__/MockLendProvider.js.map +1 -1
- package/dist/lend/core/LendProvider.d.ts +12 -8
- package/dist/lend/core/LendProvider.d.ts.map +1 -1
- package/dist/lend/core/LendProvider.js +15 -21
- package/dist/lend/core/LendProvider.js.map +1 -1
- package/dist/lend/namespaces/BaseLendNamespace.d.ts +2 -6
- package/dist/lend/namespaces/BaseLendNamespace.d.ts.map +1 -1
- package/dist/lend/namespaces/BaseLendNamespace.js.map +1 -1
- package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js +7 -4
- package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js.map +1 -1
- package/dist/lend/providers/aave/AaveLendProvider.d.ts +1 -6
- package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -1
- package/dist/lend/providers/aave/AaveLendProvider.js +3 -6
- package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -1
- package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js +14 -6
- package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js.map +1 -1
- package/dist/lend/providers/aave/addresses.d.ts +13 -39
- package/dist/lend/providers/aave/addresses.d.ts.map +1 -1
- package/dist/lend/providers/aave/addresses.js +65 -60
- package/dist/lend/providers/aave/addresses.js.map +1 -1
- package/dist/lend/providers/aave/sdk.d.ts +2 -2
- package/dist/lend/providers/aave/sdk.d.ts.map +1 -1
- package/dist/lend/providers/aave/sdk.js +6 -28
- package/dist/lend/providers/aave/sdk.js.map +1 -1
- package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +1 -6
- package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
- package/dist/lend/providers/morpho/MorphoLendProvider.js +4 -13
- package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
- package/dist/lend/providers/morpho/__tests__/api.test.js +52 -43
- package/dist/lend/providers/morpho/__tests__/api.test.js.map +1 -1
- package/dist/lend/providers/morpho/__tests__/sdk.test.js +41 -42
- package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
- package/dist/lend/providers/morpho/api.d.ts +3 -7
- package/dist/lend/providers/morpho/api.d.ts.map +1 -1
- package/dist/lend/providers/morpho/api.js +2 -2
- package/dist/lend/providers/morpho/api.js.map +1 -1
- package/dist/lend/providers/morpho/contracts.d.ts +11 -10
- package/dist/lend/providers/morpho/contracts.d.ts.map +1 -1
- package/dist/lend/providers/morpho/contracts.js +43 -10
- package/dist/lend/providers/morpho/contracts.js.map +1 -1
- package/dist/lend/providers/morpho/sdk.d.ts +7 -2
- package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
- package/dist/lend/providers/morpho/sdk.js +67 -63
- package/dist/lend/providers/morpho/sdk.js.map +1 -1
- package/dist/nodeActionsFactory.d.ts +1 -1
- package/dist/reactActionsFactory.d.ts +1 -1
- package/dist/services/ChainManager.d.ts +8 -8
- package/dist/services/ChainManager.d.ts.map +1 -1
- package/dist/services/ChainManager.js.map +1 -1
- package/dist/services/__mocks__/MockChainManager.d.ts +4 -4
- package/dist/services/__mocks__/MockChainManager.d.ts.map +1 -1
- package/dist/services/__mocks__/MockChainManager.js.map +1 -1
- package/dist/services/tokenBalance.d.ts +1 -1
- package/dist/services/tokenBalance.d.ts.map +1 -1
- package/dist/services/tokenBalance.js +31 -30
- package/dist/services/tokenBalance.js.map +1 -1
- package/dist/services/tokenBalance.spec.js +20 -24
- package/dist/services/tokenBalance.spec.js.map +1 -1
- package/dist/swap/__mocks__/MockSwapProvider.d.ts +20 -8
- package/dist/swap/__mocks__/MockSwapProvider.d.ts.map +1 -1
- package/dist/swap/__mocks__/MockSwapProvider.js +52 -29
- package/dist/swap/__mocks__/MockSwapProvider.js.map +1 -1
- package/dist/swap/core/SwapProvider.d.ts +105 -16
- package/dist/swap/core/SwapProvider.d.ts.map +1 -1
- package/dist/swap/core/SwapProvider.js +218 -36
- package/dist/swap/core/SwapProvider.js.map +1 -1
- package/dist/swap/core/__tests__/SwapProvider.test.js +115 -9
- package/dist/swap/core/__tests__/SwapProvider.test.js.map +1 -1
- package/dist/swap/core/markets.d.ts +47 -0
- package/dist/swap/core/markets.d.ts.map +1 -0
- package/dist/swap/core/markets.js +65 -0
- package/dist/swap/core/markets.js.map +1 -0
- package/dist/swap/index.d.ts +2 -0
- package/dist/swap/index.d.ts.map +1 -1
- package/dist/swap/index.js +1 -0
- package/dist/swap/index.js.map +1 -1
- package/dist/swap/namespaces/ActionsSwapNamespace.d.ts +2 -2
- package/dist/swap/namespaces/ActionsSwapNamespace.js +2 -2
- package/dist/swap/namespaces/BaseSwapNamespace.d.ts +48 -8
- package/dist/swap/namespaces/BaseSwapNamespace.d.ts.map +1 -1
- package/dist/swap/namespaces/BaseSwapNamespace.js +139 -16
- package/dist/swap/namespaces/BaseSwapNamespace.js.map +1 -1
- package/dist/swap/namespaces/WalletSwapNamespace.d.ts +19 -7
- package/dist/swap/namespaces/WalletSwapNamespace.d.ts.map +1 -1
- package/dist/swap/namespaces/WalletSwapNamespace.js +39 -15
- package/dist/swap/namespaces/WalletSwapNamespace.js.map +1 -1
- package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js +150 -11
- package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js.map +1 -1
- package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js +85 -8
- package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js.map +1 -1
- package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts +9 -42
- package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts.map +1 -1
- package/dist/swap/providers/uniswap/UniswapSwapProvider.js +81 -139
- package/dist/swap/providers/uniswap/UniswapSwapProvider.js.map +1 -1
- package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js +10 -9
- package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js.map +1 -1
- package/dist/swap/providers/uniswap/__tests__/sdk.test.js +17 -17
- package/dist/swap/providers/uniswap/__tests__/sdk.test.js.map +1 -1
- package/dist/swap/providers/uniswap/addresses.d.ts +5 -0
- package/dist/swap/providers/uniswap/addresses.d.ts.map +1 -1
- package/dist/swap/providers/uniswap/addresses.js +1 -1
- package/dist/swap/providers/uniswap/addresses.js.map +1 -1
- package/dist/swap/providers/uniswap/encoding.d.ts +4 -4
- package/dist/swap/providers/uniswap/encoding.js +17 -17
- package/dist/swap/providers/uniswap/markets.d.ts +19 -0
- package/dist/swap/providers/uniswap/markets.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/markets.js +48 -0
- package/dist/swap/providers/uniswap/markets.js.map +1 -0
- package/dist/swap/providers/uniswap/types.d.ts +4 -3
- package/dist/swap/providers/uniswap/types.d.ts.map +1 -1
- package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts +49 -0
- package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/VelodromeSwapProvider.js +140 -0
- package/dist/swap/providers/velodrome/VelodromeSwapProvider.js.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.d.ts +2 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.js +255 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.js.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.d.ts +2 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.js +166 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.js.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.d.ts +2 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.js +419 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.js.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.d.ts +2 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.js +51 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.js.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.helpers.d.ts +14 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.helpers.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.helpers.js +13 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.helpers.js.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.d.ts +2 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.js +173 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.js.map +1 -0
- package/dist/swap/providers/velodrome/abis.d.ts +396 -0
- package/dist/swap/providers/velodrome/abis.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/abis.js +257 -0
- package/dist/swap/providers/velodrome/abis.js.map +1 -0
- package/dist/swap/providers/velodrome/addresses.d.ts +39 -0
- package/dist/swap/providers/velodrome/addresses.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/addresses.js +57 -0
- package/dist/swap/providers/velodrome/addresses.js.map +1 -0
- package/dist/swap/providers/velodrome/config.d.ts +22 -0
- package/dist/swap/providers/velodrome/config.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/config.js +29 -0
- package/dist/swap/providers/velodrome/config.js.map +1 -0
- package/dist/swap/providers/velodrome/encoding/helpers.d.ts +37 -0
- package/dist/swap/providers/velodrome/encoding/helpers.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/encoding/helpers.js +60 -0
- package/dist/swap/providers/velodrome/encoding/helpers.js.map +1 -0
- package/dist/swap/providers/velodrome/encoding/index.d.ts +8 -0
- package/dist/swap/providers/velodrome/encoding/index.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/encoding/index.js +5 -0
- package/dist/swap/providers/velodrome/encoding/index.js.map +1 -0
- package/dist/swap/providers/velodrome/encoding/poolRouter.d.ts +39 -0
- package/dist/swap/providers/velodrome/encoding/poolRouter.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/encoding/poolRouter.js +83 -0
- package/dist/swap/providers/velodrome/encoding/poolRouter.js.map +1 -0
- package/dist/swap/providers/velodrome/encoding/routers/approval.d.ts +15 -0
- package/dist/swap/providers/velodrome/encoding/routers/approval.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/encoding/routers/approval.js +33 -0
- package/dist/swap/providers/velodrome/encoding/routers/approval.js.map +1 -0
- package/dist/swap/providers/velodrome/encoding/routers/cl.d.ts +40 -0
- package/dist/swap/providers/velodrome/encoding/routers/cl.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/encoding/routers/cl.js +80 -0
- package/dist/swap/providers/velodrome/encoding/routers/cl.js.map +1 -0
- package/dist/swap/providers/velodrome/encoding/routers/v2.d.ts +42 -0
- package/dist/swap/providers/velodrome/encoding/routers/v2.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/encoding/routers/v2.js +166 -0
- package/dist/swap/providers/velodrome/encoding/routers/v2.js.map +1 -0
- package/dist/swap/providers/velodrome/markets.d.ts +21 -0
- package/dist/swap/providers/velodrome/markets.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/markets.js +69 -0
- package/dist/swap/providers/velodrome/markets.js.map +1 -0
- package/dist/swap/providers/velodrome/types.d.ts +31 -0
- package/dist/swap/providers/velodrome/types.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/types.js +2 -0
- package/dist/swap/providers/velodrome/types.js.map +1 -0
- package/dist/types/actions.d.ts +44 -9
- package/dist/types/actions.d.ts.map +1 -1
- package/dist/types/asset.d.ts +7 -9
- package/dist/types/asset.d.ts.map +1 -1
- package/dist/types/chain.d.ts +2 -2
- package/dist/types/chain.d.ts.map +1 -1
- package/dist/types/lend/base.d.ts +6 -6
- package/dist/types/lend/base.d.ts.map +1 -1
- package/dist/types/lend/base.js.map +1 -1
- package/dist/types/lend/contracts.d.ts +2 -1
- package/dist/types/lend/contracts.d.ts.map +1 -1
- package/dist/types/providers.d.ts +21 -0
- package/dist/types/providers.d.ts.map +1 -0
- package/dist/types/providers.js +2 -0
- package/dist/types/providers.js.map +1 -0
- package/dist/types/swap/base.d.ts +133 -33
- package/dist/types/swap/base.d.ts.map +1 -1
- package/dist/utils/approve.d.ts +82 -0
- package/dist/utils/approve.d.ts.map +1 -0
- package/dist/utils/{permit2.js → approve.js} +48 -14
- package/dist/utils/approve.js.map +1 -0
- package/dist/utils/approve.test.d.ts +2 -0
- package/dist/utils/approve.test.d.ts.map +1 -0
- package/dist/utils/{permit2.test.js → approve.test.js} +95 -2
- package/dist/utils/approve.test.js.map +1 -0
- package/dist/utils/assets.d.ts +6 -0
- package/dist/utils/assets.d.ts.map +1 -1
- package/dist/utils/assets.js +10 -0
- package/dist/utils/assets.js.map +1 -1
- package/dist/utils/validateAddresses.d.ts +32 -0
- package/dist/utils/validateAddresses.d.ts.map +1 -0
- package/dist/utils/validateAddresses.js +103 -0
- package/dist/utils/validateAddresses.js.map +1 -0
- package/dist/utils/validateAddresses.test.d.ts +2 -0
- package/dist/utils/validateAddresses.test.d.ts.map +1 -0
- package/dist/utils/validateAddresses.test.js +314 -0
- package/dist/utils/validateAddresses.test.js.map +1 -0
- package/dist/wallet/core/namespace/WalletNamespace.d.ts +21 -9
- package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
- package/dist/wallet/core/namespace/WalletNamespace.js +44 -15
- package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
- package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +4 -4
- package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +4 -16
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
- package/dist/wallet/core/providers/hosted/types/index.d.ts +6 -11
- package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +2 -9
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts +6 -17
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/abstract/Wallet.js +5 -6
- package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
- package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts +10 -1
- package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js +2 -2
- package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js.map +1 -1
- package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js +12 -4
- package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js.map +1 -1
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +3 -10
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
- package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +3 -10
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts +2 -4
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +6 -8
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +4 -4
- package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +2 -9
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +3 -10
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +3 -10
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +3 -9
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +3 -2
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +3 -9
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -2
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +3 -9
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +3 -2
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts +2 -4
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts.map +1 -1
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +11 -13
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
- package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js +6 -6
- package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +5 -10
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +3 -3
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts +2 -6
- package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +5 -10
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +5 -10
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
- package/package.json +3 -2
- package/src/__mocks__/MockAssets.ts +54 -6
- package/src/__tests__/actions.test.ts +1 -1
- package/src/actions.ts +58 -61
- package/src/constants/assets.ts +781 -10
- package/src/constants/providers.ts +5 -0
- package/src/constants/supportedChains.ts +22 -2
- package/src/index.ts +50 -8
- package/src/lend/__mocks__/MockLendProvider.ts +8 -3
- package/src/lend/core/LendProvider.ts +27 -28
- package/src/lend/namespaces/BaseLendNamespace.ts +2 -6
- package/src/lend/namespaces/__tests__/BaseLendNamespace.spec.ts +12 -5
- package/src/lend/providers/aave/AaveLendProvider.ts +3 -7
- package/src/lend/providers/aave/__tests__/AaveLendProvider.test.ts +16 -7
- package/src/lend/providers/aave/addresses.ts +82 -64
- package/src/lend/providers/aave/sdk.ts +11 -36
- package/src/lend/providers/morpho/MorphoLendProvider.ts +4 -16
- package/src/lend/providers/morpho/__tests__/api.test.ts +65 -44
- package/src/lend/providers/morpho/__tests__/sdk.test.ts +43 -43
- package/src/lend/providers/morpho/api.ts +7 -8
- package/src/lend/providers/morpho/contracts.ts +62 -13
- package/src/lend/providers/morpho/sdk.ts +85 -63
- package/src/services/ChainManager.ts +12 -21
- package/src/services/__mocks__/MockChainManager.ts +4 -7
- package/src/services/tokenBalance.spec.ts +20 -24
- package/src/services/tokenBalance.ts +39 -33
- package/src/swap/__mocks__/MockSwapProvider.ts +77 -42
- package/src/swap/core/SwapProvider.ts +307 -49
- package/src/swap/core/__tests__/SwapProvider.test.ts +151 -9
- package/src/swap/core/markets.ts +104 -0
- package/src/swap/index.ts +5 -0
- package/src/swap/namespaces/ActionsSwapNamespace.ts +2 -2
- package/src/swap/namespaces/BaseSwapNamespace.ts +199 -18
- package/src/swap/namespaces/WalletSwapNamespace.ts +53 -14
- package/src/swap/namespaces/__tests__/BaseSwapNamespace.spec.ts +241 -14
- package/src/swap/namespaces/__tests__/WalletSwapNamespace.spec.ts +103 -8
- package/src/swap/providers/uniswap/UniswapSwapProvider.ts +108 -195
- package/src/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.ts +12 -12
- package/src/swap/providers/uniswap/__tests__/sdk.test.ts +19 -20
- package/src/swap/providers/uniswap/addresses.ts +3 -1
- package/src/swap/providers/uniswap/encoding.ts +22 -22
- package/src/swap/providers/uniswap/markets.ts +84 -0
- package/src/swap/providers/uniswap/types.ts +4 -3
- package/src/swap/providers/velodrome/VelodromeSwapProvider.ts +224 -0
- package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.ts +341 -0
- package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.ts +202 -0
- package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.ts +506 -0
- package/src/swap/providers/velodrome/__tests__/encoding.cl.test.ts +69 -0
- package/src/swap/providers/velodrome/__tests__/encoding.helpers.ts +20 -0
- package/src/swap/providers/velodrome/__tests__/encoding.v2.test.ts +235 -0
- package/src/swap/providers/velodrome/abis.ts +264 -0
- package/src/swap/providers/velodrome/addresses.ts +107 -0
- package/src/swap/providers/velodrome/config.ts +46 -0
- package/src/swap/providers/velodrome/encoding/helpers.ts +82 -0
- package/src/swap/providers/velodrome/encoding/index.ts +7 -0
- package/src/swap/providers/velodrome/encoding/poolRouter.ts +124 -0
- package/src/swap/providers/velodrome/encoding/routers/approval.ts +45 -0
- package/src/swap/providers/velodrome/encoding/routers/cl.ts +156 -0
- package/src/swap/providers/velodrome/encoding/routers/v2.ts +267 -0
- package/src/swap/providers/velodrome/markets.ts +100 -0
- package/src/swap/providers/velodrome/types.ts +30 -0
- package/src/types/actions.ts +49 -9
- package/src/types/asset.ts +12 -9
- package/src/types/chain.ts +2 -2
- package/src/types/lend/base.ts +6 -6
- package/src/types/lend/contracts.ts +5 -1
- package/src/types/providers.ts +22 -0
- package/src/types/swap/base.ts +147 -34
- package/src/utils/{permit2.test.ts → approve.test.ts} +117 -1
- package/src/utils/{permit2.ts → approve.ts} +67 -14
- package/src/utils/assets.ts +14 -0
- package/src/utils/validateAddresses.test.ts +439 -0
- package/src/utils/validateAddresses.ts +153 -0
- package/src/wallet/core/namespace/WalletNamespace.ts +70 -16
- package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +8 -4
- package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +5 -17
- package/src/wallet/core/providers/hosted/types/index.ts +9 -11
- package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +5 -17
- package/src/wallet/core/wallets/abstract/Wallet.ts +15 -22
- package/src/wallet/core/wallets/abstract/__mocks__/TestWallet.ts +13 -1
- package/src/wallet/core/wallets/abstract/__tests__/Wallet.spec.ts +21 -5
- package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +5 -17
- package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +0 -1
- package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +3 -10
- package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +8 -8
- package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +4 -4
- package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +3 -10
- package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +5 -17
- package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +5 -17
- package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +7 -11
- package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +7 -11
- package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +7 -11
- package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +23 -10
- package/src/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.ts +6 -6
- package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +10 -18
- package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +2 -6
- package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +10 -18
- package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +10 -18
- package/dist/supported/tokens.d.ts +0 -25
- package/dist/supported/tokens.d.ts.map +0 -1
- package/dist/supported/tokens.js +0 -44
- package/dist/supported/tokens.js.map +0 -1
- package/dist/utils/permit2.d.ts +0 -46
- package/dist/utils/permit2.d.ts.map +0 -1
- package/dist/utils/permit2.js.map +0 -1
- package/dist/utils/permit2.test.d.ts +0 -2
- package/dist/utils/permit2.test.d.ts.map +0 -1
- package/dist/utils/permit2.test.js.map +0 -1
- package/src/supported/tokens.ts +0 -66
|
@@ -83,8 +83,8 @@ function resolvePoolParams(
|
|
|
83
83
|
export interface GetQuoteParams {
|
|
84
84
|
assetIn: Asset
|
|
85
85
|
assetOut: Asset
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
amountInRaw?: bigint
|
|
87
|
+
amountOutRaw?: bigint
|
|
88
88
|
chainId: SupportedChainId
|
|
89
89
|
publicClient: PublicClient
|
|
90
90
|
quoterAddress: Address
|
|
@@ -102,8 +102,8 @@ export async function getQuote(params: GetQuoteParams): Promise<SwapPrice> {
|
|
|
102
102
|
const {
|
|
103
103
|
assetIn,
|
|
104
104
|
assetOut,
|
|
105
|
-
|
|
106
|
-
|
|
105
|
+
amountInRaw,
|
|
106
|
+
amountOutRaw,
|
|
107
107
|
chainId,
|
|
108
108
|
publicClient,
|
|
109
109
|
quoterAddress,
|
|
@@ -120,7 +120,7 @@ export async function getQuote(params: GetQuoteParams): Promise<SwapPrice> {
|
|
|
120
120
|
tickSpacing,
|
|
121
121
|
)
|
|
122
122
|
|
|
123
|
-
const isExactInput =
|
|
123
|
+
const isExactInput = amountInRaw !== undefined
|
|
124
124
|
|
|
125
125
|
// Read pool mid-price and quote in parallel — no extra sequential RPC call
|
|
126
126
|
const [sqrtPriceX96, quoteResult] = await Promise.all([
|
|
@@ -134,7 +134,7 @@ export async function getQuote(params: GetQuoteParams): Promise<SwapPrice> {
|
|
|
134
134
|
{
|
|
135
135
|
poolKey,
|
|
136
136
|
zeroForOne,
|
|
137
|
-
exactAmount:
|
|
137
|
+
exactAmount: amountInRaw,
|
|
138
138
|
hookData: '0x' as `0x${string}`,
|
|
139
139
|
},
|
|
140
140
|
],
|
|
@@ -147,15 +147,15 @@ export async function getQuote(params: GetQuoteParams): Promise<SwapPrice> {
|
|
|
147
147
|
{
|
|
148
148
|
poolKey,
|
|
149
149
|
zeroForOne,
|
|
150
|
-
exactAmount:
|
|
150
|
+
exactAmount: amountOutRaw!,
|
|
151
151
|
hookData: '0x' as `0x${string}`,
|
|
152
152
|
},
|
|
153
153
|
],
|
|
154
154
|
}),
|
|
155
155
|
])
|
|
156
156
|
|
|
157
|
-
const amountIn = isExactInput ?
|
|
158
|
-
const amountOut = isExactInput ? quoteResult.result[0] :
|
|
157
|
+
const amountIn = isExactInput ? amountInRaw : quoteResult.result[0]
|
|
158
|
+
const amountOut = isExactInput ? quoteResult.result[0] : amountOutRaw!
|
|
159
159
|
const gasEstimate = quoteResult.result[1]
|
|
160
160
|
|
|
161
161
|
const price = calculatePrice(amountIn, amountOut, assetIn, assetOut)
|
|
@@ -183,8 +183,8 @@ export async function getQuote(params: GetQuoteParams): Promise<SwapPrice> {
|
|
|
183
183
|
priceInverse,
|
|
184
184
|
amountIn: parseFloat(formatUnits(amountIn, assetIn.metadata.decimals)),
|
|
185
185
|
amountOut: parseFloat(formatUnits(amountOut, assetOut.metadata.decimals)),
|
|
186
|
-
|
|
187
|
-
|
|
186
|
+
amountInRaw: amountIn,
|
|
187
|
+
amountOutRaw: amountOut,
|
|
188
188
|
priceImpact,
|
|
189
189
|
route,
|
|
190
190
|
gasEstimate,
|
|
@@ -192,8 +192,8 @@ export async function getQuote(params: GetQuoteParams): Promise<SwapPrice> {
|
|
|
192
192
|
}
|
|
193
193
|
|
|
194
194
|
export interface EncodeSwapParams {
|
|
195
|
-
|
|
196
|
-
|
|
195
|
+
amountInRaw?: bigint
|
|
196
|
+
amountOutRaw?: bigint
|
|
197
197
|
assetIn: Asset
|
|
198
198
|
assetOut: Asset
|
|
199
199
|
slippage: number
|
|
@@ -223,7 +223,7 @@ const TAKE_ALL = 0x0f
|
|
|
223
223
|
*/
|
|
224
224
|
export function encodeUniversalRouterSwap(params: EncodeSwapParams): Hex {
|
|
225
225
|
const {
|
|
226
|
-
|
|
226
|
+
amountInRaw,
|
|
227
227
|
assetIn,
|
|
228
228
|
assetOut,
|
|
229
229
|
slippage,
|
|
@@ -242,14 +242,14 @@ export function encodeUniversalRouterSwap(params: EncodeSwapParams): Hex {
|
|
|
242
242
|
tickSpacing,
|
|
243
243
|
)
|
|
244
244
|
|
|
245
|
-
const isExactInput =
|
|
245
|
+
const isExactInput = amountInRaw !== undefined
|
|
246
246
|
|
|
247
247
|
let actions: Hex
|
|
248
248
|
let actionParams: Hex[]
|
|
249
249
|
|
|
250
250
|
if (isExactInput) {
|
|
251
251
|
const minAmountOut =
|
|
252
|
-
(quote.
|
|
252
|
+
(quote.amountOutRaw * BigInt(Math.round((1 - slippage) * 10000))) / 10000n
|
|
253
253
|
|
|
254
254
|
actions =
|
|
255
255
|
`0x${[SWAP_EXACT_IN_SINGLE, SETTLE_ALL, TAKE_ALL].map((a) => a.toString(16).padStart(2, '0')).join('')}` as Hex
|
|
@@ -259,18 +259,18 @@ export function encodeUniversalRouterSwap(params: EncodeSwapParams): Hex {
|
|
|
259
259
|
{
|
|
260
260
|
poolKey,
|
|
261
261
|
zeroForOne,
|
|
262
|
-
amountIn:
|
|
262
|
+
amountIn: amountInRaw,
|
|
263
263
|
amountOutMinimum: minAmountOut,
|
|
264
264
|
hookData: '0x',
|
|
265
265
|
},
|
|
266
266
|
]),
|
|
267
|
-
encodeAbiParameters(CURRENCY_AMOUNT_PARAMS, [tokenIn,
|
|
267
|
+
encodeAbiParameters(CURRENCY_AMOUNT_PARAMS, [tokenIn, amountInRaw]),
|
|
268
268
|
encodeAbiParameters(CURRENCY_AMOUNT_PARAMS, [tokenOut, minAmountOut]),
|
|
269
269
|
]
|
|
270
270
|
} else {
|
|
271
271
|
const maxAmountIn =
|
|
272
|
-
quote.
|
|
273
|
-
(quote.
|
|
272
|
+
quote.amountInRaw +
|
|
273
|
+
(quote.amountInRaw * BigInt(Math.round(slippage * 10000))) / 10000n
|
|
274
274
|
|
|
275
275
|
actions =
|
|
276
276
|
`0x${[SWAP_EXACT_OUT_SINGLE, SETTLE_ALL, TAKE_ALL].map((a) => a.toString(16).padStart(2, '0')).join('')}` as Hex
|
|
@@ -280,7 +280,7 @@ export function encodeUniversalRouterSwap(params: EncodeSwapParams): Hex {
|
|
|
280
280
|
{
|
|
281
281
|
poolKey,
|
|
282
282
|
zeroForOne,
|
|
283
|
-
amountOut: quote.
|
|
283
|
+
amountOut: quote.amountOutRaw,
|
|
284
284
|
amountInMaximum: maxAmountIn,
|
|
285
285
|
hookData: '0x',
|
|
286
286
|
},
|
|
@@ -288,7 +288,7 @@ export function encodeUniversalRouterSwap(params: EncodeSwapParams): Hex {
|
|
|
288
288
|
encodeAbiParameters(CURRENCY_AMOUNT_PARAMS, [tokenIn, maxAmountIn]),
|
|
289
289
|
encodeAbiParameters(CURRENCY_AMOUNT_PARAMS, [
|
|
290
290
|
tokenOut,
|
|
291
|
-
quote.
|
|
291
|
+
quote.amountOutRaw,
|
|
292
292
|
]),
|
|
293
293
|
]
|
|
294
294
|
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { type Address, encodeAbiParameters, keccak256 } from 'viem'
|
|
2
|
+
|
|
3
|
+
import { UNISWAP } from '@/constants/providers.js'
|
|
4
|
+
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
5
|
+
import { assetPairs } from '@/swap/core/markets.js'
|
|
6
|
+
import { POOL_KEY_ABI_TYPE } from '@/swap/providers/uniswap/abis.js'
|
|
7
|
+
import type { Asset } from '@/types/asset.js'
|
|
8
|
+
import type { SwapMarket } from '@/types/swap/index.js'
|
|
9
|
+
|
|
10
|
+
import type { UniswapMarketConfig } from './types.js'
|
|
11
|
+
|
|
12
|
+
/** Validated Uniswap market config with required fee and tickSpacing */
|
|
13
|
+
export type ValidUniswapConfig = UniswapMarketConfig & {
|
|
14
|
+
fee: number
|
|
15
|
+
tickSpacing: number
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Filter market allowlist to configs with required fee and tickSpacing.
|
|
20
|
+
*/
|
|
21
|
+
export function getValidMarketConfigs(
|
|
22
|
+
allowlist?: UniswapMarketConfig[],
|
|
23
|
+
): ValidUniswapConfig[] {
|
|
24
|
+
return (allowlist ?? []).filter(
|
|
25
|
+
(f): f is ValidUniswapConfig =>
|
|
26
|
+
f.fee !== undefined && f.tickSpacing !== undefined,
|
|
27
|
+
)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Expand a single UniswapMarketConfig into SwapMarket objects for a given chain.
|
|
32
|
+
* Used as the `toMarkets` callback for shared findMarket/expandMarkets.
|
|
33
|
+
*/
|
|
34
|
+
export function configToMarkets(
|
|
35
|
+
config: ValidUniswapConfig,
|
|
36
|
+
chainId: SupportedChainId,
|
|
37
|
+
asset?: Asset,
|
|
38
|
+
): SwapMarket[] {
|
|
39
|
+
return assetPairs(config.assets, asset)
|
|
40
|
+
.map(([a, b]) =>
|
|
41
|
+
pairToMarket(a, b, chainId, config.fee, config.tickSpacing),
|
|
42
|
+
)
|
|
43
|
+
.filter((m): m is SwapMarket => m !== null)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Build a SwapMarket from two assets and V4 pool parameters.
|
|
48
|
+
* Computes a deterministic poolId from the sorted pool key.
|
|
49
|
+
* @returns SwapMarket, or null if either asset lacks an address on this chain
|
|
50
|
+
*/
|
|
51
|
+
function pairToMarket(
|
|
52
|
+
assetA: Asset,
|
|
53
|
+
assetB: Asset,
|
|
54
|
+
chainId: SupportedChainId,
|
|
55
|
+
fee: number,
|
|
56
|
+
tickSpacing: number,
|
|
57
|
+
): SwapMarket | null {
|
|
58
|
+
const addrA = assetA.address[chainId]
|
|
59
|
+
const addrB = assetB.address[chainId]
|
|
60
|
+
if (!addrA || addrA === 'native' || !addrB || addrB === 'native') return null
|
|
61
|
+
|
|
62
|
+
const [currency0, currency1] =
|
|
63
|
+
addrA.toLowerCase() < addrB.toLowerCase() ? [addrA, addrB] : [addrB, addrA]
|
|
64
|
+
|
|
65
|
+
// V4 requires currency0 < currency1 for deterministic pool keys
|
|
66
|
+
// PoolId = keccak256(abi.encode(PoolKey)) per V4's PoolIdLibrary
|
|
67
|
+
// @see https://github.com/Uniswap/v4-core/blob/main/src/types/PoolId.sol
|
|
68
|
+
const poolId = keccak256(
|
|
69
|
+
encodeAbiParameters(POOL_KEY_ABI_TYPE, [
|
|
70
|
+
currency0 as Address,
|
|
71
|
+
currency1 as Address,
|
|
72
|
+
fee,
|
|
73
|
+
tickSpacing,
|
|
74
|
+
'0x0000000000000000000000000000000000000000' as Address,
|
|
75
|
+
]),
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
marketId: { poolId, chainId },
|
|
80
|
+
assets: [assetA, assetB],
|
|
81
|
+
fee,
|
|
82
|
+
provider: UNISWAP,
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -14,11 +14,12 @@ export interface UniswapMarketConfig extends SwapMarketConfig {
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
|
-
* Uniswap swap provider configuration
|
|
17
|
+
* Uniswap swap provider configuration.
|
|
18
|
+
* Provider-level values override the shared SwapGlobalConfig.
|
|
18
19
|
*/
|
|
19
20
|
export interface UniswapSwapProviderConfig extends SwapProviderConfig {
|
|
20
21
|
marketAllowlist?: UniswapMarketConfig[]
|
|
21
22
|
marketBlocklist?: UniswapMarketConfig[]
|
|
22
|
-
/** Permit2 approval
|
|
23
|
-
|
|
23
|
+
/** Permit2 sub-approval expiration override in seconds from now. */
|
|
24
|
+
permit2ExpirationSeconds?: number
|
|
24
25
|
}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { formatUnits } from 'viem'
|
|
2
|
+
|
|
3
|
+
import { VELODROME } from '@/constants/providers.js'
|
|
4
|
+
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
5
|
+
import { expandMarkets, findMarket } from '@/swap/core/markets.js'
|
|
6
|
+
import { SwapProvider } from '@/swap/core/SwapProvider.js'
|
|
7
|
+
import {
|
|
8
|
+
getChainConfig,
|
|
9
|
+
getSupportedChainIds,
|
|
10
|
+
getValidMarketConfigs,
|
|
11
|
+
} from '@/swap/providers/velodrome/config.js'
|
|
12
|
+
import {
|
|
13
|
+
buildTokenApproval,
|
|
14
|
+
encodePoolSwap,
|
|
15
|
+
fetchPoolQuote,
|
|
16
|
+
} from '@/swap/providers/velodrome/encoding/index.js'
|
|
17
|
+
import {
|
|
18
|
+
configToMarkets,
|
|
19
|
+
resolvePoolConfig,
|
|
20
|
+
} from '@/swap/providers/velodrome/markets.js'
|
|
21
|
+
import type {
|
|
22
|
+
VelodromeMarketConfig,
|
|
23
|
+
VelodromeSwapProviderConfig,
|
|
24
|
+
} from '@/swap/providers/velodrome/types.js'
|
|
25
|
+
import type { Asset } from '@/types/asset.js'
|
|
26
|
+
import type {
|
|
27
|
+
GetSwapMarketParams,
|
|
28
|
+
GetSwapMarketsParams,
|
|
29
|
+
ResolvedSwapParams,
|
|
30
|
+
SwapMarket,
|
|
31
|
+
SwapQuote,
|
|
32
|
+
SwapQuoteParams,
|
|
33
|
+
SwapTransaction,
|
|
34
|
+
} from '@/types/swap/index.js'
|
|
35
|
+
import { getAssetAddress, isNativeAsset } from '@/utils/assets.js'
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Velodrome/Aerodrome swap provider for OP Stack chains.
|
|
39
|
+
* Supports v2 AMM pools, CL/Slipstream concentrated liquidity pools,
|
|
40
|
+
* v2 routers (Optimism, Base), leaf routers (Relay chains), and Universal Router (Base Sepolia).
|
|
41
|
+
*/
|
|
42
|
+
export class VelodromeSwapProvider extends SwapProvider<VelodromeSwapProviderConfig> {
|
|
43
|
+
/** @returns Chain IDs where Velodrome/Aerodrome contracts are deployed */
|
|
44
|
+
protocolSupportedChainIds(): SupportedChainId[] {
|
|
45
|
+
return getSupportedChainIds()
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Build a swap transaction from raw parameters.
|
|
50
|
+
* @param params - Resolved swap parameters (amounts as raw bigint, defaults applied)
|
|
51
|
+
* @returns Transaction data ready for wallet execution
|
|
52
|
+
* @throws If amountOut is provided (Velodrome only supports exact-input swaps)
|
|
53
|
+
*/
|
|
54
|
+
protected async _execute(
|
|
55
|
+
params: ResolvedSwapParams,
|
|
56
|
+
): Promise<SwapTransaction> {
|
|
57
|
+
if (params.amountOutRaw !== undefined) {
|
|
58
|
+
throw new Error(
|
|
59
|
+
'Velodrome/Aerodrome does not support exact-output swaps. Provide amountIn instead of amountOut.',
|
|
60
|
+
)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const swapQuote = await this._getQuote({
|
|
64
|
+
assetIn: params.assetIn,
|
|
65
|
+
assetOut: params.assetOut,
|
|
66
|
+
amountIn: params.amountInRaw
|
|
67
|
+
? parseFloat(
|
|
68
|
+
formatUnits(params.amountInRaw, params.assetIn.metadata.decimals),
|
|
69
|
+
)
|
|
70
|
+
: undefined,
|
|
71
|
+
chainId: params.chainId,
|
|
72
|
+
slippage: params.slippage,
|
|
73
|
+
deadline: params.deadline,
|
|
74
|
+
recipient: params.recipient,
|
|
75
|
+
})
|
|
76
|
+
return this.buildSwapTransactions(swapQuote)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Find a specific market by poolId from the allowlist.
|
|
81
|
+
* @param params - Pool ID and chain to look up
|
|
82
|
+
* @returns Matching market
|
|
83
|
+
* @throws If no matching market found in config
|
|
84
|
+
*/
|
|
85
|
+
protected async _getMarket(params: GetSwapMarketParams): Promise<SwapMarket> {
|
|
86
|
+
return findMarket(
|
|
87
|
+
getValidMarketConfigs(this._config.marketAllowlist),
|
|
88
|
+
params.chainId,
|
|
89
|
+
params.poolId,
|
|
90
|
+
configToMarkets,
|
|
91
|
+
)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Expand the market allowlist into concrete SwapMarket objects.
|
|
96
|
+
* @param params - Optional filters (chainId, asset)
|
|
97
|
+
* @returns All configured markets matching the filters
|
|
98
|
+
*/
|
|
99
|
+
protected async _getMarkets(
|
|
100
|
+
params: GetSwapMarketsParams,
|
|
101
|
+
): Promise<SwapMarket[]> {
|
|
102
|
+
return expandMarkets({
|
|
103
|
+
configs: getValidMarketConfigs(this._config.marketAllowlist),
|
|
104
|
+
filters: params,
|
|
105
|
+
supportedChainIds: this.supportedChainIds(),
|
|
106
|
+
toMarkets: configToMarkets,
|
|
107
|
+
})
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Get a full swap quote with pricing, slippage bounds, and pre-built execution data.
|
|
112
|
+
* @param params - Quote parameters (assets, amounts, chain, slippage, deadline)
|
|
113
|
+
* @returns SwapQuote with amounts, price, route, and encoded calldata
|
|
114
|
+
* @throws If amountOut is provided (Velodrome only supports exact-input)
|
|
115
|
+
*/
|
|
116
|
+
protected async _getQuote(params: SwapQuoteParams): Promise<SwapQuote> {
|
|
117
|
+
const { chainId, assetIn, assetOut } = params
|
|
118
|
+
|
|
119
|
+
if (params.amountOut !== undefined) {
|
|
120
|
+
throw new Error(
|
|
121
|
+
'Velodrome/Aerodrome does not support exact-output swaps. Provide amountIn instead of amountOut.',
|
|
122
|
+
)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const chain = getChainConfig(chainId)
|
|
126
|
+
const publicClient = this.chainManager.getPublicClient(chainId)
|
|
127
|
+
const poolConfig = this.resolveVelodromeMarketConfig(
|
|
128
|
+
assetIn,
|
|
129
|
+
assetOut,
|
|
130
|
+
chainId,
|
|
131
|
+
)
|
|
132
|
+
const { slippage, now, deadline, recipient, amountInRaw } =
|
|
133
|
+
this.resolveQuoteDefaults(params)
|
|
134
|
+
|
|
135
|
+
const { internalQuote, providerContext } = await fetchPoolQuote(
|
|
136
|
+
poolConfig,
|
|
137
|
+
{ assetIn, assetOut, amountInRaw, chainId, publicClient, chain },
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
const { amountOutMinRaw, amountOutMin } = this.computeSlippageBounds(
|
|
141
|
+
internalQuote.amountOutRaw,
|
|
142
|
+
slippage,
|
|
143
|
+
assetOut,
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
const swapCalldata = encodePoolSwap(poolConfig, {
|
|
147
|
+
assetIn,
|
|
148
|
+
assetOut,
|
|
149
|
+
amountInRaw,
|
|
150
|
+
amountOutMinRaw,
|
|
151
|
+
recipient,
|
|
152
|
+
deadline,
|
|
153
|
+
chainId,
|
|
154
|
+
chain,
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
return {
|
|
158
|
+
assetIn,
|
|
159
|
+
assetOut,
|
|
160
|
+
chainId,
|
|
161
|
+
amountIn: internalQuote.amountIn,
|
|
162
|
+
amountInRaw,
|
|
163
|
+
amountOut: internalQuote.amountOut,
|
|
164
|
+
amountOutRaw: internalQuote.amountOutRaw,
|
|
165
|
+
amountOutMin,
|
|
166
|
+
amountOutMinRaw,
|
|
167
|
+
price: internalQuote.amountOut / internalQuote.amountIn,
|
|
168
|
+
priceInverse: internalQuote.amountIn / internalQuote.amountOut,
|
|
169
|
+
priceImpact: internalQuote.priceImpact,
|
|
170
|
+
route: internalQuote.route,
|
|
171
|
+
execution: {
|
|
172
|
+
swapCalldata,
|
|
173
|
+
routerAddress: chain.contracts.router,
|
|
174
|
+
value: isNativeAsset(assetIn) ? amountInRaw : 0n,
|
|
175
|
+
providerContext,
|
|
176
|
+
},
|
|
177
|
+
provider: VELODROME,
|
|
178
|
+
slippage,
|
|
179
|
+
deadline,
|
|
180
|
+
quotedAt: now,
|
|
181
|
+
expiresAt: deadline,
|
|
182
|
+
gasEstimate: internalQuote.gasEstimate,
|
|
183
|
+
quotedRecipient: recipient,
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
protected async _buildApprovals(quote: SwapQuote) {
|
|
188
|
+
const chain = getChainConfig(quote.chainId)
|
|
189
|
+
const publicClient = this.chainManager.getPublicClient(quote.chainId)
|
|
190
|
+
|
|
191
|
+
const tokenApproval = isNativeAsset(quote.assetIn)
|
|
192
|
+
? undefined
|
|
193
|
+
: await buildTokenApproval(
|
|
194
|
+
getAssetAddress(quote.assetIn, quote.chainId),
|
|
195
|
+
chain.contracts.router,
|
|
196
|
+
chain.metadata.routerType,
|
|
197
|
+
quote.amountInRaw,
|
|
198
|
+
quote.recipient!,
|
|
199
|
+
publicClient,
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
return { tokenApproval }
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Resolve market config to a discriminated pool config.
|
|
207
|
+
* @throws If pair not in allowlist, or has both/neither stable and tickSpacing
|
|
208
|
+
*/
|
|
209
|
+
private resolveVelodromeMarketConfig(
|
|
210
|
+
assetIn: Asset,
|
|
211
|
+
assetOut: Asset,
|
|
212
|
+
chainId: SupportedChainId,
|
|
213
|
+
) {
|
|
214
|
+
const config = this.resolveMarketConfig(assetIn, assetOut, chainId) as
|
|
215
|
+
| VelodromeMarketConfig
|
|
216
|
+
| undefined
|
|
217
|
+
if (!config) {
|
|
218
|
+
throw new Error(
|
|
219
|
+
`No market config for pair ${assetIn.metadata.symbol}/${assetOut.metadata.symbol}`,
|
|
220
|
+
)
|
|
221
|
+
}
|
|
222
|
+
return resolvePoolConfig(config)
|
|
223
|
+
}
|
|
224
|
+
}
|