@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.
Files changed (395) hide show
  1. package/LICENSE +1 -1
  2. package/dist/__mocks__/MockAssets.d.ts.map +1 -0
  3. package/dist/__mocks__/MockAssets.js.map +1 -0
  4. package/dist/__mocks__/MockPrivyClient.d.ts.map +1 -0
  5. package/dist/__mocks__/MockPrivyClient.js.map +1 -0
  6. package/dist/__mocks__/utils.d.ts.map +1 -0
  7. package/dist/__mocks__/utils.js.map +1 -0
  8. package/dist/__tests__/actions.test.d.ts.map +1 -0
  9. package/dist/{actions.test.js → __tests__/actions.test.js} +35 -85
  10. package/dist/__tests__/actions.test.js.map +1 -0
  11. package/dist/actions.d.ts +19 -7
  12. package/dist/actions.d.ts.map +1 -1
  13. package/dist/actions.js +49 -19
  14. package/dist/actions.js.map +1 -1
  15. package/dist/constants/assets.d.ts +19 -0
  16. package/dist/constants/assets.d.ts.map +1 -1
  17. package/dist/constants/assets.js +84 -6
  18. package/dist/constants/assets.js.map +1 -1
  19. package/dist/constants/supportedChains.d.ts +1 -1
  20. package/dist/constants/supportedChains.d.ts.map +1 -1
  21. package/dist/constants/supportedChains.js +7 -3
  22. package/dist/constants/supportedChains.js.map +1 -1
  23. package/dist/core/asset/__mocks__/mockAsset.js +1 -1
  24. package/dist/core/asset/__mocks__/mockAsset.js.map +1 -1
  25. package/dist/index.d.ts +2 -2
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +1 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/{test → lend/__mocks__}/MockLendProvider.d.ts +9 -7
  30. package/dist/lend/__mocks__/MockLendProvider.d.ts.map +1 -0
  31. package/dist/{test → lend/__mocks__}/MockLendProvider.js +20 -21
  32. package/dist/lend/__mocks__/MockLendProvider.js.map +1 -0
  33. package/dist/{test → lend/__mocks__}/MockMarkets.d.ts +1 -1
  34. package/dist/lend/__mocks__/MockMarkets.d.ts.map +1 -0
  35. package/dist/{test → lend/__mocks__}/MockMarkets.js +1 -1
  36. package/dist/lend/__mocks__/MockMarkets.js.map +1 -0
  37. package/dist/lend/__mocks__/mockLendTransaction.d.ts +3 -12
  38. package/dist/lend/__mocks__/mockLendTransaction.d.ts.map +1 -1
  39. package/dist/lend/__mocks__/mockLendTransaction.js +3 -19
  40. package/dist/lend/__mocks__/mockLendTransaction.js.map +1 -1
  41. package/dist/lend/core/LendProvider.d.ts +16 -3
  42. package/dist/lend/core/LendProvider.d.ts.map +1 -1
  43. package/dist/lend/core/LendProvider.js +23 -2
  44. package/dist/lend/core/LendProvider.js.map +1 -1
  45. package/dist/lend/core/__tests__/LendProvider.test.js +20 -50
  46. package/dist/lend/core/__tests__/LendProvider.test.js.map +1 -1
  47. package/dist/lend/index.d.ts +1 -0
  48. package/dist/lend/index.d.ts.map +1 -1
  49. package/dist/lend/index.js +1 -0
  50. package/dist/lend/index.js.map +1 -1
  51. package/dist/lend/namespaces/ActionsLendNamespace.d.ts +2 -9
  52. package/dist/lend/namespaces/ActionsLendNamespace.d.ts.map +1 -1
  53. package/dist/lend/namespaces/ActionsLendNamespace.js +2 -11
  54. package/dist/lend/namespaces/ActionsLendNamespace.js.map +1 -1
  55. package/dist/lend/namespaces/BaseLendNamespace.d.ts +47 -0
  56. package/dist/lend/namespaces/BaseLendNamespace.d.ts.map +1 -0
  57. package/dist/lend/namespaces/BaseLendNamespace.js +58 -0
  58. package/dist/lend/namespaces/BaseLendNamespace.js.map +1 -0
  59. package/dist/lend/namespaces/WalletLendNamespace.d.ts +8 -9
  60. package/dist/lend/namespaces/WalletLendNamespace.d.ts.map +1 -1
  61. package/dist/lend/namespaces/WalletLendNamespace.js +24 -31
  62. package/dist/lend/namespaces/WalletLendNamespace.js.map +1 -1
  63. package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js +25 -17
  64. package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js.map +1 -1
  65. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.d.ts +2 -0
  66. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.d.ts.map +1 -0
  67. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js +110 -0
  68. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js.map +1 -0
  69. package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js +37 -21
  70. package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js.map +1 -1
  71. package/dist/lend/providers/aave/AaveLendProvider.d.ts +74 -0
  72. package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -0
  73. package/dist/lend/providers/aave/AaveLendProvider.js +290 -0
  74. package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -0
  75. package/dist/lend/providers/aave/__mocks__/mockReserve.d.ts +11 -0
  76. package/dist/lend/providers/aave/__mocks__/mockReserve.d.ts.map +1 -0
  77. package/dist/lend/providers/aave/__mocks__/mockReserve.js +80 -0
  78. package/dist/lend/providers/aave/__mocks__/mockReserve.js.map +1 -0
  79. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.d.ts +2 -0
  80. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.d.ts.map +1 -0
  81. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js +315 -0
  82. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js.map +1 -0
  83. package/dist/lend/providers/aave/abis/pool.d.ts +153 -0
  84. package/dist/lend/providers/aave/abis/pool.d.ts.map +1 -0
  85. package/dist/lend/providers/aave/abis/pool.js +79 -0
  86. package/dist/lend/providers/aave/abis/pool.js.map +1 -0
  87. package/dist/lend/providers/aave/addresses.d.ts +57 -0
  88. package/dist/lend/providers/aave/addresses.d.ts.map +1 -0
  89. package/dist/lend/providers/aave/addresses.js +83 -0
  90. package/dist/lend/providers/aave/addresses.js.map +1 -0
  91. package/dist/lend/providers/aave/sdk.d.ts +57 -0
  92. package/dist/lend/providers/aave/sdk.d.ts.map +1 -0
  93. package/dist/lend/providers/aave/sdk.js +201 -0
  94. package/dist/lend/providers/aave/sdk.js.map +1 -0
  95. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +4 -4
  96. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
  97. package/dist/lend/providers/morpho/MorphoLendProvider.js +13 -28
  98. package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
  99. package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js +6 -57
  100. package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js.map +1 -1
  101. package/dist/lend/providers/morpho/__tests__/api.test.js +248 -54
  102. package/dist/lend/providers/morpho/__tests__/api.test.js.map +1 -1
  103. package/dist/lend/providers/morpho/__tests__/sdk.test.js +1 -0
  104. package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
  105. package/dist/lend/providers/morpho/contracts.d.ts +19 -0
  106. package/dist/lend/providers/morpho/contracts.d.ts.map +1 -0
  107. package/dist/lend/providers/morpho/contracts.js +32 -0
  108. package/dist/lend/providers/morpho/contracts.js.map +1 -0
  109. package/dist/lend/providers/morpho/sdk.d.ts +4 -3
  110. package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
  111. package/dist/lend/providers/morpho/sdk.js +168 -71
  112. package/dist/lend/providers/morpho/sdk.js.map +1 -1
  113. package/dist/services/ChainManager.d.ts +1 -1
  114. package/dist/{test → services/__mocks__}/MockChainManager.d.ts +1 -1
  115. package/dist/services/__mocks__/MockChainManager.d.ts.map +1 -0
  116. package/dist/services/__mocks__/MockChainManager.js.map +1 -0
  117. package/dist/services/tokenBalance.d.ts.map +1 -1
  118. package/dist/services/tokenBalance.js +4 -5
  119. package/dist/services/tokenBalance.js.map +1 -1
  120. package/dist/services/tokenBalance.spec.js +2 -2
  121. package/dist/services/tokenBalance.spec.js.map +1 -1
  122. package/dist/supported/tokens.d.ts +4 -4
  123. package/dist/supported/tokens.d.ts.map +1 -1
  124. package/dist/supported/tokens.js +5 -56
  125. package/dist/supported/tokens.js.map +1 -1
  126. package/dist/types/actions.d.ts +26 -2
  127. package/dist/types/actions.d.ts.map +1 -1
  128. package/dist/types/asset.d.ts +3 -3
  129. package/dist/types/asset.d.ts.map +1 -1
  130. package/dist/types/lend/base.d.ts +10 -28
  131. package/dist/types/lend/base.d.ts.map +1 -1
  132. package/dist/types/lend/contracts.d.ts +17 -0
  133. package/dist/types/lend/contracts.d.ts.map +1 -0
  134. package/dist/types/lend/contracts.js +2 -0
  135. package/dist/types/lend/contracts.js.map +1 -0
  136. package/dist/types/lend/index.d.ts +1 -0
  137. package/dist/types/lend/index.d.ts.map +1 -1
  138. package/dist/types/lend/index.js +1 -0
  139. package/dist/types/lend/index.js.map +1 -1
  140. package/dist/utils/assets.d.ts +7 -1
  141. package/dist/utils/assets.d.ts.map +1 -1
  142. package/dist/utils/assets.js +12 -1
  143. package/dist/utils/assets.js.map +1 -1
  144. package/dist/utils/assets.test.js +1 -1
  145. package/dist/utils/assets.test.js.map +1 -1
  146. package/dist/utils/constants.d.ts +5 -0
  147. package/dist/utils/constants.d.ts.map +1 -0
  148. package/dist/utils/constants.js +5 -0
  149. package/dist/utils/constants.js.map +1 -0
  150. package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
  151. package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
  152. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +13 -13
  153. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
  154. package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js +12 -12
  155. package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js.map +1 -1
  156. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +12 -3
  157. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
  158. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js +3 -2
  159. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
  160. package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js +2 -2
  161. package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js.map +1 -1
  162. package/dist/wallet/core/providers/hosted/types/index.d.ts +8 -2
  163. package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
  164. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +14 -6
  165. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
  166. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js +10 -6
  167. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
  168. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js +39 -16
  169. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js.map +1 -1
  170. package/dist/wallet/core/wallets/abstract/Wallet.d.ts +19 -7
  171. package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
  172. package/dist/wallet/core/wallets/abstract/Wallet.js +9 -7
  173. package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
  174. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js +2 -2
  175. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js.map +1 -1
  176. package/dist/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.js +2 -2
  177. package/dist/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.js.map +1 -1
  178. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +9 -3
  179. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
  180. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js +4 -4
  181. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
  182. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js +4 -4
  183. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
  184. package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.js +1 -1
  185. package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.js.map +1 -1
  186. package/dist/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.js +1 -1
  187. package/dist/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.js.map +1 -1
  188. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +10 -3
  189. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  190. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +5 -3
  191. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  192. package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +7 -6
  193. package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
  194. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
  195. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +5 -4
  196. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
  197. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +2 -2
  198. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
  199. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +9 -2
  200. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  201. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +6 -3
  202. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  203. package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +5 -4
  204. package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
  205. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +10 -3
  206. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  207. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +5 -4
  208. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  209. package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +3 -3
  210. package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
  211. package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +2 -2
  212. package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -1
  213. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +8 -2
  214. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  215. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  216. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  217. package/dist/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js +2 -2
  218. package/dist/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js.map +1 -1
  219. package/dist/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js +1 -1
  220. package/dist/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js.map +1 -1
  221. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +6 -2
  222. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
  223. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +3 -3
  224. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
  225. package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.d.ts.map +1 -1
  226. package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.js +1 -1
  227. package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.js.map +1 -1
  228. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js +22 -7
  229. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js.map +1 -1
  230. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +6 -2
  231. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  232. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -3
  233. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  234. package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.d.ts.map +1 -1
  235. package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.js +1 -1
  236. package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.js.map +1 -1
  237. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +8 -4
  238. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
  239. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +6 -2
  240. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  241. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +3 -3
  242. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  243. package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +7 -4
  244. package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
  245. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +6 -6
  246. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
  247. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js +1 -1
  248. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js.map +1 -1
  249. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +6 -2
  250. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
  251. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +3 -3
  252. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
  253. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts +6 -0
  254. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts.map +1 -1
  255. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.js.map +1 -1
  256. package/dist/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.js +2 -2
  257. package/dist/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.js.map +1 -1
  258. package/dist/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.js +1 -1
  259. package/dist/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.js.map +1 -1
  260. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +6 -2
  261. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  262. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
  263. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  264. package/dist/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +2 -2
  265. package/dist/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
  266. package/dist/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +1 -1
  267. package/dist/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -1
  268. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +6 -2
  269. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  270. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  271. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  272. package/dist/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js +2 -2
  273. package/dist/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js.map +1 -1
  274. package/dist/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js +1 -1
  275. package/dist/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js.map +1 -1
  276. package/package.json +4 -1
  277. package/src/{test → __mocks__}/MockPrivyClient.ts +1 -1
  278. package/src/{actions.test.ts → __tests__/actions.test.ts} +34 -95
  279. package/src/actions.ts +82 -26
  280. package/src/constants/assets.ts +92 -8
  281. package/src/constants/supportedChains.ts +10 -2
  282. package/src/core/asset/__mocks__/mockAsset.ts +1 -1
  283. package/src/index.ts +2 -3
  284. package/src/{test → lend/__mocks__}/MockLendProvider.ts +24 -27
  285. package/src/{test → lend/__mocks__}/MockMarkets.ts +1 -1
  286. package/src/lend/__mocks__/mockLendTransaction.ts +4 -26
  287. package/src/lend/core/LendProvider.ts +40 -7
  288. package/src/lend/core/__tests__/LendProvider.test.ts +21 -63
  289. package/src/lend/index.ts +1 -0
  290. package/src/lend/namespaces/ActionsLendNamespace.ts +2 -21
  291. package/src/lend/namespaces/BaseLendNamespace.ts +89 -0
  292. package/src/lend/namespaces/WalletLendNamespace.ts +39 -55
  293. package/src/lend/namespaces/__tests__/ActionsLendNamespace.spec.ts +29 -22
  294. package/src/lend/namespaces/__tests__/BaseLendNamespace.spec.ts +137 -0
  295. package/src/lend/namespaces/__tests__/WalletLendNamespace.spec.ts +61 -26
  296. package/src/lend/providers/aave/AaveLendProvider.ts +395 -0
  297. package/src/lend/providers/aave/__mocks__/mockReserve.ts +84 -0
  298. package/src/lend/providers/aave/__tests__/AaveLendProvider.test.ts +419 -0
  299. package/src/lend/providers/aave/abis/pool.ts +81 -0
  300. package/src/lend/providers/aave/addresses.ts +95 -0
  301. package/src/lend/providers/aave/sdk.ts +307 -0
  302. package/src/lend/providers/morpho/MorphoLendProvider.ts +23 -44
  303. package/src/lend/providers/morpho/__tests__/MorphoLendProvider.test.ts +13 -85
  304. package/src/lend/providers/morpho/__tests__/api.test.ts +277 -51
  305. package/src/lend/providers/morpho/__tests__/sdk.test.ts +1 -0
  306. package/src/lend/providers/morpho/contracts.ts +37 -0
  307. package/src/lend/providers/morpho/sdk.ts +235 -87
  308. package/src/services/tokenBalance.spec.ts +2 -2
  309. package/src/services/tokenBalance.ts +6 -7
  310. package/src/supported/tokens.ts +6 -57
  311. package/src/types/actions.ts +30 -2
  312. package/src/types/asset.ts +3 -3
  313. package/src/types/lend/base.ts +14 -33
  314. package/src/types/lend/contracts.ts +18 -0
  315. package/src/types/lend/index.ts +1 -0
  316. package/src/utils/assets.test.ts +1 -1
  317. package/src/utils/assets.ts +15 -1
  318. package/src/utils/constants.ts +4 -0
  319. package/src/wallet/core/namespace/WalletNamespace.ts +2 -4
  320. package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +15 -15
  321. package/src/wallet/core/providers/__tests__/WalletProvider.spec.ts +14 -14
  322. package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +15 -4
  323. package/src/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.ts +3 -3
  324. package/src/wallet/core/providers/hosted/types/index.ts +8 -2
  325. package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +24 -9
  326. package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts +45 -55
  327. package/src/wallet/core/wallets/abstract/Wallet.ts +25 -17
  328. package/src/wallet/core/wallets/abstract/__tests__/Wallet.spec.ts +2 -2
  329. package/src/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.ts +2 -2
  330. package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +17 -10
  331. package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +7 -10
  332. package/src/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.ts +1 -1
  333. package/src/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.ts +1 -1
  334. package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +13 -5
  335. package/src/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +8 -8
  336. package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +6 -4
  337. package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +3 -3
  338. package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +13 -4
  339. package/src/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +5 -5
  340. package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +18 -6
  341. package/src/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +4 -4
  342. package/src/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +2 -2
  343. package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +16 -5
  344. package/src/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.ts +2 -2
  345. package/src/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.ts +1 -1
  346. package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +8 -4
  347. package/src/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.ts +1 -1
  348. package/src/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.ts +31 -17
  349. package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +8 -4
  350. package/src/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.ts +1 -1
  351. package/src/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +10 -11
  352. package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +8 -4
  353. package/src/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +7 -8
  354. package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +6 -6
  355. package/src/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.ts +5 -7
  356. package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +12 -5
  357. package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +6 -0
  358. package/src/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.ts +2 -2
  359. package/src/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.ts +1 -1
  360. package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +12 -5
  361. package/src/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +2 -2
  362. package/src/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +1 -1
  363. package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +12 -5
  364. package/src/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.ts +2 -2
  365. package/src/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.ts +1 -1
  366. package/dist/actions.test.d.ts.map +0 -1
  367. package/dist/actions.test.js.map +0 -1
  368. package/dist/constants/config.d.ts +0 -10
  369. package/dist/constants/config.d.ts.map +0 -1
  370. package/dist/constants/config.js +0 -10
  371. package/dist/constants/config.js.map +0 -1
  372. package/dist/test/MockAssets.d.ts.map +0 -1
  373. package/dist/test/MockAssets.js.map +0 -1
  374. package/dist/test/MockChainManager.d.ts.map +0 -1
  375. package/dist/test/MockChainManager.js.map +0 -1
  376. package/dist/test/MockLendProvider.d.ts.map +0 -1
  377. package/dist/test/MockLendProvider.js.map +0 -1
  378. package/dist/test/MockMarkets.d.ts.map +0 -1
  379. package/dist/test/MockMarkets.js.map +0 -1
  380. package/dist/test/MockPrivyClient.d.ts.map +0 -1
  381. package/dist/test/MockPrivyClient.js.map +0 -1
  382. package/dist/test/utils.d.ts.map +0 -1
  383. package/dist/test/utils.js.map +0 -1
  384. package/src/constants/config.ts +0 -9
  385. /package/dist/{test → __mocks__}/MockAssets.d.ts +0 -0
  386. /package/dist/{test → __mocks__}/MockAssets.js +0 -0
  387. /package/dist/{test → __mocks__}/MockPrivyClient.d.ts +0 -0
  388. /package/dist/{test → __mocks__}/MockPrivyClient.js +0 -0
  389. /package/dist/{test → __mocks__}/utils.d.ts +0 -0
  390. /package/dist/{test → __mocks__}/utils.js +0 -0
  391. /package/dist/{actions.test.d.ts → __tests__/actions.test.d.ts} +0 -0
  392. /package/dist/{test → services/__mocks__}/MockChainManager.js +0 -0
  393. /package/src/{test → __mocks__}/MockAssets.ts +0 -0
  394. /package/src/{test → __mocks__}/utils.ts +0 -0
  395. /package/src/{test → services/__mocks__}/MockChainManager.ts +0 -0
