@eth-optimism/actions-sdk 0.3.0 → 0.5.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 (479) hide show
  1. package/dist/__mocks__/MockAssets.d.ts +17 -2
  2. package/dist/__mocks__/MockAssets.d.ts.map +1 -1
  3. package/dist/__mocks__/MockAssets.js +49 -6
  4. package/dist/__mocks__/MockAssets.js.map +1 -1
  5. package/dist/__tests__/actions.test.js +1 -1
  6. package/dist/__tests__/actions.test.js.map +1 -1
  7. package/dist/actions.d.ts +17 -13
  8. package/dist/actions.d.ts.map +1 -1
  9. package/dist/actions.js +46 -27
  10. package/dist/actions.js.map +1 -1
  11. package/dist/constants/assets.d.ts +215 -4
  12. package/dist/constants/assets.d.ts.map +1 -1
  13. package/dist/constants/assets.js +734 -11
  14. package/dist/constants/assets.js.map +1 -1
  15. package/dist/constants/providers.d.ts +6 -0
  16. package/dist/constants/providers.d.ts.map +1 -0
  17. package/dist/constants/providers.js +6 -0
  18. package/dist/constants/providers.js.map +1 -0
  19. package/dist/constants/supportedChains.d.ts +2 -2
  20. package/dist/constants/supportedChains.d.ts.map +1 -1
  21. package/dist/constants/supportedChains.js +12 -2
  22. package/dist/constants/supportedChains.js.map +1 -1
  23. package/dist/ens/EnsNamespace.d.ts +57 -0
  24. package/dist/ens/EnsNamespace.d.ts.map +1 -0
  25. package/dist/ens/EnsNamespace.js +158 -0
  26. package/dist/ens/EnsNamespace.js.map +1 -0
  27. package/dist/ens/EnsNamespace.spec.d.ts +2 -0
  28. package/dist/ens/EnsNamespace.spec.d.ts.map +1 -0
  29. package/dist/ens/EnsNamespace.spec.js +144 -0
  30. package/dist/ens/EnsNamespace.spec.js.map +1 -0
  31. package/dist/ens/errors.d.ts +24 -0
  32. package/dist/ens/errors.d.ts.map +1 -0
  33. package/dist/ens/errors.js +35 -0
  34. package/dist/ens/errors.js.map +1 -0
  35. package/dist/ens/index.d.ts +4 -0
  36. package/dist/ens/index.d.ts.map +1 -0
  37. package/dist/ens/index.js +4 -0
  38. package/dist/ens/index.js.map +1 -0
  39. package/dist/ens/types.d.ts +63 -0
  40. package/dist/ens/types.d.ts.map +1 -0
  41. package/dist/ens/types.js +14 -0
  42. package/dist/ens/types.js.map +1 -0
  43. package/dist/index.d.ts +6 -5
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +5 -4
  46. package/dist/index.js.map +1 -1
  47. package/dist/lend/__mocks__/MockLendProvider.d.ts +1 -1
  48. package/dist/lend/__mocks__/MockLendProvider.d.ts.map +1 -1
  49. package/dist/lend/__mocks__/MockLendProvider.js +7 -2
  50. package/dist/lend/__mocks__/MockLendProvider.js.map +1 -1
  51. package/dist/lend/core/LendProvider.d.ts +12 -8
  52. package/dist/lend/core/LendProvider.d.ts.map +1 -1
  53. package/dist/lend/core/LendProvider.js +15 -21
  54. package/dist/lend/core/LendProvider.js.map +1 -1
  55. package/dist/lend/namespaces/BaseLendNamespace.d.ts +2 -6
  56. package/dist/lend/namespaces/BaseLendNamespace.d.ts.map +1 -1
  57. package/dist/lend/namespaces/BaseLendNamespace.js.map +1 -1
  58. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js +7 -4
  59. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js.map +1 -1
  60. package/dist/lend/providers/aave/AaveLendProvider.d.ts +1 -6
  61. package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -1
  62. package/dist/lend/providers/aave/AaveLendProvider.js +3 -6
  63. package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -1
  64. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js +14 -6
  65. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js.map +1 -1
  66. package/dist/lend/providers/aave/addresses.d.ts +13 -39
  67. package/dist/lend/providers/aave/addresses.d.ts.map +1 -1
  68. package/dist/lend/providers/aave/addresses.js +65 -60
  69. package/dist/lend/providers/aave/addresses.js.map +1 -1
  70. package/dist/lend/providers/aave/sdk.d.ts +2 -2
  71. package/dist/lend/providers/aave/sdk.d.ts.map +1 -1
  72. package/dist/lend/providers/aave/sdk.js +6 -28
  73. package/dist/lend/providers/aave/sdk.js.map +1 -1
  74. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +1 -6
  75. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
  76. package/dist/lend/providers/morpho/MorphoLendProvider.js +4 -13
  77. package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
  78. package/dist/lend/providers/morpho/__tests__/api.test.js +52 -43
  79. package/dist/lend/providers/morpho/__tests__/api.test.js.map +1 -1
  80. package/dist/lend/providers/morpho/__tests__/sdk.test.js +41 -42
  81. package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
  82. package/dist/lend/providers/morpho/api.d.ts +3 -7
  83. package/dist/lend/providers/morpho/api.d.ts.map +1 -1
  84. package/dist/lend/providers/morpho/api.js +2 -2
  85. package/dist/lend/providers/morpho/api.js.map +1 -1
  86. package/dist/lend/providers/morpho/contracts.d.ts +11 -10
  87. package/dist/lend/providers/morpho/contracts.d.ts.map +1 -1
  88. package/dist/lend/providers/morpho/contracts.js +43 -10
  89. package/dist/lend/providers/morpho/contracts.js.map +1 -1
  90. package/dist/lend/providers/morpho/sdk.d.ts +7 -2
  91. package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
  92. package/dist/lend/providers/morpho/sdk.js +67 -63
  93. package/dist/lend/providers/morpho/sdk.js.map +1 -1
  94. package/dist/nodeActionsFactory.d.ts +1 -1
  95. package/dist/reactActionsFactory.d.ts +1 -1
  96. package/dist/services/ChainManager.d.ts +15 -8
  97. package/dist/services/ChainManager.d.ts.map +1 -1
  98. package/dist/services/ChainManager.js +9 -0
  99. package/dist/services/ChainManager.js.map +1 -1
  100. package/dist/services/__mocks__/MockChainManager.d.ts +5 -4
  101. package/dist/services/__mocks__/MockChainManager.d.ts.map +1 -1
  102. package/dist/services/__mocks__/MockChainManager.js +5 -0
  103. package/dist/services/__mocks__/MockChainManager.js.map +1 -1
  104. package/dist/services/tokenBalance.d.ts +1 -1
  105. package/dist/services/tokenBalance.d.ts.map +1 -1
  106. package/dist/services/tokenBalance.js +31 -30
  107. package/dist/services/tokenBalance.js.map +1 -1
  108. package/dist/services/tokenBalance.spec.js +20 -24
  109. package/dist/services/tokenBalance.spec.js.map +1 -1
  110. package/dist/swap/__mocks__/MockSwapProvider.d.ts +20 -8
  111. package/dist/swap/__mocks__/MockSwapProvider.d.ts.map +1 -1
  112. package/dist/swap/__mocks__/MockSwapProvider.js +52 -29
  113. package/dist/swap/__mocks__/MockSwapProvider.js.map +1 -1
  114. package/dist/swap/core/SwapProvider.d.ts +105 -16
  115. package/dist/swap/core/SwapProvider.d.ts.map +1 -1
  116. package/dist/swap/core/SwapProvider.js +215 -37
  117. package/dist/swap/core/SwapProvider.js.map +1 -1
  118. package/dist/swap/core/__tests__/SwapProvider.test.js +115 -9
  119. package/dist/swap/core/__tests__/SwapProvider.test.js.map +1 -1
  120. package/dist/swap/core/markets.d.ts +47 -0
  121. package/dist/swap/core/markets.d.ts.map +1 -0
  122. package/dist/swap/core/markets.js +65 -0
  123. package/dist/swap/core/markets.js.map +1 -0
  124. package/dist/swap/index.d.ts +2 -0
  125. package/dist/swap/index.d.ts.map +1 -1
  126. package/dist/swap/index.js +1 -0
  127. package/dist/swap/index.js.map +1 -1
  128. package/dist/swap/namespaces/ActionsSwapNamespace.d.ts +2 -2
  129. package/dist/swap/namespaces/ActionsSwapNamespace.js +2 -2
  130. package/dist/swap/namespaces/BaseSwapNamespace.d.ts +50 -8
  131. package/dist/swap/namespaces/BaseSwapNamespace.d.ts.map +1 -1
  132. package/dist/swap/namespaces/BaseSwapNamespace.js +144 -16
  133. package/dist/swap/namespaces/BaseSwapNamespace.js.map +1 -1
  134. package/dist/swap/namespaces/WalletSwapNamespace.d.ts +20 -7
  135. package/dist/swap/namespaces/WalletSwapNamespace.d.ts.map +1 -1
  136. package/dist/swap/namespaces/WalletSwapNamespace.js +44 -15
  137. package/dist/swap/namespaces/WalletSwapNamespace.js.map +1 -1
  138. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js +150 -11
  139. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js.map +1 -1
  140. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js +85 -8
  141. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js.map +1 -1
  142. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts +10 -42
  143. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts.map +1 -1
  144. package/dist/swap/providers/uniswap/UniswapSwapProvider.js +81 -139
  145. package/dist/swap/providers/uniswap/UniswapSwapProvider.js.map +1 -1
  146. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js +10 -9
  147. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js.map +1 -1
  148. package/dist/swap/providers/uniswap/__tests__/sdk.test.js +17 -17
  149. package/dist/swap/providers/uniswap/__tests__/sdk.test.js.map +1 -1
  150. package/dist/swap/providers/uniswap/addresses.d.ts +5 -0
  151. package/dist/swap/providers/uniswap/addresses.d.ts.map +1 -1
  152. package/dist/swap/providers/uniswap/addresses.js +1 -1
  153. package/dist/swap/providers/uniswap/addresses.js.map +1 -1
  154. package/dist/swap/providers/uniswap/encoding.d.ts +4 -4
  155. package/dist/swap/providers/uniswap/encoding.js +17 -17
  156. package/dist/swap/providers/uniswap/markets.d.ts +19 -0
  157. package/dist/swap/providers/uniswap/markets.d.ts.map +1 -0
  158. package/dist/swap/providers/uniswap/markets.js +48 -0
  159. package/dist/swap/providers/uniswap/markets.js.map +1 -0
  160. package/dist/swap/providers/uniswap/types.d.ts +4 -3
  161. package/dist/swap/providers/uniswap/types.d.ts.map +1 -1
  162. package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts +50 -0
  163. package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts.map +1 -0
  164. package/dist/swap/providers/velodrome/VelodromeSwapProvider.js +140 -0
  165. package/dist/swap/providers/velodrome/VelodromeSwapProvider.js.map +1 -0
  166. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.d.ts +2 -0
  167. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.d.ts.map +1 -0
  168. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.js +255 -0
  169. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.js.map +1 -0
  170. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.d.ts +2 -0
  171. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.d.ts.map +1 -0
  172. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.js +166 -0
  173. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.js.map +1 -0
  174. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.d.ts +2 -0
  175. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.d.ts.map +1 -0
  176. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.js +420 -0
  177. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.js.map +1 -0
  178. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.d.ts +2 -0
  179. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.d.ts.map +1 -0
  180. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.js +51 -0
  181. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.js.map +1 -0
  182. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.d.ts +14 -0
  183. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.d.ts.map +1 -0
  184. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.js +13 -0
  185. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.js.map +1 -0
  186. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.d.ts +2 -0
  187. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.d.ts.map +1 -0
  188. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.js +173 -0
  189. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.js.map +1 -0
  190. package/dist/swap/providers/velodrome/abis.d.ts +396 -0
  191. package/dist/swap/providers/velodrome/abis.d.ts.map +1 -0
  192. package/dist/swap/providers/velodrome/abis.js +257 -0
  193. package/dist/swap/providers/velodrome/abis.js.map +1 -0
  194. package/dist/swap/providers/velodrome/addresses.d.ts +39 -0
  195. package/dist/swap/providers/velodrome/addresses.d.ts.map +1 -0
  196. package/dist/swap/providers/velodrome/addresses.js +57 -0
  197. package/dist/swap/providers/velodrome/addresses.js.map +1 -0
  198. package/dist/swap/providers/velodrome/config.d.ts +22 -0
  199. package/dist/swap/providers/velodrome/config.d.ts.map +1 -0
  200. package/dist/swap/providers/velodrome/config.js +29 -0
  201. package/dist/swap/providers/velodrome/config.js.map +1 -0
  202. package/dist/swap/providers/velodrome/encoding/helpers.d.ts +37 -0
  203. package/dist/swap/providers/velodrome/encoding/helpers.d.ts.map +1 -0
  204. package/dist/swap/providers/velodrome/encoding/helpers.js +60 -0
  205. package/dist/swap/providers/velodrome/encoding/helpers.js.map +1 -0
  206. package/dist/swap/providers/velodrome/encoding/index.d.ts +8 -0
  207. package/dist/swap/providers/velodrome/encoding/index.d.ts.map +1 -0
  208. package/dist/swap/providers/velodrome/encoding/index.js +5 -0
  209. package/dist/swap/providers/velodrome/encoding/index.js.map +1 -0
  210. package/dist/swap/providers/velodrome/encoding/poolRouter.d.ts +39 -0
  211. package/dist/swap/providers/velodrome/encoding/poolRouter.d.ts.map +1 -0
  212. package/dist/swap/providers/velodrome/encoding/poolRouter.js +83 -0
  213. package/dist/swap/providers/velodrome/encoding/poolRouter.js.map +1 -0
  214. package/dist/swap/providers/velodrome/encoding/routers/approval.d.ts +15 -0
  215. package/dist/swap/providers/velodrome/encoding/routers/approval.d.ts.map +1 -0
  216. package/dist/swap/providers/velodrome/encoding/routers/approval.js +33 -0
  217. package/dist/swap/providers/velodrome/encoding/routers/approval.js.map +1 -0
  218. package/dist/swap/providers/velodrome/encoding/routers/cl.d.ts +40 -0
  219. package/dist/swap/providers/velodrome/encoding/routers/cl.d.ts.map +1 -0
  220. package/dist/swap/providers/velodrome/encoding/routers/cl.js +80 -0
  221. package/dist/swap/providers/velodrome/encoding/routers/cl.js.map +1 -0
  222. package/dist/swap/providers/velodrome/encoding/routers/v2.d.ts +42 -0
  223. package/dist/swap/providers/velodrome/encoding/routers/v2.d.ts.map +1 -0
  224. package/dist/swap/providers/velodrome/encoding/routers/v2.js +166 -0
  225. package/dist/swap/providers/velodrome/encoding/routers/v2.js.map +1 -0
  226. package/dist/swap/providers/velodrome/markets.d.ts +21 -0
  227. package/dist/swap/providers/velodrome/markets.d.ts.map +1 -0
  228. package/dist/swap/providers/velodrome/markets.js +69 -0
  229. package/dist/swap/providers/velodrome/markets.js.map +1 -0
  230. package/dist/swap/providers/velodrome/types.d.ts +31 -0
  231. package/dist/swap/providers/velodrome/types.d.ts.map +1 -0
  232. package/dist/swap/providers/velodrome/types.js +2 -0
  233. package/dist/swap/providers/velodrome/types.js.map +1 -0
  234. package/dist/types/actions.d.ts +44 -9
  235. package/dist/types/actions.d.ts.map +1 -1
  236. package/dist/types/asset.d.ts +7 -9
  237. package/dist/types/asset.d.ts.map +1 -1
  238. package/dist/types/chain.d.ts +2 -2
  239. package/dist/types/chain.d.ts.map +1 -1
  240. package/dist/types/lend/base.d.ts +6 -6
  241. package/dist/types/lend/base.d.ts.map +1 -1
  242. package/dist/types/lend/base.js.map +1 -1
  243. package/dist/types/lend/contracts.d.ts +2 -1
  244. package/dist/types/lend/contracts.d.ts.map +1 -1
  245. package/dist/types/providers.d.ts +21 -0
  246. package/dist/types/providers.d.ts.map +1 -0
  247. package/dist/types/providers.js +2 -0
  248. package/dist/types/providers.js.map +1 -0
  249. package/dist/types/swap/base.d.ts +136 -35
  250. package/dist/types/swap/base.d.ts.map +1 -1
  251. package/dist/types/swap/base.js.map +1 -1
  252. package/dist/utils/approve.d.ts +82 -0
  253. package/dist/utils/approve.d.ts.map +1 -0
  254. package/dist/utils/{permit2.js → approve.js} +48 -14
  255. package/dist/utils/approve.js.map +1 -0
  256. package/dist/utils/approve.test.d.ts +2 -0
  257. package/dist/utils/approve.test.d.ts.map +1 -0
  258. package/dist/utils/{permit2.test.js → approve.test.js} +95 -2
  259. package/dist/utils/approve.test.js.map +1 -0
  260. package/dist/utils/assets.d.ts +6 -0
  261. package/dist/utils/assets.d.ts.map +1 -1
  262. package/dist/utils/assets.js +10 -0
  263. package/dist/utils/assets.js.map +1 -1
  264. package/dist/utils/ens.d.ts +25 -0
  265. package/dist/utils/ens.d.ts.map +1 -0
  266. package/dist/utils/ens.js +53 -0
  267. package/dist/utils/ens.js.map +1 -0
  268. package/dist/utils/ens.test.d.ts +2 -0
  269. package/dist/utils/ens.test.d.ts.map +1 -0
  270. package/dist/utils/ens.test.js +75 -0
  271. package/dist/utils/ens.test.js.map +1 -0
  272. package/dist/utils/validateAddresses.d.ts +32 -0
  273. package/dist/utils/validateAddresses.d.ts.map +1 -0
  274. package/dist/utils/validateAddresses.js +103 -0
  275. package/dist/utils/validateAddresses.js.map +1 -0
  276. package/dist/utils/validateAddresses.test.d.ts +2 -0
  277. package/dist/utils/validateAddresses.test.d.ts.map +1 -0
  278. package/dist/utils/validateAddresses.test.js +314 -0
  279. package/dist/utils/validateAddresses.test.js.map +1 -0
  280. package/dist/utils/validation.d.ts +5 -0
  281. package/dist/utils/validation.d.ts.map +1 -1
  282. package/dist/utils/validation.js +10 -0
  283. package/dist/utils/validation.js.map +1 -1
  284. package/dist/wallet/core/namespace/WalletNamespace.d.ts +21 -9
  285. package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
  286. package/dist/wallet/core/namespace/WalletNamespace.js +44 -15
  287. package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
  288. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +4 -4
  289. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
  290. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +4 -16
  291. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
  292. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
  293. package/dist/wallet/core/providers/hosted/types/index.d.ts +6 -11
  294. package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
  295. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +2 -9
  296. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
  297. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
  298. package/dist/wallet/core/wallets/abstract/Wallet.d.ts +6 -17
  299. package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
  300. package/dist/wallet/core/wallets/abstract/Wallet.js +7 -6
  301. package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
  302. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts +10 -1
  303. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts.map +1 -1
  304. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js +2 -2
  305. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js.map +1 -1
  306. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js +12 -4
  307. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js.map +1 -1
  308. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +3 -10
  309. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
  310. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
  311. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
  312. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +3 -10
  313. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  314. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  315. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts +2 -4
  316. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
  317. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +6 -8
  318. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
  319. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +4 -4
  320. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
  321. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +2 -9
  322. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  323. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  324. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +3 -10
  325. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  326. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  327. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +3 -10
  328. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  329. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  330. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +3 -9
  331. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
  332. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +3 -2
  333. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
  334. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +3 -9
  335. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  336. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -2
  337. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  338. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +3 -9
  339. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  340. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +3 -2
  341. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  342. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts +2 -4
  343. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts.map +1 -1
  344. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +11 -13
  345. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
  346. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js +6 -6
  347. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js.map +1 -1
  348. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +5 -10
  349. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
  350. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +3 -3
  351. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
  352. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts +2 -6
  353. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts.map +1 -1
  354. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.js.map +1 -1
  355. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +5 -10
  356. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  357. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
  358. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  359. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +5 -10
  360. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  361. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  362. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  363. package/package.json +3 -2
  364. package/src/__mocks__/MockAssets.ts +54 -6
  365. package/src/__tests__/actions.test.ts +1 -1
  366. package/src/actions.ts +73 -61
  367. package/src/constants/assets.ts +781 -10
  368. package/src/constants/providers.ts +5 -0
  369. package/src/constants/supportedChains.ts +22 -2
  370. package/src/ens/EnsNamespace.spec.ts +171 -0
  371. package/src/ens/EnsNamespace.ts +210 -0
  372. package/src/ens/errors.ts +45 -0
  373. package/src/ens/index.ts +12 -0
  374. package/src/ens/types.ts +76 -0
  375. package/src/index.ts +59 -8
  376. package/src/lend/__mocks__/MockLendProvider.ts +8 -3
  377. package/src/lend/core/LendProvider.ts +27 -28
  378. package/src/lend/namespaces/BaseLendNamespace.ts +2 -6
  379. package/src/lend/namespaces/__tests__/BaseLendNamespace.spec.ts +12 -5
  380. package/src/lend/providers/aave/AaveLendProvider.ts +3 -7
  381. package/src/lend/providers/aave/__tests__/AaveLendProvider.test.ts +16 -7
  382. package/src/lend/providers/aave/addresses.ts +82 -64
  383. package/src/lend/providers/aave/sdk.ts +11 -36
  384. package/src/lend/providers/morpho/MorphoLendProvider.ts +4 -16
  385. package/src/lend/providers/morpho/__tests__/api.test.ts +65 -44
  386. package/src/lend/providers/morpho/__tests__/sdk.test.ts +43 -43
  387. package/src/lend/providers/morpho/api.ts +7 -8
  388. package/src/lend/providers/morpho/contracts.ts +62 -13
  389. package/src/lend/providers/morpho/sdk.ts +85 -63
  390. package/src/services/ChainManager.ts +22 -21
  391. package/src/services/__mocks__/MockChainManager.ts +12 -7
  392. package/src/services/tokenBalance.spec.ts +20 -24
  393. package/src/services/tokenBalance.ts +39 -33
  394. package/src/swap/__mocks__/MockSwapProvider.ts +77 -42
  395. package/src/swap/core/SwapProvider.ts +309 -50
  396. package/src/swap/core/__tests__/SwapProvider.test.ts +151 -9
  397. package/src/swap/core/markets.ts +104 -0
  398. package/src/swap/index.ts +5 -0
  399. package/src/swap/namespaces/ActionsSwapNamespace.ts +2 -2
  400. package/src/swap/namespaces/BaseSwapNamespace.ts +215 -18
  401. package/src/swap/namespaces/WalletSwapNamespace.ts +61 -14
  402. package/src/swap/namespaces/__tests__/BaseSwapNamespace.spec.ts +245 -14
  403. package/src/swap/namespaces/__tests__/WalletSwapNamespace.spec.ts +103 -8
  404. package/src/swap/providers/uniswap/UniswapSwapProvider.ts +110 -195
  405. package/src/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.ts +12 -12
  406. package/src/swap/providers/uniswap/__tests__/sdk.test.ts +19 -20
  407. package/src/swap/providers/uniswap/addresses.ts +3 -1
  408. package/src/swap/providers/uniswap/encoding.ts +22 -22
  409. package/src/swap/providers/uniswap/markets.ts +84 -0
  410. package/src/swap/providers/uniswap/types.ts +4 -3
  411. package/src/swap/providers/velodrome/VelodromeSwapProvider.ts +226 -0
  412. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.ts +341 -0
  413. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.ts +202 -0
  414. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.ts +507 -0
  415. package/src/swap/providers/velodrome/__tests__/encoding.cl.test.ts +69 -0
  416. package/src/swap/providers/velodrome/__tests__/encoding.helpers.ts +20 -0
  417. package/src/swap/providers/velodrome/__tests__/encoding.v2.test.ts +235 -0
  418. package/src/swap/providers/velodrome/abis.ts +264 -0
  419. package/src/swap/providers/velodrome/addresses.ts +107 -0
  420. package/src/swap/providers/velodrome/config.ts +46 -0
  421. package/src/swap/providers/velodrome/encoding/helpers.ts +82 -0
  422. package/src/swap/providers/velodrome/encoding/index.ts +7 -0
  423. package/src/swap/providers/velodrome/encoding/poolRouter.ts +124 -0
  424. package/src/swap/providers/velodrome/encoding/routers/approval.ts +45 -0
  425. package/src/swap/providers/velodrome/encoding/routers/cl.ts +156 -0
  426. package/src/swap/providers/velodrome/encoding/routers/v2.ts +267 -0
  427. package/src/swap/providers/velodrome/markets.ts +100 -0
  428. package/src/swap/providers/velodrome/types.ts +30 -0
  429. package/src/types/actions.ts +49 -9
  430. package/src/types/asset.ts +12 -9
  431. package/src/types/chain.ts +2 -2
  432. package/src/types/lend/base.ts +6 -6
  433. package/src/types/lend/contracts.ts +5 -1
  434. package/src/types/providers.ts +22 -0
  435. package/src/types/swap/base.ts +150 -36
  436. package/src/utils/{permit2.test.ts → approve.test.ts} +117 -1
  437. package/src/utils/{permit2.ts → approve.ts} +67 -14
  438. package/src/utils/assets.ts +14 -0
  439. package/src/utils/ens.test.ts +104 -0
  440. package/src/utils/ens.ts +85 -0
  441. package/src/utils/validateAddresses.test.ts +439 -0
  442. package/src/utils/validateAddresses.ts +153 -0
  443. package/src/utils/validation.ts +11 -0
  444. package/src/wallet/core/namespace/WalletNamespace.ts +70 -16
  445. package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +8 -4
  446. package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +5 -17
  447. package/src/wallet/core/providers/hosted/types/index.ts +9 -11
  448. package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +5 -17
  449. package/src/wallet/core/wallets/abstract/Wallet.ts +18 -22
  450. package/src/wallet/core/wallets/abstract/__mocks__/TestWallet.ts +13 -1
  451. package/src/wallet/core/wallets/abstract/__tests__/Wallet.spec.ts +21 -5
  452. package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +5 -17
  453. package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +0 -1
  454. package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +3 -10
  455. package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +8 -8
  456. package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +4 -4
  457. package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +3 -10
  458. package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +5 -17
  459. package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +5 -17
  460. package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +7 -11
  461. package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +7 -11
  462. package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +7 -11
  463. package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +23 -10
  464. package/src/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.ts +6 -6
  465. package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +10 -18
  466. package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +2 -6
  467. package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +10 -18
  468. package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +10 -18
  469. package/dist/supported/tokens.d.ts +0 -25
  470. package/dist/supported/tokens.d.ts.map +0 -1
  471. package/dist/supported/tokens.js +0 -44
  472. package/dist/supported/tokens.js.map +0 -1
  473. package/dist/utils/permit2.d.ts +0 -46
  474. package/dist/utils/permit2.d.ts.map +0 -1
  475. package/dist/utils/permit2.js.map +0 -1
  476. package/dist/utils/permit2.test.d.ts +0 -2
  477. package/dist/utils/permit2.test.d.ts.map +0 -1
  478. package/dist/utils/permit2.test.js.map +0 -1
  479. package/src/supported/tokens.ts +0 -66
