@eth-optimism/actions-sdk 0.3.0 → 0.5.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 +17 -13
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +46 -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/ens/EnsNamespace.d.ts +57 -0
- package/dist/ens/EnsNamespace.d.ts.map +1 -0
- package/dist/ens/EnsNamespace.js +158 -0
- package/dist/ens/EnsNamespace.js.map +1 -0
- package/dist/ens/EnsNamespace.spec.d.ts +2 -0
- package/dist/ens/EnsNamespace.spec.d.ts.map +1 -0
- package/dist/ens/EnsNamespace.spec.js +144 -0
- package/dist/ens/EnsNamespace.spec.js.map +1 -0
- package/dist/ens/errors.d.ts +24 -0
- package/dist/ens/errors.d.ts.map +1 -0
- package/dist/ens/errors.js +35 -0
- package/dist/ens/errors.js.map +1 -0
- package/dist/ens/index.d.ts +4 -0
- package/dist/ens/index.d.ts.map +1 -0
- package/dist/ens/index.js +4 -0
- package/dist/ens/index.js.map +1 -0
- package/dist/ens/types.d.ts +63 -0
- package/dist/ens/types.d.ts.map +1 -0
- package/dist/ens/types.js +14 -0
- package/dist/ens/types.js.map +1 -0
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -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 +15 -8
- package/dist/services/ChainManager.d.ts.map +1 -1
- package/dist/services/ChainManager.js +9 -0
- package/dist/services/ChainManager.js.map +1 -1
- package/dist/services/__mocks__/MockChainManager.d.ts +5 -4
- package/dist/services/__mocks__/MockChainManager.d.ts.map +1 -1
- package/dist/services/__mocks__/MockChainManager.js +5 -0
- 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 +215 -37
- 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 +50 -8
- package/dist/swap/namespaces/BaseSwapNamespace.d.ts.map +1 -1
- package/dist/swap/namespaces/BaseSwapNamespace.js +144 -16
- package/dist/swap/namespaces/BaseSwapNamespace.js.map +1 -1
- package/dist/swap/namespaces/WalletSwapNamespace.d.ts +20 -7
- package/dist/swap/namespaces/WalletSwapNamespace.d.ts.map +1 -1
- package/dist/swap/namespaces/WalletSwapNamespace.js +44 -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 +10 -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 +50 -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 +420 -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 +136 -35
- package/dist/types/swap/base.d.ts.map +1 -1
- package/dist/types/swap/base.js.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/ens.d.ts +25 -0
- package/dist/utils/ens.d.ts.map +1 -0
- package/dist/utils/ens.js +53 -0
- package/dist/utils/ens.js.map +1 -0
- package/dist/utils/ens.test.d.ts +2 -0
- package/dist/utils/ens.test.d.ts.map +1 -0
- package/dist/utils/ens.test.js +75 -0
- package/dist/utils/ens.test.js.map +1 -0
- 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/utils/validation.d.ts +5 -0
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +10 -0
- package/dist/utils/validation.js.map +1 -1
- 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 +7 -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 +73 -61
- package/src/constants/assets.ts +781 -10
- package/src/constants/providers.ts +5 -0
- package/src/constants/supportedChains.ts +22 -2
- package/src/ens/EnsNamespace.spec.ts +171 -0
- package/src/ens/EnsNamespace.ts +210 -0
- package/src/ens/errors.ts +45 -0
- package/src/ens/index.ts +12 -0
- package/src/ens/types.ts +76 -0
- package/src/index.ts +59 -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 +22 -21
- package/src/services/__mocks__/MockChainManager.ts +12 -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 +309 -50
- 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 +215 -18
- package/src/swap/namespaces/WalletSwapNamespace.ts +61 -14
- package/src/swap/namespaces/__tests__/BaseSwapNamespace.spec.ts +245 -14
- package/src/swap/namespaces/__tests__/WalletSwapNamespace.spec.ts +103 -8
- package/src/swap/providers/uniswap/UniswapSwapProvider.ts +110 -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 +226 -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 +507 -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 +150 -36
- 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/ens.test.ts +104 -0
- package/src/utils/ens.ts +85 -0
- package/src/utils/validateAddresses.test.ts +439 -0
- package/src/utils/validateAddresses.ts +153 -0
- package/src/utils/validation.ts +11 -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 +18 -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
|
@@ -7,14 +7,15 @@ import {
|
|
|
7
7
|
} from '@morpho-org/blue-sdk-viem'
|
|
8
8
|
import type { Address, PublicClient } from 'viem'
|
|
9
9
|
|
|
10
|
+
import { NATIVELY_SUPPORTED_ASSETS } from '@/constants/assets.js'
|
|
10
11
|
import {
|
|
11
12
|
fetchRewards,
|
|
12
13
|
type RewardsBreakdown,
|
|
13
14
|
} from '@/lend/providers/morpho/api.js'
|
|
14
15
|
import { getMorphoContracts } from '@/lend/providers/morpho/contracts.js'
|
|
15
16
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
16
|
-
import { SUPPORTED_TOKENS } from '@/supported/tokens.js'
|
|
17
17
|
import type { LendProviderConfig } from '@/types/actions.js'
|
|
18
|
+
import type { Asset } from '@/types/asset.js'
|
|
18
19
|
import type {
|
|
19
20
|
ApyBreakdown,
|
|
20
21
|
LendMarket,
|
|
@@ -27,29 +28,42 @@ import { SECONDS_PER_YEAR } from '@/utils/constants.js'
|
|
|
27
28
|
/**
|
|
28
29
|
* Fetch and calculate rewards breakdown from Morpho GraphQL API
|
|
29
30
|
* @param vaultAddress - Vault address
|
|
31
|
+
* @param supportedAssets - Configured assets for reward categorization
|
|
32
|
+
* @param chainId - Chain ID for address lookup
|
|
30
33
|
* @returns Promise resolving to rewards breakdown
|
|
31
34
|
*/
|
|
32
35
|
export async function fetchAndCalculateRewards(
|
|
33
36
|
vaultAddress: Address,
|
|
37
|
+
chainId: number,
|
|
38
|
+
marketAsset?: Asset,
|
|
34
39
|
): Promise<RewardsBreakdown> {
|
|
35
|
-
const vaultData = await fetchRewards(vaultAddress)
|
|
40
|
+
const vaultData = await fetchRewards(vaultAddress, chainId)
|
|
36
41
|
|
|
37
42
|
if (!vaultData) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
other: 0,
|
|
41
|
-
totalRewards: 0,
|
|
42
|
-
}
|
|
43
|
+
return buildEmptyRewards(chainId, marketAsset)
|
|
44
|
+
}
|
|
43
45
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
emptyRewards[token.metadata.symbol.toLowerCase()] = 0
|
|
47
|
-
})
|
|
46
|
+
return calculateRewardsBreakdown(vaultData, chainId, marketAsset)
|
|
47
|
+
}
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
/**
|
|
50
|
+
* Build an empty rewards object with all supported asset addresses initialized to 0
|
|
51
|
+
*/
|
|
52
|
+
function buildEmptyRewards(
|
|
53
|
+
chainId: number,
|
|
54
|
+
marketAsset?: Asset,
|
|
55
|
+
): RewardsBreakdown {
|
|
56
|
+
const assets = marketAsset
|
|
57
|
+
? [...NATIVELY_SUPPORTED_ASSETS, marketAsset]
|
|
58
|
+
: NATIVELY_SUPPORTED_ASSETS
|
|
59
|
+
const emptyRewards: Record<string, number> = { other: 0, totalRewards: 0 }
|
|
60
|
+
for (const token of assets) {
|
|
61
|
+
const addr = token.address[chainId as keyof typeof token.address]
|
|
62
|
+
if (addr && addr !== 'native') {
|
|
63
|
+
emptyRewards[addr.toLowerCase()] = 0
|
|
64
|
+
}
|
|
50
65
|
}
|
|
51
|
-
|
|
52
|
-
return calculateRewardsBreakdown(vaultData)
|
|
66
|
+
return emptyRewards as RewardsBreakdown
|
|
53
67
|
}
|
|
54
68
|
|
|
55
69
|
/**
|
|
@@ -238,7 +252,7 @@ async function calculateVaultApy(
|
|
|
238
252
|
}
|
|
239
253
|
|
|
240
254
|
/**
|
|
241
|
-
* Fetch vault data via direct on-chain queries (
|
|
255
|
+
* Fetch vault data via direct on-chain queries (fallback when SDK unavailable)
|
|
242
256
|
*/
|
|
243
257
|
async function fetchVaultDataOnChain(
|
|
244
258
|
marketId: LendMarketId,
|
|
@@ -332,7 +346,7 @@ export async function getVault(params: GetVaultParams): Promise<LendMarket> {
|
|
|
332
346
|
params.marketId.chainId,
|
|
333
347
|
)
|
|
334
348
|
|
|
335
|
-
// Try SDK first for supported chains
|
|
349
|
+
// Try SDK first for SDK-supported chains
|
|
336
350
|
if (isSdkSupportedChain(params.marketId.chainId)) {
|
|
337
351
|
try {
|
|
338
352
|
const vault = await fetchAccrualVault(
|
|
@@ -343,18 +357,11 @@ export async function getVault(params: GetVaultParams): Promise<LendMarket> {
|
|
|
343
357
|
// Fetch rewards data from API
|
|
344
358
|
const rewardsBreakdown = await fetchAndCalculateRewards(
|
|
345
359
|
params.marketId.address,
|
|
360
|
+
params.marketId.chainId,
|
|
361
|
+
marketConfig.asset,
|
|
346
362
|
).catch((error) => {
|
|
347
363
|
console.error('Failed to fetch rewards data:', error)
|
|
348
|
-
return
|
|
349
|
-
eth: 0,
|
|
350
|
-
weth: 0,
|
|
351
|
-
usdc: 0,
|
|
352
|
-
usdc_demo: 0,
|
|
353
|
-
op_demo: 0,
|
|
354
|
-
morpho: 0,
|
|
355
|
-
other: 0,
|
|
356
|
-
totalRewards: 0,
|
|
357
|
-
}
|
|
364
|
+
return buildEmptyRewards(params.marketId.chainId, marketConfig.asset)
|
|
358
365
|
})
|
|
359
366
|
|
|
360
367
|
const apyBreakdown = calculateApyBreakdown(vault, rewardsBreakdown)
|
|
@@ -381,7 +388,7 @@ export async function getVault(params: GetVaultParams): Promise<LendMarket> {
|
|
|
381
388
|
}
|
|
382
389
|
}
|
|
383
390
|
|
|
384
|
-
// Fallback to direct on-chain queries
|
|
391
|
+
// Fallback to direct on-chain queries if SDK unavailable or fails
|
|
385
392
|
const contracts = getMorphoContracts(params.marketId.chainId)
|
|
386
393
|
if (contracts) {
|
|
387
394
|
return fetchVaultDataOnChain(
|
|
@@ -489,38 +496,59 @@ export function calculateApyBreakdown(
|
|
|
489
496
|
}
|
|
490
497
|
}
|
|
491
498
|
|
|
499
|
+
/**
|
|
500
|
+
* Categorize a reward asset by its address. If the address matches a supported asset, use that.
|
|
501
|
+
* Otherwise, fall back to 'other'.
|
|
502
|
+
*/
|
|
503
|
+
function categorizeRewardAsset(
|
|
504
|
+
rewardAssetAddress: string | undefined,
|
|
505
|
+
knownAddresses: Set<string>,
|
|
506
|
+
): string {
|
|
507
|
+
if (!rewardAssetAddress) return 'other'
|
|
508
|
+
const normalized = rewardAssetAddress.toLowerCase()
|
|
509
|
+
return knownAddresses.has(normalized) ? normalized : 'other'
|
|
510
|
+
}
|
|
511
|
+
|
|
492
512
|
/**
|
|
493
513
|
* Calculate detailed rewards breakdown from vault and market allocations
|
|
494
514
|
* @param apiVault - Vault data from GraphQL API
|
|
515
|
+
* @param supportedAssets - Configured assets for reward categorization
|
|
516
|
+
* @param chainId - Chain ID for address lookup
|
|
495
517
|
* @returns Detailed rewards breakdown
|
|
496
518
|
*/
|
|
497
|
-
export function calculateRewardsBreakdown(
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
519
|
+
export function calculateRewardsBreakdown(
|
|
520
|
+
apiVault: any,
|
|
521
|
+
chainId: number,
|
|
522
|
+
marketAsset?: Asset,
|
|
523
|
+
): RewardsBreakdown {
|
|
524
|
+
const assets = marketAsset
|
|
525
|
+
? [...NATIVELY_SUPPORTED_ASSETS, marketAsset]
|
|
526
|
+
: NATIVELY_SUPPORTED_ASSETS
|
|
527
|
+
// Build set of known asset addresses on this chain
|
|
528
|
+
const knownAddresses = new Set<string>()
|
|
529
|
+
for (const token of assets) {
|
|
530
|
+
const addr = token.address[chainId as keyof typeof token.address]
|
|
531
|
+
if (addr && addr !== 'native') {
|
|
532
|
+
knownAddresses.add(addr.toLowerCase())
|
|
533
|
+
}
|
|
501
534
|
}
|
|
502
535
|
|
|
503
|
-
//
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
536
|
+
// Initialize rewards object with all known addresses + other
|
|
537
|
+
const rewardsByCategory: Record<string, number> = { other: 0 }
|
|
538
|
+
for (const addr of knownAddresses) {
|
|
539
|
+
rewardsByCategory[addr] = 0
|
|
540
|
+
}
|
|
507
541
|
|
|
508
542
|
// Calculate vault-level rewards
|
|
509
543
|
if (apiVault.state?.rewards && apiVault.state.rewards.length > 0) {
|
|
510
|
-
apiVault.state.rewards
|
|
544
|
+
for (const reward of apiVault.state.rewards) {
|
|
511
545
|
const rewardApr = reward.supplyApr || 0
|
|
512
|
-
const
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
if (category in rewardsByCategory) {
|
|
519
|
-
rewardsByCategory[category] += rewardApr
|
|
520
|
-
} else {
|
|
521
|
-
rewardsByCategory.other += rewardApr
|
|
522
|
-
}
|
|
523
|
-
})
|
|
546
|
+
const category = categorizeRewardAsset(
|
|
547
|
+
reward.asset?.address,
|
|
548
|
+
knownAddresses,
|
|
549
|
+
)
|
|
550
|
+
rewardsByCategory[category] += rewardApr
|
|
551
|
+
}
|
|
524
552
|
}
|
|
525
553
|
|
|
526
554
|
// Calculate market-level rewards (weighted by allocation)
|
|
@@ -532,7 +560,7 @@ export function calculateRewardsBreakdown(apiVault: any): RewardsBreakdown {
|
|
|
532
560
|
0,
|
|
533
561
|
)
|
|
534
562
|
|
|
535
|
-
apiVault.state.allocation
|
|
563
|
+
for (const allocation of apiVault.state.allocation) {
|
|
536
564
|
if (
|
|
537
565
|
allocation.market?.state?.rewards &&
|
|
538
566
|
allocation.market.state.rewards.length > 0
|
|
@@ -542,23 +570,17 @@ export function calculateRewardsBreakdown(apiVault: any): RewardsBreakdown {
|
|
|
542
570
|
? (allocation.supplyAssetsUsd || 0) / totalSupplyUsd
|
|
543
571
|
: 0
|
|
544
572
|
|
|
545
|
-
allocation.market.state.rewards
|
|
573
|
+
for (const reward of allocation.market.state.rewards) {
|
|
546
574
|
const rewardApr = reward.supplyApr || 0
|
|
547
575
|
const weightedRewardApr = rewardApr * weight
|
|
548
|
-
const
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
if (category in rewardsByCategory) {
|
|
555
|
-
rewardsByCategory[category] += weightedRewardApr
|
|
556
|
-
} else {
|
|
557
|
-
rewardsByCategory.other += weightedRewardApr
|
|
558
|
-
}
|
|
559
|
-
})
|
|
576
|
+
const category = categorizeRewardAsset(
|
|
577
|
+
reward.asset?.address,
|
|
578
|
+
knownAddresses,
|
|
579
|
+
)
|
|
580
|
+
rewardsByCategory[category] += weightedRewardApr
|
|
581
|
+
}
|
|
560
582
|
}
|
|
561
|
-
}
|
|
583
|
+
}
|
|
562
584
|
}
|
|
563
585
|
|
|
564
586
|
// Calculate total rewards APR
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
import type { BundlerClient, SmartAccount } from 'viem/account-abstraction'
|
|
13
13
|
import { createBundlerClient } from 'viem/account-abstraction'
|
|
14
14
|
|
|
15
|
-
import type {
|
|
15
|
+
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
16
16
|
import type { ChainConfig } from '@/types/chain.js'
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -22,7 +22,7 @@ import type { ChainConfig } from '@/types/chain.js'
|
|
|
22
22
|
*/
|
|
23
23
|
export class ChainManager {
|
|
24
24
|
/** Map of chain IDs to their corresponding public clients */
|
|
25
|
-
private publicClients: Map<
|
|
25
|
+
private publicClients: Map<SupportedChainId, PublicClient>
|
|
26
26
|
/** Configuration for each supported chain */
|
|
27
27
|
private chainConfigs: ChainConfig[]
|
|
28
28
|
|
|
@@ -41,7 +41,7 @@ export class ChainManager {
|
|
|
41
41
|
* @returns PublicClient instance for the specified chain
|
|
42
42
|
* @throws Error if no client is configured for the chain ID
|
|
43
43
|
*/
|
|
44
|
-
getPublicClient(chainId:
|
|
44
|
+
getPublicClient(chainId: SupportedChainId): PublicClient {
|
|
45
45
|
const client = this.publicClients.get(chainId)
|
|
46
46
|
if (!client) {
|
|
47
47
|
throw new Error(`No public client configured for chain ID: ${chainId}`)
|
|
@@ -49,6 +49,16 @@ export class ChainManager {
|
|
|
49
49
|
return client
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
/**
|
|
53
|
+
* Get public client for a specific chain, or undefined if not configured.
|
|
54
|
+
* Use this when the chain is optional (e.g. mainnet for ENS resolution).
|
|
55
|
+
* @param chainId - The chain ID to retrieve the public client for
|
|
56
|
+
* @returns PublicClient instance, or undefined if not configured
|
|
57
|
+
*/
|
|
58
|
+
tryGetPublicClient(chainId: SupportedChainId): PublicClient | undefined {
|
|
59
|
+
return this.publicClients.get(chainId)
|
|
60
|
+
}
|
|
61
|
+
|
|
52
62
|
/**
|
|
53
63
|
* Get bundler client for a specific chain
|
|
54
64
|
* @param chainId - The chain ID to retrieve the bundler client for
|
|
@@ -57,7 +67,7 @@ export class ChainManager {
|
|
|
57
67
|
* @throws Error if no bundler URL is configured for the chain ID
|
|
58
68
|
*/
|
|
59
69
|
getBundlerClient(
|
|
60
|
-
chainId:
|
|
70
|
+
chainId: SupportedChainId,
|
|
61
71
|
account: SmartAccount,
|
|
62
72
|
): BundlerClient | SmartAccountClient {
|
|
63
73
|
const chainConfig = this.getChainConfig(chainId)
|
|
@@ -94,9 +104,7 @@ export class ChainManager {
|
|
|
94
104
|
* @returns RPC URL as a string
|
|
95
105
|
* @throws Error if no chain config is found for the chain ID
|
|
96
106
|
*/
|
|
97
|
-
getRpcUrls(
|
|
98
|
-
chainId: (typeof SUPPORTED_CHAIN_IDS)[number],
|
|
99
|
-
): string[] | undefined {
|
|
107
|
+
getRpcUrls(chainId: SupportedChainId): string[] | undefined {
|
|
100
108
|
const chainConfig = this.getChainConfig(chainId)
|
|
101
109
|
return chainConfig.rpcUrls
|
|
102
110
|
}
|
|
@@ -107,9 +115,7 @@ export class ChainManager {
|
|
|
107
115
|
* @returns Bundler URL as a string or undefined if not configured
|
|
108
116
|
* @throws Error if no chain config is found for the chain ID
|
|
109
117
|
*/
|
|
110
|
-
getBundlerUrl(
|
|
111
|
-
chainId: (typeof SUPPORTED_CHAIN_IDS)[number],
|
|
112
|
-
): string | undefined {
|
|
118
|
+
getBundlerUrl(chainId: SupportedChainId): string | undefined {
|
|
113
119
|
const chainConfig = this.getChainConfig(chainId)
|
|
114
120
|
if (!chainConfig.bundler) {
|
|
115
121
|
throw new Error(`No bundler configured for chain ID: ${chainId}`)
|
|
@@ -122,7 +128,7 @@ export class ChainManager {
|
|
|
122
128
|
* @param chainId - The chain ID to retrieve information for
|
|
123
129
|
* @returns Chain object containing chain details
|
|
124
130
|
*/
|
|
125
|
-
getChain(chainId:
|
|
131
|
+
getChain(chainId: SupportedChainId): Chain {
|
|
126
132
|
return chainById[chainId]
|
|
127
133
|
}
|
|
128
134
|
|
|
@@ -140,7 +146,7 @@ export class ChainManager {
|
|
|
140
146
|
* @returns Transport configured with fallback RPC URLs or default http transport
|
|
141
147
|
* @throws Error if no chain config is found for the chain ID
|
|
142
148
|
*/
|
|
143
|
-
getTransportForChain(chainId:
|
|
149
|
+
getTransportForChain(chainId: SupportedChainId) {
|
|
144
150
|
const rpcUrls = this.getRpcUrls(chainId)
|
|
145
151
|
return rpcUrls?.length
|
|
146
152
|
? fallback(rpcUrls.map((rpcUrl) => http(rpcUrl)))
|
|
@@ -155,11 +161,8 @@ export class ChainManager {
|
|
|
155
161
|
*/
|
|
156
162
|
private createPublicClients(
|
|
157
163
|
chains: ChainConfig[],
|
|
158
|
-
): Map<
|
|
159
|
-
const clients = new Map<
|
|
160
|
-
(typeof SUPPORTED_CHAIN_IDS)[number],
|
|
161
|
-
PublicClient
|
|
162
|
-
>()
|
|
164
|
+
): Map<SupportedChainId, PublicClient> {
|
|
165
|
+
const clients = new Map<SupportedChainId, PublicClient>()
|
|
163
166
|
|
|
164
167
|
for (const chainConfig of chains) {
|
|
165
168
|
const chain = chainById[chainConfig.chainId]
|
|
@@ -187,9 +190,7 @@ export class ChainManager {
|
|
|
187
190
|
* @param chainId The chain ID to retrieve the chain config for
|
|
188
191
|
* @returns ChainConfig object containing chain details
|
|
189
192
|
*/
|
|
190
|
-
private getChainConfig(
|
|
191
|
-
chainId: (typeof SUPPORTED_CHAIN_IDS)[number],
|
|
192
|
-
): ChainConfig {
|
|
193
|
+
private getChainConfig(chainId: SupportedChainId): ChainConfig {
|
|
193
194
|
const chainConfig = this.chainConfigs.find((c) => c.chainId === chainId)
|
|
194
195
|
if (!chainConfig) {
|
|
195
196
|
throw new Error(`No chain config found for chain ID: ${chainId}`)
|
|
@@ -205,7 +206,7 @@ export class ChainManager {
|
|
|
205
206
|
* @returns Pimlico bundler client for the specified chain
|
|
206
207
|
*/
|
|
207
208
|
private getPimlicoBundlerClient(
|
|
208
|
-
chainId:
|
|
209
|
+
chainId: SupportedChainId,
|
|
209
210
|
account: SmartAccount,
|
|
210
211
|
sponsorshipPolicyId?: string,
|
|
211
212
|
) {
|
|
@@ -4,10 +4,7 @@ import type { BundlerClient, SmartAccount } from 'viem/account-abstraction'
|
|
|
4
4
|
import { unichain } from 'viem/chains'
|
|
5
5
|
import { type MockedFunction, vi } from 'vitest'
|
|
6
6
|
|
|
7
|
-
import type {
|
|
8
|
-
SUPPORTED_CHAIN_IDS,
|
|
9
|
-
SupportedChainId,
|
|
10
|
-
} from '@/constants/supportedChains.js'
|
|
7
|
+
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
11
8
|
|
|
12
9
|
export interface MockChainManagerConfig {
|
|
13
10
|
supportedChains: SupportedChainId[]
|
|
@@ -24,6 +21,9 @@ export class MockChainManager {
|
|
|
24
21
|
public getPublicClient: MockedFunction<
|
|
25
22
|
(chainId: SupportedChainId) => PublicClient
|
|
26
23
|
>
|
|
24
|
+
public tryGetPublicClient: MockedFunction<
|
|
25
|
+
(chainId: SupportedChainId) => PublicClient | undefined
|
|
26
|
+
>
|
|
27
27
|
public getBundlerClient: MockedFunction<
|
|
28
28
|
(chainId: SupportedChainId, account: SmartAccount) => BundlerClient
|
|
29
29
|
>
|
|
@@ -57,6 +57,11 @@ export class MockChainManager {
|
|
|
57
57
|
}
|
|
58
58
|
return client
|
|
59
59
|
})
|
|
60
|
+
this.tryGetPublicClient = vi
|
|
61
|
+
.fn()
|
|
62
|
+
.mockImplementation((chainId: SupportedChainId) => {
|
|
63
|
+
return this.publicClients.get(chainId)
|
|
64
|
+
})
|
|
60
65
|
this.getBundlerClient = vi
|
|
61
66
|
.fn()
|
|
62
67
|
.mockImplementation((chainId: SupportedChainId) => {
|
|
@@ -79,15 +84,15 @@ export class MockChainManager {
|
|
|
79
84
|
})
|
|
80
85
|
}
|
|
81
86
|
|
|
82
|
-
getChain(chainId:
|
|
87
|
+
getChain(chainId: SupportedChainId): Chain {
|
|
83
88
|
return chainById[chainId]
|
|
84
89
|
}
|
|
85
90
|
|
|
86
|
-
getRpcUrls(chainId:
|
|
91
|
+
getRpcUrls(chainId: SupportedChainId): string[] {
|
|
87
92
|
return this.getChain(chainId).rpcUrls.default.http as string[]
|
|
88
93
|
}
|
|
89
94
|
|
|
90
|
-
getTransportForChain(_chainId:
|
|
95
|
+
getTransportForChain(_chainId: SupportedChainId) {
|
|
91
96
|
// Mock implementation returns a simple http transport
|
|
92
97
|
// In tests, the actual transport behavior is typically mocked at a higher level
|
|
93
98
|
return {} as unknown
|
|
@@ -29,17 +29,15 @@ describe('TokenBalance', () => {
|
|
|
29
29
|
)
|
|
30
30
|
|
|
31
31
|
expect(balance).toEqual({
|
|
32
|
-
|
|
33
|
-
totalBalance:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
{
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
formattedBalance: '1',
|
|
40
|
-
tokenAddress: MockUSDCAsset.address[unichain.id]!,
|
|
32
|
+
asset: MockUSDCAsset,
|
|
33
|
+
totalBalance: 1,
|
|
34
|
+
totalBalanceRaw: 1000000n,
|
|
35
|
+
chains: {
|
|
36
|
+
[unichain.id]: {
|
|
37
|
+
balance: 1,
|
|
38
|
+
balanceRaw: 1000000n,
|
|
41
39
|
},
|
|
42
|
-
|
|
40
|
+
},
|
|
43
41
|
})
|
|
44
42
|
})
|
|
45
43
|
|
|
@@ -63,10 +61,10 @@ describe('TokenBalance', () => {
|
|
|
63
61
|
)
|
|
64
62
|
|
|
65
63
|
expect(balance).toEqual({
|
|
66
|
-
|
|
67
|
-
totalBalance:
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
asset: unsupportedAsset,
|
|
65
|
+
totalBalance: 0,
|
|
66
|
+
totalBalanceRaw: 0n,
|
|
67
|
+
chains: {},
|
|
70
68
|
})
|
|
71
69
|
})
|
|
72
70
|
})
|
|
@@ -76,17 +74,15 @@ describe('TokenBalance', () => {
|
|
|
76
74
|
const balance = await fetchETHBalance(chainManager, walletAddress)
|
|
77
75
|
|
|
78
76
|
expect(balance).toEqual({
|
|
79
|
-
|
|
80
|
-
totalBalance:
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
{
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
formattedBalance: '0.000000000001',
|
|
87
|
-
tokenAddress: ETH.address[unichain.id]!,
|
|
77
|
+
asset: ETH,
|
|
78
|
+
totalBalance: 0.000000000001,
|
|
79
|
+
totalBalanceRaw: 1000000n,
|
|
80
|
+
chains: {
|
|
81
|
+
[unichain.id]: {
|
|
82
|
+
balance: 0.000000000001,
|
|
83
|
+
balanceRaw: 1000000n,
|
|
88
84
|
},
|
|
89
|
-
|
|
85
|
+
},
|
|
90
86
|
})
|
|
91
87
|
})
|
|
92
88
|
})
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Address } from 'viem'
|
|
2
2
|
import { erc20Abi, formatEther, formatUnits } from 'viem'
|
|
3
3
|
|
|
4
|
+
import { ETH } from '@/constants/assets.js'
|
|
4
5
|
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
5
6
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
6
7
|
import type { Asset, TokenBalance } from '@/types/asset.js'
|
|
@@ -9,7 +10,7 @@ import type { Asset, TokenBalance } from '@/types/asset.js'
|
|
|
9
10
|
* Fetch ETH balance across all supported chains
|
|
10
11
|
* @param chainManager - The chain manager
|
|
11
12
|
* @param walletAddress - The wallet address
|
|
12
|
-
* @returns Promise resolving to
|
|
13
|
+
* @returns Promise resolving to ETH balance
|
|
13
14
|
*/
|
|
14
15
|
export async function fetchETHBalance(
|
|
15
16
|
chainManager: ChainManager,
|
|
@@ -18,26 +19,31 @@ export async function fetchETHBalance(
|
|
|
18
19
|
const supportedChains = chainManager.getSupportedChains()
|
|
19
20
|
const chainBalancePromises = supportedChains.map(async (chainId) => {
|
|
20
21
|
const publicClient = chainManager.getPublicClient(chainId)
|
|
21
|
-
const
|
|
22
|
+
const balanceRaw = await publicClient.getBalance({
|
|
22
23
|
address: walletAddress,
|
|
23
24
|
})
|
|
24
25
|
return {
|
|
25
26
|
chainId,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
formattedBalance: formatEther(balance),
|
|
27
|
+
balanceRaw,
|
|
28
|
+
balance: parseFloat(formatEther(balanceRaw)),
|
|
29
29
|
}
|
|
30
30
|
})
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
(total, {
|
|
31
|
+
const chainResults = await Promise.all(chainBalancePromises)
|
|
32
|
+
const totalBalanceRaw = chainResults.reduce(
|
|
33
|
+
(total, { balanceRaw }) => total + balanceRaw,
|
|
34
34
|
0n,
|
|
35
35
|
)
|
|
36
|
+
|
|
37
|
+
const chains: TokenBalance['chains'] = {}
|
|
38
|
+
for (const { chainId, balance, balanceRaw } of chainResults) {
|
|
39
|
+
chains[chainId] = { balance, balanceRaw }
|
|
40
|
+
}
|
|
41
|
+
|
|
36
42
|
return {
|
|
37
|
-
|
|
38
|
-
totalBalance,
|
|
39
|
-
|
|
40
|
-
|
|
43
|
+
asset: ETH,
|
|
44
|
+
totalBalance: parseFloat(formatEther(totalBalanceRaw)),
|
|
45
|
+
totalBalanceRaw,
|
|
46
|
+
chains,
|
|
41
47
|
}
|
|
42
48
|
}
|
|
43
49
|
|
|
@@ -55,7 +61,7 @@ export async function fetchERC20Balance(
|
|
|
55
61
|
)
|
|
56
62
|
|
|
57
63
|
const chainBalancePromises = chainsWithToken.map(async (chainId) => {
|
|
58
|
-
const
|
|
64
|
+
const balanceRaw = await fetchBalanceForChain(
|
|
59
65
|
asset,
|
|
60
66
|
chainId,
|
|
61
67
|
walletAddress,
|
|
@@ -63,35 +69,41 @@ export async function fetchERC20Balance(
|
|
|
63
69
|
)
|
|
64
70
|
return {
|
|
65
71
|
chainId,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
formattedBalance: formatUnits(balance, asset.metadata.decimals),
|
|
72
|
+
balanceRaw,
|
|
73
|
+
balance: parseFloat(formatUnits(balanceRaw, asset.metadata.decimals)),
|
|
69
74
|
}
|
|
70
75
|
})
|
|
71
76
|
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
(total, {
|
|
77
|
+
const chainResults = await Promise.all(chainBalancePromises)
|
|
78
|
+
const totalBalanceRaw = chainResults.reduce(
|
|
79
|
+
(total, { balanceRaw }) => total + balanceRaw,
|
|
75
80
|
0n,
|
|
76
81
|
)
|
|
77
82
|
|
|
83
|
+
const chains: TokenBalance['chains'] = {}
|
|
84
|
+
for (const { chainId, balance, balanceRaw } of chainResults) {
|
|
85
|
+
chains[chainId] = { balance, balanceRaw }
|
|
86
|
+
}
|
|
87
|
+
|
|
78
88
|
return {
|
|
79
|
-
|
|
80
|
-
totalBalance
|
|
81
|
-
|
|
82
|
-
|
|
89
|
+
asset,
|
|
90
|
+
totalBalance: parseFloat(
|
|
91
|
+
formatUnits(totalBalanceRaw, asset.metadata.decimals),
|
|
92
|
+
),
|
|
93
|
+
totalBalanceRaw,
|
|
94
|
+
chains,
|
|
83
95
|
}
|
|
84
96
|
}
|
|
85
97
|
|
|
86
98
|
/**
|
|
87
99
|
* Fetch balance for this asset on a specific chain
|
|
88
100
|
*/
|
|
89
|
-
async function
|
|
101
|
+
async function fetchBalanceForChain(
|
|
90
102
|
asset: Asset,
|
|
91
103
|
chainId: SupportedChainId,
|
|
92
104
|
walletAddress: Address,
|
|
93
105
|
chainManager: ChainManager,
|
|
94
|
-
): Promise<
|
|
106
|
+
): Promise<bigint> {
|
|
95
107
|
const tokenAddress = asset.address[chainId]
|
|
96
108
|
if (!tokenAddress) {
|
|
97
109
|
throw new Error(
|
|
@@ -103,19 +115,13 @@ async function fetchERC20BalanceForChain(
|
|
|
103
115
|
|
|
104
116
|
// Handle native ETH balance
|
|
105
117
|
if (asset.type === 'native' || tokenAddress === 'native') {
|
|
106
|
-
return {
|
|
107
|
-
balance: await publicClient.getBalance({
|
|
108
|
-
address: walletAddress,
|
|
109
|
-
}),
|
|
110
|
-
tokenAddress: 'native',
|
|
111
|
-
}
|
|
118
|
+
return publicClient.getBalance({ address: walletAddress })
|
|
112
119
|
}
|
|
113
120
|
|
|
114
|
-
|
|
121
|
+
return publicClient.readContract({
|
|
115
122
|
address: tokenAddress,
|
|
116
123
|
abi: erc20Abi,
|
|
117
124
|
functionName: 'balanceOf',
|
|
118
125
|
args: [walletAddress],
|
|
119
126
|
})
|
|
120
|
-
return { balance, tokenAddress }
|
|
121
127
|
}
|