@@ -1,21 +1,28 @@
1
- import type { AccrualPosition } from '@morpho-org/blue-sdk'
2
- import { fetchAccrualVault } from '@morpho-org/blue-sdk-viem'
3
- import type { Address } from 'viem'
4
- import { parseEther } from 'viem'
1
+ import { type AccrualPosition, ChainId } from '@morpho-org/blue-sdk'
2
+ import {
3
+ adaptiveCurveIrmAbi,
4
+ blueAbi,
5
+ fetchAccrualVault,
6
+ metaMorphoAbi,
7
+ } from '@morpho-org/blue-sdk-viem'
8
+ import type { Address, PublicClient } from 'viem'
5
9
 
6
10
  import {
7
11
  fetchRewards,
8
12
  type RewardsBreakdown,
9
13
  } from '@/lend/providers/morpho/api.js'
14
+ import { getMorphoContracts } from '@/lend/providers/morpho/contracts.js'
10
15
  import type { ChainManager } from '@/services/ChainManager.js'
11
16
  import { SUPPORTED_TOKENS } from '@/supported/tokens.js'
17
+ import type { LendProviderConfig } from '@/types/actions.js'
12
18
  import type {
13
19
  ApyBreakdown,
14
- LendConfig,
15
20
  LendMarket,
16
21
  LendMarketConfig,
17
22
  LendMarketId,
23
+ MorphoContracts,
18
24
  } from '@/types/lend/index.js'