@@ -1,6 +1,8 @@
1
1
  import type { Address } from 'viem'
2
+ import { mainnet } from 'viem/chains'
2
3
  import { afterEach, describe, expect, it, vi } from 'vitest'
3
4
 
5
+ import { MORPHO, USDC } from '@/constants/assets.js'
4
6
  import { fetchRewards } from '@/lend/providers/morpho/api.js'
5
7
  import {
6
8
  calculateRewardsBreakdown,
@@ -8,6 +10,10 @@ import {
8
10
  } from '@/lend/providers/morpho/sdk.js'
9
11
  import { externalTest } from '@/utils/test.js'
10
12
 
13
+ const CHAIN_ID = mainnet.id
14
+ const USDC_ADDRESS = USDC.address[CHAIN_ID]!.toLowerCase()
15
+ const MORPHO_ADDRESS = MORPHO.address[CHAIN_ID]!.toLowerCase()
16
+
11
17
  /**
12
18
  * Mock API response for a vault with rewards
13
19
  */
@@ -18,20 +24,20 @@ const mockVaultWithRewards = {
18
24
  rewards: [
19
25
  {
20
26
  asset: {
21
- address: '0x078d782b760474a361dda0af3839290b0ef57ad6',
27
+ address: USDC_ADDRESS,
22
28
  name: 'USD Coin',
23
29
  symbol: 'USDC',
24
- chain: { id: 130 },
30
+ chain: { id: CHAIN_ID },
25
31
  },
26
32
  amountPerSuppliedToken: '1000000',
27
33
  supplyApr: 0.025, // 2.5% APR
28
34
  },
29
35
  {
30
36
  asset: {
31
- address: '0x9994e35db50125e0df82e4c2dde62496ce330999',
37
+ address: MORPHO_ADDRESS,
32
38
  name: 'Morpho Token',
33
39
  symbol: 'MORPHO',
34
- chain: { id: 130 },
40
+ chain: { id: CHAIN_ID },
35
41
  },
36
42
  amountPerSuppliedToken: '500000',
37
43
  supplyApr: 0.01, // 1% APR
@@ -50,7 +56,7 @@ const mockVaultWithRewards = {
50
56
  asset: {
51
57
  address: '0xunknown',
52
58
  symbol: 'UNKNOWN',
53
- chain: { id: 130 },
59
+ chain: { id: CHAIN_ID },
54
60
  },
55
61
  },
56
62
  ],
@@ -70,7 +76,7 @@ const mockVaultWithRewards = {
70
76
  },
71
77
  ],
72
78
  },
73
- chain: { id: 130 },
79
+ chain: { id: CHAIN_ID },
74
80
  }
