@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,419 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import { MockReceiverAddress } from '@/lend/__mocks__/MockMarkets.js'
|
|
4
|
+
import {
|
|
5
|
+
createMockAaveReserve,
|
|
6
|
+
createMockWETHReserve,
|
|
7
|
+
} from '@/lend/providers/aave/__mocks__/mockReserve.js'
|
|
8
|
+
import { AaveLendProvider } from '@/lend/providers/aave/AaveLendProvider.js'
|
|
9
|
+
import * as aaveSdk from '@/lend/providers/aave/sdk.js'
|
|
10
|
+
import { MockChainManager } from '@/services/__mocks__/MockChainManager.js'
|
|
11
|
+
import type { ChainManager } from '@/services/ChainManager.js'
|
|
12
|
+
import type { LendProviderConfig } from '@/types/actions.js'
|
|
13
|
+
import type { Asset, LendMarketConfig } from '@/types/index.js'
|
|
14
|
+
|
|
15
|
+
// Mock the Aave SDK modules
|
|
16
|
+
vi.mock('@/lend/providers/aave/sdk.js', () => ({
|
|
17
|
+
getReserve: vi.fn(),
|
|
18
|
+
getReserves: vi.fn(),
|
|
19
|
+
getATokenAddress: vi.fn(),
|
|
20
|
+
}))
|
|
21
|
+
|
|
22
|
+
// Mock assets for Aave tests (using Base chain ID 8453)
|
|
23
|
+
const MockAaveUSDCAsset: Asset = {
|
|
24
|
+
address: {
|
|
25
|
+
8453: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
26
|
+
},
|
|
27
|
+
metadata: {
|
|
28
|
+
decimals: 6,
|
|
29
|
+
name: 'USD Coin',
|
|
30
|
+
symbol: 'USDC',
|
|
31
|
+
},
|
|
32
|
+
type: 'erc20',
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const MockAaveETHAsset: Asset = {
|
|
36
|
+
address: {
|
|
37
|
+
8453: 'native',
|
|
38
|
+
},
|
|
39
|
+
metadata: {
|
|
40
|
+
decimals: 18,
|
|
41
|
+
name: 'Ethereum',
|
|
42
|
+
symbol: 'ETH',
|
|
43
|
+
},
|
|
44
|
+
type: 'native',
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Mock market configurations for Aave
|
|
48
|
+
const MockAaveUSDCMarket: LendMarketConfig = {
|
|
49
|
+
address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
50
|
+
chainId: 8453, // Base
|
|
51
|
+
name: 'Aave USDC Base',
|
|
52
|
+
asset: MockAaveUSDCAsset,
|
|
53
|
+
lendProvider: 'aave',
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const MockAaveETHMarket: LendMarketConfig = {
|
|
57
|
+
address: '0x4200000000000000000000000000000000000006', // WETH predeploy (market uses WETH internally)
|
|
58
|
+
chainId: 8453,
|
|
59
|
+
name: 'Aave ETH Base',
|
|
60
|
+
asset: MockAaveETHAsset,
|
|
61
|
+
lendProvider: 'aave',
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
describe('AaveLendProvider', () => {
|
|
65
|
+
let provider: AaveLendProvider
|
|
66
|
+
let mockConfig: LendProviderConfig
|
|
67
|
+
let mockChainManager: ChainManager
|
|
68
|
+
|
|
69
|
+
beforeEach(() => {
|
|
70
|
+
mockConfig = {
|
|
71
|
+
marketAllowlist: [MockAaveUSDCMarket, MockAaveETHMarket],
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
mockChainManager = new MockChainManager({
|
|
75
|
+
supportedChains: [8453],
|
|
76
|
+
}) as unknown as ChainManager
|
|
77
|
+
|
|
78
|
+
provider = new AaveLendProvider(mockConfig, mockChainManager)
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
afterEach(() => {
|
|
82
|
+
vi.clearAllMocks()
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
describe('constructor', () => {
|
|
86
|
+
it('should initialize with provided config', () => {
|
|
87
|
+
expect(provider).toBeInstanceOf(AaveLendProvider)
|
|
88
|
+
})
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
describe('supportedChainIds', () => {
|
|
92
|
+
it('should return array of supported chain IDs', () => {
|
|
93
|
+
const chainIds = provider.supportedChainIds()
|
|
94
|
+
|
|
95
|
+
expect(chainIds).toHaveLength(4)
|
|
96
|
+
expect(chainIds).toContain(10) // Optimism
|
|
97
|
+
expect(chainIds).toContain(8453) // Base
|
|
98
|
+
expect(chainIds).toContain(11155420) // Optimism Sepolia
|
|
99
|
+
expect(chainIds).toContain(84532) // Base Sepolia
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
it('should return unique chain IDs', () => {
|
|
103
|
+
const chainIds = provider.supportedChainIds()
|
|
104
|
+
const uniqueIds = [...new Set(chainIds)]
|
|
105
|
+
|
|
106
|
+
expect(chainIds.length).toBe(uniqueIds.length)
|
|
107
|
+
})
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
describe('openPosition', () => {
|
|
111
|
+
beforeEach(() => {
|
|
112
|
+
const mockReserve = createMockAaveReserve()
|
|
113
|
+
vi.mocked(aaveSdk.getReserve).mockResolvedValue(mockReserve)
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
it('should successfully create a lending transaction for ERC20', async () => {
|
|
117
|
+
const amount = 1000
|
|
118
|
+
const asset = MockAaveUSDCAsset
|
|
119
|
+
const marketId = {
|
|
120
|
+
address: MockAaveUSDCMarket.address,
|
|
121
|
+
chainId: MockAaveUSDCMarket.chainId,
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const lendTransaction = await provider.openPosition({
|
|
125
|
+
amount,
|
|
126
|
+
asset,
|
|
127
|
+
marketId,
|
|
128
|
+
walletAddress: MockReceiverAddress,
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
expect(lendTransaction).toHaveProperty('amount', BigInt('1000000000'))
|
|
132
|
+
expect(lendTransaction).toHaveProperty(
|
|
133
|
+
'asset',
|
|
134
|
+
asset.address[marketId.chainId],
|
|
135
|
+
)
|
|
136
|
+
expect(lendTransaction).toHaveProperty('marketId', marketId.address)
|
|
137
|
+
expect(lendTransaction).toHaveProperty('apy')
|
|
138
|
+
expect(lendTransaction).toHaveProperty('transactionData')
|
|
139
|
+
expect(lendTransaction.transactionData).toHaveProperty('approval')
|
|
140
|
+
expect(lendTransaction.transactionData).toHaveProperty('position')
|
|
141
|
+
expect(typeof lendTransaction.apy).toBe('number')
|
|
142
|
+
expect(lendTransaction.apy).toBeGreaterThan(0)
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
it('should create native ETH deposit without approval', async () => {
|
|
146
|
+
const mockETHReserve = createMockWETHReserve()
|
|
147
|
+
vi.mocked(aaveSdk.getReserve).mockResolvedValue(mockETHReserve)
|
|
148
|
+
|
|
149
|
+
const amount = 1
|
|
150
|
+
const asset = MockAaveETHAsset
|
|
151
|
+
const marketId = {
|
|
152
|
+
address: MockAaveETHMarket.address,
|
|
153
|
+
chainId: MockAaveETHMarket.chainId,
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const lendTransaction = await provider.openPosition({
|
|
157
|
+
amount,
|
|
158
|
+
asset,
|
|
159
|
+
marketId,
|
|
160
|
+
walletAddress: MockReceiverAddress,
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
expect(lendTransaction).toHaveProperty(
|
|
164
|
+
'amount',
|
|
165
|
+
BigInt('1000000000000000000'),
|
|
166
|
+
)
|
|
167
|
+
expect(lendTransaction.transactionData).not.toHaveProperty('approval')
|
|
168
|
+
expect(lendTransaction.transactionData).toHaveProperty('position')
|
|
169
|
+
// Native ETH deposits send ETH as msg.value via WETHGateway
|
|
170
|
+
expect(lendTransaction.transactionData.position.value).toBe(
|
|
171
|
+
BigInt('1000000000000000000'),
|
|
172
|
+
)
|
|
173
|
+
})
|
|
174
|
+
|
|
175
|
+
it('should handle lending errors', async () => {
|
|
176
|
+
vi.mocked(aaveSdk.getReserve).mockRejectedValueOnce(
|
|
177
|
+
new Error('Market fetch failed'),
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
const asset = MockAaveUSDCAsset
|
|
181
|
+
const amount = 1000
|
|
182
|
+
const marketId = {
|
|
183
|
+
address: MockAaveUSDCMarket.address,
|
|
184
|
+
chainId: MockAaveUSDCMarket.chainId,
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
await expect(
|
|
188
|
+
provider.openPosition({
|
|
189
|
+
amount,
|
|
190
|
+
asset,
|
|
191
|
+
marketId,
|
|
192
|
+
walletAddress: MockReceiverAddress,
|
|
193
|
+
}),
|
|
194
|
+
).rejects.toThrow('Failed to open position')
|
|
195
|
+
})
|
|
196
|
+
})
|
|
197
|
+
|
|
198
|
+
describe('closePosition', () => {
|
|
199
|
+
beforeEach(() => {
|
|
200
|
+
const mockReserve = createMockAaveReserve()
|
|
201
|
+
vi.mocked(aaveSdk.getReserve).mockResolvedValue(mockReserve)
|
|
202
|
+
})
|
|
203
|
+
|
|
204
|
+
it('should successfully create a withdrawal transaction for ERC20', async () => {
|
|
205
|
+
const amount = 500
|
|
206
|
+
const asset = MockAaveUSDCAsset
|
|
207
|
+
const marketId = {
|
|
208
|
+
address: MockAaveUSDCMarket.address,
|
|
209
|
+
chainId: MockAaveUSDCMarket.chainId,
|
|
210
|
+
}
|
|
211
|
+
const walletAddress = MockReceiverAddress
|
|
212
|
+
|
|
213
|
+
const withdrawTransaction = await provider.closePosition({
|
|
214
|
+
amount,
|
|
215
|
+
asset,
|
|
216
|
+
marketId,
|
|
217
|
+
walletAddress,
|
|
218
|
+
})
|
|
219
|
+
|
|
220
|
+
expect(withdrawTransaction).toHaveProperty('amount', BigInt('500000000'))
|
|
221
|
+
expect(withdrawTransaction).toHaveProperty(
|
|
222
|
+
'asset',
|
|
223
|
+
asset.address[marketId.chainId],
|
|
224
|
+
)
|
|
225
|
+
expect(withdrawTransaction).toHaveProperty('marketId', marketId.address)
|
|
226
|
+
expect(withdrawTransaction).toHaveProperty('apy')
|
|
227
|
+
expect(withdrawTransaction).toHaveProperty('transactionData')
|
|
228
|
+
expect(withdrawTransaction.transactionData).toHaveProperty('position')
|
|
229
|
+
expect(withdrawTransaction.transactionData).not.toHaveProperty('approval')
|
|
230
|
+
expect(typeof withdrawTransaction.apy).toBe('number')
|
|
231
|
+
expect(withdrawTransaction.apy).toBeGreaterThan(0)
|
|
232
|
+
})
|
|
233
|
+
|
|
234
|
+
it('should create native ETH withdrawal with approval', async () => {
|
|
235
|
+
const mockETHReserve = createMockWETHReserve()
|
|
236
|
+
vi.mocked(aaveSdk.getReserve).mockResolvedValue(mockETHReserve)
|
|
237
|
+
vi.mocked(aaveSdk.getATokenAddress).mockResolvedValue(
|
|
238
|
+
'0xD4a0e0b9149BCee3C920d2E00b5dE09138fd8bb7',
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
const amount = 1
|
|
242
|
+
const asset = MockAaveETHAsset
|
|
243
|
+
const marketId = {
|
|
244
|
+
address: MockAaveETHMarket.address,
|
|
245
|
+
chainId: MockAaveETHMarket.chainId,
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
const withdrawTransaction = await provider.closePosition({
|
|
249
|
+
amount,
|
|
250
|
+
asset,
|
|
251
|
+
marketId,
|
|
252
|
+
walletAddress: MockReceiverAddress,
|
|
253
|
+
})
|
|
254
|
+
|
|
255
|
+
expect(withdrawTransaction).toHaveProperty(
|
|
256
|
+
'amount',
|
|
257
|
+
BigInt('1000000000000000000'),
|
|
258
|
+
)
|
|
259
|
+
// Native ETH withdrawals require approving aWETH to WETHGateway
|
|
260
|
+
expect(withdrawTransaction.transactionData).toHaveProperty('approval')
|
|
261
|
+
expect(withdrawTransaction.transactionData).toHaveProperty('position')
|
|
262
|
+
})
|
|
263
|
+
|
|
264
|
+
it('should handle withdrawal errors', async () => {
|
|
265
|
+
vi.mocked(aaveSdk.getReserve).mockRejectedValueOnce(
|
|
266
|
+
new Error('Market fetch failed'),
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
const amount = 500
|
|
270
|
+
const asset = MockAaveUSDCAsset
|
|
271
|
+
const marketId = {
|
|
272
|
+
address: MockAaveUSDCMarket.address,
|
|
273
|
+
chainId: MockAaveUSDCMarket.chainId,
|
|
274
|
+
}
|
|
275
|
+
const walletAddress = MockReceiverAddress
|
|
276
|
+
|
|
277
|
+
await expect(
|
|
278
|
+
provider.closePosition({
|
|
279
|
+
amount,
|
|
280
|
+
asset,
|
|
281
|
+
marketId,
|
|
282
|
+
walletAddress,
|
|
283
|
+
}),
|
|
284
|
+
).rejects.toThrow('Market fetch failed')
|
|
285
|
+
})
|
|
286
|
+
})
|
|
287
|
+
|
|
288
|
+
describe('market allowlist configuration', () => {
|
|
289
|
+
it('should work without market allowlist', () => {
|
|
290
|
+
const configWithoutAllowlist: LendProviderConfig = {}
|
|
291
|
+
|
|
292
|
+
const providerWithoutAllowlist = new AaveLendProvider(
|
|
293
|
+
configWithoutAllowlist,
|
|
294
|
+
mockChainManager,
|
|
295
|
+
)
|
|
296
|
+
|
|
297
|
+
expect(providerWithoutAllowlist.config.marketAllowlist).toBeUndefined()
|
|
298
|
+
})
|
|
299
|
+
|
|
300
|
+
it('should store market allowlist when provided', () => {
|
|
301
|
+
const configWithAllowlist: LendProviderConfig = {
|
|
302
|
+
marketAllowlist: [MockAaveUSDCMarket],
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
const providerWithAllowlist = new AaveLendProvider(
|
|
306
|
+
configWithAllowlist,
|
|
307
|
+
mockChainManager,
|
|
308
|
+
)
|
|
309
|
+
|
|
310
|
+
const allowlist = providerWithAllowlist.config.marketAllowlist
|
|
311
|
+
expect(allowlist).toBeDefined()
|
|
312
|
+
expect(allowlist).toHaveLength(1)
|
|
313
|
+
expect(allowlist![0].address).toBe(MockAaveUSDCMarket.address)
|
|
314
|
+
expect(allowlist![0].name).toBe(MockAaveUSDCMarket.name)
|
|
315
|
+
})
|
|
316
|
+
|
|
317
|
+
it('should handle multiple markets in allowlist', () => {
|
|
318
|
+
const configWithMultipleMarkets: LendProviderConfig = {
|
|
319
|
+
marketAllowlist: [MockAaveUSDCMarket, MockAaveETHMarket],
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
const providerInstance = new AaveLendProvider(
|
|
323
|
+
configWithMultipleMarkets,
|
|
324
|
+
mockChainManager,
|
|
325
|
+
)
|
|
326
|
+
|
|
327
|
+
const allowlist = providerInstance.config.marketAllowlist
|
|
328
|
+
expect(allowlist).toBeDefined()
|
|
329
|
+
expect(allowlist).toHaveLength(2)
|
|
330
|
+
expect(allowlist![0].name).toBe(MockAaveUSDCMarket.name)
|
|
331
|
+
expect(allowlist![1].name).toBe(MockAaveETHMarket.name)
|
|
332
|
+
})
|
|
333
|
+
})
|
|
334
|
+
|
|
335
|
+
describe('ETH/WETH market configuration', () => {
|
|
336
|
+
it('should detect native asset type for ETH market', () => {
|
|
337
|
+
// Market is configured with ETH (type: native) but uses WETH address internally
|
|
338
|
+
expect(MockAaveETHMarket.asset.type).toBe('native')
|
|
339
|
+
expect(MockAaveETHMarket.asset.address[8453]).toBe('native')
|
|
340
|
+
// Market address points to WETH for Aave's internal operations
|
|
341
|
+
expect(MockAaveETHMarket.address).toBe(
|
|
342
|
+
'0x4200000000000000000000000000000000000006',
|
|
343
|
+
)
|
|
344
|
+
})
|
|
345
|
+
|
|
346
|
+
it('should use WETHGateway for ETH deposits when asset type is native', async () => {
|
|
347
|
+
const mockETHReserve = createMockWETHReserve()
|
|
348
|
+
vi.mocked(aaveSdk.getReserve).mockResolvedValue(mockETHReserve)
|
|
349
|
+
|
|
350
|
+
const lendTransaction = await provider.openPosition({
|
|
351
|
+
amount: 1,
|
|
352
|
+
asset: MockAaveETHAsset,
|
|
353
|
+
marketId: {
|
|
354
|
+
address: MockAaveETHMarket.address,
|
|
355
|
+
chainId: MockAaveETHMarket.chainId,
|
|
356
|
+
},
|
|
357
|
+
walletAddress: MockReceiverAddress,
|
|
358
|
+
})
|
|
359
|
+
|
|
360
|
+
// Native ETH deposits should have msg.value set (WETHGateway flow)
|
|
361
|
+
expect(lendTransaction.transactionData.position.value).toBe(
|
|
362
|
+
BigInt('1000000000000000000'),
|
|
363
|
+
)
|
|
364
|
+
// Should not require approval for native ETH
|
|
365
|
+
expect(lendTransaction.transactionData.approval).toBeUndefined()
|
|
366
|
+
})
|
|
367
|
+
|
|
368
|
+
it('should allow developer to configure ETH market without knowing about WETH internals', () => {
|
|
369
|
+
// Developer configures market with ETH asset
|
|
370
|
+
// SDK handles WETH internally via WETHGateway
|
|
371
|
+
const marketConfig: LendMarketConfig = {
|
|
372
|
+
address: '0x4200000000000000000000000000000000000006', // WETH address
|
|
373
|
+
chainId: 8453,
|
|
374
|
+
name: 'Aave ETH',
|
|
375
|
+
asset: MockAaveETHAsset, // Uses ETH (native) asset
|
|
376
|
+
lendProvider: 'aave',
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
// Verify the market uses native asset
|
|
380
|
+
expect(marketConfig.asset.type).toBe('native')
|
|
381
|
+
// Developer doesn't need to create a separate WETH asset
|
|
382
|
+
})
|
|
383
|
+
})
|
|
384
|
+
|
|
385
|
+
describe('unsupported chain handling', () => {
|
|
386
|
+
it('should throw error for unsupported chain', async () => {
|
|
387
|
+
// Use type assertion to test runtime behavior with unsupported chain
|
|
388
|
+
const unsupportedChainId = 999999 as 8453
|
|
389
|
+
const unsupportedMarket: LendMarketConfig = {
|
|
390
|
+
address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
391
|
+
chainId: unsupportedChainId,
|
|
392
|
+
name: 'Unsupported Market',
|
|
393
|
+
asset: MockAaveUSDCAsset,
|
|
394
|
+
lendProvider: 'aave',
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
const configWithUnsupported: LendProviderConfig = {
|
|
398
|
+
marketAllowlist: [unsupportedMarket],
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
const providerWithUnsupported = new AaveLendProvider(
|
|
402
|
+
configWithUnsupported,
|
|
403
|
+
mockChainManager,
|
|
404
|
+
)
|
|
405
|
+
|
|
406
|
+
await expect(
|
|
407
|
+
providerWithUnsupported.openPosition({
|
|
408
|
+
amount: 100,
|
|
409
|
+
asset: MockAaveUSDCAsset,
|
|
410
|
+
marketId: {
|
|
411
|
+
address: unsupportedMarket.address,
|
|
412
|
+
chainId: unsupportedMarket.chainId,
|
|
413
|
+
},
|
|
414
|
+
walletAddress: MockReceiverAddress,
|
|
415
|
+
}),
|
|
416
|
+
).rejects.toThrow('not supported')
|
|
417
|
+
})
|
|
418
|
+
})
|
|
419
|
+
})
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { parseAbi } from 'viem'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Aave Pool ABI - supply and withdraw functions
|
|
5
|
+
*/
|
|
6
|
+
export const POOL_ABI = parseAbi([
|
|
7
|
+
'function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode)',
|
|
8
|
+
'function withdraw(address asset, uint256 amount, address to) returns (uint256)',
|
|
9
|
+
])
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Aave Pool ABI - getReserveData for fetching reserve info including aToken addresses
|
|
13
|
+
*/
|
|
14
|
+
export const POOL_GET_RESERVE_DATA_ABI = [
|
|
15
|
+
{
|
|
16
|
+
inputs: [{ name: 'asset', type: 'address', internalType: 'address' }],
|
|
17
|
+
name: 'getReserveData',
|
|
18
|
+
outputs: [
|
|
19
|
+
{
|
|
20
|
+
components: [
|
|
21
|
+
{ name: 'data', type: 'uint256', internalType: 'uint256' },
|
|
22
|
+
],
|
|
23
|
+
name: 'configuration',
|
|
24
|
+
type: 'tuple',
|
|
25
|
+
internalType: 'struct DataTypes.ReserveConfigurationMap',
|
|
26
|
+
},
|
|
27
|
+
{ name: 'liquidityIndex', type: 'uint128', internalType: 'uint128' },
|
|
28
|
+
{
|
|
29
|
+
name: 'currentLiquidityRate',
|
|
30
|
+
type: 'uint128',
|
|
31
|
+
internalType: 'uint128',
|
|
32
|
+
},
|
|
33
|
+
{ name: 'variableBorrowIndex', type: 'uint128', internalType: 'uint128' },
|
|
34
|
+
{
|
|
35
|
+
name: 'currentVariableBorrowRate',
|
|
36
|
+
type: 'uint128',
|
|
37
|
+
internalType: 'uint128',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'currentStableBorrowRate',
|
|
41
|
+
type: 'uint128',
|
|
42
|
+
internalType: 'uint128',
|
|
43
|
+
},
|
|
44
|
+
{ name: 'lastUpdateTimestamp', type: 'uint40', internalType: 'uint40' },
|
|
45
|
+
{ name: 'id', type: 'uint16', internalType: 'uint16' },
|
|
46
|
+
{ name: 'aTokenAddress', type: 'address', internalType: 'address' },
|
|
47
|
+
{
|
|
48
|
+
name: 'stableDebtTokenAddress',
|
|
49
|
+
type: 'address',
|
|
50
|
+
internalType: 'address',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'variableDebtTokenAddress',
|
|
54
|
+
type: 'address',
|
|
55
|
+
internalType: 'address',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'interestRateStrategyAddress',
|
|
59
|
+
type: 'address',
|
|
60
|
+
internalType: 'address',
|
|
61
|
+
},
|
|
62
|
+
{ name: 'accruedToTreasury', type: 'uint128', internalType: 'uint128' },
|
|
63
|
+
{ name: 'unbacked', type: 'uint128', internalType: 'uint128' },
|
|
64
|
+
{
|
|
65
|
+
name: 'isolationModeTotalDebt',
|
|
66
|
+
type: 'uint128',
|
|
67
|
+
internalType: 'uint128',
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
stateMutability: 'view',
|
|
71
|
+
type: 'function',
|
|
72
|
+
},
|
|
73
|
+
] as const
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Aave WETHGateway ABI - for native ETH deposits/withdrawals
|
|
77
|
+
*/
|
|
78
|
+
export const WETH_GATEWAY_ABI = parseAbi([
|
|
79
|
+
'function depositETH(address pool, address onBehalfOf, uint16 referralCode) payable',
|
|
80
|
+
'function withdrawETH(address pool, uint256 amount, address to)',
|
|
81
|
+
])
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { Address } from 'viem'
|
|
2
|
+
import { base, baseSepolia, optimism, optimismSepolia } from 'viem/chains'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Aave V3 Pool addresses for Optimism Superchain networks
|
|
6
|
+
* @description Hardcoded Pool contract addresses for each supported chain
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Mainnet Pool addresses
|
|
11
|
+
*/
|
|
12
|
+
export const POOL_ADDRESSES_MAINNET: Record<number, Address> = {
|
|
13
|
+
[optimism.id]: '0x794a61358D6845594F94dc1DB02A252b5b4814aD',
|
|
14
|
+
[base.id]: '0xA238Dd80C259a72e81d7e4664a9801593F98d1c5',
|
|
15
|
+
} as const
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Testnet Pool addresses
|
|
19
|
+
*/
|
|
20
|
+
export const POOL_ADDRESSES_TESTNET: Record<number, Address> = {
|
|
21
|
+
[optimismSepolia.id]: '0xb50201558b00496a145fe76f7424749556e326d8',
|
|
22
|
+
[baseSepolia.id]: '0x8bAB6d1b75f19e9eD9fCe8b9BD338844fF79aE27',
|
|
23
|
+
} as const
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* All Pool addresses (mainnet + testnet)
|
|
27
|
+
*/
|
|
28
|
+
export const POOL_ADDRESSES: Record<number, Address> = {
|
|
29
|
+
...POOL_ADDRESSES_MAINNET,
|
|
30
|
+
...POOL_ADDRESSES_TESTNET,
|
|
31
|
+
} as const
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Get Pool address for a given chain ID
|
|
35
|
+
* @param chainId - Chain ID
|
|
36
|
+
* @returns Pool address if supported, undefined otherwise
|
|
37
|
+
*/
|
|
38
|
+
export function getPoolAddress(chainId: number): Address | undefined {
|
|
39
|
+
return POOL_ADDRESSES[chainId]
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Check if a chain ID has Aave V3 deployed
|
|
44
|
+
* @param chainId - Chain ID to check
|
|
45
|
+
* @returns true if Aave V3 is deployed on this chain
|
|
46
|
+
*/
|
|
47
|
+
export function isAaveChainSupported(chainId: number): boolean {
|
|
48
|
+
return chainId in POOL_ADDRESSES
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Get all supported chain IDs
|
|
53
|
+
* @returns Array of chain IDs with Aave V3 deployed
|
|
54
|
+
*/
|
|
55
|
+
export function getSupportedChainIds(): number[] {
|
|
56
|
+
return Object.keys(POOL_ADDRESSES).map(Number)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Aave V3 WETHGateway addresses for Optimism Superchain networks
|
|
61
|
+
* @description Gateway contracts that handle native ETH wrapping and depositing
|
|
62
|
+
*/
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Mainnet WETHGateway addresses
|
|
66
|
+
*/
|
|
67
|
+
export const WETH_GATEWAY_ADDRESSES_MAINNET: Record<number, Address> = {
|
|
68
|
+
[optimism.id]: '0x5f2508cAE9923b02316254026CD43d7902866725',
|
|
69
|
+
[base.id]: '0xa0d9C1E9E48Ca30c8d8C3B5D69FF5dc1f6DFfC24',
|
|
70
|
+
} as const
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Testnet WETHGateway addresses
|
|
74
|
+
*/
|
|
75
|
+
export const WETH_GATEWAY_ADDRESSES_TESTNET: Record<number, Address> = {
|
|
76
|
+
[optimismSepolia.id]: '0x589750BA8aF186cE5B55391B0b7148cAD43a1619',
|
|
77
|
+
[baseSepolia.id]: '0x0568130e794429D2eEBC4dafE18f25Ff1a1ed8b6',
|
|
78
|
+
} as const
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* All WETHGateway addresses (mainnet + testnet)
|
|
82
|
+
*/
|
|
83
|
+
export const WETH_GATEWAY_ADDRESSES: Record<number, Address> = {
|
|
84
|
+
...WETH_GATEWAY_ADDRESSES_MAINNET,
|
|
85
|
+
...WETH_GATEWAY_ADDRESSES_TESTNET,
|
|
86
|
+
} as const
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Get WETHGateway address for a given chain ID
|
|
90
|
+
* @param chainId - Chain ID
|
|
91
|
+
* @returns WETHGateway address if supported, undefined otherwise
|
|
92
|
+
*/
|
|
93
|
+
export function getWETHGatewayAddress(chainId: number): Address | undefined {
|
|
94
|
+
return WETH_GATEWAY_ADDRESSES[chainId]
|
|
95
|
+
}
|