25
+ import { SECONDS_PER_YEAR } from '@/utils/constants.js'
19
26
 
20
27
  /**
21
28
  * Fetch and calculate rewards breakdown from Morpho GraphQL API
@@ -91,41 +98,179 @@ export function calculateBaseApy(vault: any): number {
91
98
  }
92
99
  }
93
100
 
101
+ async function fetchVaultInfo(vaultAddress: Address, client: PublicClient) {
102
+ const [totalAssets, totalSupply, fee, owner, curator, supplyQueueLength] =
103
+ await Promise.all([
104
+ client.readContract({
105
+ address: vaultAddress,
106
+ abi: metaMorphoAbi,
107
+ functionName: 'totalAssets',
108
+ }),
109
+ client.readContract({
110
+ address: vaultAddress,
111
+ abi: metaMorphoAbi,
112
+ functionName: 'totalSupply',
113
+ }),
114
+ client.readContract({
115
+ address: vaultAddress,
116
+ abi: metaMorphoAbi,
117
+ functionName: 'fee',
118
+ }),
119
+ client.readContract({
120
+ address: vaultAddress,
121
+ abi: metaMorphoAbi,
122
+ functionName: 'owner',
123
+ }),
124
+ client.readContract({
125
+ address: vaultAddress,
126
+ abi: metaMorphoAbi,
127
+ functionName: 'curator',
128
+ }),
129
+ client.readContract({
130
+ address: vaultAddress,
131
+ abi: metaMorphoAbi,
132
+ functionName: 'supplyQueueLength',
133
+ }),
134
+ ])
135
+ return { totalAssets, totalSupply, fee, owner, curator, supplyQueueLength }
136
+ }
137
+
138
+ async function fetchMarketAllocation(
139
+ vaultAddress: Address,
140
+ marketIdHash: `0x${string}`,
141
+ contracts: MorphoContracts,
142
+ client: PublicClient,
143
+ ): Promise<{ vaultSupplyAssets: bigint; supplyApy: bigint } | null> {
144
+ const [marketParams, marketState, vaultPosition] = await Promise.all([
145
+ client.readContract({
146
+ address: contracts.morphoBlue,
147
+ abi: blueAbi,
148
+ functionName: 'idToMarketParams',
149
+ args: [marketIdHash],
150
+ }),
151
+ client.readContract({
152
+ address: contracts.morphoBlue,
153
+ abi: blueAbi,
154
+ functionName: 'market',
155
+ args: [marketIdHash],
156
+ }),
157
+ client.readContract({
158
+ address: contracts.morphoBlue,
159
+ abi: blueAbi,
160
+ functionName: 'position',
161
+ args: [marketIdHash, vaultAddress],
162
+ }),
163
+ ])
164
+
165
+ const [
166
+ supplyAssets,
167
+ supplyShares,
168
+ borrowAssets,
169
+ borrowShares,
170
+ lastUpdate,
171
+ marketFee,
172
+ ] = marketState
173
+ const [vaultSupplyShares] = vaultPosition
174
+
175
+ if (vaultSupplyShares === 0n) return null
176
+ const vaultSupplyAssets =
177
+ supplyShares > 0n ? (vaultSupplyShares * supplyAssets) / supplyShares : 0n
178
+ if (vaultSupplyAssets === 0n || supplyAssets === 0n) return null
179
+
180
+ const borrowRate = await client.readContract({
181
+ address: contracts.irm,
182
+ abi: adaptiveCurveIrmAbi,
183
+ functionName: 'borrowRateView',
184
+ args: [
185
+ {
186
+ loanToken: marketParams[0],
187
+ collateralToken: marketParams[1],
188
+ oracle: marketParams[2],
189
+ irm: marketParams[3],
190
+ lltv: marketParams[4],
191
+ },
192
+ {
193
+ totalSupplyAssets: supplyAssets,
194
+ totalSupplyShares: supplyShares,
195
+ totalBorrowAssets: borrowAssets,
196
+ totalBorrowShares: borrowShares,
197
+ lastUpdate,
198
+ fee: marketFee,
199
+ },
200
+ ],
201
+ })
202
+
203
+ const utilization =
204
+ supplyAssets > 0n ? (borrowAssets * BigInt(1e18)) / supplyAssets : 0n
205
+ const supplyApy = (borrowRate * utilization * SECONDS_PER_YEAR) / BigInt(1e18)
206
+ return { vaultSupplyAssets, supplyApy }
207
+ }
208
+
209
+ async function calculateVaultApy(
210
+ vaultAddress: Address,
211
+ supplyQueueLength: bigint,
212
+ contracts: MorphoContracts,
213
+ client: PublicClient,
214
+ ): Promise<number> {
215
+ let totalWeightedApy = 0n
216
+ let totalSupply = 0n
217
+
218
+ for (let i = 0n; i < supplyQueueLength; i++) {
219
+ const marketIdHash = (await client.readContract({
220
+ address: vaultAddress,
221
+ abi: metaMorphoAbi,
222
+ functionName: 'supplyQueue',
223
+ args: [i],
224
+ })) as `0x${string}`
225
+
226
+ const allocation = await fetchMarketAllocation(
227
+ vaultAddress,
228
+ marketIdHash,
229
+ contracts,
230
+ client,
231
+ )
232
+ if (!allocation) continue
233
+ totalWeightedApy += allocation.supplyApy * allocation.vaultSupplyAssets
234
+ totalSupply += allocation.vaultSupplyAssets
235
+ }
236
+
237
+ return totalSupply > 0n ? Number(totalWeightedApy / totalSupply) / 1e18 : 0
238
+ }
239
+
94
240
  /**
95
- * TEMPORARY - To be removed in https://github.com/ethereum-optimism/actions/issues/112
96
- * Create mock vault data for Base Sepolia (testnet)
97
- * @param marketId - Market identifier
98
- * @param marketConfig - Market configuration from allowlist
99
- * @returns Mock vault data with realistic values
241
+ * Fetch vault data via direct on-chain queries (for testnets)
100
242
  */