75
81
 
76
82
  /**
@@ -83,7 +89,7 @@ const mockVaultNoRewards = {
83
89
  rewards: [],
84
90
  allocation: [],
85
91
  },
86
- chain: { id: 130 },
92
+ chain: { id: CHAIN_ID },
87
93
  }
88
94
 
89
95
  describe('Morpho API Integration', () => {
@@ -107,7 +113,7 @@ describe('Morpho API Integration', () => {
107
113
  }),
108
114
  )
109
115
 
110
- const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT)
116
+ const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT, CHAIN_ID)
111
117
 
112
118
  expect(vaultData).toBeDefined()
113
119
  expect(vaultData).not.toBeNull()
@@ -129,7 +135,7 @@ describe('Morpho API Integration', () => {
129
135
  }),
130
136
  )
131
137
 
132
- const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT)
138
+ const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT, CHAIN_ID)
133
139
  expect(vaultData).toBeNull()
134
140
  })
135
141
 
@@ -139,7 +145,7 @@ describe('Morpho API Integration', () => {
139
145
  vi.fn().mockRejectedValue(new Error('Network error')),
140
146
  )
141
147
 
142
- const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT)
148
+ const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT, CHAIN_ID)
143
149
  expect(vaultData).toBeNull()
144
150
  })
145
151
 
@@ -153,17 +159,17 @@ describe('Morpho API Integration', () => {
153
159
  }),
154
160
  )
155
161
 
156
- const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT)
162
+ const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT, CHAIN_ID)
157
163
  expect(vaultData).toBeNull()
158
164
  })
159
165
  })
160
166
 
161
167
  describe('calculateRewardsBreakdown', () => {
162
- it('should calculate rewards from vault-level rewards', () => {
163
- const rewards = calculateRewardsBreakdown(mockVaultWithRewards)
168
+ it('should calculate rewards from vault-level rewards keyed by address', () => {
169
+ const rewards = calculateRewardsBreakdown(mockVaultWithRewards, CHAIN_ID)
164
170
 
165
- expect(rewards.usdc).toBe(0.025)
166
- expect(rewards.morpho).toBe(0.01)
171
+ expect(rewards[USDC_ADDRESS]).toBe(0.025)
172
+ expect(rewards[MORPHO_ADDRESS]).toBe(0.01)
167
173
  expect(rewards.totalRewards).toBeCloseTo(
168
174
  0.025 + 0.01 + 0.005 * (1000000 / 1500000),
169
175
  6,
@@ -171,21 +177,21 @@ describe('Morpho API Integration', () => {
171
177
  })
172
178
 
173
179
  it('should return zeros for vault with no rewards', () => {
174
- const rewards = calculateRewardsBreakdown(mockVaultNoRewards)
180
+ const rewards = calculateRewardsBreakdown(mockVaultNoRewards, CHAIN_ID)
175
181
 
176
- expect(rewards.usdc).toBe(0)
177
- expect(rewards.morpho).toBe(0)
182
+ expect(rewards[USDC_ADDRESS]).toBe(0)
183
+ expect(rewards[MORPHO_ADDRESS]).toBe(0)
178
184
  expect(rewards.other).toBe(0)
179
185
  expect(rewards.totalRewards).toBe(0)
180
186
  })
181
187
 
182
- it('should categorize unknown tokens as other', () => {
188
+ it('should categorize unknown token addresses as other', () => {
183
189
  const vaultWithUnknown = {
184
190
  ...mockVaultNoRewards,
185
191
  state: {
186
192
  rewards: [
187
193
  {
188
- asset: { symbol: 'RARE_TOKEN' },
194
+ asset: { address: '0xunknowntoken', symbol: 'RARE_TOKEN' },
189
195
  supplyApr: 0.05,
190
196
  },
191
197
  ],
@@ -193,7 +199,7 @@ describe('Morpho API Integration', () => {
193
199
  },
194
200
  }
195
201
 
196
- const rewards = calculateRewardsBreakdown(vaultWithUnknown)
202
+ const rewards = calculateRewardsBreakdown(vaultWithUnknown, CHAIN_ID)
197
203
 
198
204
  expect(rewards.other).toBe(0.05)
199
205
  })
@@ -207,7 +213,12 @@ describe('Morpho API Integration', () => {
207
213
  {
208
214
  market: {
209
215
  state: {
210
- rewards: [{ asset: { symbol: 'USDC' }, supplyApr: 0.1 }],
216
+ rewards: [
217
+ {
218
+ asset: { address: USDC_ADDRESS, symbol: 'USDC' },
219
+ supplyApr: 0.1,
220
+ },
221
+ ],
211
222
  },
212
223
  },
213
224
  supplyAssetsUsd: 750000, // 75% of total
@@ -215,7 +226,12 @@ describe('Morpho API Integration', () => {
215
226
  {
216
227
  market: {
217
228
  state: {
218
- rewards: [{ asset: { symbol: 'USDC' }, supplyApr: 0.02 }],
229
+ rewards: [
230
+ {
231
+ asset: { address: USDC_ADDRESS, symbol: 'USDC' },
232
+ supplyApr: 0.02,
233
+ },
234
+ ],
219
235
  },
220
236
  },
221
237
  supplyAssetsUsd: 250000, // 25% of total
@@ -224,10 +240,13 @@ describe('Morpho API Integration', () => {
224
240
  },
225
241
  }
226
242
 
227
- const rewards = calculateRewardsBreakdown(vaultWithMarketRewards)
243
+ const rewards = calculateRewardsBreakdown(
244
+ vaultWithMarketRewards,
245
+ CHAIN_ID,
246
+ )
228
247
 
229
248
  // Expected: 0.1 * 0.75 + 0.02 * 0.25 = 0.075 + 0.005 = 0.08
230
- expect(rewards.usdc).toBeCloseTo(0.08, 6)
249
+ expect(rewards[USDC_ADDRESS]).toBeCloseTo(0.08, 6)
231
250
  })
232
251
  })
233
252
 
@@ -244,15 +263,18 @@ describe('Morpho API Integration', () => {
244
263
  }),
245
264
  )
246
265
 
247
- const rewards = await fetchAndCalculateRewards(GAUNTLET_USDC_VAULT)
266
+ const rewards = await fetchAndCalculateRewards(
267
+ GAUNTLET_USDC_VAULT,
268
+ CHAIN_ID,
269
+ )
248
270
 
249
271
  expect(rewards).toBeDefined()
250
- expect(typeof rewards.usdc).toBe('number')
251
- expect(typeof rewards.morpho).toBe('number')
272
+ expect(typeof rewards[USDC_ADDRESS]).toBe('number')
273
+ expect(typeof rewards[MORPHO_ADDRESS]).toBe('number')
252
274
  expect(typeof rewards.other).toBe('number')
253
275
  expect(typeof rewards.totalRewards).toBe('number')
254
- expect(rewards.usdc).toBeGreaterThan(0)
255
- expect(rewards.morpho).toBeGreaterThan(0)
276
+ expect(rewards[USDC_ADDRESS]).toBeGreaterThan(0)
277
+ expect(rewards[MORPHO_ADDRESS]).toBeGreaterThan(0)
256
278
  })
257
279
 
258
280
  it('should return empty rewards when vault not found', async () => {
@@ -267,10 +289,13 @@ describe('Morpho API Integration', () => {
267
289
  }),
268
290
  )
269
291
 
270
- const rewards = await fetchAndCalculateRewards(GAUNTLET_USDC_VAULT)
292
+ const rewards = await fetchAndCalculateRewards(
293
+ GAUNTLET_USDC_VAULT,
294
+ CHAIN_ID,
295
+ )
271
296
 
272
- expect(rewards.usdc).toBe(0)
273
- expect(rewards.morpho).toBe(0)
297
+ expect(rewards[USDC_ADDRESS]).toBe(0)
298
+ expect(rewards[MORPHO_ADDRESS]).toBe(0)
274
299
  expect(rewards.other).toBe(0)
275
300
  expect(rewards.totalRewards).toBe(0)
276
301
  })
@@ -279,7 +304,7 @@ describe('Morpho API Integration', () => {
279
304
  // External tests that make real network requests (only run with EXTERNAL_TEST=true)
280
305
  describe.runIf(externalTest())('External API Tests', () => {
281
306
  it('should fetch raw vault data from Morpho GraphQL API', async () => {
282
- const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT)
307
+ const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT, CHAIN_ID)
283
308
 
284
309
  expect(vaultData).toBeDefined()
285
310
  expect(vaultData).not.toBeNull()
@@ -290,33 +315,29 @@ describe('Morpho API Integration', () => {
290
315
  }, 30000)
291
316
 
292
317
  it('should fetch and calculate rewards breakdown', async () => {
293
- const rewards = await fetchAndCalculateRewards(GAUNTLET_USDC_VAULT)
318
+ const rewards = await fetchAndCalculateRewards(
319
+ GAUNTLET_USDC_VAULT,
320
+ CHAIN_ID,
321
+ )
294
322
 
295
323
  expect(rewards).toBeDefined()
296
- expect(typeof rewards.usdc).toBe('number')
297
- expect(typeof rewards.morpho).toBe('number')
298
324
  expect(typeof rewards.other).toBe('number')
299
325
  expect(typeof rewards.totalRewards).toBe('number')
300
326
 
301
- expect(rewards.usdc).toBeGreaterThanOrEqual(0)
302
- expect(rewards.morpho).toBeGreaterThanOrEqual(0)
303
327
  expect(rewards.other).toBeGreaterThanOrEqual(0)
304
328
  expect(rewards.totalRewards).toBeGreaterThanOrEqual(0)
305
-
306
- const expectedTotal = rewards.usdc + rewards.morpho + rewards.other
307
- expect(rewards.totalRewards).toBeCloseTo(expectedTotal, 6)
308
329
  }, 30000)
309
330
 
310
331
  it('should handle non-existent vault gracefully', async () => {
311
332
  const nonExistentVault =
312
333
  '0x0000000000000000000000000000000000000000' as Address
313
334
 
314
- const vaultData = await fetchRewards(nonExistentVault)
335
+ const vaultData = await fetchRewards(nonExistentVault, CHAIN_ID)
315
336
  expect(vaultData).toBeNull()
316
337
  }, 30000)
317
338
 
318
339
  it('should validate GraphQL response structure', async () => {
319
- const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT)
340
+ const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT, CHAIN_ID)
320
341
 
321
342
  expect(vaultData).toMatchObject({
322
343
  address: expect.any(String),
@@ -1,10 +1,16 @@
1
+ import { mainnet } from 'viem/chains'
1
2
  import { describe, expect, it } from 'vitest'
2
3
 
4
+ import { MORPHO, USDC } from '@/constants/assets.js'
3
5
  import {
4
6
  calculateBaseApy,
5
7
  calculateRewardsBreakdown,
6
8
  } from '@/lend/providers/morpho/sdk.js'
7
9
 
10
+ const CHAIN_ID = mainnet.id
11
+ const USDC_ADDRESS = USDC.address[CHAIN_ID]!.toLowerCase()
12
+ const MORPHO_ADDRESS = MORPHO.address[CHAIN_ID]!.toLowerCase()
13
+
8
14
  describe('Vault Utilities', () => {
9
15
  describe('calculateBaseApy', () => {
10
16
  it('should return 0 for vault with no assets', () => {
@@ -157,40 +163,34 @@ describe('Vault Utilities', () => {
157
163
  },
158
164
  }
159
165
 
160
- const result = calculateRewardsBreakdown(apiVault)
161
-
162
- expect(result).toEqual({
163
- eth: 0,
164
- weth: 0,
165
- usdc: 0,
166
- usdc_demo: 0,
167
- op_demo: 0,
168
- morpho: 0,
169
- other: 0,
170
- totalRewards: 0,
171
- })
166
+ const result = calculateRewardsBreakdown(apiVault, CHAIN_ID)
167
+
168
+ expect(result[USDC_ADDRESS]).toBe(0)
169
+ expect(result[MORPHO_ADDRESS]).toBe(0)
170
+ expect(result.other).toBe(0)
171
+ expect(result.totalRewards).toBe(0)
172
172
  })
173
173
 
174
- it('should categorize vault-level rewards by chain ID', () => {
174
+ it('should categorize vault-level rewards by address', () => {
175
175
  const apiVault = {
176
176
  state: {
177
177
  rewards: [
178
178
  {
179
179
  supplyApr: 0.03, // 3% USDC rewards
180
180
  asset: {
181
- address: '0x078d782b760474a361dda0af3839290b0ef57ad6',
181
+ address: USDC_ADDRESS,
182
182
  name: 'USDC',
183
183
  symbol: 'USDC',
184
- chain: { id: 130 }, // Unichain = USDC rewards
184
+ chain: { id: CHAIN_ID },
185
185
  },
186
186
  },
187
187
  {
188
188
  supplyApr: 0.015, // 1.5% MORPHO rewards
189
189
  asset: {
190
- address: '0x58D97B57BB95320F9a05dC918Aef65434969c2B2',
190
+ address: MORPHO_ADDRESS,
191
191
  name: 'MORPHO',
192
192
  symbol: 'MORPHO',
193
- chain: { id: 1 }, // Ethereum = MORPHO rewards
193
+ chain: { id: CHAIN_ID },
194
194
  },
195
195
  },
196
196
  ],
@@ -198,10 +198,10 @@ describe('Vault Utilities', () => {
198
198
  },
199
199
  }
200
200
 
201
- const result = calculateRewardsBreakdown(apiVault)
201
+ const result = calculateRewardsBreakdown(apiVault, CHAIN_ID)
202
202
 
203
- expect(result.usdc).toBeCloseTo(0.03, 4)
204
- expect(result.morpho).toBeCloseTo(0.015, 4)
203
+ expect(result[USDC_ADDRESS]).toBeCloseTo(0.03, 4)
204
+ expect(result[MORPHO_ADDRESS]).toBeCloseTo(0.015, 4)
205
205
  expect(result.other).toBe(0)
206
206
  expect(result.totalRewards).toBeCloseTo(0.045, 4)
207
207
  })
@@ -220,9 +220,9 @@ describe('Vault Utilities', () => {
220
220
  {
221
221
  supplyApr: 0.02, // 2% reward
222
222
  asset: {
223
- address: '0x078d782b760474a361dda0af3839290b0ef57ad6',
223
+ address: USDC_ADDRESS,
224
224
  symbol: 'USDC',
225
- chain: { id: 130 }, // USDC reward
225
+ chain: { id: CHAIN_ID },
226
226
  },
227
227
  },
228
228
  ],
@@ -238,9 +238,9 @@ describe('Vault Utilities', () => {
238
238
  {
239
239
  supplyApr: 0.05, // 5% reward
240
240
  asset: {
241
- address: '0x58D97B57BB95320F9a05dC918Aef65434969c2B2',
241
+ address: MORPHO_ADDRESS,
242
242
  symbol: 'MORPHO',
243
- chain: { id: 1 }, // MORPHO reward
243
+ chain: { id: CHAIN_ID },
244
244
  },
245
245
  },
246
246
  ],
@@ -251,13 +251,13 @@ describe('Vault Utilities', () => {
251
251
  },
252
252
  }
253
253
 
254
- const result = calculateRewardsBreakdown(apiVault)
254
+ const result = calculateRewardsBreakdown(apiVault, CHAIN_ID)
255
255
 
256
256
  // Expected calculation:
257
257
  // USDC: 2% * (600k / 1M) = 1.2%
258
258
  // MORPHO: 5% * (400k / 1M) = 2%
259
- expect(result.usdc).toBeCloseTo(0.012, 4)
260
- expect(result.morpho).toBeCloseTo(0.02, 4)
259
+ expect(result[USDC_ADDRESS]).toBeCloseTo(0.012, 4)
260
+ expect(result[MORPHO_ADDRESS]).toBeCloseTo(0.02, 4)
261
261
  expect(result.other).toBe(0)
262
262
  expect(result.totalRewards).toBeCloseTo(0.032, 4)
263
263
  })
@@ -269,9 +269,9 @@ describe('Vault Utilities', () => {
269
269
  {
270
270
  supplyApr: 0.01, // 1% vault-level USDC reward
271
271
  asset: {
272
- address: '0xBAa5CC21fd487B8Fcc2F632f3F4E8D37262a0842',
272
+ address: USDC_ADDRESS,
273
273
  symbol: 'USDC',
274
- chain: { id: 130 },
274
+ chain: { id: CHAIN_ID },
275
275
  },
276
276
  },
277
277
  ],
@@ -285,9 +285,9 @@ describe('Vault Utilities', () => {
285
285
  {
286
286
  supplyApr: 0.015, // 1.5% market-level MORPHO reward
287
287
  asset: {
288
- address: '0x58D97B57BB95320F9a05dC918Aef65434969c2B2',
288
+ address: MORPHO_ADDRESS,
289
289
  symbol: 'MORPHO',
290
- chain: { id: 1 },
290
+ chain: { id: CHAIN_ID },
291
291
  },
292
292
  },
293
293
  ],
@@ -298,14 +298,14 @@ describe('Vault Utilities', () => {
298
298
  },
299
299
  }
300
300
 
301
- const result = calculateRewardsBreakdown(apiVault)
301
+ const result = calculateRewardsBreakdown(apiVault, CHAIN_ID)
302
302
 
303
- expect(result.usdc).toBeCloseTo(0.01, 4) // Vault-level
304
- expect(result.morpho).toBeCloseTo(0.015, 4) // Market-level (100% weight)
303
+ expect(result[USDC_ADDRESS]).toBeCloseTo(0.01, 4) // Vault-level
304
+ expect(result[MORPHO_ADDRESS]).toBeCloseTo(0.015, 4) // Market-level (100% weight)
305
305
  expect(result.totalRewards).toBeCloseTo(0.025, 4)
306
306
  })
307
307
 
308
- it('should categorize unknown tokens as other rewards', () => {
308
+ it('should categorize unknown token addresses as other', () => {
309
309
  const apiVault = {
310
310
  state: {
311
311
  rewards: [
@@ -315,7 +315,7 @@ describe('Vault Utilities', () => {
315
315
  address: '0x1234567890123456789012345678901234567890',
316
316
  name: 'UNKNOWN',
317
317
  symbol: 'UNKNOWN',
318
- chain: { id: 42 }, // Unknown chain
318
+ chain: { id: CHAIN_ID },
319
319
  },
320
320
  },
321
321
  ],
@@ -323,10 +323,10 @@ describe('Vault Utilities', () => {
323
323
  },
324
324
  }
325
325
 
326
- const result = calculateRewardsBreakdown(apiVault)
326
+ const result = calculateRewardsBreakdown(apiVault, CHAIN_ID)
327
327
 
328
- expect(result.usdc).toBe(0)
329
- expect(result.morpho).toBe(0)
328
+ expect(result[USDC_ADDRESS]).toBe(0)
329
+ expect(result[MORPHO_ADDRESS]).toBe(0)
330
330
  expect(result.other).toBeCloseTo(0.005, 4)
331
331
  expect(result.totalRewards).toBeCloseTo(0.005, 4)
332
332
  })
@@ -345,9 +345,9 @@ describe('Vault Utilities', () => {
345
345
  {
346
346
  supplyApr: 0.1, // High reward but no weight
347
347
  asset: {
348
- address: '0xBAa5CC21fd487B8Fcc2F632f3F4E8D37262a0842',
348
+ address: USDC_ADDRESS,
349
349
  symbol: 'USDC',
350
- chain: { id: 130 },
350
+ chain: { id: CHAIN_ID },
351
351
  },
352
352
  },
353
353
  ],
@@ -358,10 +358,10 @@ describe('Vault Utilities', () => {
358
358
  },
359
359
  }
360
360
 
361
- const result = calculateRewardsBreakdown(apiVault)
361
+ const result = calculateRewardsBreakdown(apiVault, CHAIN_ID)
362
362
 
363
363
  // Should be zero because total supply is zero (weight = 0)
364
- expect(result.usdc).toBe(0)
364
+ expect(result[USDC_ADDRESS]).toBe(0)
365
365
  expect(result.totalRewards).toBe(0)
366
366
  })
367
367
  })
@@ -3,12 +3,8 @@ import type { Address } from 'viem'
3
3
  const MORPHO_API_ENDPOINT = 'https://api.morpho.org/graphql'
4
4
 
5
5
  export interface RewardsBreakdown {
6
- eth: number
7
- weth: number
8
- usdc: number
9
- usdc_demo: number
10
- op_demo: number
11
- morpho: number
6
+ /** Reward APR per token, keyed by lowercase token address. 'other' for unrecognized tokens. */
7
+ [tokenAddress: string]: number
12
8
  other: number
