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