@eth-optimism/actions-sdk 0.2.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 -4
- package/dist/__mocks__/MockAssets.js.map +1 -1
- package/dist/__tests__/actions.test.js +1 -5
- package/dist/__tests__/actions.test.js.map +1 -1
- package/dist/actions.d.ts +23 -9
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +68 -36
- package/dist/actions.js.map +1 -1
- package/dist/constants/assets.d.ts +217 -2
- package/dist/constants/assets.d.ts.map +1 -1
- package/dist/constants/assets.js +744 -6
- package/dist/constants/assets.js.map +1 -1
- package/dist/constants/contracts.d.ts +4 -0
- package/dist/constants/contracts.d.ts.map +1 -0
- package/dist/constants/contracts.js +3 -0
- package/dist/constants/contracts.js.map +1 -0
- 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 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- 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 -14
- package/dist/lend/core/LendProvider.d.ts.map +1 -1
- package/dist/lend/core/LendProvider.js +16 -31
- package/dist/lend/core/LendProvider.js.map +1 -1
- package/dist/lend/core/__tests__/LendProvider.test.js +2 -4
- package/dist/lend/core/__tests__/LendProvider.test.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 -41
- package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
- package/dist/lend/providers/morpho/api.d.ts +3 -3
- 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 -54
- 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 +50 -0
- package/dist/swap/__mocks__/MockSwapProvider.d.ts.map +1 -0
- package/dist/swap/__mocks__/MockSwapProvider.js +161 -0
- package/dist/swap/__mocks__/MockSwapProvider.js.map +1 -0
- package/dist/swap/core/SwapProvider.d.ts +145 -0
- package/dist/swap/core/SwapProvider.d.ts.map +1 -0
- package/dist/swap/core/SwapProvider.js +359 -0
- package/dist/swap/core/SwapProvider.js.map +1 -0
- package/dist/swap/core/__tests__/SwapProvider.test.d.ts +2 -0
- package/dist/swap/core/__tests__/SwapProvider.test.d.ts.map +1 -0
- package/dist/swap/core/__tests__/SwapProvider.test.js +435 -0
- package/dist/swap/core/__tests__/SwapProvider.test.js.map +1 -0
- 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 +9 -0
- package/dist/swap/index.d.ts.map +1 -0
- package/dist/swap/index.js +9 -0
- package/dist/swap/index.js.map +1 -0
- package/dist/swap/namespaces/ActionsSwapNamespace.d.ts +8 -0
- package/dist/swap/namespaces/ActionsSwapNamespace.d.ts.map +1 -0
- package/dist/swap/namespaces/ActionsSwapNamespace.js +8 -0
- package/dist/swap/namespaces/ActionsSwapNamespace.js.map +1 -0
- package/dist/swap/namespaces/BaseSwapNamespace.d.ts +73 -0
- package/dist/swap/namespaces/BaseSwapNamespace.d.ts.map +1 -0
- package/dist/swap/namespaces/BaseSwapNamespace.js +181 -0
- package/dist/swap/namespaces/BaseSwapNamespace.js.map +1 -0
- package/dist/swap/namespaces/WalletSwapNamespace.d.ts +34 -0
- package/dist/swap/namespaces/WalletSwapNamespace.d.ts.map +1 -0
- package/dist/swap/namespaces/WalletSwapNamespace.js +84 -0
- package/dist/swap/namespaces/WalletSwapNamespace.js.map +1 -0
- package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.d.ts +2 -0
- package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.d.ts.map +1 -0
- package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js +245 -0
- package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js.map +1 -0
- package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.d.ts +2 -0
- package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.d.ts.map +1 -0
- package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js +209 -0
- package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js.map +1 -0
- package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts +35 -0
- package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/UniswapSwapProvider.js +148 -0
- package/dist/swap/providers/uniswap/UniswapSwapProvider.js.map +1 -0
- package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.d.ts +2 -0
- package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js +258 -0
- package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js.map +1 -0
- package/dist/swap/providers/uniswap/__tests__/sdk.test.d.ts +2 -0
- package/dist/swap/providers/uniswap/__tests__/sdk.test.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/__tests__/sdk.test.js +312 -0
- package/dist/swap/providers/uniswap/__tests__/sdk.test.js.map +1 -0
- package/dist/swap/providers/uniswap/abis.d.ts +227 -0
- package/dist/swap/providers/uniswap/abis.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/abis.js +138 -0
- package/dist/swap/providers/uniswap/abis.js.map +1 -0
- package/dist/swap/providers/uniswap/addresses.d.ts +26 -0
- package/dist/swap/providers/uniswap/addresses.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/addresses.js +81 -0
- package/dist/swap/providers/uniswap/addresses.js.map +1 -0
- package/dist/swap/providers/uniswap/encoding.d.ts +77 -0
- package/dist/swap/providers/uniswap/encoding.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/encoding.js +233 -0
- package/dist/swap/providers/uniswap/encoding.js.map +1 -0
- 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 +21 -0
- package/dist/swap/providers/uniswap/types.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/types.js +2 -0
- package/dist/swap/providers/uniswap/types.js.map +1 -0
- 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 +60 -11
- 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/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/lend/base.d.ts +9 -19
- 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 +338 -0
- package/dist/types/swap/base.d.ts.map +1 -0
- package/dist/types/swap/base.js +4 -0
- package/dist/types/swap/base.js.map +1 -0
- package/dist/types/swap/index.d.ts +2 -0
- package/dist/types/swap/index.d.ts.map +1 -0
- package/dist/types/swap/index.js +2 -0
- package/dist/types/swap/index.js.map +1 -0
- package/dist/types/transaction.d.ts +14 -0
- package/dist/types/transaction.d.ts.map +1 -0
- package/dist/types/transaction.js +2 -0
- package/dist/types/transaction.js.map +1 -0
- package/dist/utils/approve.d.ts +82 -0
- package/dist/utils/approve.d.ts.map +1 -0
- package/dist/utils/approve.js +134 -0
- 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/approve.test.js +203 -0
- package/dist/utils/approve.test.js.map +1 -0
- package/dist/utils/assets.d.ts +10 -5
- package/dist/utils/assets.d.ts.map +1 -1
- package/dist/utils/assets.js +14 -11
- package/dist/utils/assets.js.map +1 -1
- package/dist/utils/assets.test.js +13 -1
- package/dist/utils/assets.test.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/utils/validation.d.ts +12 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +44 -0
- package/dist/utils/validation.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 -10
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js +2 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
- package/dist/wallet/core/providers/hosted/types/index.d.ts +6 -7
- package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +5 -6
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js +5 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
- package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js +2 -2
- package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js.map +1 -1
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts +12 -12
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/abstract/Wallet.js +9 -4
- 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 +5 -7
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js +6 -5
- 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 +4 -6
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -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 +8 -9
- 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 +3 -6
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +4 -2
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +4 -6
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +4 -3
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +3 -6
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +6 -6
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +7 -2
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js +1 -0
- package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +5 -6
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +6 -2
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +1 -0
- package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +5 -8
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +6 -4
- 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 +7 -6
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +5 -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 -6
- 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 -6
- 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 +4 -3
- package/src/__mocks__/MockAssets.ts +54 -4
- package/src/__tests__/actions.test.ts +1 -5
- package/src/actions.ts +106 -71
- package/src/constants/assets.ts +792 -5
- package/src/constants/contracts.ts +5 -0
- package/src/constants/providers.ts +5 -0
- package/src/constants/supportedChains.ts +22 -2
- package/src/index.ts +76 -6
- package/src/lend/__mocks__/MockLendProvider.ts +8 -3
- package/src/lend/core/LendProvider.ts +28 -41
- package/src/lend/core/__tests__/LendProvider.test.ts +2 -5
- 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 -42
- package/src/lend/providers/morpho/api.ts +7 -4
- package/src/lend/providers/morpho/contracts.ts +62 -13
- package/src/lend/providers/morpho/sdk.ts +85 -54
- 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 +251 -0
- package/src/swap/core/SwapProvider.ts +577 -0
- package/src/swap/core/__tests__/SwapProvider.test.ts +620 -0
- package/src/swap/core/markets.ts +104 -0
- package/src/swap/index.ts +19 -0
- package/src/swap/namespaces/ActionsSwapNamespace.ts +7 -0
- package/src/swap/namespaces/BaseSwapNamespace.ts +258 -0
- package/src/swap/namespaces/WalletSwapNamespace.ts +121 -0
- package/src/swap/namespaces/__tests__/BaseSwapNamespace.spec.ts +365 -0
- package/src/swap/namespaces/__tests__/WalletSwapNamespace.spec.ts +257 -0
- package/src/swap/providers/uniswap/UniswapSwapProvider.ts +217 -0
- package/src/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.ts +299 -0
- package/src/swap/providers/uniswap/__tests__/sdk.test.ts +369 -0
- package/src/swap/providers/uniswap/abis.ts +144 -0
- package/src/swap/providers/uniswap/addresses.ts +110 -0
- package/src/swap/providers/uniswap/encoding.ts +406 -0
- package/src/swap/providers/uniswap/markets.ts +84 -0
- package/src/swap/providers/uniswap/types.ts +25 -0
- 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 +68 -12
- package/src/types/asset.ts +12 -9
- package/src/types/chain.ts +2 -2
- package/src/types/index.ts +2 -0
- package/src/types/lend/base.ts +10 -20
- package/src/types/lend/contracts.ts +5 -1
- package/src/types/providers.ts +22 -0
- package/src/types/swap/base.ts +372 -0
- package/src/types/swap/index.ts +1 -0
- package/src/types/transaction.ts +14 -0
- package/src/utils/approve.test.ts +258 -0
- package/src/utils/approve.ts +197 -0
- package/src/utils/assets.test.ts +16 -1
- package/src/utils/assets.ts +27 -10
- package/src/utils/validateAddresses.test.ts +439 -0
- package/src/utils/validateAddresses.ts +153 -0
- package/src/utils/validation.ts +76 -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 +6 -10
- package/src/wallet/core/providers/hosted/types/index.ts +9 -7
- package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +10 -10
- package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts +2 -0
- package/src/wallet/core/wallets/abstract/Wallet.ts +23 -14
- 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 +11 -14
- package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +0 -1
- package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +11 -7
- package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +16 -8
- package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +4 -4
- package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +6 -7
- package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +8 -11
- package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +7 -11
- package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +11 -7
- package/src/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.ts +1 -0
- package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +10 -7
- package/src/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +1 -0
- package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +10 -9
- package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +38 -13
- package/src/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.ts +6 -6
- package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +13 -11
- package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +2 -6
- package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +11 -11
- package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +11 -11
- package/dist/supported/tokens.d.ts +0 -25
- package/dist/supported/tokens.d.ts.map +0 -1
- package/dist/supported/tokens.js +0 -37
- package/dist/supported/tokens.js.map +0 -1
- package/src/supported/tokens.ts +0 -52
|
@@ -1,6 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
base,
|
|
3
|
+
baseSepolia,
|
|
4
|
+
ink,
|
|
5
|
+
mainnet,
|
|
6
|
+
mode,
|
|
7
|
+
optimism,
|
|
8
|
+
soneium,
|
|
9
|
+
unichain,
|
|
10
|
+
worldchain,
|
|
11
|
+
} from 'viem/chains'
|
|
2
12
|
|
|
3
|
-
import type {
|
|
13
|
+
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
14
|
+
import type {
|
|
15
|
+
MorphoContracts,
|
|
16
|
+
MorphoContractsRegistry,
|
|
17
|
+
} from '@/types/lend/contracts.js'
|
|
4
18
|
|
|
5
19
|
/**
|
|
6
20
|
* Morpho Blue core contract - same address on all chains via CREATE2
|
|
@@ -8,10 +22,44 @@ import type { MorphoContractsRegistry } from '@/types/lend/contracts.js'
|
|
|
8
22
|
const MORPHO_BLUE = '0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb' as const
|
|
9
23
|
|
|
10
24
|
/**
|
|
11
|
-
*
|
|
12
|
-
* Mainnet
|
|
25
|
+
* Morpho Blue contract addresses per chain.
|
|
26
|
+
* Mainnet chains use the SDK for richer data (rewards, allocations) when available.
|
|
27
|
+
* These contracts serve as the on-chain fallback and as the canonical deployment registry.
|
|
28
|
+
* @see https://github.com/morpho-org/sdks
|
|
13
29
|
*/
|
|
14
30
|
export const MORPHO_CONTRACTS: MorphoContractsRegistry = {
|
|
31
|
+
[mainnet.id]: {
|
|
32
|
+
morphoBlue: MORPHO_BLUE,
|
|
33
|
+
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
34
|
+
},
|
|
35
|
+
[optimism.id]: {
|
|
36
|
+
morphoBlue: MORPHO_BLUE,
|
|
37
|
+
irm: '0x8cD70A8F399428456b29546BC5dBe10ab6a06ef6',
|
|
38
|
+
},
|
|
39
|
+
[base.id]: {
|
|
40
|
+
morphoBlue: MORPHO_BLUE,
|
|
41
|
+
irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
|
|
42
|
+
},
|
|
43
|
+
[unichain.id]: {
|
|
44
|
+
morphoBlue: MORPHO_BLUE,
|
|
45
|
+
irm: '0x9a6061d51743B31D2c3Be75D83781Fa423f53F0E',
|
|
46
|
+
},
|
|
47
|
+
[worldchain.id]: {
|
|
48
|
+
morphoBlue: MORPHO_BLUE,
|
|
49
|
+
irm: '0x34E99D604751a72cF8d0CFDf87069292d82De472',
|
|
50
|
+
},
|
|
51
|
+
[ink.id]: {
|
|
52
|
+
morphoBlue: MORPHO_BLUE,
|
|
53
|
+
irm: '0x9515407b1512F53388ffE699524100e7270Ee57B',
|
|
54
|
+
},
|
|
55
|
+
[soneium.id]: {
|
|
56
|
+
morphoBlue: MORPHO_BLUE,
|
|
57
|
+
irm: '0x68F9b666b984527A7c145Db4103Cc6d3171C797F',
|
|
58
|
+
},
|
|
59
|
+
[mode.id]: {
|
|
60
|
+
morphoBlue: MORPHO_BLUE,
|
|
61
|
+
irm: '0xE3d46Ae190Cb39ccA3655E966DcEF96b4eAe1d1c',
|
|
62
|
+
},
|
|
15
63
|
[baseSepolia.id]: {
|
|
16
64
|
morphoBlue: MORPHO_BLUE,
|
|
17
65
|
irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
|
|
@@ -20,18 +68,19 @@ export const MORPHO_CONTRACTS: MorphoContractsRegistry = {
|
|
|
20
68
|
|
|
21
69
|
/**
|
|
22
70
|
* Get Morpho contracts for a chain
|
|
23
|
-
* @param chainId - Chain ID
|
|
24
|
-
* @returns Morpho contracts if supported, undefined otherwise
|
|
25
71
|
*/
|
|
26
|
-
export function getMorphoContracts(
|
|
27
|
-
|
|
72
|
+
export function getMorphoContracts(
|
|
73
|
+
chainId: number,
|
|
74
|
+
): MorphoContracts | undefined {
|
|
75
|
+
return MORPHO_CONTRACTS[chainId as SupportedChainId]
|
|
28
76
|
}
|
|
29
77
|
|
|
30
78
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
79
|
+
* Get all chain IDs where Morpho contracts are deployed.
|
|
80
|
+
* Returns chains present in the local contracts registry.
|
|
81
|
+
* Filtering against ACTIONS_SUPPORTED_CHAIN_IDS and developer-configured chains
|
|
82
|
+
* is handled by the LendProvider base class.
|
|
34
83
|
*/
|
|
35
|
-
export function
|
|
36
|
-
return
|
|
84
|
+
export function getSupportedChainIds(): number[] {
|
|
85
|
+
return Object.keys(MORPHO_CONTRACTS).map(Number)
|
|
37
86
|
}
|
|
@@ -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,9 +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
|
|
364
|
+
return buildEmptyRewards(params.marketId.chainId, marketConfig.asset)
|
|
349
365
|
})
|
|
350
366
|
|
|
351
367
|
const apyBreakdown = calculateApyBreakdown(vault, rewardsBreakdown)
|
|
@@ -372,7 +388,7 @@ export async function getVault(params: GetVaultParams): Promise<LendMarket> {
|
|
|
372
388
|
}
|
|
373
389
|
}
|
|
374
390
|
|
|
375
|
-
// Fallback to direct on-chain queries
|
|
391
|
+
// Fallback to direct on-chain queries if SDK unavailable or fails
|
|
376
392
|
const contracts = getMorphoContracts(params.marketId.chainId)
|
|
377
393
|
if (contracts) {
|
|
378
394
|
return fetchVaultDataOnChain(
|
|
@@ -480,38 +496,59 @@ export function calculateApyBreakdown(
|
|
|
480
496
|
}
|
|
481
497
|
}
|
|
482
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
|
+
|
|
483
512
|
/**
|
|
484
513
|
* Calculate detailed rewards breakdown from vault and market allocations
|
|
485
514
|
* @param apiVault - Vault data from GraphQL API
|
|
515
|
+
* @param supportedAssets - Configured assets for reward categorization
|
|
516
|
+
* @param chainId - Chain ID for address lookup
|
|
486
517
|
* @returns Detailed rewards breakdown
|
|
487
518
|
*/
|
|
488
|
-
export function calculateRewardsBreakdown(
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
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
|
+
}
|
|
492
534
|
}
|
|
493
535
|
|
|
494
|
-
//
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
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
|
+
}
|
|
498
541
|
|
|
499
542
|
// Calculate vault-level rewards
|
|
500
543
|
if (apiVault.state?.rewards && apiVault.state.rewards.length > 0) {
|
|
501
|
-
apiVault.state.rewards
|
|
544
|
+
for (const reward of apiVault.state.rewards) {
|
|
502
545
|
const rewardApr = reward.supplyApr || 0
|
|
503
|
-
const
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
if (category in rewardsByCategory) {
|
|
510
|
-
rewardsByCategory[category] += rewardApr
|
|
511
|
-
} else {
|
|
512
|
-
rewardsByCategory.other += rewardApr
|
|
513
|
-
}
|
|
514
|
-
})
|
|
546
|
+
const category = categorizeRewardAsset(
|
|
547
|
+
reward.asset?.address,
|
|
548
|
+
knownAddresses,
|
|
549
|
+
)
|
|
550
|
+
rewardsByCategory[category] += rewardApr
|
|
551
|
+
}
|
|
515
552
|
}
|
|
516
553
|
|
|
517
554
|
// Calculate market-level rewards (weighted by allocation)
|
|
@@ -523,7 +560,7 @@ export function calculateRewardsBreakdown(apiVault: any): RewardsBreakdown {
|
|
|
523
560
|
0,
|
|
524
561
|
)
|
|
525
562
|
|
|
526
|
-
apiVault.state.allocation
|
|
563
|
+
for (const allocation of apiVault.state.allocation) {
|
|
527
564
|
if (
|
|
528
565
|
allocation.market?.state?.rewards &&
|
|
529
566
|
allocation.market.state.rewards.length > 0
|
|
@@ -533,23 +570,17 @@ export function calculateRewardsBreakdown(apiVault: any): RewardsBreakdown {
|
|
|
533
570
|
? (allocation.supplyAssetsUsd || 0) / totalSupplyUsd
|
|
534
571
|
: 0
|
|
535
572
|
|
|
536
|
-
allocation.market.state.rewards
|
|
573
|
+
for (const reward of allocation.market.state.rewards) {
|
|
537
574
|
const rewardApr = reward.supplyApr || 0
|
|
538
575
|
const weightedRewardApr = rewardApr * weight
|
|
539
|
-
const
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
if (category in rewardsByCategory) {
|
|
546
|
-
rewardsByCategory[category] += weightedRewardApr
|
|
547
|
-
} else {
|
|
548
|
-
rewardsByCategory.other += weightedRewardApr
|
|
549
|
-
}
|
|
550
|
-
})
|
|
576
|
+
const category = categorizeRewardAsset(
|
|
577
|
+
reward.asset?.address,
|
|
578
|
+
knownAddresses,
|
|
579
|
+
)
|
|
580
|
+
rewardsByCategory[category] += weightedRewardApr
|
|
581
|
+
}
|
|
551
582
|
}
|
|
552
|
-
}
|
|
583
|
+
}
|
|
553
584
|
}
|
|
554
585
|
|
|
555
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}`)
|
|
@@ -57,7 +57,7 @@ export class ChainManager {
|
|
|
57
57
|
* @throws Error if no bundler URL is configured for the chain ID
|
|
58
58
|
*/
|
|
59
59
|
getBundlerClient(
|
|
60
|
-
chainId:
|
|
60
|
+
chainId: SupportedChainId,
|
|
61
61
|
account: SmartAccount,
|
|
62
62
|
): BundlerClient | SmartAccountClient {
|
|
63
63
|
const chainConfig = this.getChainConfig(chainId)
|
|
@@ -94,9 +94,7 @@ export class ChainManager {
|
|
|
94
94
|
* @returns RPC URL as a string
|
|
95
95
|
* @throws Error if no chain config is found for the chain ID
|
|
96
96
|
*/
|
|
97
|
-
getRpcUrls(
|
|
98
|
-
chainId: (typeof SUPPORTED_CHAIN_IDS)[number],
|
|
99
|
-
): string[] | undefined {
|
|
97
|
+
getRpcUrls(chainId: SupportedChainId): string[] | undefined {
|
|
100
98
|
const chainConfig = this.getChainConfig(chainId)
|
|
101
99
|
return chainConfig.rpcUrls
|
|
102
100
|
}
|
|
@@ -107,9 +105,7 @@ export class ChainManager {
|
|
|
107
105
|
* @returns Bundler URL as a string or undefined if not configured
|
|
108
106
|
* @throws Error if no chain config is found for the chain ID
|
|
109
107
|
*/
|
|
110
|
-
getBundlerUrl(
|
|
111
|
-
chainId: (typeof SUPPORTED_CHAIN_IDS)[number],
|
|
112
|
-
): string | undefined {
|
|
108
|
+
getBundlerUrl(chainId: SupportedChainId): string | undefined {
|
|
113
109
|
const chainConfig = this.getChainConfig(chainId)
|
|
114
110
|
if (!chainConfig.bundler) {
|
|
115
111
|
throw new Error(`No bundler configured for chain ID: ${chainId}`)
|
|
@@ -122,7 +118,7 @@ export class ChainManager {
|
|
|
122
118
|
* @param chainId - The chain ID to retrieve information for
|
|
123
119
|
* @returns Chain object containing chain details
|
|
124
120
|
*/
|
|
125
|
-
getChain(chainId:
|
|
121
|
+
getChain(chainId: SupportedChainId): Chain {
|
|
126
122
|
return chainById[chainId]
|
|
127
123
|
}
|
|
128
124
|
|
|
@@ -140,7 +136,7 @@ export class ChainManager {
|
|
|
140
136
|
* @returns Transport configured with fallback RPC URLs or default http transport
|
|
141
137
|
* @throws Error if no chain config is found for the chain ID
|
|
142
138
|
*/
|
|
143
|
-
getTransportForChain(chainId:
|
|
139
|
+
getTransportForChain(chainId: SupportedChainId) {
|
|
144
140
|
const rpcUrls = this.getRpcUrls(chainId)
|
|
145
141
|
return rpcUrls?.length
|
|
146
142
|
? fallback(rpcUrls.map((rpcUrl) => http(rpcUrl)))
|
|
@@ -155,11 +151,8 @@ export class ChainManager {
|
|
|
155
151
|
*/
|
|
156
152
|
private createPublicClients(
|
|
157
153
|
chains: ChainConfig[],
|
|
158
|
-
): Map<
|
|
159
|
-
const clients = new Map<
|
|
160
|
-
(typeof SUPPORTED_CHAIN_IDS)[number],
|
|
161
|
-
PublicClient
|
|
162
|
-
>()
|
|
154
|
+
): Map<SupportedChainId, PublicClient> {
|
|
155
|
+
const clients = new Map<SupportedChainId, PublicClient>()
|
|
163
156
|
|
|
164
157
|
for (const chainConfig of chains) {
|
|
165
158
|
const chain = chainById[chainConfig.chainId]
|
|
@@ -187,9 +180,7 @@ export class ChainManager {
|
|
|
187
180
|
* @param chainId The chain ID to retrieve the chain config for
|
|
188
181
|
* @returns ChainConfig object containing chain details
|
|
189
182
|
*/
|
|
190
|
-
private getChainConfig(
|
|
191
|
-
chainId: (typeof SUPPORTED_CHAIN_IDS)[number],
|
|
192
|
-
): ChainConfig {
|
|
183
|
+
private getChainConfig(chainId: SupportedChainId): ChainConfig {
|
|
193
184
|
const chainConfig = this.chainConfigs.find((c) => c.chainId === chainId)
|
|
194
185
|
if (!chainConfig) {
|
|
195
186
|
throw new Error(`No chain config found for chain ID: ${chainId}`)
|
|
@@ -205,7 +196,7 @@ export class ChainManager {
|
|
|
205
196
|
* @returns Pimlico bundler client for the specified chain
|
|
206
197
|
*/
|
|
207
198
|
private getPimlicoBundlerClient(
|
|
208
|
-
chainId:
|
|
199
|
+
chainId: SupportedChainId,
|
|
209
200
|
account: SmartAccount,
|
|
210
201
|
sponsorshipPolicyId?: string,
|
|
211
202
|
) {
|
|
@@ -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[]
|
|
@@ -79,15 +76,15 @@ export class MockChainManager {
|
|
|
79
76
|
})
|
|
80
77
|
}
|
|
81
78
|
|
|
82
|
-
getChain(chainId:
|
|
79
|
+
getChain(chainId: SupportedChainId): Chain {
|
|
83
80
|
return chainById[chainId]
|
|
84
81
|
}
|
|
85
82
|
|
|
86
|
-
getRpcUrls(chainId:
|
|
83
|
+
getRpcUrls(chainId: SupportedChainId): string[] {
|
|
87
84
|
return this.getChain(chainId).rpcUrls.default.http as string[]
|
|
88
85
|
}
|
|
89
86
|
|
|
90
|
-
getTransportForChain(_chainId:
|
|
87
|
+
getTransportForChain(_chainId: SupportedChainId) {
|
|
91
88
|
// Mock implementation returns a simple http transport
|
|
92
89
|
// In tests, the actual transport behavior is typically mocked at a higher level
|
|
93
90
|
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
|
}
|