101
- function createMockVaultData(
243
+ async function fetchVaultDataOnChain(
102
244
  marketId: LendMarketId,
103
245
  marketConfig: LendMarketConfig,
104
- ): LendMarket {
105
- const mockApyBreakdown: ApyBreakdown = {
106
- total: 0.0542, // 5.42% net APY
107
- native: 0.058, // 5.8% gross APY
108
- totalRewards: 0.0235, // Total rewards APR
109
- usdc: 0.0125, // USDC rewards
110
- morpho: 0.008, // MORPHO token rewards
111
- other: 0.003, // Other protocol rewards
112
- performanceFee: 0.065, // 6.5% performance fee
113
- }
246
+ client: PublicClient,
247
+ contracts: MorphoContracts,
248
+ ): Promise<LendMarket> {
249
+ const info = await fetchVaultInfo(marketId.address, client)
250
+ const nativeApy = await calculateVaultApy(
251
+ marketId.address,
252
+ info.supplyQueueLength,
253
+ contracts,
254
+ client,
255
+ )
256
+ const performanceFee = Number(info.fee) / 1e18
114
257
 
115
258
  return {
116
259
  marketId,
117
260
  name: marketConfig.name,
118
261
  asset: marketConfig.asset,
119
- supply: {
120
- totalAssets: parseEther('125000'), // ~$125K TVL
121
- totalShares: parseEther('120000'), // Slightly lower shares (some yield accrued)
262
+ supply: { totalAssets: info.totalAssets, totalShares: info.totalSupply },
263
+ apy: {
264
+ total: nativeApy * (1 - performanceFee),
265
+ native: nativeApy,
266
+ totalRewards: 0,
267
+ performanceFee,
122
268
  },
123
- apy: mockApyBreakdown,
124
269
  metadata: {
125
- owner: '0x742d35Cc6464C42C0b15De2C4c98F7E8c3e0F1d9' as Address, // Mock owner
126
- curator: '0x8f3Cf7ad23Cd3CaDbD9735aff958023239c6A063' as Address, // Mock curator
127
- fee: mockApyBreakdown.performanceFee,
128
- lastUpdate: Math.floor(Date.now() / 1000) - 300, // 5 minutes ago
270
+ owner: info.owner,
271
+ curator: info.curator,
272
+ fee: performanceFee,
273
+ lastUpdate: Math.floor(Date.now() / 1000),
129
274
  },
130
275
  }
131
276
  }
@@ -139,7 +284,7 @@ interface GetVaultParams {
139
284
  /** Chain manager instance */
140
285
  chainManager: ChainManager
141
286
  /** Lend configuration containing market allowlist */
142
- lendConfig?: LendConfig
287
+ lendConfig?: LendProviderConfig
143
288
  }
144
289
 
145
290
  /**
@@ -159,6 +304,13 @@ function findMarketInAllowlist(
159
304
  )
160
305
  }
161
306
 
307
+ /**
308
+ * Check if chain is supported by Morpho SDK
309
+ */
310
+ function isSdkSupportedChain(chainId: number): boolean {
311
+ return ChainId[chainId] !== undefined
312
+ }
313
+
162
314
  /**
163
315
  * Get detailed vault information with enhanced rewards data
164
316
  * @param params - Named parameters object
@@ -176,74 +328,70 @@ export async function getVault(params: GetVaultParams): Promise<LendMarket> {
176
328
  )
177
329
  }
178
330
 
179
- // Morpho sdk doesn't support base sepolia, so we need to use the mock vault
180
- if (params.marketId.chainId === 84532) {
181
- return createMockVaultData(params.marketId, marketConfig)
182
- }
331
+ const publicClient = params.chainManager.getPublicClient(
332
+ params.marketId.chainId,
333
+ )
183
334
 
184
- try {
185
- // Fetch live vault data from Morpho SDK
186
- const vault = await fetchAccrualVault(
187
- params.marketId.address,
188
- params.chainManager.getPublicClient(params.marketId.chainId),
189
- ).catch((error) => {
190
- console.error('Failed to fetch vault info:', error)
191
- return {
192
- totalAssets: 0n,
193
- totalSupply: 0n,
194
- owner: '0x' as Address,
195
- curator: '0x' as Address,
196
- }
197
- })
335
+ // Try SDK first for supported chains (mainnets)
336
+ if (isSdkSupportedChain(params.marketId.chainId)) {
337
+ try {
338
+ const vault = await fetchAccrualVault(
339
+ params.marketId.address,
340
+ publicClient,
341
+ )
342
+
343
+ // Fetch rewards data from API
344
+ const rewardsBreakdown = await fetchAndCalculateRewards(
345
+ params.marketId.address,
346
+ ).catch((error) => {
347
+ console.error('Failed to fetch rewards data:', error)
348
+ return { usdc: 0, morpho: 0, other: 0, totalRewards: 0 }
349
+ })
350
+
351
+ const apyBreakdown = calculateApyBreakdown(vault, rewardsBreakdown)
352
+ const currentTimestampSeconds = Math.floor(Date.now() / 1000)
198
353
 
199
- // Fetch rewards data from API
200
- const rewardsBreakdown = await fetchAndCalculateRewards(
201
- params.marketId.address,
202
- ).catch((error) => {
203
- console.error('Failed to fetch rewards data:', error)
204
354
  return {
205
- usdc: 0,
206
- morpho: 0,
207
- other: 0,
208
- totalRewards: 0,
355
+ marketId: params.marketId,
356
+ name: marketConfig.name,
357
+ asset: marketConfig.asset,
358
+ supply: {
359
+ totalAssets: vault.totalAssets,
360
+ totalShares: vault.totalSupply,
361
+ },
362
+ apy: apyBreakdown,
363
+ metadata: {
364
+ owner: vault.owner,
365
+ curator: vault.curator,
366
+ fee: apyBreakdown.performanceFee,
367
+ lastUpdate: currentTimestampSeconds,
368
+ },
209
369
  }
210
- })
211
-
212
- // Calculate APY breakdown
213
- const apyBreakdown = calculateApyBreakdown(vault, rewardsBreakdown)
214
-
215
- // Return comprehensive vault information
216
- const currentTimestampSeconds = Math.floor(Date.now() / 1000)
217
-
218
- return {
219
- marketId: params.marketId,
220
- name: marketConfig.name,
221
- asset: marketConfig.asset,
222
- supply: {
223
- totalAssets: vault.totalAssets,
224
- totalShares: vault.totalSupply,
225
- },
226
- apy: apyBreakdown,
227
- metadata: {
228
- owner: vault.owner,
229
- curator: vault.curator,
230
- fee: apyBreakdown.performanceFee,
231
- lastUpdate: currentTimestampSeconds,
232
- },
370
+ } catch (error) {
371
+ console.error('SDK fetch failed, trying on-chain fallback:', error)
233
372
  }
234
- } catch (error) {
235
- console.error('Failed to get vault info:', error)
236
- throw new Error(
237
- `Failed to get vault info for ${params.marketId.address}: ${
238
- error instanceof Error ? error.message : 'Unknown error'
239
- }`,
373
+ }
374
+
375
+ // Fallback to direct on-chain queries for testnets or if SDK fails
376
+ const contracts = getMorphoContracts(params.marketId.chainId)
377
+ if (contracts) {
378
+ return fetchVaultDataOnChain(
379
+ params.marketId,
380
+ marketConfig,
381
+ publicClient,
382
+ contracts,
240
383
  )
241
384
  }
385
+
386
+ // No SDK support and no contracts configured
387
+ throw new Error(
388
+ `Chain ${params.marketId.chainId} not supported by Morpho SDK and no contracts configured`,
389
+ )
242
390
  }
243
391
 
244
392
  interface GetVaultsParams {
245
393
  chainManager: ChainManager
246
- lendConfig: LendConfig
394
+ lendConfig: LendProviderConfig
247
395
  markets: LendMarketConfig[]
248
396
  }
249
397
 
@@ -2,11 +2,11 @@ import type { Address } from 'viem'
2
2
  import { unichain } from 'viem/chains'
3
3
  import { beforeEach, describe, expect, it } from 'vitest'
4
4
 
5
+ import { MockUSDCAsset } from '@/__mocks__/MockAssets.js'
5
6
  import { ETH } from '@/constants/assets.js'
7
+ import { MockChainManager } from '@/services/__mocks__/MockChainManager.js'
6
8
  import type { ChainManager } from '@/services/ChainManager.js'
7
9
  import { fetchERC20Balance, fetchETHBalance } from '@/services/tokenBalance.js'
8
- import { MockUSDCAsset } from '@/test/MockAssets.js'
9
- import { MockChainManager } from '@/test/MockChainManager.js'
10
10
  import type { Asset } from '@/types/asset.js'
11
11
 
12
12
  describe('TokenBalance', () => {
@@ -1,7 +1,6 @@
1
1
  import type { Address } from 'viem'
2
2
  import { erc20Abi, formatEther, formatUnits } from 'viem'
3
3
 
4
- import { ETH } from '@/constants/assets.js'
5
4
  import type { SupportedChainId } from '@/constants/supportedChains.js'
6
5
  import type { ChainManager } from '@/services/ChainManager.js'
7
6
  import type { Asset, TokenBalance } from '@/types/asset.js'
@@ -25,7 +24,7 @@ export async function fetchETHBalance(
25
24
  return {
26
25
  chainId,
27
26
  balance,
28
- tokenAddress: ETH.address[chainId]!,
27
+ tokenAddress: 'native' as const,
29
28
  formattedBalance: formatEther(balance),
30
29
  }
31
30
  })
@@ -92,7 +91,7 @@ async function fetchERC20BalanceForChain(
92
91
  chainId: SupportedChainId,
93
92
  walletAddress: Address,
94
93
  chainManager: ChainManager,
95
- ): Promise<{ balance: bigint; tokenAddress: Address }> {
94
+ ): Promise<{ balance: bigint; tokenAddress: Address | 'native' }> {
96
95
  const tokenAddress = asset.address[chainId]
97
96
  if (!tokenAddress) {
98
97
  throw new Error(
@@ -103,20 +102,20 @@ async function fetchERC20BalanceForChain(
103
102
  const publicClient = chainManager.getPublicClient(chainId)
104
103
 
105
104
  // Handle native ETH balance
106
- if (asset.type === 'native') {
105
+ if (asset.type === 'native' || tokenAddress === 'native') {
107
106
  return {
108
107
  balance: await publicClient.getBalance({
109
108
  address: walletAddress,
110
109
  }),
111
- tokenAddress: ETH.address[chainId]!,
110
+ tokenAddress: 'native',
112
111
  }
113
112
  }
114
113
 
115
114
  const balance = await publicClient.readContract({
116
- address: tokenAddress as Address,
115
+ address: tokenAddress,
117
116
  abi: erc20Abi,
118
117
  functionName: 'balanceOf',
119
118
  args: [walletAddress],
120
119
  })
121
- return { balance, tokenAddress: tokenAddress as Address }
120
+ return { balance, tokenAddress }
122
121
  }
@@ -1,69 +1,18 @@
1
1
  import type { Address } from 'viem'
2
- import { base, baseSepolia, mainnet, unichain } from 'viem/chains'
3
2
 
3
+ import { ETH, MORPHO, USDC, USDC_DEMO, WETH } from '@/constants/assets.js'
4
4
  import type { SupportedChainId } from '@/constants/supportedChains.js'
5
5
  import type { Asset } from '@/types/asset.js'
6
6
 
7
- export const SUPPORTED_TOKENS: Asset[] = [
8
- {
9
- address: {
10
- [mainnet.id]: '0x0000000000000000000000000000000000000000',
11
- [unichain.id]: '0x0000000000000000000000000000000000000000',
12
- [base.id]: '0x0000000000000000000000000000000000000000',
13
- [baseSepolia.id]: '0x0000000000000000000000000000000000000000',
14
- },
15
- metadata: {
16
- symbol: 'ETH',
17
- name: 'Ethereum',
18
- decimals: 18,
19
- },
20
- type: 'native',
21
- },
22
- {
23
- address: {
24
- [mainnet.id]: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
25
- [unichain.id]: '0x078d782b760474a361dda0af3839290b0ef57ad6',
26
- [baseSepolia.id]: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',
27
- },
28
- metadata: {
29
- symbol: 'USDC',
30
- name: 'USDC',
31
- decimals: 6,
32
- },
33
- type: 'erc20',
34
- },
35
- {
36
- address: {
37
- [baseSepolia.id]: '0x87c25229afbc30418d0144e8dfb2bcf8efd92c6c',
38
- },
39
- metadata: {
40
- symbol: 'USDC_DEMO',
41
- name: 'USDC Demo',
42
- decimals: 6,
43
- },
44
- type: 'erc20',
45
- },
46
- {
47
- address: {
48
- [mainnet.id]: '0x58D97B57BB95320F9a05dC918Aef65434969c2B2',
49
- [base.id]: '0xBAa5CC21fd487B8Fcc2F632f3F4E8D37262a0842',
50
- },
51
- metadata: {
52
- symbol: 'MORPHO',
53
- name: 'Morpho Token',
54
- decimals: 18,
55
- },
56
- type: 'erc20',
57
- },
58
- ]
7
+ export const SUPPORTED_TOKENS: Asset[] = [ETH, WETH, USDC, USDC_DEMO, MORPHO]
59
8
 
60
9
  /**
61
- * Find token by address and chain ID
10
+ * Get token by address and chain ID
62
11
  * @param address Token address
63
12
  * @param chainId Chain ID
64
13
  * @returns Token symbol or null if not found
65
14
  */
66
- export function findTokenByAddress(
15
+ export function getTokenByAddress(
67
16
  address: Address,
68
17
  chainId: SupportedChainId,
69
18
  ): string | null {
@@ -83,12 +32,12 @@ export function findTokenByAddress(
83
32
  * Get token address for a specific chain
84
33
  * @param symbol Token symbol
85
34
  * @param chainId Chain ID
86
- * @returns Token address or null if not supported on that chain
35
+ * @returns Token address, 'native' for native assets, or null if not supported
87
36
  */
88
37
  export function getTokenAddress(
89
38
  symbol: string,
90
39
  chainId: SupportedChainId,
91
- ): Address | null {
40
+ ): Address | 'native' | null {
92
41
  const token = SUPPORTED_TOKENS.find((t) => t.metadata.symbol === symbol)
93
42
  return token?.address[chainId] || null
94
43
  }
@@ -1,7 +1,22 @@
1
+ import type { Asset } from '@/types/asset.js'
1
2
  import type { ChainConfig } from '@/types/chain.js'
2
- import type { LendConfig } from '@/types/lend/index.js'
3
+ import type { LendProviderConfig } from '@/types/lend/index.js'
3
4
  import type { ProviderSpec } from '@/wallet/core/providers/hosted/types/index.js'
4
5
 
6
+ // Re-export LendProviderConfig for convenience
7
+ export type { LendProviderConfig }
8
+
9
+ /**
10
+ * Lending configuration
11
+ * @description Configuration for all lending providers
12
+ */
13
+ export interface LendConfig {
14
+ /** Morpho lending provider configuration */
15
+ morpho?: LendProviderConfig
16
+ /** Aave lending provider configuration */
17
+ aave?: LendProviderConfig
18
+ }
19
+
5
20
  /**
6
21
  * Network configuration for lending providers
7
22
  * @description Basic network information that lending providers need
@@ -11,6 +26,17 @@ export interface LendNetworkConfig {
11
26
  name: string
12
27
  }
13
28
 
29
+ /**
30
+ * Assets configuration
31
+ * @description Configuration for supported assets
32
+ */
33
+ export interface AssetsConfig {
34
+ /** Allowlist of assets to support (optional - defaults to all SUPPORTED_TOKENS) */
35
+ allow?: Asset[]
36
+ /** Blocklist of assets to exclude (optional) */
37
+ block?: Asset[]
38
+ }
39
+
14
40
  /**
15
41
  * Actions SDK configuration
16
42
  * @description Configuration object for initializing the Actions SDK
@@ -21,8 +47,10 @@ export interface ActionsConfig<
21
47
  > {
22
48
  /** Wallet configuration */
23
49
  wallet: WalletConfig<THostedWalletProviderType, TConfigMap>
24
- /** Lending provider configuration (optional) */
50
+ /** Lending providers configuration (optional) */
25
51
  lend?: LendConfig
52
+ /** Assets configuration (optional) */
53
+ assets?: AssetsConfig
26
54
  /** Chains to use for the SDK */
27
55
  chains: ChainConfig[]
28
56
  }
@@ -6,8 +6,8 @@ import type { SupportedChainId } from '@/constants/supportedChains.js'
6
6
  * Asset type inspired by EIP 7811 but adapted for multi-chain asset definitions
7
7
  */
8
8
  export interface Asset {
9
- /** Multi-chain address mapping */
10
- address: Partial<Record<SupportedChainId, Address>>
9
+ /** Multi-chain address mapping. Native assets use 'native' string to prevent accidental contract calls. */
10
+ address: Partial<Record<SupportedChainId, Address | 'native'>>
11
11
  /** Asset metadata */
12
12
  metadata: {
13
13
  decimals: number
@@ -28,7 +28,7 @@ export interface TokenBalance {
28
28
  chainBalances: Array<{
29
29
  chainId: SupportedChainId
30
30
  balance: bigint
31
- tokenAddress: Address
31
+ tokenAddress: Address | 'native'
32
32
  formattedBalance: string
33
33
  }>
34
34
  }