@eth-optimism/actions-sdk 0.0.4 → 0.2.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/LICENSE +1 -1
- package/dist/__mocks__/MockAssets.d.ts.map +1 -0
- package/dist/__mocks__/MockAssets.js.map +1 -0
- package/dist/__mocks__/MockPrivyClient.d.ts.map +1 -0
- package/dist/__mocks__/MockPrivyClient.js.map +1 -0
- package/dist/__mocks__/utils.d.ts.map +1 -0
- package/dist/__mocks__/utils.js.map +1 -0
- package/dist/__tests__/actions.test.d.ts.map +1 -0
- package/dist/{actions.test.js → __tests__/actions.test.js} +35 -85
- package/dist/__tests__/actions.test.js.map +1 -0
- package/dist/actions.d.ts +19 -7
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +49 -19
- package/dist/actions.js.map +1 -1
- package/dist/constants/assets.d.ts +19 -0
- package/dist/constants/assets.d.ts.map +1 -1
- package/dist/constants/assets.js +84 -6
- package/dist/constants/assets.js.map +1 -1
- package/dist/constants/supportedChains.d.ts +1 -1
- package/dist/constants/supportedChains.d.ts.map +1 -1
- package/dist/constants/supportedChains.js +7 -3
- package/dist/constants/supportedChains.js.map +1 -1
- package/dist/core/asset/__mocks__/mockAsset.js +1 -1
- package/dist/core/asset/__mocks__/mockAsset.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/{test → lend/__mocks__}/MockLendProvider.d.ts +9 -7
- package/dist/lend/__mocks__/MockLendProvider.d.ts.map +1 -0
- package/dist/{test → lend/__mocks__}/MockLendProvider.js +20 -21
- package/dist/lend/__mocks__/MockLendProvider.js.map +1 -0
- package/dist/{test → lend/__mocks__}/MockMarkets.d.ts +1 -1
- package/dist/lend/__mocks__/MockMarkets.d.ts.map +1 -0
- package/dist/{test → lend/__mocks__}/MockMarkets.js +1 -1
- package/dist/lend/__mocks__/MockMarkets.js.map +1 -0
- package/dist/lend/__mocks__/mockLendTransaction.d.ts +3 -12
- package/dist/lend/__mocks__/mockLendTransaction.d.ts.map +1 -1
- package/dist/lend/__mocks__/mockLendTransaction.js +3 -19
- package/dist/lend/__mocks__/mockLendTransaction.js.map +1 -1
- package/dist/lend/core/LendProvider.d.ts +16 -3
- package/dist/lend/core/LendProvider.d.ts.map +1 -1
- package/dist/lend/core/LendProvider.js +23 -2
- package/dist/lend/core/LendProvider.js.map +1 -1
- package/dist/lend/core/__tests__/LendProvider.test.js +20 -50
- package/dist/lend/core/__tests__/LendProvider.test.js.map +1 -1
- package/dist/lend/index.d.ts +1 -0
- package/dist/lend/index.d.ts.map +1 -1
- package/dist/lend/index.js +1 -0
- package/dist/lend/index.js.map +1 -1
- package/dist/lend/namespaces/ActionsLendNamespace.d.ts +2 -9
- package/dist/lend/namespaces/ActionsLendNamespace.d.ts.map +1 -1
- package/dist/lend/namespaces/ActionsLendNamespace.js +2 -11
- package/dist/lend/namespaces/ActionsLendNamespace.js.map +1 -1
- package/dist/lend/namespaces/BaseLendNamespace.d.ts +47 -0
- package/dist/lend/namespaces/BaseLendNamespace.d.ts.map +1 -0
- package/dist/lend/namespaces/BaseLendNamespace.js +58 -0
- package/dist/lend/namespaces/BaseLendNamespace.js.map +1 -0
- package/dist/lend/namespaces/WalletLendNamespace.d.ts +8 -9
- package/dist/lend/namespaces/WalletLendNamespace.d.ts.map +1 -1
- package/dist/lend/namespaces/WalletLendNamespace.js +24 -31
- package/dist/lend/namespaces/WalletLendNamespace.js.map +1 -1
- package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js +25 -17
- package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js.map +1 -1
- package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.d.ts +2 -0
- package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.d.ts.map +1 -0
- package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js +110 -0
- package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js.map +1 -0
- package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js +37 -21
- package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js.map +1 -1
- package/dist/lend/providers/aave/AaveLendProvider.d.ts +74 -0
- package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -0
- package/dist/lend/providers/aave/AaveLendProvider.js +290 -0
- package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -0
- package/dist/lend/providers/aave/__mocks__/mockReserve.d.ts +11 -0
- package/dist/lend/providers/aave/__mocks__/mockReserve.d.ts.map +1 -0
- package/dist/lend/providers/aave/__mocks__/mockReserve.js +80 -0
- package/dist/lend/providers/aave/__mocks__/mockReserve.js.map +1 -0
- package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.d.ts +2 -0
- package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.d.ts.map +1 -0
- package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js +315 -0
- package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js.map +1 -0
- package/dist/lend/providers/aave/abis/pool.d.ts +153 -0
- package/dist/lend/providers/aave/abis/pool.d.ts.map +1 -0
- package/dist/lend/providers/aave/abis/pool.js +79 -0
- package/dist/lend/providers/aave/abis/pool.js.map +1 -0
- package/dist/lend/providers/aave/addresses.d.ts +57 -0
- package/dist/lend/providers/aave/addresses.d.ts.map +1 -0
- package/dist/lend/providers/aave/addresses.js +83 -0
- package/dist/lend/providers/aave/addresses.js.map +1 -0
- package/dist/lend/providers/aave/sdk.d.ts +57 -0
- package/dist/lend/providers/aave/sdk.d.ts.map +1 -0
- package/dist/lend/providers/aave/sdk.js +201 -0
- package/dist/lend/providers/aave/sdk.js.map +1 -0
- package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +4 -4
- package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
- package/dist/lend/providers/morpho/MorphoLendProvider.js +13 -28
- package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
- package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js +6 -57
- package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js.map +1 -1
- package/dist/lend/providers/morpho/__tests__/api.test.js +248 -54
- package/dist/lend/providers/morpho/__tests__/api.test.js.map +1 -1
- package/dist/lend/providers/morpho/__tests__/sdk.test.js +1 -0
- package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
- package/dist/lend/providers/morpho/contracts.d.ts +19 -0
- package/dist/lend/providers/morpho/contracts.d.ts.map +1 -0
- package/dist/lend/providers/morpho/contracts.js +32 -0
- package/dist/lend/providers/morpho/contracts.js.map +1 -0
- package/dist/lend/providers/morpho/sdk.d.ts +4 -3
- package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
- package/dist/lend/providers/morpho/sdk.js +168 -71
- package/dist/lend/providers/morpho/sdk.js.map +1 -1
- package/dist/services/ChainManager.d.ts +1 -1
- package/dist/{test → services/__mocks__}/MockChainManager.d.ts +1 -1
- package/dist/services/__mocks__/MockChainManager.d.ts.map +1 -0
- package/dist/services/__mocks__/MockChainManager.js.map +1 -0
- package/dist/services/tokenBalance.d.ts.map +1 -1
- package/dist/services/tokenBalance.js +4 -5
- package/dist/services/tokenBalance.js.map +1 -1
- package/dist/services/tokenBalance.spec.js +2 -2
- package/dist/services/tokenBalance.spec.js.map +1 -1
- package/dist/supported/tokens.d.ts +4 -4
- package/dist/supported/tokens.d.ts.map +1 -1
- package/dist/supported/tokens.js +5 -56
- package/dist/supported/tokens.js.map +1 -1
- package/dist/types/actions.d.ts +26 -2
- package/dist/types/actions.d.ts.map +1 -1
- package/dist/types/asset.d.ts +3 -3
- package/dist/types/asset.d.ts.map +1 -1
- package/dist/types/lend/base.d.ts +10 -28
- package/dist/types/lend/base.d.ts.map +1 -1
- package/dist/types/lend/contracts.d.ts +17 -0
- package/dist/types/lend/contracts.d.ts.map +1 -0
- package/dist/types/lend/contracts.js +2 -0
- package/dist/types/lend/contracts.js.map +1 -0
- package/dist/types/lend/index.d.ts +1 -0
- package/dist/types/lend/index.d.ts.map +1 -1
- package/dist/types/lend/index.js +1 -0
- package/dist/types/lend/index.js.map +1 -1
- package/dist/utils/assets.d.ts +7 -1
- package/dist/utils/assets.d.ts.map +1 -1
- package/dist/utils/assets.js +12 -1
- package/dist/utils/assets.js.map +1 -1
- package/dist/utils/assets.test.js +1 -1
- package/dist/utils/assets.test.js.map +1 -1
- package/dist/utils/constants.d.ts +5 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +5 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
- package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
- package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +13 -13
- package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
- package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js +12 -12
- package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js.map +1 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +12 -3
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js +3 -2
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
- package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js +2 -2
- package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js.map +1 -1
- package/dist/wallet/core/providers/hosted/types/index.d.ts +8 -2
- package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +14 -6
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js +10 -6
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
- package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js +39 -16
- package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js.map +1 -1
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts +19 -7
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/abstract/Wallet.js +9 -7
- package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
- package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js +2 -2
- package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js.map +1 -1
- package/dist/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.js +2 -2
- package/dist/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.js.map +1 -1
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +9 -3
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js +4 -4
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
- package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js +4 -4
- package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.js +1 -1
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.js.map +1 -1
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.js +1 -1
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +10 -3
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +5 -3
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +7 -6
- package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +5 -4
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +2 -2
- package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +9 -2
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +6 -3
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +5 -4
- package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +10 -3
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +5 -4
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +3 -3
- package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +2 -2
- package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +8 -2
- 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/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js +2 -2
- package/dist/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +6 -2
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +3 -3
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.js +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.js.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js +22 -7
- package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +6 -2
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -3
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.js +1 -1
- package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.js.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +8 -4
- package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +6 -2
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +3 -3
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +7 -4
- package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +6 -6
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
- package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js +1 -1
- package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +6 -2
- 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 +6 -0
- 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/dynamic/__tests__/DynamicWallet.spec.js +2 -2
- package/dist/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.js +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +6 -2
- 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/privy/__tests__/PrivyWallet.spec.js +2 -2
- package/dist/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +1 -1
- package/dist/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +6 -2
- 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/dist/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js +2 -2
- package/dist/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js +1 -1
- package/dist/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js.map +1 -1
- package/package.json +4 -1
- package/src/{test → __mocks__}/MockPrivyClient.ts +1 -1
- package/src/{actions.test.ts → __tests__/actions.test.ts} +34 -95
- package/src/actions.ts +82 -26
- package/src/constants/assets.ts +92 -8
- package/src/constants/supportedChains.ts +10 -2
- package/src/core/asset/__mocks__/mockAsset.ts +1 -1
- package/src/index.ts +2 -3
- package/src/{test → lend/__mocks__}/MockLendProvider.ts +24 -27
- package/src/{test → lend/__mocks__}/MockMarkets.ts +1 -1
- package/src/lend/__mocks__/mockLendTransaction.ts +4 -26
- package/src/lend/core/LendProvider.ts +40 -7
- package/src/lend/core/__tests__/LendProvider.test.ts +21 -63
- package/src/lend/index.ts +1 -0
- package/src/lend/namespaces/ActionsLendNamespace.ts +2 -21
- package/src/lend/namespaces/BaseLendNamespace.ts +89 -0
- package/src/lend/namespaces/WalletLendNamespace.ts +39 -55
- package/src/lend/namespaces/__tests__/ActionsLendNamespace.spec.ts +29 -22
- package/src/lend/namespaces/__tests__/BaseLendNamespace.spec.ts +137 -0
- package/src/lend/namespaces/__tests__/WalletLendNamespace.spec.ts +61 -26
- package/src/lend/providers/aave/AaveLendProvider.ts +395 -0
- package/src/lend/providers/aave/__mocks__/mockReserve.ts +84 -0
- package/src/lend/providers/aave/__tests__/AaveLendProvider.test.ts +419 -0
- package/src/lend/providers/aave/abis/pool.ts +81 -0
- package/src/lend/providers/aave/addresses.ts +95 -0
- package/src/lend/providers/aave/sdk.ts +307 -0
- package/src/lend/providers/morpho/MorphoLendProvider.ts +23 -44
- package/src/lend/providers/morpho/__tests__/MorphoLendProvider.test.ts +13 -85
- package/src/lend/providers/morpho/__tests__/api.test.ts +277 -51
- package/src/lend/providers/morpho/__tests__/sdk.test.ts +1 -0
- package/src/lend/providers/morpho/contracts.ts +37 -0
- package/src/lend/providers/morpho/sdk.ts +235 -87
- package/src/services/tokenBalance.spec.ts +2 -2
- package/src/services/tokenBalance.ts +6 -7
- package/src/supported/tokens.ts +6 -57
- package/src/types/actions.ts +30 -2
- package/src/types/asset.ts +3 -3
- package/src/types/lend/base.ts +14 -33
- package/src/types/lend/contracts.ts +18 -0
- package/src/types/lend/index.ts +1 -0
- package/src/utils/assets.test.ts +1 -1
- package/src/utils/assets.ts +15 -1
- package/src/utils/constants.ts +4 -0
- package/src/wallet/core/namespace/WalletNamespace.ts +2 -4
- package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +15 -15
- package/src/wallet/core/providers/__tests__/WalletProvider.spec.ts +14 -14
- package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +15 -4
- package/src/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.ts +3 -3
- package/src/wallet/core/providers/hosted/types/index.ts +8 -2
- package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +24 -9
- package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts +45 -55
- package/src/wallet/core/wallets/abstract/Wallet.ts +25 -17
- package/src/wallet/core/wallets/abstract/__tests__/Wallet.spec.ts +2 -2
- package/src/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.ts +2 -2
- package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +17 -10
- package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +7 -10
- package/src/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.ts +1 -1
- package/src/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.ts +1 -1
- package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +13 -5
- package/src/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +8 -8
- package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +6 -4
- package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +3 -3
- package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +13 -4
- package/src/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +5 -5
- package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +18 -6
- package/src/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +4 -4
- package/src/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +2 -2
- package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +16 -5
- package/src/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.ts +2 -2
- package/src/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.ts +1 -1
- package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +8 -4
- package/src/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.ts +1 -1
- package/src/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.ts +31 -17
- package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +8 -4
- package/src/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.ts +1 -1
- package/src/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +10 -11
- package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +8 -4
- package/src/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +7 -8
- package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +6 -6
- package/src/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.ts +5 -7
- package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +12 -5
- package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +6 -0
- package/src/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.ts +2 -2
- package/src/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.ts +1 -1
- package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +12 -5
- package/src/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +2 -2
- package/src/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +1 -1
- package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +12 -5
- package/src/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.ts +2 -2
- package/src/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.ts +1 -1
- package/dist/actions.test.d.ts.map +0 -1
- package/dist/actions.test.js.map +0 -1
- package/dist/constants/config.d.ts +0 -10
- package/dist/constants/config.d.ts.map +0 -1
- package/dist/constants/config.js +0 -10
- package/dist/constants/config.js.map +0 -1
- package/dist/test/MockAssets.d.ts.map +0 -1
- package/dist/test/MockAssets.js.map +0 -1
- package/dist/test/MockChainManager.d.ts.map +0 -1
- package/dist/test/MockChainManager.js.map +0 -1
- package/dist/test/MockLendProvider.d.ts.map +0 -1
- package/dist/test/MockLendProvider.js.map +0 -1
- package/dist/test/MockMarkets.d.ts.map +0 -1
- package/dist/test/MockMarkets.js.map +0 -1
- package/dist/test/MockPrivyClient.d.ts.map +0 -1
- package/dist/test/MockPrivyClient.js.map +0 -1
- package/dist/test/utils.d.ts.map +0 -1
- package/dist/test/utils.js.map +0 -1
- package/src/constants/config.ts +0 -9
- /package/dist/{test → __mocks__}/MockAssets.d.ts +0 -0
- /package/dist/{test → __mocks__}/MockAssets.js +0 -0
- /package/dist/{test → __mocks__}/MockPrivyClient.d.ts +0 -0
- /package/dist/{test → __mocks__}/MockPrivyClient.js +0 -0
- /package/dist/{test → __mocks__}/utils.d.ts +0 -0
- /package/dist/{test → __mocks__}/utils.js +0 -0
- /package/dist/{actions.test.d.ts → __tests__/actions.test.d.ts} +0 -0
- /package/dist/{test → services/__mocks__}/MockChainManager.js +0 -0
- /package/src/{test → __mocks__}/MockAssets.ts +0 -0
- /package/src/{test → __mocks__}/utils.ts +0 -0
- /package/src/{test → services/__mocks__}/MockChainManager.ts +0 -0
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import { UiPoolDataProvider } from '@aave/contract-helpers'
|
|
2
|
+
import { formatReserves } from '@aave/math-utils'
|
|
3
|
+
import { providers } from 'ethers'
|
|
4
|
+
import type { Address } from 'viem'
|
|
5
|
+
import { base, baseSepolia, optimism, optimismSepolia } from 'viem/chains'
|
|
6
|
+
|
|
7
|
+
import { WETH } from '@/constants/assets.js'
|
|
8
|
+
import type { SUPPORTED_CHAIN_IDS } from '@/constants/supportedChains.js'
|
|
9
|
+
import { POOL_GET_RESERVE_DATA_ABI } from '@/lend/providers/aave/abis/pool.js'
|
|
10
|
+
import { getPoolAddress } from '@/lend/providers/aave/addresses.js'
|
|
11
|
+
import type { ChainManager } from '@/services/ChainManager.js'
|
|
12
|
+
import type { LendProviderConfig } from '@/types/actions.js'
|
|
13
|
+
import type {
|
|
14
|
+
ApyBreakdown,
|
|
15
|
+
LendMarket,
|
|
16
|
+
LendMarketConfig,
|
|
17
|
+
LendMarketId,
|
|
18
|
+
} from '@/types/lend/index.js'
|
|
19
|
+
import { getAssetAddress } from '@/utils/assets.js'
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* UI Pool Data Provider addresses for each chain
|
|
23
|
+
* @description Contract addresses for UiPoolDataProvider on each supported chain
|
|
24
|
+
*/
|
|
25
|
+
const UI_POOL_DATA_PROVIDER_ADDRESSES: Record<number, Address> = {
|
|
26
|
+
[optimism.id]: '0x69FA688f1Dc47d4B5d8029D5a35FB7a548310654',
|
|
27
|
+
[base.id]: '0xd82a47fdebB5bf5329b09441C3DaB4b5df2153Ad',
|
|
28
|
+
[optimismSepolia.id]: '0x86E2938daE289763D4e09a7e42c5cCcA62Cf9809',
|
|
29
|
+
[baseSepolia.id]: '0xBc9f5b7E248451CdD7cA54e717a2BFe1F32b566b',
|
|
30
|
+
} as const
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Pool Addresses Provider addresses for each chain
|
|
34
|
+
*/
|
|
35
|
+
const POOL_ADDRESSES_PROVIDER: Record<number, Address> = {
|
|
36
|
+
[optimism.id]: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',
|
|
37
|
+
[base.id]: '0xe20fCBdBfFC4Dd138cE8b2E6FBb6CB49777ad64D',
|
|
38
|
+
[optimismSepolia.id]: '0x36616cf17557639614c1cdDb356b1B83fc0B2132',
|
|
39
|
+
[baseSepolia.id]: '0xE4C23309117Aa30342BFaae6c95c6478e0A4Ad00',
|
|
40
|
+
} as const
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Parameters for getReserve function
|
|
44
|
+
*/
|
|
45
|
+
interface GetReserveParams {
|
|
46
|
+
/** Market identifier (asset address and chainId) */
|
|
47
|
+
marketId: LendMarketId
|
|
48
|
+
/** Chain manager instance */
|
|
49
|
+
chainManager: ChainManager
|
|
50
|
+
/** Lend configuration containing market allowlist */
|
|
51
|
+
lendConfig?: LendProviderConfig
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Parameters for getReserves function
|
|
56
|
+
*/
|
|
57
|
+
interface GetReservesParams {
|
|
58
|
+
chainManager: ChainManager
|
|
59
|
+
lendConfig: LendProviderConfig
|
|
60
|
+
markets: LendMarketConfig[]
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Find market configuration in allowlist
|
|
65
|
+
* @param marketAllowlist - Array of allowed market configurations
|
|
66
|
+
* @param marketId - Market identifier to find
|
|
67
|
+
* @returns Market configuration if found, undefined otherwise
|
|
68
|
+
*/
|
|
69
|
+
function findMarketInAllowlist(
|
|
70
|
+
marketAllowlist: LendMarketConfig[],
|
|
71
|
+
marketId: LendMarketId,
|
|
72
|
+
): LendMarketConfig | undefined {
|
|
73
|
+
return marketAllowlist.find(
|
|
74
|
+
(config) =>
|
|
75
|
+
config.address.toLowerCase() === marketId.address.toLowerCase() &&
|
|
76
|
+
config.chainId === marketId.chainId,
|
|
77
|
+
)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Calculate APY breakdown from reserve data
|
|
82
|
+
* @param reserve - Formatted reserve data from Aave
|
|
83
|
+
* @returns APY breakdown with native APY and rewards
|
|
84
|
+
*/
|
|
85
|
+
export function calculateApyBreakdown(reserve: {
|
|
86
|
+
formattedReserve?: any
|
|
87
|
+
}): ApyBreakdown {
|
|
88
|
+
// Get supply APY from formatted reserve data
|
|
89
|
+
const supplyApy = reserve.formattedReserve?.supplyAPY
|
|
90
|
+
? parseFloat(reserve.formattedReserve.supplyAPY)
|
|
91
|
+
: 0
|
|
92
|
+
|
|
93
|
+
// Aave doesn't have vault-style performance fees
|
|
94
|
+
// Total APY = Supply APY + any rewards (to be added later)
|
|
95
|
+
return {
|
|
96
|
+
total: supplyApy,
|
|
97
|
+
native: supplyApy,
|
|
98
|
+
totalRewards: 0, // TODO: Fetch from incentives data provider if needed
|
|
99
|
+
performanceFee: 0, // Aave doesn't have performance fees
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Get detailed reserve (market) information from Aave
|
|
105
|
+
* @param params - Named parameters object
|
|
106
|
+
* @returns Promise resolving to detailed market information
|
|
107
|
+
*/
|
|
108
|
+
export async function getReserve(
|
|
109
|
+
params: GetReserveParams,
|
|
110
|
+
): Promise<LendMarket> {
|
|
111
|
+
// Find market configuration in allowlist for metadata
|
|
112
|
+
const marketConfig = params.lendConfig?.marketAllowlist
|
|
113
|
+
? findMarketInAllowlist(params.lendConfig.marketAllowlist, params.marketId)
|
|
114
|
+
: undefined
|
|
115
|
+
|
|
116
|
+
if (!marketConfig) {
|
|
117
|
+
throw new Error(
|
|
118
|
+
`Market ${params.marketId.address} on chain ${params.marketId.chainId} not found in allowlist`,
|
|
119
|
+
)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const poolAddress = getPoolAddress(params.marketId.chainId)
|
|
123
|
+
if (!poolAddress) {
|
|
124
|
+
throw new Error(`Aave V3 not deployed on chain ${params.marketId.chainId}`)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const uiPoolDataProviderAddress =
|
|
128
|
+
UI_POOL_DATA_PROVIDER_ADDRESSES[params.marketId.chainId]
|
|
129
|
+
const poolAddressesProvider = POOL_ADDRESSES_PROVIDER[params.marketId.chainId]
|
|
130
|
+
|
|
131
|
+
if (!uiPoolDataProviderAddress || !poolAddressesProvider) {
|
|
132
|
+
throw new Error(
|
|
133
|
+
`UiPoolDataProvider not configured for chain ${params.marketId.chainId}`,
|
|
134
|
+
)
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
try {
|
|
138
|
+
// Get viem public client for this chain
|
|
139
|
+
const publicClient = params.chainManager.getPublicClient(
|
|
140
|
+
params.marketId.chainId,
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
// Create ethers provider from viem's RPC URL
|
|
144
|
+
// Aave SDK requires ethers provider, not viem
|
|
145
|
+
const rpcUrl =
|
|
146
|
+
publicClient.chain?.rpcUrls.default.http[0] ||
|
|
147
|
+
publicClient.chain?.rpcUrls.public?.http[0]
|
|
148
|
+
if (!rpcUrl) {
|
|
149
|
+
throw new Error(
|
|
150
|
+
`No RPC URL available for chain ${params.marketId.chainId}`,
|
|
151
|
+
)
|
|
152
|
+
}
|
|
153
|
+
const ethersProvider = new providers.JsonRpcProvider(rpcUrl)
|
|
154
|
+
|
|
155
|
+
// Create UiPoolDataProvider instance
|
|
156
|
+
const uiPoolDataProvider = new UiPoolDataProvider({
|
|
157
|
+
uiPoolDataProviderAddress,
|
|
158
|
+
provider: ethersProvider,
|
|
159
|
+
chainId: params.marketId.chainId,
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
// Fetch reserve data
|
|
163
|
+
const reservesData = await uiPoolDataProvider.getReservesHumanized({
|
|
164
|
+
lendingPoolAddressProvider: poolAddressesProvider,
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
// Find the specific reserve for this asset
|
|
168
|
+
// For native ETH assets, use WETH address since Aave uses WETH internally
|
|
169
|
+
const assetAddress =
|
|
170
|
+
marketConfig.asset.type === 'native'
|
|
171
|
+
? getAssetAddress(WETH, params.marketId.chainId)
|
|
172
|
+
: getAssetAddress(marketConfig.asset, params.marketId.chainId)
|
|
173
|
+
|
|
174
|
+
const reserve = reservesData.reservesData.find(
|
|
175
|
+
(r) => r.underlyingAsset.toLowerCase() === assetAddress.toLowerCase(),
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
if (!reserve) {
|
|
179
|
+
throw new Error(
|
|
180
|
+
`Reserve not found for asset ${assetAddress} on chain ${params.marketId.chainId}`,
|
|
181
|
+
)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Format reserves using Aave math-utils
|
|
185
|
+
const currentTimestamp = Math.floor(Date.now() / 1000)
|
|
186
|
+
const formattedReserves = formatReserves({
|
|
187
|
+
reserves: [reserve],
|
|
188
|
+
currentTimestamp,
|
|
189
|
+
marketReferenceCurrencyDecimals:
|
|
190
|
+
reservesData.baseCurrencyData.marketReferenceCurrencyDecimals,
|
|
191
|
+
marketReferencePriceInUsd:
|
|
192
|
+
reservesData.baseCurrencyData.marketReferenceCurrencyPriceInUsd,
|
|
193
|
+
})
|
|
194
|
+
|
|
195
|
+
const formattedReserve = formattedReserves[0]
|
|
196
|
+
|
|
197
|
+
// Calculate APY breakdown
|
|
198
|
+
const apy = calculateApyBreakdown({
|
|
199
|
+
...reserve,
|
|
200
|
+
formattedReserve,
|
|
201
|
+
})
|
|
202
|
+
|
|
203
|
+
// Return market information in our standard format
|
|
204
|
+
return {
|
|
205
|
+
marketId: params.marketId,
|
|
206
|
+
name: marketConfig.name,
|
|
207
|
+
asset: marketConfig.asset,
|
|
208
|
+
supply: {
|
|
209
|
+
totalAssets: BigInt(reserve.availableLiquidity),
|
|
210
|
+
totalShares: BigInt(reserve.totalScaledVariableDebt || '0'),
|
|
211
|
+
},
|
|
212
|
+
apy,
|
|
213
|
+
metadata: {
|
|
214
|
+
owner: poolAddress, // Use Pool as owner
|
|
215
|
+
curator: poolAddress, // No curator in Aave
|
|
216
|
+
fee: 0, // No performance fee in Aave
|
|
217
|
+
lastUpdate: currentTimestamp,
|
|
218
|
+
},
|
|
219
|
+
}
|
|
220
|
+
} catch (error) {
|
|
221
|
+
throw new Error(
|
|
222
|
+
`Failed to get reserve info for ${params.marketId.address}: ${
|
|
223
|
+
error instanceof Error ? error.message : 'Unknown error'
|
|
224
|
+
}`,
|
|
225
|
+
)
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Get multiple reserves (markets)
|
|
231
|
+
* @param params - Parameters including markets to fetch
|
|
232
|
+
* @returns Promise resolving to array of market information
|
|
233
|
+
*/
|
|
234
|
+
export async function getReserves(
|
|
235
|
+
params: GetReservesParams,
|
|
236
|
+
): Promise<LendMarket[]> {
|
|
237
|
+
try {
|
|
238
|
+
const reservePromises = params.markets.map((marketConfig) => {
|
|
239
|
+
return getReserve({
|
|
240
|
+
marketId: {
|
|
241
|
+
address: marketConfig.address,
|
|
242
|
+
chainId: marketConfig.chainId,
|
|
243
|
+
},
|
|
244
|
+
chainManager: params.chainManager,
|
|
245
|
+
lendConfig: params.lendConfig,
|
|
246
|
+
})
|
|
247
|
+
})
|
|
248
|
+
|
|
249
|
+
return await Promise.all(reservePromises)
|
|
250
|
+
} catch (error) {
|
|
251
|
+
throw new Error(
|
|
252
|
+
`Failed to get reserves: ${
|
|
253
|
+
error instanceof Error ? error.message : 'Unknown error'
|
|
254
|
+
}`,
|
|
255
|
+
)
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Get aToken address for a given underlying asset
|
|
261
|
+
* @param params - Parameters including asset address, chain ID, and chain manager
|
|
262
|
+
* @returns Promise resolving to aToken address
|
|
263
|
+
* @description Queries the Aave Pool to get the aToken address for the underlying asset
|
|
264
|
+
*/
|
|
265
|
+
export async function getATokenAddress(params: {
|
|
266
|
+
underlyingAsset: Address
|
|
267
|
+
chainId: (typeof SUPPORTED_CHAIN_IDS)[number]
|
|
268
|
+
chainManager: ChainManager
|
|
269
|
+
}): Promise<Address> {
|
|
270
|
+
const poolAddress = getPoolAddress(params.chainId)
|
|
271
|
+
if (!poolAddress) {
|
|
272
|
+
throw new Error(`Aave V3 not deployed on chain ${params.chainId}`)
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
try {
|
|
276
|
+
// Get viem public client for this chain
|
|
277
|
+
const publicClient = params.chainManager.getPublicClient(params.chainId)
|
|
278
|
+
|
|
279
|
+
// Query the Pool contract directly for reserve data
|
|
280
|
+
const reserveData = await publicClient.readContract({
|
|
281
|
+
address: poolAddress,
|
|
282
|
+
abi: POOL_GET_RESERVE_DATA_ABI,
|
|
283
|
+
functionName: 'getReserveData',
|
|
284
|
+
args: [params.underlyingAsset],
|
|
285
|
+
})
|
|
286
|
+
|
|
287
|
+
// The return is a tuple where index 8 is aTokenAddress
|
|
288
|
+
const aTokenAddress = reserveData[8]
|
|
289
|
+
|
|
290
|
+
if (
|
|
291
|
+
!aTokenAddress ||
|
|
292
|
+
aTokenAddress === '0x0000000000000000000000000000000000000000'
|
|
293
|
+
) {
|
|
294
|
+
throw new Error(
|
|
295
|
+
`No aToken found for asset ${params.underlyingAsset} on chain ${params.chainId}`,
|
|
296
|
+
)
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
return aTokenAddress
|
|
300
|
+
} catch (error) {
|
|
301
|
+
throw new Error(
|
|
302
|
+
`Failed to get aToken address for ${params.underlyingAsset}: ${
|
|
303
|
+
error instanceof Error ? error.message : 'Unknown error'
|
|
304
|
+
}`,
|
|
305
|
+
)
|
|
306
|
+
}
|
|
307
|
+
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { ChainId } from '@morpho-org/blue-sdk'
|
|
2
2
|
import { MetaMorphoAction } from '@morpho-org/blue-sdk-viem'
|
|
3
|
-
import {
|
|
3
|
+
import { erc20Abi, formatUnits } from 'viem'
|
|
4
4
|
|
|
5
5
|
import { SUPPORTED_CHAIN_IDS as ACTIONS_SUPPORTED_CHAIN_IDS } from '@/constants/supportedChains.js'
|
|
6
6
|
import { LendProvider } from '@/lend/core/LendProvider.js'
|
|
7
7
|
import { getVault, getVaults } from '@/lend/providers/morpho/sdk.js'
|
|
8
8
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
9
|
+
import type { LendProviderConfig } from '@/types/actions.js'
|
|
9
10
|
import type {
|
|
10
11
|
GetLendMarketsParams,
|
|
11
12
|
GetMarketBalanceParams,
|
|
@@ -15,7 +16,6 @@ import type {
|
|
|
15
16
|
LendMarketPosition,
|
|
16
17
|
LendOpenPositionInternalParams,
|
|
17
18
|
LendTransaction,
|
|
18
|
-
MorphoLendConfig,
|
|
19
19
|
} from '@/types/lend/index.js'
|
|
20
20
|
import { getAssetAddress } from '@/utils/assets.js'
|
|
21
21
|
|
|
@@ -36,19 +36,16 @@ export const SUPPORTED_CHAIN_IDS = [
|
|
|
36
36
|
* Morpho lending provider implementation
|
|
37
37
|
* @description Lending provider implementation using Morpho protocol
|
|
38
38
|
*/
|
|
39
|
-
export class MorphoLendProvider extends LendProvider<
|
|
39
|
+
export class MorphoLendProvider extends LendProvider<LendProviderConfig> {
|
|
40
40
|
protected readonly SUPPORTED_CHAIN_IDS = SUPPORTED_CHAIN_IDS
|
|
41
41
|
|
|
42
|
-
private chainManager: ChainManager
|
|
43
|
-
|
|
44
42
|
/**
|
|
45
43
|
* Create a new Morpho lending provider
|
|
46
44
|
* @param config - Morpho lending configuration
|
|
47
45
|
* @param chainManager - Chain manager for blockchain interactions
|
|
48
46
|
*/
|
|
49
|
-
constructor(config:
|
|
50
|
-
super(config)
|
|
51
|
-
this.chainManager = chainManager
|
|
47
|
+
constructor(config: LendProviderConfig, chainManager: ChainManager) {
|
|
48
|
+
super(config, chainManager)
|
|
52
49
|
}
|
|
53
50
|
|
|
54
51
|
/**
|
|
@@ -61,13 +58,11 @@ export class MorphoLendProvider extends LendProvider<MorphoLendConfig> {
|
|
|
61
58
|
params: LendOpenPositionInternalParams,
|
|
62
59
|
): Promise<LendTransaction> {
|
|
63
60
|
try {
|
|
64
|
-
// Get asset address for the chain
|
|
65
|
-
const assetAddress =
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
)
|
|
70
|
-
}
|
|
61
|
+
// Get asset address for the chain (throws for native assets)
|
|
62
|
+
const assetAddress = getAssetAddress(
|
|
63
|
+
params.asset,
|
|
64
|
+
params.marketId.chainId,
|
|
65
|
+
)
|
|
71
66
|
|
|
72
67
|
// Get vault information for APY
|
|
73
68
|
const vaultInfo = await this.getMarket({
|
|
@@ -79,36 +74,27 @@ export class MorphoLendProvider extends LendProvider<MorphoLendConfig> {
|
|
|
79
74
|
const receiver = params.walletAddress
|
|
80
75
|
const depositCallData = MetaMorphoAction.deposit(assets, receiver)
|
|
81
76
|
|
|
82
|
-
const approvalCallData = encodeFunctionData({
|
|
83
|
-
abi: erc20Abi,
|
|
84
|
-
functionName: 'approve',
|
|
85
|
-
args: [params.marketId.address, params.amountWei],
|
|
86
|
-
})
|
|
87
|
-
|
|
88
77
|
return {
|
|
89
78
|
amount: params.amountWei,
|
|
90
79
|
asset: assetAddress,
|
|
91
80
|
marketId: params.marketId.address,
|
|
92
81
|
apy: vaultInfo.apy.total,
|
|
93
82
|
transactionData: {
|
|
94
|
-
approval:
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
83
|
+
approval: this.buildApprovalTx(
|
|
84
|
+
assetAddress,
|
|
85
|
+
params.marketId.address,
|
|
86
|
+
params.amountWei,
|
|
87
|
+
),
|
|
88
|
+
position: {
|
|
100
89
|
to: params.marketId.address,
|
|
101
90
|
data: depositCallData,
|
|
102
91
|
value: 0n,
|
|
103
92
|
},
|
|
104
93
|
},
|
|
105
|
-
slippage: params.options?.slippage || this._config.defaultSlippage,
|
|
106
94
|
}
|
|
107
|
-
} catch
|
|
95
|
+
} catch {
|
|
108
96
|
throw new Error(
|
|
109
|
-
`Failed to open position with ${params.amountWei} of ${params.asset.metadata.symbol}
|
|
110
|
-
error instanceof Error ? error.message : 'Unknown error'
|
|
111
|
-
}`,
|
|
97
|
+
`Failed to open position with ${params.amountWei} of ${params.asset.metadata.symbol}`,
|
|
112
98
|
)
|
|
113
99
|
}
|
|
114
100
|
}
|
|
@@ -149,20 +135,15 @@ export class MorphoLendProvider extends LendProvider<MorphoLendConfig> {
|
|
|
149
135
|
marketId: params.marketId.address,
|
|
150
136
|
apy: vaultInfo.apy.total,
|
|
151
137
|
transactionData: {
|
|
152
|
-
|
|
138
|
+
position: {
|
|
153
139
|
to: params.marketId.address,
|
|
154
140
|
data: withdrawCallData,
|
|
155
141
|
value: 0n,
|
|
156
142
|
},
|
|
157
143
|
},
|
|
158
|
-
slippage: params.options?.slippage || this._config.defaultSlippage,
|
|
159
144
|
}
|
|
160
|
-
} catch
|
|
161
|
-
throw new Error(
|
|
162
|
-
`Failed to close position: ${
|
|
163
|
-
error instanceof Error ? error.message : 'Unknown error'
|
|
164
|
-
}`,
|
|
165
|
-
)
|
|
145
|
+
} catch {
|
|
146
|
+
throw new Error('Failed to close position')
|
|
166
147
|
}
|
|
167
148
|
}
|
|
168
149
|
|
|
@@ -247,11 +228,9 @@ export class MorphoLendProvider extends LendProvider<MorphoLendConfig> {
|
|
|
247
228
|
sharesFormatted,
|
|
248
229
|
marketId: params.marketId,
|
|
249
230
|
}
|
|
250
|
-
} catch
|
|
231
|
+
} catch {
|
|
251
232
|
throw new Error(
|
|
252
|
-
`Failed to get market balance for ${params.walletAddress} in market ${params.marketId.address}
|
|
253
|
-
error instanceof Error ? error.message : 'Unknown error'
|
|
254
|
-
}`,
|
|
233
|
+
`Failed to get market balance for ${params.walletAddress} in market ${params.marketId.address}`,
|
|
255
234
|
)
|
|
256
235
|
}
|
|
257
236
|
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { fetchAccrualVault } from '@morpho-org/blue-sdk-viem'
|
|
2
2
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
3
3
|
|
|
4
|
-
import { createMockMorphoVault } from '@/lend/providers/morpho/__mocks__/mockVault.js'
|
|
5
|
-
import { MorphoLendProvider } from '@/lend/providers/morpho/MorphoLendProvider.js'
|
|
6
|
-
import type { ChainManager } from '@/services/ChainManager.js'
|
|
7
|
-
import { MockChainManager } from '@/test/MockChainManager.js'
|
|
8
4
|
import {
|
|
9
5
|
MockGauntletUSDCMarket,
|
|
10
6
|
MockReceiverAddress,
|
|
11
7
|
MockWETHMarket,
|
|
12
|
-
} from '@/
|
|
13
|
-
import
|
|
8
|
+
} from '@/lend/__mocks__/MockMarkets.js'
|
|
9
|
+
import { createMockMorphoVault } from '@/lend/providers/morpho/__mocks__/mockVault.js'
|
|
10
|
+
import { MorphoLendProvider } from '@/lend/providers/morpho/MorphoLendProvider.js'
|
|
11
|
+
import { MockChainManager } from '@/services/__mocks__/MockChainManager.js'
|
|
12
|
+
import type { ChainManager } from '@/services/ChainManager.js'
|
|
13
|
+
import type { LendProviderConfig } from '@/types/actions.js'
|
|
14
14
|
|
|
15
15
|
// Mock the Morpho SDK modules
|
|
16
16
|
vi.mock('@morpho-org/blue-sdk-viem', () => ({
|
|
@@ -36,13 +36,11 @@ vi.mock('@morpho-org/bundler-sdk-viem', () => ({
|
|
|
36
36
|
|
|
37
37
|
describe('MorphoLendProvider', () => {
|
|
38
38
|
let provider: MorphoLendProvider
|
|
39
|
-
let mockConfig:
|
|
39
|
+
let mockConfig: LendProviderConfig
|
|
40
40
|
let mockChainManager: ChainManager
|
|
41
41
|
|
|
42
42
|
beforeEach(() => {
|
|
43
43
|
mockConfig = {
|
|
44
|
-
provider: 'morpho',
|
|
45
|
-
defaultSlippage: 50,
|
|
46
44
|
marketAllowlist: [MockGauntletUSDCMarket, MockWETHMarket],
|
|
47
45
|
}
|
|
48
46
|
|
|
@@ -55,18 +53,6 @@ describe('MorphoLendProvider', () => {
|
|
|
55
53
|
it('should initialize with provided config', () => {
|
|
56
54
|
expect(provider).toBeInstanceOf(MorphoLendProvider)
|
|
57
55
|
})
|
|
58
|
-
|
|
59
|
-
it('should use default slippage when not provided', () => {
|
|
60
|
-
const configWithoutSlippage = {
|
|
61
|
-
...mockConfig,
|
|
62
|
-
defaultSlippage: undefined,
|
|
63
|
-
}
|
|
64
|
-
const providerWithDefaults = new MorphoLendProvider(
|
|
65
|
-
configWithoutSlippage,
|
|
66
|
-
mockChainManager,
|
|
67
|
-
)
|
|
68
|
-
expect(providerWithDefaults).toBeInstanceOf(MorphoLendProvider)
|
|
69
|
-
})
|
|
70
56
|
})
|
|
71
57
|
|
|
72
58
|
describe('closePosition', () => {
|
|
@@ -121,9 +107,7 @@ describe('MorphoLendProvider', () => {
|
|
|
121
107
|
expect(withdrawTransaction).toHaveProperty('marketId', marketId.address)
|
|
122
108
|
expect(withdrawTransaction).toHaveProperty('apy')
|
|
123
109
|
expect(withdrawTransaction).toHaveProperty('transactionData')
|
|
124
|
-
expect(withdrawTransaction.transactionData).toHaveProperty(
|
|
125
|
-
'closePosition',
|
|
126
|
-
)
|
|
110
|
+
expect(withdrawTransaction.transactionData).toHaveProperty('position')
|
|
127
111
|
expect(withdrawTransaction.transactionData).not.toHaveProperty('approval')
|
|
128
112
|
expect(typeof withdrawTransaction.apy).toBe('number')
|
|
129
113
|
expect(withdrawTransaction.apy).toBeGreaterThan(0)
|
|
@@ -223,7 +207,7 @@ describe('MorphoLendProvider', () => {
|
|
|
223
207
|
expect(lendTransaction).toHaveProperty('apy')
|
|
224
208
|
expect(lendTransaction).toHaveProperty('transactionData')
|
|
225
209
|
expect(lendTransaction.transactionData).toHaveProperty('approval')
|
|
226
|
-
expect(lendTransaction.transactionData).toHaveProperty('
|
|
210
|
+
expect(lendTransaction.transactionData).toHaveProperty('position')
|
|
227
211
|
expect(typeof lendTransaction.apy).toBe('number')
|
|
228
212
|
expect(lendTransaction.apy).toBeGreaterThan(0)
|
|
229
213
|
})
|
|
@@ -247,38 +231,13 @@ describe('MorphoLendProvider', () => {
|
|
|
247
231
|
marketId,
|
|
248
232
|
walletAddress: MockReceiverAddress,
|
|
249
233
|
}),
|
|
250
|
-
).rejects.toThrow('
|
|
251
|
-
})
|
|
252
|
-
|
|
253
|
-
it('should use custom slippage when provided', async () => {
|
|
254
|
-
const amount = 1000
|
|
255
|
-
const asset = MockGauntletUSDCMarket.asset
|
|
256
|
-
const marketId = {
|
|
257
|
-
address: MockGauntletUSDCMarket.address,
|
|
258
|
-
chainId: MockGauntletUSDCMarket.chainId,
|
|
259
|
-
}
|
|
260
|
-
const customSlippage = 100 // 1%
|
|
261
|
-
|
|
262
|
-
const lendTransaction = await provider.openPosition({
|
|
263
|
-
amount,
|
|
264
|
-
asset,
|
|
265
|
-
marketId,
|
|
266
|
-
walletAddress: MockReceiverAddress,
|
|
267
|
-
options: {
|
|
268
|
-
slippage: customSlippage,
|
|
269
|
-
},
|
|
270
|
-
})
|
|
271
|
-
|
|
272
|
-
expect(lendTransaction).toHaveProperty('amount', BigInt('1000000000'))
|
|
234
|
+
).rejects.toThrow('Failed to open position')
|
|
273
235
|
})
|
|
274
236
|
})
|
|
275
237
|
|
|
276
238
|
describe('market allowlist configuration', () => {
|
|
277
239
|
it('should work without market allowlist', () => {
|
|
278
|
-
const configWithoutAllowlist:
|
|
279
|
-
provider: 'morpho',
|
|
280
|
-
defaultSlippage: 50,
|
|
281
|
-
}
|
|
240
|
+
const configWithoutAllowlist: LendProviderConfig = {}
|
|
282
241
|
|
|
283
242
|
const providerWithoutAllowlist = new MorphoLendProvider(
|
|
284
243
|
configWithoutAllowlist,
|
|
@@ -289,9 +248,7 @@ describe('MorphoLendProvider', () => {
|
|
|
289
248
|
})
|
|
290
249
|
|
|
291
250
|
it('should store market allowlist when provided', () => {
|
|
292
|
-
const configWithAllowlist:
|
|
293
|
-
provider: 'morpho',
|
|
294
|
-
defaultSlippage: 50,
|
|
251
|
+
const configWithAllowlist: LendProviderConfig = {
|
|
295
252
|
marketAllowlist: [MockGauntletUSDCMarket],
|
|
296
253
|
}
|
|
297
254
|
|
|
@@ -307,37 +264,8 @@ describe('MorphoLendProvider', () => {
|
|
|
307
264
|
expect(allowlist![0].name).toBe(MockGauntletUSDCMarket.name)
|
|
308
265
|
})
|
|
309
266
|
|
|
310
|
-
it('should use default slippage from config', () => {
|
|
311
|
-
const customSlippage = 150
|
|
312
|
-
const configWithSlippage: MorphoLendConfig = {
|
|
313
|
-
provider: 'morpho',
|
|
314
|
-
defaultSlippage: customSlippage,
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
const providerWithSlippage = new MorphoLendProvider(
|
|
318
|
-
configWithSlippage,
|
|
319
|
-
mockChainManager,
|
|
320
|
-
)
|
|
321
|
-
|
|
322
|
-
expect(providerWithSlippage.config.defaultSlippage).toBe(customSlippage)
|
|
323
|
-
})
|
|
324
|
-
|
|
325
|
-
it('should use fallback default slippage when not provided', () => {
|
|
326
|
-
const configWithoutSlippage: MorphoLendConfig = {
|
|
327
|
-
provider: 'morpho',
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
const providerWithoutSlippage = new MorphoLendProvider(
|
|
331
|
-
configWithoutSlippage,
|
|
332
|
-
mockChainManager,
|
|
333
|
-
)
|
|
334
|
-
|
|
335
|
-
expect(providerWithoutSlippage.config.defaultSlippage || 50).toBe(50) // Default fallback
|
|
336
|
-
})
|
|
337
|
-
|
|
338
267
|
it('should handle multiple markets in allowlist', () => {
|
|
339
|
-
const configWithMultipleMarkets:
|
|
340
|
-
provider: 'morpho',
|
|
268
|
+
const configWithMultipleMarkets: LendProviderConfig = {
|
|
341
269
|
marketAllowlist: [MockGauntletUSDCMarket, MockWETHMarket],
|
|
342
270
|
}
|
|
343
271
|
|