@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,83 @@
|
|
|
1
|
+
import { base, baseSepolia, optimism, optimismSepolia } from 'viem/chains';
|
|
2
|
+
/**
|
|
3
|
+
* Aave V3 Pool addresses for Optimism Superchain networks
|
|
4
|
+
* @description Hardcoded Pool contract addresses for each supported chain
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Mainnet Pool addresses
|
|
8
|
+
*/
|
|
9
|
+
export const POOL_ADDRESSES_MAINNET = {
|
|
10
|
+
[optimism.id]: '0x794a61358D6845594F94dc1DB02A252b5b4814aD',
|
|
11
|
+
[base.id]: '0xA238Dd80C259a72e81d7e4664a9801593F98d1c5',
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Testnet Pool addresses
|
|
15
|
+
*/
|
|
16
|
+
export const POOL_ADDRESSES_TESTNET = {
|
|
17
|
+
[optimismSepolia.id]: '0xb50201558b00496a145fe76f7424749556e326d8',
|
|
18
|
+
[baseSepolia.id]: '0x8bAB6d1b75f19e9eD9fCe8b9BD338844fF79aE27',
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* All Pool addresses (mainnet + testnet)
|
|
22
|
+
*/
|
|
23
|
+
export const POOL_ADDRESSES = {
|
|
24
|
+
...POOL_ADDRESSES_MAINNET,
|
|
25
|
+
...POOL_ADDRESSES_TESTNET,
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Get Pool address for a given chain ID
|
|
29
|
+
* @param chainId - Chain ID
|
|
30
|
+
* @returns Pool address if supported, undefined otherwise
|
|
31
|
+
*/
|
|
32
|
+
export function getPoolAddress(chainId) {
|
|
33
|
+
return POOL_ADDRESSES[chainId];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if a chain ID has Aave V3 deployed
|
|
37
|
+
* @param chainId - Chain ID to check
|
|
38
|
+
* @returns true if Aave V3 is deployed on this chain
|
|
39
|
+
*/
|
|
40
|
+
export function isAaveChainSupported(chainId) {
|
|
41
|
+
return chainId in POOL_ADDRESSES;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get all supported chain IDs
|
|
45
|
+
* @returns Array of chain IDs with Aave V3 deployed
|
|
46
|
+
*/
|
|
47
|
+
export function getSupportedChainIds() {
|
|
48
|
+
return Object.keys(POOL_ADDRESSES).map(Number);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Aave V3 WETHGateway addresses for Optimism Superchain networks
|
|
52
|
+
* @description Gateway contracts that handle native ETH wrapping and depositing
|
|
53
|
+
*/
|
|
54
|
+
/**
|
|
55
|
+
* Mainnet WETHGateway addresses
|
|
56
|
+
*/
|
|
57
|
+
export const WETH_GATEWAY_ADDRESSES_MAINNET = {
|
|
58
|
+
[optimism.id]: '0x5f2508cAE9923b02316254026CD43d7902866725',
|
|
59
|
+
[base.id]: '0xa0d9C1E9E48Ca30c8d8C3B5D69FF5dc1f6DFfC24',
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Testnet WETHGateway addresses
|
|
63
|
+
*/
|
|
64
|
+
export const WETH_GATEWAY_ADDRESSES_TESTNET = {
|
|
65
|
+
[optimismSepolia.id]: '0x589750BA8aF186cE5B55391B0b7148cAD43a1619',
|
|
66
|
+
[baseSepolia.id]: '0x0568130e794429D2eEBC4dafE18f25Ff1a1ed8b6',
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* All WETHGateway addresses (mainnet + testnet)
|
|
70
|
+
*/
|
|
71
|
+
export const WETH_GATEWAY_ADDRESSES = {
|
|
72
|
+
...WETH_GATEWAY_ADDRESSES_MAINNET,
|
|
73
|
+
...WETH_GATEWAY_ADDRESSES_TESTNET,
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Get WETHGateway address for a given chain ID
|
|
77
|
+
* @param chainId - Chain ID
|
|
78
|
+
* @returns WETHGateway address if supported, undefined otherwise
|
|
79
|
+
*/
|
|
80
|
+
export function getWETHGatewayAddress(chainId) {
|
|
81
|
+
return WETH_GATEWAY_ADDRESSES[chainId];
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=addresses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addresses.js","sourceRoot":"","sources":["../../../../src/lend/providers/aave/addresses.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE1E;;;GAGG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAA4B;IAC7D,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,4CAA4C;IAC3D,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,4CAA4C;CAC/C,CAAA;AAEV;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAA4B;IAC7D,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,4CAA4C;IAClE,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,4CAA4C;CACtD,CAAA;AAEV;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAA4B;IACrD,GAAG,sBAAsB;IACzB,GAAG,sBAAsB;CACjB,CAAA;AAEV;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,cAAc,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,OAAO,OAAO,IAAI,cAAc,CAAA;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAChD,CAAC;AAED;;;GAGG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAA4B;IACrE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,4CAA4C;IAC3D,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,4CAA4C;CAC/C,CAAA;AAEV;;GAEG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAA4B;IACrE,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,4CAA4C;IAClE,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,4CAA4C;CACtD,CAAA;AAEV;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAA4B;IAC7D,GAAG,8BAA8B;IACjC,GAAG,8BAA8B;CACzB,CAAA;AAEV;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAA;AACxC,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { Address } from 'viem';
|
|
2
|
+
import type { SUPPORTED_CHAIN_IDS } from '../../../constants/supportedChains.js';
|
|
3
|
+
import type { ChainManager } from '../../../services/ChainManager.js';
|
|
4
|
+
import type { LendProviderConfig } from '../../../types/actions.js';
|
|
5
|
+
import type { ApyBreakdown, LendMarket, LendMarketConfig, LendMarketId } from '../../../types/lend/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Parameters for getReserve function
|
|
8
|
+
*/
|
|
9
|
+
interface GetReserveParams {
|
|
10
|
+
/** Market identifier (asset address and chainId) */
|
|
11
|
+
marketId: LendMarketId;
|
|
12
|
+
/** Chain manager instance */
|
|
13
|
+
chainManager: ChainManager;
|
|
14
|
+
/** Lend configuration containing market allowlist */
|
|
15
|
+
lendConfig?: LendProviderConfig;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Parameters for getReserves function
|
|
19
|
+
*/
|
|
20
|
+
interface GetReservesParams {
|
|
21
|
+
chainManager: ChainManager;
|
|
22
|
+
lendConfig: LendProviderConfig;
|
|
23
|
+
markets: LendMarketConfig[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Calculate APY breakdown from reserve data
|
|
27
|
+
* @param reserve - Formatted reserve data from Aave
|
|
28
|
+
* @returns APY breakdown with native APY and rewards
|
|
29
|
+
*/
|
|
30
|
+
export declare function calculateApyBreakdown(reserve: {
|
|
31
|
+
formattedReserve?: any;
|
|
32
|
+
}): ApyBreakdown;
|
|
33
|
+
/**
|
|
34
|
+
* Get detailed reserve (market) information from Aave
|
|
35
|
+
* @param params - Named parameters object
|
|
36
|
+
* @returns Promise resolving to detailed market information
|
|
37
|
+
*/
|
|
38
|
+
export declare function getReserve(params: GetReserveParams): Promise<LendMarket>;
|
|
39
|
+
/**
|
|
40
|
+
* Get multiple reserves (markets)
|
|
41
|
+
* @param params - Parameters including markets to fetch
|
|
42
|
+
* @returns Promise resolving to array of market information
|
|
43
|
+
*/
|
|
44
|
+
export declare function getReserves(params: GetReservesParams): Promise<LendMarket[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Get aToken address for a given underlying asset
|
|
47
|
+
* @param params - Parameters including asset address, chain ID, and chain manager
|
|
48
|
+
* @returns Promise resolving to aToken address
|
|
49
|
+
* @description Queries the Aave Pool to get the aToken address for the underlying asset
|
|
50
|
+
*/
|
|
51
|
+
export declare function getATokenAddress(params: {
|
|
52
|
+
underlyingAsset: Address;
|
|
53
|
+
chainId: (typeof SUPPORTED_CHAIN_IDS)[number];
|
|
54
|
+
chainManager: ChainManager;
|
|
55
|
+
}): Promise<Address>;
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=sdk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../../../src/lend/providers/aave/sdk.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAInC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AAGzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,uBAAuB,CAAA;AAwB9B;;GAEG;AACH,UAAU,gBAAgB;IACxB,oDAAoD;IACpD,QAAQ,EAAE,YAAY,CAAA;IACtB,6BAA6B;IAC7B,YAAY,EAAE,YAAY,CAAA;IAC1B,qDAAqD;IACrD,UAAU,CAAC,EAAE,kBAAkB,CAAA;CAChC;AAED;;GAEG;AACH,UAAU,iBAAiB;IACzB,YAAY,EAAE,YAAY,CAAA;IAC1B,UAAU,EAAE,kBAAkB,CAAA;IAC9B,OAAO,EAAE,gBAAgB,EAAE,CAAA;CAC5B;AAmBD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,gBAAgB,CAAC,EAAE,GAAG,CAAA;CACvB,GAAG,YAAY,CAcf;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,UAAU,CAAC,CAqHrB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,UAAU,EAAE,CAAC,CAqBvB;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,eAAe,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;IAC7C,YAAY,EAAE,YAAY,CAAA;CAC3B,GAAG,OAAO,CAAC,OAAO,CAAC,CAsCnB"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { UiPoolDataProvider } from '@aave/contract-helpers';
|
|
2
|
+
import { formatReserves } from '@aave/math-utils';
|
|
3
|
+
import { providers } from 'ethers';
|
|
4
|
+
import { base, baseSepolia, optimism, optimismSepolia } from 'viem/chains';
|
|
5
|
+
import { WETH } from '../../../constants/assets.js';
|
|
6
|
+
import { POOL_GET_RESERVE_DATA_ABI } from './abis/pool.js';
|
|
7
|
+
import { getPoolAddress } from './addresses.js';
|
|
8
|
+
import { getAssetAddress } from '../../../utils/assets.js';
|
|
9
|
+
/**
|
|
10
|
+
* UI Pool Data Provider addresses for each chain
|
|
11
|
+
* @description Contract addresses for UiPoolDataProvider on each supported chain
|
|
12
|
+
*/
|
|
13
|
+
const UI_POOL_DATA_PROVIDER_ADDRESSES = {
|
|
14
|
+
[optimism.id]: '0x69FA688f1Dc47d4B5d8029D5a35FB7a548310654',
|
|
15
|
+
[base.id]: '0xd82a47fdebB5bf5329b09441C3DaB4b5df2153Ad',
|
|
16
|
+
[optimismSepolia.id]: '0x86E2938daE289763D4e09a7e42c5cCcA62Cf9809',
|
|
17
|
+
[baseSepolia.id]: '0xBc9f5b7E248451CdD7cA54e717a2BFe1F32b566b',
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Pool Addresses Provider addresses for each chain
|
|
21
|
+
*/
|
|
22
|
+
const POOL_ADDRESSES_PROVIDER = {
|
|
23
|
+
[optimism.id]: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',
|
|
24
|
+
[base.id]: '0xe20fCBdBfFC4Dd138cE8b2E6FBb6CB49777ad64D',
|
|
25
|
+
[optimismSepolia.id]: '0x36616cf17557639614c1cdDb356b1B83fc0B2132',
|
|
26
|
+
[baseSepolia.id]: '0xE4C23309117Aa30342BFaae6c95c6478e0A4Ad00',
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Find market configuration in allowlist
|
|
30
|
+
* @param marketAllowlist - Array of allowed market configurations
|
|
31
|
+
* @param marketId - Market identifier to find
|
|
32
|
+
* @returns Market configuration if found, undefined otherwise
|
|
33
|
+
*/
|
|
34
|
+
function findMarketInAllowlist(marketAllowlist, marketId) {
|
|
35
|
+
return marketAllowlist.find((config) => config.address.toLowerCase() === marketId.address.toLowerCase() &&
|
|
36
|
+
config.chainId === marketId.chainId);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Calculate APY breakdown from reserve data
|
|
40
|
+
* @param reserve - Formatted reserve data from Aave
|
|
41
|
+
* @returns APY breakdown with native APY and rewards
|
|
42
|
+
*/
|
|
43
|
+
export function calculateApyBreakdown(reserve) {
|
|
44
|
+
// Get supply APY from formatted reserve data
|
|
45
|
+
const supplyApy = reserve.formattedReserve?.supplyAPY
|
|
46
|
+
? parseFloat(reserve.formattedReserve.supplyAPY)
|
|
47
|
+
: 0;
|
|
48
|
+
// Aave doesn't have vault-style performance fees
|
|
49
|
+
// Total APY = Supply APY + any rewards (to be added later)
|
|
50
|
+
return {
|
|
51
|
+
total: supplyApy,
|
|
52
|
+
native: supplyApy,
|
|
53
|
+
totalRewards: 0, // TODO: Fetch from incentives data provider if needed
|
|
54
|
+
performanceFee: 0, // Aave doesn't have performance fees
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get detailed reserve (market) information from Aave
|
|
59
|
+
* @param params - Named parameters object
|
|
60
|
+
* @returns Promise resolving to detailed market information
|
|
61
|
+
*/
|
|
62
|
+
export async function getReserve(params) {
|
|
63
|
+
// Find market configuration in allowlist for metadata
|
|
64
|
+
const marketConfig = params.lendConfig?.marketAllowlist
|
|
65
|
+
? findMarketInAllowlist(params.lendConfig.marketAllowlist, params.marketId)
|
|
66
|
+
: undefined;
|
|
67
|
+
if (!marketConfig) {
|
|
68
|
+
throw new Error(`Market ${params.marketId.address} on chain ${params.marketId.chainId} not found in allowlist`);
|
|
69
|
+
}
|
|
70
|
+
const poolAddress = getPoolAddress(params.marketId.chainId);
|
|
71
|
+
if (!poolAddress) {
|
|
72
|
+
throw new Error(`Aave V3 not deployed on chain ${params.marketId.chainId}`);
|
|
73
|
+
}
|
|
74
|
+
const uiPoolDataProviderAddress = UI_POOL_DATA_PROVIDER_ADDRESSES[params.marketId.chainId];
|
|
75
|
+
const poolAddressesProvider = POOL_ADDRESSES_PROVIDER[params.marketId.chainId];
|
|
76
|
+
if (!uiPoolDataProviderAddress || !poolAddressesProvider) {
|
|
77
|
+
throw new Error(`UiPoolDataProvider not configured for chain ${params.marketId.chainId}`);
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
// Get viem public client for this chain
|
|
81
|
+
const publicClient = params.chainManager.getPublicClient(params.marketId.chainId);
|
|
82
|
+
// Create ethers provider from viem's RPC URL
|
|
83
|
+
// Aave SDK requires ethers provider, not viem
|
|
84
|
+
const rpcUrl = publicClient.chain?.rpcUrls.default.http[0] ||
|
|
85
|
+
publicClient.chain?.rpcUrls.public?.http[0];
|
|
86
|
+
if (!rpcUrl) {
|
|
87
|
+
throw new Error(`No RPC URL available for chain ${params.marketId.chainId}`);
|
|
88
|
+
}
|
|
89
|
+
const ethersProvider = new providers.JsonRpcProvider(rpcUrl);
|
|
90
|
+
// Create UiPoolDataProvider instance
|
|
91
|
+
const uiPoolDataProvider = new UiPoolDataProvider({
|
|
92
|
+
uiPoolDataProviderAddress,
|
|
93
|
+
provider: ethersProvider,
|
|
94
|
+
chainId: params.marketId.chainId,
|
|
95
|
+
});
|
|
96
|
+
// Fetch reserve data
|
|
97
|
+
const reservesData = await uiPoolDataProvider.getReservesHumanized({
|
|
98
|
+
lendingPoolAddressProvider: poolAddressesProvider,
|
|
99
|
+
});
|
|
100
|
+
// Find the specific reserve for this asset
|
|
101
|
+
// For native ETH assets, use WETH address since Aave uses WETH internally
|
|
102
|
+
const assetAddress = marketConfig.asset.type === 'native'
|
|
103
|
+
? getAssetAddress(WETH, params.marketId.chainId)
|
|
104
|
+
: getAssetAddress(marketConfig.asset, params.marketId.chainId);
|
|
105
|
+
const reserve = reservesData.reservesData.find((r) => r.underlyingAsset.toLowerCase() === assetAddress.toLowerCase());
|
|
106
|
+
if (!reserve) {
|
|
107
|
+
throw new Error(`Reserve not found for asset ${assetAddress} on chain ${params.marketId.chainId}`);
|
|
108
|
+
}
|
|
109
|
+
// Format reserves using Aave math-utils
|
|
110
|
+
const currentTimestamp = Math.floor(Date.now() / 1000);
|
|
111
|
+
const formattedReserves = formatReserves({
|
|
112
|
+
reserves: [reserve],
|
|
113
|
+
currentTimestamp,
|
|
114
|
+
marketReferenceCurrencyDecimals: reservesData.baseCurrencyData.marketReferenceCurrencyDecimals,
|
|
115
|
+
marketReferencePriceInUsd: reservesData.baseCurrencyData.marketReferenceCurrencyPriceInUsd,
|
|
116
|
+
});
|
|
117
|
+
const formattedReserve = formattedReserves[0];
|
|
118
|
+
// Calculate APY breakdown
|
|
119
|
+
const apy = calculateApyBreakdown({
|
|
120
|
+
...reserve,
|
|
121
|
+
formattedReserve,
|
|
122
|
+
});
|
|
123
|
+
// Return market information in our standard format
|
|
124
|
+
return {
|
|
125
|
+
marketId: params.marketId,
|
|
126
|
+
name: marketConfig.name,
|
|
127
|
+
asset: marketConfig.asset,
|
|
128
|
+
supply: {
|
|
129
|
+
totalAssets: BigInt(reserve.availableLiquidity),
|
|
130
|
+
totalShares: BigInt(reserve.totalScaledVariableDebt || '0'),
|
|
131
|
+
},
|
|
132
|
+
apy,
|
|
133
|
+
metadata: {
|
|
134
|
+
owner: poolAddress, // Use Pool as owner
|
|
135
|
+
curator: poolAddress, // No curator in Aave
|
|
136
|
+
fee: 0, // No performance fee in Aave
|
|
137
|
+
lastUpdate: currentTimestamp,
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
throw new Error(`Failed to get reserve info for ${params.marketId.address}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Get multiple reserves (markets)
|
|
147
|
+
* @param params - Parameters including markets to fetch
|
|
148
|
+
* @returns Promise resolving to array of market information
|
|
149
|
+
*/
|
|
150
|
+
export async function getReserves(params) {
|
|
151
|
+
try {
|
|
152
|
+
const reservePromises = params.markets.map((marketConfig) => {
|
|
153
|
+
return getReserve({
|
|
154
|
+
marketId: {
|
|
155
|
+
address: marketConfig.address,
|
|
156
|
+
chainId: marketConfig.chainId,
|
|
157
|
+
},
|
|
158
|
+
chainManager: params.chainManager,
|
|
159
|
+
lendConfig: params.lendConfig,
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
return await Promise.all(reservePromises);
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
throw new Error(`Failed to get reserves: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Get aToken address for a given underlying asset
|
|
170
|
+
* @param params - Parameters including asset address, chain ID, and chain manager
|
|
171
|
+
* @returns Promise resolving to aToken address
|
|
172
|
+
* @description Queries the Aave Pool to get the aToken address for the underlying asset
|
|
173
|
+
*/
|
|
174
|
+
export async function getATokenAddress(params) {
|
|
175
|
+
const poolAddress = getPoolAddress(params.chainId);
|
|
176
|
+
if (!poolAddress) {
|
|
177
|
+
throw new Error(`Aave V3 not deployed on chain ${params.chainId}`);
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
// Get viem public client for this chain
|
|
181
|
+
const publicClient = params.chainManager.getPublicClient(params.chainId);
|
|
182
|
+
// Query the Pool contract directly for reserve data
|
|
183
|
+
const reserveData = await publicClient.readContract({
|
|
184
|
+
address: poolAddress,
|
|
185
|
+
abi: POOL_GET_RESERVE_DATA_ABI,
|
|
186
|
+
functionName: 'getReserveData',
|
|
187
|
+
args: [params.underlyingAsset],
|
|
188
|
+
});
|
|
189
|
+
// The return is a tuple where index 8 is aTokenAddress
|
|
190
|
+
const aTokenAddress = reserveData[8];
|
|
191
|
+
if (!aTokenAddress ||
|
|
192
|
+
aTokenAddress === '0x0000000000000000000000000000000000000000') {
|
|
193
|
+
throw new Error(`No aToken found for asset ${params.underlyingAsset} on chain ${params.chainId}`);
|
|
194
|
+
}
|
|
195
|
+
return aTokenAddress;
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
throw new Error(`Failed to get aToken address for ${params.underlyingAsset}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../../../src/lend/providers/aave/sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { LendProvider } from '../../core/LendProvider.js';
|
|
2
2
|
import type { ChainManager } from '../../../services/ChainManager.js';
|
|
3
|
-
import type {
|
|
3
|
+
import type { LendProviderConfig } from '../../../types/actions.js';
|
|
4
|
+
import type { GetLendMarketsParams, GetMarketBalanceParams, LendClosePositionParams, LendMarket, LendMarketId, LendMarketPosition, LendOpenPositionInternalParams, LendTransaction } from '../../../types/lend/index.js';
|
|
4
5
|
/**
|
|
5
6
|
* Supported chain IDs for Morpho lending
|
|
6
7
|
* @description Array of chain IDs where Morpho is available
|
|
@@ -10,15 +11,14 @@ export declare const SUPPORTED_CHAIN_IDS: readonly number[];
|
|
|
10
11
|
* Morpho lending provider implementation
|
|
11
12
|
* @description Lending provider implementation using Morpho protocol
|
|
12
13
|
*/
|
|
13
|
-
export declare class MorphoLendProvider extends LendProvider<
|
|
14
|
+
export declare class MorphoLendProvider extends LendProvider<LendProviderConfig> {
|
|
14
15
|
protected readonly SUPPORTED_CHAIN_IDS: readonly number[];
|
|
15
|
-
private chainManager;
|
|
16
16
|
/**
|
|
17
17
|
* Create a new Morpho lending provider
|
|
18
18
|
* @param config - Morpho lending configuration
|
|
19
19
|
* @param chainManager - Chain manager for blockchain interactions
|
|
20
20
|
*/
|
|
21
|
-
constructor(config:
|
|
21
|
+
constructor(config: LendProviderConfig, chainManager: ChainManager);
|
|
22
22
|
/**
|
|
23
23
|
* Open a lending position in a Morpho market
|
|
24
24
|
* @description Opens a lending position by supplying assets to a Morpho market
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MorphoLendProvider.d.ts","sourceRoot":"","sources":["../../../../src/lend/providers/morpho/MorphoLendProvider.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,8BAA8B,EAC9B,eAAe,
|
|
1
|
+
{"version":3,"file":"MorphoLendProvider.d.ts","sourceRoot":"","sources":["../../../../src/lend/providers/morpho/MorphoLendProvider.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,8BAA8B,EAC9B,eAAe,EAChB,MAAM,uBAAuB,CAAA;AAG9B;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAO3B,SAAS,MAAM,EAAE,CAAA;AAEtB;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,YAAY,CAAC,kBAAkB,CAAC;IACtE,SAAS,CAAC,QAAQ,CAAC,mBAAmB,oBAAsB;IAE5D;;;;OAIG;gBACS,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY;IAIlE;;;;;OAKG;cACa,aAAa,CAC3B,MAAM,EAAE,8BAA8B,GACrC,OAAO,CAAC,eAAe,CAAC;IA2C3B;;;;;OAKG;cACa,cAAc,CAC5B,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,eAAe,CAAC;IAwC3B;;;;OAIG;cACa,UAAU,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;IAQvE;;;;OAIG;cACa,WAAW,CACzB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,UAAU,EAAE,CAAC;IAaxB;;;;OAIG;cACa,YAAY,CAC1B,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,kBAAkB,CAAC;CA+C/B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
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
|
import { SUPPORTED_CHAIN_IDS as ACTIONS_SUPPORTED_CHAIN_IDS } from '../../../constants/supportedChains.js';
|
|
5
5
|
import { LendProvider } from '../../core/LendProvider.js';
|
|
6
6
|
import { getVault, getVaults } from './sdk.js';
|
|
@@ -26,9 +26,8 @@ export class MorphoLendProvider extends LendProvider {
|
|
|
26
26
|
* @param chainManager - Chain manager for blockchain interactions
|
|
27
27
|
*/
|
|
28
28
|
constructor(config, chainManager) {
|
|
29
|
-
super(config);
|
|
29
|
+
super(config, chainManager);
|
|
30
30
|
this.SUPPORTED_CHAIN_IDS = SUPPORTED_CHAIN_IDS;
|
|
31
|
-
this.chainManager = chainManager;
|
|
32
31
|
}
|
|
33
32
|
/**
|
|
34
33
|
* Open a lending position in a Morpho market
|
|
@@ -38,11 +37,8 @@ export class MorphoLendProvider extends LendProvider {
|
|
|
38
37
|
*/
|
|
39
38
|
async _openPosition(params) {
|
|
40
39
|
try {
|
|
41
|
-
// Get asset address for the chain
|
|
42
|
-
const assetAddress = params.asset
|
|
43
|
-
if (!assetAddress) {
|
|
44
|
-
throw new Error(`Asset not supported on chain ${params.marketId.chainId}`);
|
|
45
|
-
}
|
|
40
|
+
// Get asset address for the chain (throws for native assets)
|
|
41
|
+
const assetAddress = getAssetAddress(params.asset, params.marketId.chainId);
|
|
46
42
|
// Get vault information for APY
|
|
47
43
|
const vaultInfo = await this.getMarket({
|
|
48
44
|
address: params.marketId.address,
|
|
@@ -51,33 +47,23 @@ export class MorphoLendProvider extends LendProvider {
|
|
|
51
47
|
const assets = params.amountWei;
|
|
52
48
|
const receiver = params.walletAddress;
|
|
53
49
|
const depositCallData = MetaMorphoAction.deposit(assets, receiver);
|
|
54
|
-
const approvalCallData = encodeFunctionData({
|
|
55
|
-
abi: erc20Abi,
|
|
56
|
-
functionName: 'approve',
|
|
57
|
-
args: [params.marketId.address, params.amountWei],
|
|
58
|
-
});
|
|
59
50
|
return {
|
|
60
51
|
amount: params.amountWei,
|
|
61
52
|
asset: assetAddress,
|
|
62
53
|
marketId: params.marketId.address,
|
|
63
54
|
apy: vaultInfo.apy.total,
|
|
64
55
|
transactionData: {
|
|
65
|
-
approval:
|
|
66
|
-
|
|
67
|
-
data: approvalCallData,
|
|
68
|
-
value: 0n,
|
|
69
|
-
},
|
|
70
|
-
openPosition: {
|
|
56
|
+
approval: this.buildApprovalTx(assetAddress, params.marketId.address, params.amountWei),
|
|
57
|
+
position: {
|
|
71
58
|
to: params.marketId.address,
|
|
72
59
|
data: depositCallData,
|
|
73
60
|
value: 0n,
|
|
74
61
|
},
|
|
75
62
|
},
|
|
76
|
-
slippage: params.options?.slippage || this._config.defaultSlippage,
|
|
77
63
|
};
|
|
78
64
|
}
|
|
79
|
-
catch
|
|
80
|
-
throw new Error(`Failed to open position with ${params.amountWei} of ${params.asset.metadata.symbol}
|
|
65
|
+
catch {
|
|
66
|
+
throw new Error(`Failed to open position with ${params.amountWei} of ${params.asset.metadata.symbol}`);
|
|
81
67
|
}
|
|
82
68
|
}
|
|
83
69
|
/**
|
|
@@ -104,17 +90,16 @@ export class MorphoLendProvider extends LendProvider {
|
|
|
104
90
|
marketId: params.marketId.address,
|
|
105
91
|
apy: vaultInfo.apy.total,
|
|
106
92
|
transactionData: {
|
|
107
|
-
|
|
93
|
+
position: {
|
|
108
94
|
to: params.marketId.address,
|
|
109
95
|
data: withdrawCallData,
|
|
110
96
|
value: 0n,
|
|
111
97
|
},
|
|
112
98
|
},
|
|
113
|
-
slippage: params.options?.slippage || this._config.defaultSlippage,
|
|
114
99
|
};
|
|
115
100
|
}
|
|
116
|
-
catch
|
|
117
|
-
throw new Error(
|
|
101
|
+
catch {
|
|
102
|
+
throw new Error('Failed to close position');
|
|
118
103
|
}
|
|
119
104
|
}
|
|
120
105
|
/**
|
|
@@ -185,8 +170,8 @@ export class MorphoLendProvider extends LendProvider {
|
|
|
185
170
|
marketId: params.marketId,
|
|
186
171
|
};
|
|
187
172
|
}
|
|
188
|
-
catch
|
|
189
|
-
throw new Error(`Failed to get market balance for ${params.walletAddress} in market ${params.marketId.address}
|
|
173
|
+
catch {
|
|
174
|
+
throw new Error(`Failed to get market balance for ${params.walletAddress} in market ${params.marketId.address}`);
|
|
190
175
|
}
|
|
191
176
|
}
|
|
192
177
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MorphoLendProvider.js","sourceRoot":"","sources":["../../../../src/lend/providers/morpho/MorphoLendProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"MorphoLendProvider.js","sourceRoot":"","sources":["../../../../src/lend/providers/morpho/MorphoLendProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { fetchAccrualVault } from '@morpho-org/blue-sdk-viem';
|
|
2
2
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
+
import { MockGauntletUSDCMarket, MockReceiverAddress, MockWETHMarket, } from '../../../__mocks__/MockMarkets.js';
|
|
3
4
|
import { createMockMorphoVault } from '../__mocks__/mockVault.js';
|
|
4
5
|
import { MorphoLendProvider } from '../MorphoLendProvider.js';
|
|
5
|
-
import { MockChainManager } from '../../../../
|
|
6
|
-
import { MockGauntletUSDCMarket, MockReceiverAddress, MockWETHMarket, } from '../../../../test/MockMarkets.js';
|
|
6
|
+
import { MockChainManager } from '../../../../services/__mocks__/MockChainManager.js';
|
|
7
7
|
// Mock the Morpho SDK modules
|
|
8
8
|
vi.mock('@morpho-org/blue-sdk-viem', () => ({
|
|
9
9
|
fetchMarket: vi.fn(),
|
|
@@ -29,8 +29,6 @@ describe('MorphoLendProvider', () => {
|
|
|
29
29
|
let mockChainManager;
|
|
30
30
|
beforeEach(() => {
|
|
31
31
|
mockConfig = {
|
|
32
|
-
provider: 'morpho',
|
|
33
|
-
defaultSlippage: 50,
|
|
34
32
|
marketAllowlist: [MockGauntletUSDCMarket, MockWETHMarket],
|
|
35
33
|
};
|
|
36
34
|
mockChainManager = new MockChainManager();
|
|
@@ -40,14 +38,6 @@ describe('MorphoLendProvider', () => {
|
|
|
40
38
|
it('should initialize with provided config', () => {
|
|
41
39
|
expect(provider).toBeInstanceOf(MorphoLendProvider);
|
|
42
40
|
});
|
|
43
|
-
it('should use default slippage when not provided', () => {
|
|
44
|
-
const configWithoutSlippage = {
|
|
45
|
-
...mockConfig,
|
|
46
|
-
defaultSlippage: undefined,
|
|
47
|
-
};
|
|
48
|
-
const providerWithDefaults = new MorphoLendProvider(configWithoutSlippage, mockChainManager);
|
|
49
|
-
expect(providerWithDefaults).toBeInstanceOf(MorphoLendProvider);
|
|
50
|
-
});
|
|
51
41
|
});
|
|
52
42
|
describe('closePosition', () => {
|
|
53
43
|
beforeEach(() => {
|
|
@@ -89,7 +79,7 @@ describe('MorphoLendProvider', () => {
|
|
|
89
79
|
expect(withdrawTransaction).toHaveProperty('marketId', marketId.address);
|
|
90
80
|
expect(withdrawTransaction).toHaveProperty('apy');
|
|
91
81
|
expect(withdrawTransaction).toHaveProperty('transactionData');
|
|
92
|
-
expect(withdrawTransaction.transactionData).toHaveProperty('
|
|
82
|
+
expect(withdrawTransaction.transactionData).toHaveProperty('position');
|
|
93
83
|
expect(withdrawTransaction.transactionData).not.toHaveProperty('approval');
|
|
94
84
|
expect(typeof withdrawTransaction.apy).toBe('number');
|
|
95
85
|
expect(withdrawTransaction.apy).toBeGreaterThan(0);
|
|
@@ -165,7 +155,7 @@ describe('MorphoLendProvider', () => {
|
|
|
165
155
|
expect(lendTransaction).toHaveProperty('apy');
|
|
166
156
|
expect(lendTransaction).toHaveProperty('transactionData');
|
|
167
157
|
expect(lendTransaction.transactionData).toHaveProperty('approval');
|
|
168
|
-
expect(lendTransaction.transactionData).toHaveProperty('
|
|
158
|
+
expect(lendTransaction.transactionData).toHaveProperty('position');
|
|
169
159
|
expect(typeof lendTransaction.apy).toBe('number');
|
|
170
160
|
expect(lendTransaction.apy).toBeGreaterThan(0);
|
|
171
161
|
});
|
|
@@ -182,41 +172,17 @@ describe('MorphoLendProvider', () => {
|
|
|
182
172
|
asset,
|
|
183
173
|
marketId,
|
|
184
174
|
walletAddress: MockReceiverAddress,
|
|
185
|
-
})).rejects.toThrow('
|
|
186
|
-
});
|
|
187
|
-
it('should use custom slippage when provided', async () => {
|
|
188
|
-
const amount = 1000;
|
|
189
|
-
const asset = MockGauntletUSDCMarket.asset;
|
|
190
|
-
const marketId = {
|
|
191
|
-
address: MockGauntletUSDCMarket.address,
|
|
192
|
-
chainId: MockGauntletUSDCMarket.chainId,
|
|
193
|
-
};
|
|
194
|
-
const customSlippage = 100; // 1%
|
|
195
|
-
const lendTransaction = await provider.openPosition({
|
|
196
|
-
amount,
|
|
197
|
-
asset,
|
|
198
|
-
marketId,
|
|
199
|
-
walletAddress: MockReceiverAddress,
|
|
200
|
-
options: {
|
|
201
|
-
slippage: customSlippage,
|
|
202
|
-
},
|
|
203
|
-
});
|
|
204
|
-
expect(lendTransaction).toHaveProperty('amount', BigInt('1000000000'));
|
|
175
|
+
})).rejects.toThrow('Failed to open position');
|
|
205
176
|
});
|
|
206
177
|
});
|
|
207
178
|
describe('market allowlist configuration', () => {
|
|
208
179
|
it('should work without market allowlist', () => {
|
|
209
|
-
const configWithoutAllowlist = {
|
|
210
|
-
provider: 'morpho',
|
|
211
|
-
defaultSlippage: 50,
|
|
212
|
-
};
|
|
180
|
+
const configWithoutAllowlist = {};
|
|
213
181
|
const providerWithoutAllowlist = new MorphoLendProvider(configWithoutAllowlist, mockChainManager);
|
|
214
182
|
expect(providerWithoutAllowlist.config.marketAllowlist).toBeUndefined();
|
|
215
183
|
});
|
|
216
184
|
it('should store market allowlist when provided', () => {
|
|
217
185
|
const configWithAllowlist = {
|
|
218
|
-
provider: 'morpho',
|
|
219
|
-
defaultSlippage: 50,
|
|
220
186
|
marketAllowlist: [MockGauntletUSDCMarket],
|
|
221
187
|
};
|
|
222
188
|
const providerWithAllowlist = new MorphoLendProvider(configWithAllowlist, mockChainManager);
|
|
@@ -226,25 +192,8 @@ describe('MorphoLendProvider', () => {
|
|
|
226
192
|
expect(allowlist[0].address).toBe(MockGauntletUSDCMarket.address);
|
|
227
193
|
expect(allowlist[0].name).toBe(MockGauntletUSDCMarket.name);
|
|
228
194
|
});
|
|
229
|
-
it('should use default slippage from config', () => {
|
|
230
|
-
const customSlippage = 150;
|
|
231
|
-
const configWithSlippage = {
|
|
232
|
-
provider: 'morpho',
|
|
233
|
-
defaultSlippage: customSlippage,
|
|
234
|
-
};
|
|
235
|
-
const providerWithSlippage = new MorphoLendProvider(configWithSlippage, mockChainManager);
|
|
236
|
-
expect(providerWithSlippage.config.defaultSlippage).toBe(customSlippage);
|
|
237
|
-
});
|
|
238
|
-
it('should use fallback default slippage when not provided', () => {
|
|
239
|
-
const configWithoutSlippage = {
|
|
240
|
-
provider: 'morpho',
|
|
241
|
-
};
|
|
242
|
-
const providerWithoutSlippage = new MorphoLendProvider(configWithoutSlippage, mockChainManager);
|
|
243
|
-
expect(providerWithoutSlippage.config.defaultSlippage || 50).toBe(50); // Default fallback
|
|
244
|
-
});
|
|
245
195
|
it('should handle multiple markets in allowlist', () => {
|
|
246
196
|
const configWithMultipleMarkets = {
|
|
247
|
-
provider: 'morpho',
|
|
248
197
|
marketAllowlist: [MockGauntletUSDCMarket, MockWETHMarket],
|
|
249
198
|
};
|
|
250
199
|
const provider = new MorphoLendProvider(configWithMultipleMarkets, mockChainManager);
|