13
9
  totalRewards: number
14
10
  }
@@ -18,7 +14,10 @@ export interface RewardsBreakdown {
18
14
  * @param vaultAddress - Vault address
19
15
  * @returns Promise resolving to raw vault data or null if not found
20
16
  */
21
- export async function fetchRewards(vaultAddress: Address): Promise<any | null> {
17
+ export async function fetchRewards(
18
+ vaultAddress: Address,
19
+ chainId: number,
20
+ ): Promise<any | null> {
22
21
  const vaultQuery = {
23
22
  query: `
24
23
  query VaultByAddress($address: String!, $chainId: Int) {
@@ -67,7 +66,7 @@ export async function fetchRewards(vaultAddress: Address): Promise<any | null> {
67
66
  `,
68
67
  variables: {
69
68
  address: vaultAddress.toLowerCase(),
70
- chainId: 130,
69
+ chainId,
71
70
  },
72
71
  }
73
72
 
@@ -1,6 +1,20 @@
1
- import { baseSepolia } from 'viem/chains'
1
+ import {
2
+ base,
3
+ baseSepolia,
4
+ ink,
5
+ mainnet,
6
+ mode,
7
+ optimism,
8
+ soneium,
9
+ unichain,
10
+ worldchain,
11
+ } from 'viem/chains'
2
12
 
3
- import type { MorphoContractsRegistry } from '@/types/lend/contracts.js'
13
+ import type { SupportedChainId } from '@/constants/supportedChains.js'
14
+ import type {
15
+ MorphoContracts,
16
+ MorphoContractsRegistry,
17
+ } from '@/types/lend/contracts.js'
4
18
 
5
19
  /**
6
20
  * Morpho Blue core contract - same address on all chains via CREATE2
@@ -8,10 +22,44 @@ import type { MorphoContractsRegistry } from '@/types/lend/contracts.js'
8
22
  const MORPHO_BLUE = '0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb' as const
9
23
 
10
24
  /**
11
- * Contract addresses for chains NOT supported by Morpho SDK (testnets).
12
- * Mainnet/Base use the SDK which provides richer data including rewards.
25
+ * Morpho Blue contract addresses per chain.
26
+ * Mainnet chains use the SDK for richer data (rewards, allocations) when available.
27
+ * These contracts serve as the on-chain fallback and as the canonical deployment registry.
28
+ * @see https://github.com/morpho-org/sdks
13
29
  */
14
30
  export const MORPHO_CONTRACTS: MorphoContractsRegistry = {
31
+ [mainnet.id]: {
32
+ morphoBlue: MORPHO_BLUE,
33
+ irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
34
+ },
35
+ [optimism.id]: {
36
+ morphoBlue: MORPHO_BLUE,
37
+ irm: '0x8cD70A8F399428456b29546BC5dBe10ab6a06ef6',
38
+ },
39
+ [base.id]: {
40
+ morphoBlue: MORPHO_BLUE,
41
+ irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
42
+ },
43
+ [unichain.id]: {
44
+ morphoBlue: MORPHO_BLUE,
45
+ irm: '0x9a6061d51743B31D2c3Be75D83781Fa423f53F0E',
46
+ },
47
+ [worldchain.id]: {
48
+ morphoBlue: MORPHO_BLUE,
49
+ irm: '0x34E99D604751a72cF8d0CFDf87069292d82De472',
50
+ },
51
+ [ink.id]: {
52
+ morphoBlue: MORPHO_BLUE,
53
+ irm: '0x9515407b1512F53388ffE699524100e7270Ee57B',
54
+ },
55
+ [soneium.id]: {
56
+ morphoBlue: MORPHO_BLUE,
57
+ irm: '0x68F9b666b984527A7c145Db4103Cc6d3171C797F',
58
+ },
59
+ [mode.id]: {
60
+ morphoBlue: MORPHO_BLUE,
61
+ irm: '0xE3d46Ae190Cb39ccA3655E966DcEF96b4eAe1d1c',
62
+ },
15
63
  [baseSepolia.id]: {
16
64
  morphoBlue: MORPHO_BLUE,
17
65
  irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
@@ -20,18 +68,19 @@ export const MORPHO_CONTRACTS: MorphoContractsRegistry = {
20
68
 
21
69
  /**
22
70
  * Get Morpho contracts for a chain
23
- * @param chainId - Chain ID
24
- * @returns Morpho contracts if supported, undefined otherwise
25
71
  */
26
- export function getMorphoContracts(chainId: number) {
27
- return MORPHO_CONTRACTS[chainId]
72
+ export function getMorphoContracts(
73
+ chainId: number,
74
+ ): MorphoContracts | undefined {
75
+ return MORPHO_CONTRACTS[chainId as SupportedChainId]
28
76
  }
29
77
 
30
78
  /**
31
- * Check if Morpho is supported on a chain
32
- * @param chainId - Chain ID
33
- * @returns true if Morpho is deployed on this chain
79
+ * Get all chain IDs where Morpho contracts are deployed.
80
+ * Returns chains present in the local contracts registry.
81
+ * Filtering against ACTIONS_SUPPORTED_CHAIN_IDS and developer-configured chains
82
+ * is handled by the LendProvider base class.
34
83
  */
35
- export function isMorphoChainSupported(chainId: number): boolean {
36
- return chainId in MORPHO_CONTRACTS
84
+ export function getSupportedChainIds(): number[] {
85
+ return Object.keys(MORPHO_CONTRACTS).map(Number)
37
86
  }