@eth-optimism/actions-sdk 0.0.3 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/dist/actions.d.ts +19 -7
  2. package/dist/actions.d.ts.map +1 -1
  3. package/dist/actions.js +49 -19
  4. package/dist/actions.js.map +1 -1
  5. package/dist/actions.test.js +51 -81
  6. package/dist/actions.test.js.map +1 -1
  7. package/dist/constants/assets.d.ts.map +1 -1
  8. package/dist/constants/assets.js +2 -1
  9. package/dist/constants/assets.js.map +1 -1
  10. package/dist/constants/supportedChains.d.ts +1 -1
  11. package/dist/constants/supportedChains.d.ts.map +1 -1
  12. package/dist/constants/supportedChains.js +2 -1
  13. package/dist/constants/supportedChains.js.map +1 -1
  14. package/dist/index.d.ts +1 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/lend/core/LendProvider.d.ts +3 -2
  18. package/dist/lend/core/LendProvider.d.ts.map +1 -1
  19. package/dist/lend/core/LendProvider.js.map +1 -1
  20. package/dist/lend/core/__tests__/LendProvider.test.js +18 -48
  21. package/dist/lend/core/__tests__/LendProvider.test.js.map +1 -1
  22. package/dist/lend/index.d.ts +1 -0
  23. package/dist/lend/index.d.ts.map +1 -1
  24. package/dist/lend/index.js +1 -0
  25. package/dist/lend/index.js.map +1 -1
  26. package/dist/lend/namespaces/ActionsLendNamespace.d.ts +35 -8
  27. package/dist/lend/namespaces/ActionsLendNamespace.d.ts.map +1 -1
  28. package/dist/lend/namespaces/ActionsLendNamespace.js +45 -8
  29. package/dist/lend/namespaces/ActionsLendNamespace.js.map +1 -1
  30. package/dist/lend/namespaces/WalletLendNamespace.d.ts +43 -10
  31. package/dist/lend/namespaces/WalletLendNamespace.d.ts.map +1 -1
  32. package/dist/lend/namespaces/WalletLendNamespace.js +67 -13
  33. package/dist/lend/namespaces/WalletLendNamespace.js.map +1 -1
  34. package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js +23 -15
  35. package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js.map +1 -1
  36. package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js +29 -11
  37. package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js.map +1 -1
  38. package/dist/lend/providers/aave/AaveLendProvider.d.ts +82 -0
  39. package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -0
  40. package/dist/lend/providers/aave/AaveLendProvider.js +346 -0
  41. package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -0
  42. package/dist/lend/providers/aave/addresses.d.ts +57 -0
  43. package/dist/lend/providers/aave/addresses.d.ts.map +1 -0
  44. package/dist/lend/providers/aave/addresses.js +83 -0
  45. package/dist/lend/providers/aave/addresses.js.map +1 -0
  46. package/dist/lend/providers/aave/sdk.d.ts +57 -0
  47. package/dist/lend/providers/aave/sdk.d.ts.map +1 -0
  48. package/dist/lend/providers/aave/sdk.js +260 -0
  49. package/dist/lend/providers/aave/sdk.js.map +1 -0
  50. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +4 -3
  51. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
  52. package/dist/lend/providers/morpho/MorphoLendProvider.js +2 -2
  53. package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
  54. package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js +1 -33
  55. package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js.map +1 -1
  56. package/dist/lend/providers/morpho/__tests__/sdk.test.js +1 -0
  57. package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
  58. package/dist/lend/providers/morpho/sdk.d.ts +4 -3
  59. package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
  60. package/dist/lend/providers/morpho/sdk.js +0 -1
  61. package/dist/lend/providers/morpho/sdk.js.map +1 -1
  62. package/dist/services/ChainManager.d.ts +1 -1
  63. package/dist/supported/tokens.d.ts.map +1 -1
  64. package/dist/supported/tokens.js +18 -2
  65. package/dist/supported/tokens.js.map +1 -1
  66. package/dist/test/MockLendProvider.d.ts +5 -4
  67. package/dist/test/MockLendProvider.d.ts.map +1 -1
  68. package/dist/test/MockLendProvider.js +5 -5
  69. package/dist/test/MockLendProvider.js.map +1 -1
  70. package/dist/test/MockPrivyClient.d.ts +10 -49
  71. package/dist/test/MockPrivyClient.d.ts.map +1 -1
  72. package/dist/test/MockPrivyClient.js +13 -72
  73. package/dist/test/MockPrivyClient.js.map +1 -1
  74. package/dist/types/actions.d.ts +26 -2
  75. package/dist/types/actions.d.ts.map +1 -1
  76. package/dist/types/lend/base.d.ts +6 -19
  77. package/dist/types/lend/base.d.ts.map +1 -1
  78. package/dist/wallet/core/namespace/WalletNamespace.d.ts +13 -13
  79. package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
  80. package/dist/wallet/core/namespace/WalletNamespace.js +13 -13
  81. package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
  82. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +64 -42
  83. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
  84. package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js +51 -23
  85. package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js.map +1 -1
  86. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +12 -3
  87. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
  88. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js +3 -2
  89. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
  90. package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js +14 -4
  91. package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js.map +1 -1
  92. package/dist/wallet/core/providers/hosted/types/index.d.ts +8 -2
  93. package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
  94. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +14 -6
  95. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
  96. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js +10 -6
  97. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
  98. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js +36 -13
  99. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js.map +1 -1
  100. package/dist/wallet/core/wallets/abstract/Wallet.d.ts +19 -7
  101. package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
  102. package/dist/wallet/core/wallets/abstract/Wallet.js +9 -7
  103. package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
  104. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +9 -3
  105. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
  106. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js +4 -4
  107. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
  108. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js +1 -1
  109. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
  110. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +24 -4
  111. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  112. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +21 -6
  113. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  114. package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +34 -14
  115. package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
  116. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
  117. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +10 -4
  118. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
  119. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +9 -1
  120. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
  121. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +9 -2
  122. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  123. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +6 -3
  124. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  125. package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +4 -3
  126. package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
  127. package/dist/wallet/node/providers/hosted/types/index.d.ts +6 -1
  128. package/dist/wallet/node/providers/hosted/types/index.d.ts.map +1 -1
  129. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +19 -7
  130. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  131. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +13 -7
  132. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  133. package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +26 -28
  134. package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
  135. package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +12 -12
  136. package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -1
  137. package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.d.ts +6 -2
  138. package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.d.ts.map +1 -1
  139. package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.js +10 -7
  140. package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.js.map +1 -1
  141. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +8 -2
  142. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  143. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  144. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  145. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +6 -2
  146. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
  147. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +3 -3
  148. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
  149. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js +19 -7
  150. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js.map +1 -1
  151. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +6 -2
  152. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  153. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -3
  154. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  155. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +7 -3
  156. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
  157. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +6 -2
  158. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  159. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +3 -3
  160. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  161. package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +6 -3
  162. package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
  163. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +6 -6
  164. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
  165. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +6 -2
  166. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
  167. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +3 -3
  168. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
  169. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts +6 -0
  170. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts.map +1 -1
  171. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.js.map +1 -1
  172. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +6 -2
  173. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  174. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
  175. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  176. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +6 -2
  177. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  178. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  179. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  180. package/package.json +5 -2
  181. package/src/actions.test.ts +55 -96
  182. package/src/actions.ts +82 -26
  183. package/src/constants/assets.ts +8 -1
  184. package/src/constants/supportedChains.ts +8 -1
  185. package/src/index.ts +1 -2
  186. package/src/lend/core/LendProvider.ts +6 -5
  187. package/src/lend/core/__tests__/LendProvider.test.ts +19 -61
  188. package/src/lend/index.ts +1 -0
  189. package/src/lend/namespaces/ActionsLendNamespace.ts +77 -13
  190. package/src/lend/namespaces/WalletLendNamespace.ts +106 -20
  191. package/src/lend/namespaces/__tests__/ActionsLendNamespace.spec.ts +24 -18
  192. package/src/lend/namespaces/__tests__/WalletLendNamespace.spec.ts +49 -11
  193. package/src/lend/providers/aave/AaveLendProvider.ts +463 -0
  194. package/src/lend/providers/aave/addresses.ts +95 -0
  195. package/src/lend/providers/aave/sdk.ts +369 -0
  196. package/src/lend/providers/morpho/MorphoLendProvider.ts +5 -5
  197. package/src/lend/providers/morpho/__tests__/MorphoLendProvider.test.ts +5 -53
  198. package/src/lend/providers/morpho/__tests__/sdk.test.ts +1 -0
  199. package/src/lend/providers/morpho/sdk.ts +3 -4
  200. package/src/supported/tokens.ts +24 -2
  201. package/src/test/MockLendProvider.ts +9 -9
  202. package/src/test/MockPrivyClient.ts +24 -91
  203. package/src/types/actions.ts +30 -2
  204. package/src/types/lend/base.ts +6 -22
  205. package/src/wallet/core/namespace/WalletNamespace.ts +13 -13
  206. package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +69 -70
  207. package/src/wallet/core/providers/__tests__/WalletProvider.spec.ts +55 -47
  208. package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +15 -4
  209. package/src/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.ts +20 -7
  210. package/src/wallet/core/providers/hosted/types/index.ts +8 -2
  211. package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +24 -9
  212. package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts +38 -46
  213. package/src/wallet/core/wallets/abstract/Wallet.ts +25 -17
  214. package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +17 -10
  215. package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +4 -7
  216. package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +37 -11
  217. package/src/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +43 -24
  218. package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +10 -7
  219. package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +17 -2
  220. package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +13 -4
  221. package/src/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +4 -4
  222. package/src/wallet/node/providers/hosted/types/index.ts +9 -2
  223. package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +31 -11
  224. package/src/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +35 -40
  225. package/src/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +18 -14
  226. package/src/wallet/node/wallets/hosted/privy/utils/createSigner.ts +11 -9
  227. package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +16 -5
  228. package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +8 -4
  229. package/src/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.ts +25 -14
  230. package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +8 -4
  231. package/src/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +7 -7
  232. package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +8 -4
  233. package/src/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +6 -7
  234. package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +6 -6
  235. package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +12 -5
  236. package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +6 -0
  237. package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +12 -5
  238. package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +12 -5
  239. package/dist/constants/config.d.ts +0 -10
  240. package/dist/constants/config.d.ts.map +0 -1
  241. package/dist/constants/config.js +0 -10
  242. package/dist/constants/config.js.map +0 -1
  243. package/src/constants/config.ts +0 -9
@@ -0,0 +1,346 @@
1
+ import { encodeFunctionData, erc20Abi, formatUnits, parseAbi } from 'viem';
2
+ import { LendProvider } from '../../core/LendProvider.js';
3
+ import { getAssetAddress } from '../../../utils/assets.js';
4
+ import { getPoolAddress, getSupportedChainIds, getWETHGatewayAddress, } from './addresses.js';
5
+ import { getReserve, getReserves } from './sdk.js';
6
+ /**
7
+ * WETH predeploy address on OP Stack chains
8
+ * @description WETH is deployed at the same address on all OP Stack chains (Optimism, Base, etc.)
9
+ */
10
+ const WETH_ADDRESS = '0x4200000000000000000000000000000000000006';
11
+ /**
12
+ * Aave Pool ABI - only the functions we need
13
+ */
14
+ const POOL_ABI = parseAbi([
15
+ 'function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode)',
16
+ 'function withdraw(address asset, uint256 amount, address to) returns (uint256)',
17
+ ]);
18
+ /**
19
+ * Aave WETHGateway ABI - for native ETH deposits/withdrawals
20
+ */
21
+ const WETH_GATEWAY_ABI = parseAbi([
22
+ 'function depositETH(address pool, address onBehalfOf, uint16 referralCode) payable',
23
+ 'function withdrawETH(address pool, uint256 amount, address to)',
24
+ ]);
25
+ /**
26
+ * Supported chain IDs for Aave lending
27
+ * @description Array of chain IDs where Aave V3 is available on Optimism Superchain
28
+ */
29
+ export const SUPPORTED_CHAIN_IDS = getSupportedChainIds();
30
+ /**
31
+ * Aave lending provider implementation
32
+ * @description Lending provider implementation using Aave V3 protocol
33
+ */
34
+ export class AaveLendProvider extends LendProvider {
35
+ /**
36
+ * Create a new Aave lending provider
37
+ * @param config - Aave lending configuration
38
+ * @param chainManager - Chain manager for blockchain interactions
39
+ */
40
+ constructor(config, chainManager) {
41
+ super(config);
42
+ this.SUPPORTED_CHAIN_IDS = SUPPORTED_CHAIN_IDS;
43
+ this.chainManager = chainManager;
44
+ }
45
+ /**
46
+ * Check if market is a WETH market
47
+ * @param marketId - Market identifier
48
+ * @returns true if market is for WETH
49
+ * @description WETH is a predeploy at the same address on all OP Stack chains
50
+ */
51
+ isWETHMarket(marketId) {
52
+ return marketId.address.toLowerCase() === WETH_ADDRESS.toLowerCase();
53
+ }
54
+ /**
55
+ * Open a lending position in an Aave market
56
+ * @description Opens a lending position by supplying assets to an Aave reserve
57
+ * @param params - Position opening parameters
58
+ * @returns Promise resolving to lending transaction details
59
+ */
60
+ async _openPosition(params) {
61
+ try {
62
+ // Get Pool address for this chain
63
+ const poolAddress = getPoolAddress(params.marketId.chainId);
64
+ if (!poolAddress) {
65
+ throw new Error(`Aave V3 not deployed on chain ${params.marketId.chainId}`);
66
+ }
67
+ // Get market information for APY
68
+ const marketInfo = await this.getMarket({
69
+ address: params.marketId.address,
70
+ chainId: params.marketId.chainId,
71
+ });
72
+ // Check if this is a WETH market
73
+ if (this.isWETHMarket(params.marketId)) {
74
+ return this._openWETHPosition(params, poolAddress, marketInfo);
75
+ }
76
+ // Standard ERC-20 flow
77
+ return this._openERC20Position(params, poolAddress, marketInfo);
78
+ }
79
+ catch (error) {
80
+ throw new Error(`Failed to open position with ${params.amountWei} of ${params.asset.metadata.symbol}: ${error instanceof Error ? error.message : 'Unknown error'}`);
81
+ }
82
+ }
83
+ /**
84
+ * Open position for WETH market using WETHGateway
85
+ * @description Deposits native ETH via WETHGateway which wraps and deposits in one tx
86
+ */
87
+ async _openWETHPosition(params, poolAddress, marketInfo) {
88
+ const gatewayAddress = getWETHGatewayAddress(params.marketId.chainId);
89
+ if (!gatewayAddress) {
90
+ throw new Error(`WETHGateway not available on chain ${params.marketId.chainId}`);
91
+ }
92
+ // Generate depositETH transaction
93
+ const depositCallData = encodeFunctionData({
94
+ abi: WETH_GATEWAY_ABI,
95
+ functionName: 'depositETH',
96
+ args: [
97
+ poolAddress, // pool address
98
+ params.walletAddress, // onBehalfOf (receives aWETH)
99
+ 0, // referralCode (0 = no referral)
100
+ ],
101
+ });
102
+ return {
103
+ amount: params.amountWei,
104
+ asset: WETH_ADDRESS,
105
+ marketId: params.marketId.address,
106
+ apy: marketInfo.apy.total,
107
+ transactionData: {
108
+ openPosition: {
109
+ to: gatewayAddress,
110
+ data: depositCallData,
111
+ value: params.amountWei, // Send ETH as msg.value
112
+ },
113
+ },
114
+ slippage: params.options?.slippage ?? 50,
115
+ };
116
+ }
117
+ /**
118
+ * Open position for standard ERC-20 tokens
119
+ * @description Standard approve + supply flow for non-WETH assets
120
+ */
121
+ async _openERC20Position(params, poolAddress, marketInfo) {
122
+ // Get asset address for the chain
123
+ const assetAddress = params.asset.address[params.marketId.chainId];
124
+ if (!assetAddress) {
125
+ throw new Error(`Asset not supported on chain ${params.marketId.chainId}`);
126
+ }
127
+ // Generate approval transaction
128
+ const approvalCallData = encodeFunctionData({
129
+ abi: erc20Abi,
130
+ functionName: 'approve',
131
+ args: [poolAddress, params.amountWei],
132
+ });
133
+ // Generate supply transaction
134
+ const supplyCallData = encodeFunctionData({
135
+ abi: POOL_ABI,
136
+ functionName: 'supply',
137
+ args: [
138
+ assetAddress, // asset
139
+ params.amountWei, // amount
140
+ params.walletAddress, // onBehalfOf
141
+ 0, // referralCode
142
+ ],
143
+ });
144
+ return {
145
+ amount: params.amountWei,
146
+ asset: assetAddress,
147
+ marketId: params.marketId.address,
148
+ apy: marketInfo.apy.total,
149
+ transactionData: {
150
+ approval: {
151
+ to: assetAddress,
152
+ data: approvalCallData,
153
+ value: 0n,
154
+ },
155
+ openPosition: {
156
+ to: poolAddress,
157
+ data: supplyCallData,
158
+ value: 0n,
159
+ },
160
+ },
161
+ slippage: params.options?.slippage ?? 50,
162
+ };
163
+ }
164
+ /**
165
+ * Close a position in an Aave market
166
+ * @description Withdraws assets from an Aave reserve
167
+ * @param params - Position closing operation parameters
168
+ * @returns Promise resolving to withdrawal transaction details
169
+ */
170
+ async _closePosition(params) {
171
+ try {
172
+ // Get Pool address for this chain
173
+ const poolAddress = getPoolAddress(params.marketId.chainId);
174
+ if (!poolAddress) {
175
+ throw new Error(`Aave V3 not deployed on chain ${params.marketId.chainId}`);
176
+ }
177
+ const marketInfo = await this.getMarket({
178
+ address: params.marketId.address,
179
+ chainId: params.marketId.chainId,
180
+ });
181
+ // Check if this is a WETH market
182
+ if (this.isWETHMarket(params.marketId)) {
183
+ return this._closeWETHPosition(params, poolAddress, marketInfo);
184
+ }
185
+ // Standard ERC-20 flow
186
+ return this._closeERC20Position(params, poolAddress, marketInfo);
187
+ }
188
+ catch (error) {
189
+ throw new Error(`Failed to close position: ${error instanceof Error ? error.message : 'Unknown error'}`);
190
+ }
191
+ }
192
+ /**
193
+ * Close position for WETH market using WETHGateway
194
+ * @description Withdraws aWETH, unwraps to ETH, and sends to user
195
+ */
196
+ async _closeWETHPosition(params, poolAddress, marketInfo) {
197
+ const gatewayAddress = getWETHGatewayAddress(params.marketId.chainId);
198
+ if (!gatewayAddress) {
199
+ throw new Error(`WETHGateway not available on chain ${params.marketId.chainId}`);
200
+ }
201
+ // Get the aToken address for the underlying WETH asset
202
+ // Note: params.marketId.address is the underlying WETH address, not the aToken
203
+ const { getATokenAddress } = await import('./sdk.js');
204
+ const aWETHAddress = await getATokenAddress({
205
+ underlyingAsset: params.marketId.address,
206
+ chainId: params.marketId.chainId,
207
+ chainManager: this.chainManager,
208
+ });
209
+ // First: User must approve aWETH to WETHGateway
210
+ const approvalCallData = encodeFunctionData({
211
+ abi: erc20Abi,
212
+ functionName: 'approve',
213
+ args: [gatewayAddress, params.amount],
214
+ });
215
+ // Second: Call withdrawETH on gateway
216
+ const withdrawCallData = encodeFunctionData({
217
+ abi: WETH_GATEWAY_ABI,
218
+ functionName: 'withdrawETH',
219
+ args: [
220
+ poolAddress, // pool
221
+ params.amount, // amount
222
+ params.walletAddress, // to (receives native ETH)
223
+ ],
224
+ });
225
+ return {
226
+ amount: params.amount,
227
+ asset: WETH_ADDRESS,
228
+ marketId: params.marketId.address,
229
+ apy: marketInfo.apy.total,
230
+ transactionData: {
231
+ approval: {
232
+ to: aWETHAddress,
233
+ data: approvalCallData,
234
+ value: 0n,
235
+ },
236
+ closePosition: {
237
+ to: gatewayAddress,
238
+ data: withdrawCallData,
239
+ value: 0n,
240
+ },
241
+ },
242
+ slippage: params.options?.slippage ?? 50,
243
+ };
244
+ }
245
+ /**
246
+ * Close position for standard ERC-20 tokens
247
+ */
248
+ async _closeERC20Position(params, poolAddress, marketInfo) {
249
+ // Get asset address for the market's chain
250
+ const assetAddress = getAssetAddress(marketInfo.asset, params.marketId.chainId);
251
+ // Generate withdraw transaction
252
+ const withdrawCallData = encodeFunctionData({
253
+ abi: POOL_ABI,
254
+ functionName: 'withdraw',
255
+ args: [
256
+ assetAddress, // asset
257
+ params.amount, // amount
258
+ params.walletAddress, // to
259
+ ],
260
+ });
261
+ return {
262
+ amount: params.amount,
263
+ asset: assetAddress,
264
+ marketId: params.marketId.address,
265
+ apy: marketInfo.apy.total,
266
+ transactionData: {
267
+ closePosition: {
268
+ to: poolAddress,
269
+ data: withdrawCallData,
270
+ value: 0n,
271
+ },
272
+ },
273
+ slippage: params.options?.slippage ?? 50,
274
+ };
275
+ }
276
+ /**
277
+ * Get detailed market information
278
+ * @param marketId - Market identifier containing address and chainId
279
+ * @returns Promise resolving to market information
280
+ */
281
+ async _getMarket(marketId) {
282
+ return getReserve({
283
+ marketId,
284
+ chainManager: this.chainManager,
285
+ lendConfig: this._config,
286
+ });
287
+ }
288
+ /**
289
+ * Get list of available lending markets
290
+ * @param params - Filtering parameters
291
+ * @returns Promise resolving to array of market information
292
+ */
293
+ async _getMarkets(params) {
294
+ const marketConfigs = params.markets || [];
295
+ return getReserves({
296
+ chainManager: this.chainManager,
297
+ lendConfig: this._config,
298
+ markets: marketConfigs,
299
+ });
300
+ }
301
+ /**
302
+ * Get position for a specific wallet address
303
+ * @param params - Parameters for fetching position
304
+ * @returns Promise resolving to position information
305
+ */
306
+ async _getPosition(params) {
307
+ try {
308
+ const publicClient = this.chainManager.getPublicClient(params.marketId.chainId);
309
+ const market = await this._getMarket(params.marketId);
310
+ const poolAddress = getPoolAddress(params.marketId.chainId);
311
+ if (!poolAddress) {
312
+ throw new Error(`Aave V3 not deployed on chain ${params.marketId.chainId}`);
313
+ }
314
+ // Get the aToken address from Pool.getReserveData
315
+ const assetAddress = getAssetAddress(market.asset, params.marketId.chainId);
316
+ const reserveData = (await publicClient.readContract({
317
+ address: poolAddress,
318
+ abi: parseAbi([
319
+ 'struct ReserveData { uint256 configuration; uint128 liquidityIndex; uint128 currentLiquidityRate; uint128 variableBorrowIndex; uint128 currentVariableBorrowRate; uint128 currentStableBorrowRate; uint40 lastUpdateTimestamp; uint16 id; address aTokenAddress; address stableDebtTokenAddress; address variableDebtTokenAddress; address interestRateStrategyAddress; uint128 accruedToTreasury; uint128 unbacked; uint128 isolationModeTotalDebt; }',
320
+ 'function getReserveData(address asset) view returns (ReserveData)',
321
+ ]),
322
+ functionName: 'getReserveData',
323
+ args: [assetAddress],
324
+ }));
325
+ const aTokenAddress = reserveData.aTokenAddress;
326
+ const balance = await publicClient.readContract({
327
+ address: aTokenAddress,
328
+ abi: erc20Abi,
329
+ functionName: 'balanceOf',
330
+ args: [params.walletAddress],
331
+ });
332
+ const balanceFormatted = formatUnits(balance, market.asset.metadata.decimals);
333
+ return {
334
+ balance,
335
+ balanceFormatted,
336
+ shares: balance, // In Aave, aTokens are 1:1 with underlying
337
+ sharesFormatted: balanceFormatted,
338
+ marketId: params.marketId,
339
+ };
340
+ }
341
+ catch (error) {
342
+ throw new Error(`Failed to get market balance for ${params.walletAddress} in market ${params.marketId.address}: ${error instanceof Error ? error.message : 'Unknown error'}`);
343
+ }
344
+ }
345
+ }
346
+ //# sourceMappingURL=AaveLendProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AaveLendProvider.js","sourceRoot":"","sources":["../../../../src/lend/providers/aave/AaveLendProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAa1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAElD;;;GAGG;AACH,MAAM,YAAY,GAAG,4CAA4C,CAAA;AAEjE;;GAEG;AACH,MAAM,QAAQ,GAAG,QAAQ,CAAC;IACxB,yFAAyF;IACzF,gFAAgF;CACjF,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IAChC,oFAAoF;IACpF,gEAAgE;CACjE,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,oBAAoB,EAAuB,CAAA;AAE9E;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,YAAgC;IAKpE;;;;OAIG;IACH,YAAY,MAA0B,EAAE,YAA0B;QAChE,KAAK,CAAC,MAAM,CAAC,CAAA;QAVI,wBAAmB,GAAG,mBAAmB,CAAA;QAW1D,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAED;;;;;OAKG;IACK,YAAY,CAAC,QAAsB;QACzC,OAAO,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,CAAA;IACtE,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,aAAa,CAC3B,MAAsC;QAEtC,IAAI,CAAC;YACH,kCAAkC;YAClC,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YAC3D,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CACb,iCAAiC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAC3D,CAAA;YACH,CAAC;YAED,iCAAiC;YACjC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC;gBACtC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;gBAChC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;aACjC,CAAC,CAAA;YAEF,iCAAiC;YACjC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvC,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;YAChE,CAAC;YAED,uBAAuB;YACvB,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,gCAAgC,MAAM,CAAC,SAAS,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,KACjF,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAC3C,EAAE,CACH,CAAA;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,iBAAiB,CAC7B,MAAsC,EACtC,WAAoB,EACpB,UAAsB;QAEtB,MAAM,cAAc,GAAG,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACrE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,sCAAsC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAChE,CAAA;QACH,CAAC;QAED,kCAAkC;QAClC,MAAM,eAAe,GAAG,kBAAkB,CAAC;YACzC,GAAG,EAAE,gBAAgB;YACrB,YAAY,EAAE,YAAY;YAC1B,IAAI,EAAE;gBACJ,WAAW,EAAE,eAAe;gBAC5B,MAAM,CAAC,aAAa,EAAE,8BAA8B;gBACpD,CAAC,EAAE,iCAAiC;aACrC;SACF,CAAC,CAAA;QAEF,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,SAAS;YACxB,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;YACjC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK;YACzB,eAAe,EAAE;gBACf,YAAY,EAAE;oBACZ,EAAE,EAAE,cAAc;oBAClB,IAAI,EAAE,eAAe;oBACrB,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,wBAAwB;iBAClD;aACF;YACD,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE;SACzC,CAAA;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,kBAAkB,CAC9B,MAAsC,EACtC,WAAoB,EACpB,UAAsB;QAEtB,kCAAkC;QAClC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAClE,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;QAC5E,CAAC;QAED,gCAAgC;QAChC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;YAC1C,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,SAAS;YACvB,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC;SACtC,CAAC,CAAA;QAEF,8BAA8B;QAC9B,MAAM,cAAc,GAAG,kBAAkB,CAAC;YACxC,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,QAAQ;YACtB,IAAI,EAAE;gBACJ,YAAY,EAAE,QAAQ;gBACtB,MAAM,CAAC,SAAS,EAAE,SAAS;gBAC3B,MAAM,CAAC,aAAa,EAAE,aAAa;gBACnC,CAAC,EAAE,eAAe;aACnB;SACF,CAAC,CAAA;QAEF,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,SAAS;YACxB,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;YACjC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK;YACzB,eAAe,EAAE;gBACf,QAAQ,EAAE;oBACR,EAAE,EAAE,YAAY;oBAChB,IAAI,EAAE,gBAAgB;oBACtB,KAAK,EAAE,EAAE;iBACV;gBACD,YAAY,EAAE;oBACZ,EAAE,EAAE,WAAW;oBACf,IAAI,EAAE,cAAc;oBACpB,KAAK,EAAE,EAAE;iBACV;aACF;YACD,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE;SACzC,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,cAAc,CAC5B,MAA+B;QAE/B,IAAI,CAAC;YACH,kCAAkC;YAClC,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YAC3D,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CACb,iCAAiC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAC3D,CAAA;YACH,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC;gBACtC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;gBAChC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;aACjC,CAAC,CAAA;YAEF,iCAAiC;YACjC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvC,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;YACjE,CAAC;YAED,uBAAuB;YACvB,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,6BACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAC3C,EAAE,CACH,CAAA;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,kBAAkB,CAC9B,MAA+B,EAC/B,WAAoB,EACpB,UAAsB;QAEtB,MAAM,cAAc,GAAG,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACrE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,sCAAsC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAChE,CAAA;QACH,CAAC;QAED,uDAAuD;QACvD,+EAA+E;QAC/E,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAA;QACrD,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC;YAC1C,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;YACxC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;YAChC,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,CAAA;QAEF,gDAAgD;QAChD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;YAC1C,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,SAAS;YACvB,IAAI,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC;SACtC,CAAC,CAAA;QAEF,sCAAsC;QACtC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;YAC1C,GAAG,EAAE,gBAAgB;YACrB,YAAY,EAAE,aAAa;YAC3B,IAAI,EAAE;gBACJ,WAAW,EAAE,OAAO;gBACpB,MAAM,CAAC,MAAM,EAAE,SAAS;gBACxB,MAAM,CAAC,aAAa,EAAE,2BAA2B;aAClD;SACF,CAAC,CAAA;QAEF,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;YACjC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK;YACzB,eAAe,EAAE;gBACf,QAAQ,EAAE;oBACR,EAAE,EAAE,YAAY;oBAChB,IAAI,EAAE,gBAAgB;oBACtB,KAAK,EAAE,EAAE;iBACV;gBACD,aAAa,EAAE;oBACb,EAAE,EAAE,cAAc;oBAClB,IAAI,EAAE,gBAAgB;oBACtB,KAAK,EAAE,EAAE;iBACV;aACF;YACD,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE;SACzC,CAAA;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAC/B,MAA+B,EAC/B,WAAoB,EACpB,UAAsB;QAEtB,2CAA2C;QAC3C,MAAM,YAAY,GAAG,eAAe,CAClC,UAAU,CAAC,KAAK,EAChB,MAAM,CAAC,QAAQ,CAAC,OAAO,CACxB,CAAA;QAED,gCAAgC;QAChC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;YAC1C,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,UAAU;YACxB,IAAI,EAAE;gBACJ,YAAY,EAAE,QAAQ;gBACtB,MAAM,CAAC,MAAM,EAAE,SAAS;gBACxB,MAAM,CAAC,aAAa,EAAE,KAAK;aAC5B;SACF,CAAC,CAAA;QAEF,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;YACjC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK;YACzB,eAAe,EAAE;gBACf,aAAa,EAAE;oBACb,EAAE,EAAE,WAAW;oBACf,IAAI,EAAE,gBAAgB;oBACtB,KAAK,EAAE,EAAE;iBACV;aACF;YACD,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE;SACzC,CAAA;IACH,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,UAAU,CAAC,QAAsB;QAC/C,OAAO,UAAU,CAAC;YAChB,QAAQ;YACR,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,UAAU,EAAE,IAAI,CAAC,OAAO;SACzB,CAAC,CAAA;IACJ,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,WAAW,CACzB,MAA4B;QAE5B,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAA;QAE1C,OAAO,WAAW,CAAC;YACjB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,UAAU,EAAE,IAAI,CAAC,OAAO;YACxB,OAAO,EAAE,aAAa;SACvB,CAAC,CAAA;IACJ,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,YAAY,CAC1B,MAA8B;QAE9B,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CACpD,MAAM,CAAC,QAAQ,CAAC,OAAO,CACxB,CAAA;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACrD,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YAE3D,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CACb,iCAAiC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAC3D,CAAA;YACH,CAAC;YAED,kDAAkD;YAClD,MAAM,YAAY,GAAG,eAAe,CAClC,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,QAAQ,CAAC,OAAO,CACxB,CAAA;YAED,MAAM,WAAW,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;gBACnD,OAAO,EAAE,WAAW;gBACpB,GAAG,EAAE,QAAQ,CAAC;oBACZ,wbAAwb;oBACxb,mEAAmE;iBACpE,CAAC;gBACF,YAAY,EAAE,gBAAgB;gBAC9B,IAAI,EAAE,CAAC,YAAY,CAAC;aACrB,CAAC,CAED,CAAA;YAED,MAAM,aAAa,GAAG,WAAW,CAAC,aAAa,CAAA;YAE/C,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC;gBAC9C,OAAO,EAAE,aAAa;gBACtB,GAAG,EAAE,QAAQ;gBACb,YAAY,EAAE,WAAW;gBACzB,IAAI,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC;aAC7B,CAAC,CAAA;YAEF,MAAM,gBAAgB,GAAG,WAAW,CAClC,OAAO,EACP,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAC/B,CAAA;YAED,OAAO;gBACL,OAAO;gBACP,gBAAgB;gBAChB,MAAM,EAAE,OAAO,EAAE,2CAA2C;gBAC5D,eAAe,EAAE,gBAAgB;gBACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,oCAAoC,MAAM,CAAC,aAAa,cAAc,MAAM,CAAC,QAAQ,CAAC,OAAO,KAC3F,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAC3C,EAAE,CACH,CAAA;QACH,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,57 @@
1
+ import type { Address } from 'viem';
2
+ /**
3
+ * Aave V3 Pool addresses for Optimism Superchain networks
4
+ * @description Hardcoded Pool contract addresses for each supported chain
5
+ */
6
+ /**
7
+ * Mainnet Pool addresses
8
+ */
9
+ export declare const POOL_ADDRESSES_MAINNET: Record<number, Address>;
10
+ /**
11
+ * Testnet Pool addresses
12
+ */
13
+ export declare const POOL_ADDRESSES_TESTNET: Record<number, Address>;
14
+ /**
15
+ * All Pool addresses (mainnet + testnet)
16
+ */
17
+ export declare const POOL_ADDRESSES: Record<number, Address>;
18
+ /**
19
+ * Get Pool address for a given chain ID
20
+ * @param chainId - Chain ID
21
+ * @returns Pool address if supported, undefined otherwise
22
+ */
23
+ export declare function getPoolAddress(chainId: number): Address | undefined;
24
+ /**
25
+ * Check if a chain ID has Aave V3 deployed
26
+ * @param chainId - Chain ID to check
27
+ * @returns true if Aave V3 is deployed on this chain
28
+ */
29
+ export declare function isAaveChainSupported(chainId: number): boolean;
30
+ /**
31
+ * Get all supported chain IDs
32
+ * @returns Array of chain IDs with Aave V3 deployed
33
+ */
34
+ export declare function getSupportedChainIds(): number[];
35
+ /**
36
+ * Aave V3 WETHGateway addresses for Optimism Superchain networks
37
+ * @description Gateway contracts that handle native ETH wrapping and depositing
38
+ */
39
+ /**
40
+ * Mainnet WETHGateway addresses
41
+ */
42
+ export declare const WETH_GATEWAY_ADDRESSES_MAINNET: Record<number, Address>;
43
+ /**
44
+ * Testnet WETHGateway addresses
45
+ */
46
+ export declare const WETH_GATEWAY_ADDRESSES_TESTNET: Record<number, Address>;
47
+ /**
48
+ * All WETHGateway addresses (mainnet + testnet)
49
+ */
50
+ export declare const WETH_GATEWAY_ADDRESSES: Record<number, Address>;
51
+ /**
52
+ * Get WETHGateway address for a given chain ID
53
+ * @param chainId - Chain ID
54
+ * @returns WETHGateway address if supported, undefined otherwise
55
+ */
56
+ export declare function getWETHGatewayAddress(chainId: number): Address | undefined;
57
+ //# sourceMappingURL=addresses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addresses.d.ts","sourceRoot":"","sources":["../../../../src/lend/providers/aave/addresses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAGnC;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAGjD,CAAA;AAEV;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAGjD,CAAA;AAEV;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAGzC,CAAA;AAEV;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAEnE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C;AAED;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAGzD,CAAA;AAEV;;GAEG;AACH,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAGzD,CAAA;AAEV;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAGjD,CAAA;AAEV;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAE1E"}
@@ -0,0 +1,83 @@
1
+ import { base, baseSepolia, optimism, optimismSepolia } from 'viem/chains';
2
+ /**
3
+ * Aave V3 Pool addresses for Optimism Superchain networks
4
+ * @description Hardcoded Pool contract addresses for each supported chain
5
+ */
6
+ /**
7
+ * Mainnet Pool addresses
8
+ */
9
+ export const POOL_ADDRESSES_MAINNET = {
10
+ [optimism.id]: '0x794a61358D6845594F94dc1DB02A252b5b4814aD',
11
+ [base.id]: '0xA238Dd80C259a72e81d7e4664a9801593F98d1c5',
12
+ };
13
+ /**
14
+ * Testnet Pool addresses
15
+ */
16
+ export const POOL_ADDRESSES_TESTNET = {
17
+ [optimismSepolia.id]: '0xb50201558b00496a145fe76f7424749556e326d8',
18
+ [baseSepolia.id]: '0x8bAB6d1b75f19e9eD9fCe8b9BD338844fF79aE27',
19
+ };
20
+ /**
21
+ * All Pool addresses (mainnet + testnet)
22
+ */
23
+ export const POOL_ADDRESSES = {
24
+ ...POOL_ADDRESSES_MAINNET,
25
+ ...POOL_ADDRESSES_TESTNET,
26
+ };
27
+ /**
28
+ * Get Pool address for a given chain ID
29
+ * @param chainId - Chain ID
30
+ * @returns Pool address if supported, undefined otherwise
31
+ */
32
+ export function getPoolAddress(chainId) {
33
+ return POOL_ADDRESSES[chainId];
34
+ }
35
+ /**
36
+ * Check if a chain ID has Aave V3 deployed
37
+ * @param chainId - Chain ID to check
38
+ * @returns true if Aave V3 is deployed on this chain
39
+ */
40
+ export function isAaveChainSupported(chainId) {
41
+ return chainId in POOL_ADDRESSES;
42
+ }
43
+ /**
44
+ * Get all supported chain IDs
45
+ * @returns Array of chain IDs with Aave V3 deployed
46
+ */
47
+ export function getSupportedChainIds() {
48
+ return Object.keys(POOL_ADDRESSES).map(Number);
49
+ }
50
+ /**
51
+ * Aave V3 WETHGateway addresses for Optimism Superchain networks
52
+ * @description Gateway contracts that handle native ETH wrapping and depositing
53
+ */
54
+ /**
55
+ * Mainnet WETHGateway addresses
56
+ */
57
+ export const WETH_GATEWAY_ADDRESSES_MAINNET = {
58
+ [optimism.id]: '0x5f2508cAE9923b02316254026CD43d7902866725',
59
+ [base.id]: '0xa0d9C1E9E48Ca30c8d8C3B5D69FF5dc1f6DFfC24',
60
+ };
61
+ /**
62
+ * Testnet WETHGateway addresses
63
+ */
64
+ export const WETH_GATEWAY_ADDRESSES_TESTNET = {
65
+ [optimismSepolia.id]: '0x589750BA8aF186cE5B55391B0b7148cAD43a1619',
66
+ [baseSepolia.id]: '0x0568130e794429D2eEBC4dafE18f25Ff1a1ed8b6',
67
+ };
68
+ /**
69
+ * All WETHGateway addresses (mainnet + testnet)
70
+ */
71
+ export const WETH_GATEWAY_ADDRESSES = {
72
+ ...WETH_GATEWAY_ADDRESSES_MAINNET,
73
+ ...WETH_GATEWAY_ADDRESSES_TESTNET,
74
+ };
75
+ /**
76
+ * Get WETHGateway address for a given chain ID
77
+ * @param chainId - Chain ID
78
+ * @returns WETHGateway address if supported, undefined otherwise
79
+ */
80
+ export function getWETHGatewayAddress(chainId) {
81
+ return WETH_GATEWAY_ADDRESSES[chainId];
82
+ }
83
+ //# sourceMappingURL=addresses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addresses.js","sourceRoot":"","sources":["../../../../src/lend/providers/aave/addresses.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE1E;;;GAGG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAA4B;IAC7D,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,4CAA4C;IAC3D,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,4CAA4C;CAC/C,CAAA;AAEV;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAA4B;IAC7D,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,4CAA4C;IAClE,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,4CAA4C;CACtD,CAAA;AAEV;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAA4B;IACrD,GAAG,sBAAsB;IACzB,GAAG,sBAAsB;CACjB,CAAA;AAEV;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,cAAc,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,OAAO,OAAO,IAAI,cAAc,CAAA;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAChD,CAAC;AAED;;;GAGG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAA4B;IACrE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,4CAA4C;IAC3D,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,4CAA4C;CAC/C,CAAA;AAEV;;GAEG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAA4B;IACrE,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,4CAA4C;IAClE,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,4CAA4C;CACtD,CAAA;AAEV;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAA4B;IAC7D,GAAG,8BAA8B;IACjC,GAAG,8BAA8B;CACzB,CAAA;AAEV;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAA;AACxC,CAAC"}
@@ -0,0 +1,57 @@
1
+ import type { Address } from 'viem';
2
+ import type { SUPPORTED_CHAIN_IDS } from '../../../constants/supportedChains.js';
3
+ import type { ChainManager } from '../../../services/ChainManager.js';
4
+ import type { LendProviderConfig } from '../../../types/actions.js';
5
+ import type { ApyBreakdown, LendMarket, LendMarketConfig, LendMarketId } from '../../../types/lend/index.js';
6
+ /**
7
+ * Parameters for getReserve function
8
+ */
9
+ interface GetReserveParams {
10
+ /** Market identifier (asset address and chainId) */
11
+ marketId: LendMarketId;
12
+ /** Chain manager instance */
13
+ chainManager: ChainManager;
14
+ /** Lend configuration containing market allowlist */
15
+ lendConfig?: LendProviderConfig;
16
+ }
17
+ /**
18
+ * Parameters for getReserves function
19
+ */
20
+ interface GetReservesParams {
21
+ chainManager: ChainManager;
22
+ lendConfig: LendProviderConfig;
23
+ markets: LendMarketConfig[];
24
+ }
25
+ /**
26
+ * Calculate APY breakdown from reserve data
27
+ * @param reserve - Formatted reserve data from Aave
28
+ * @returns APY breakdown with native APY and rewards
29
+ */
30
+ export declare function calculateApyBreakdown(reserve: {
31
+ formattedReserve?: any;
32
+ }): ApyBreakdown;
33
+ /**
34
+ * Get detailed reserve (market) information from Aave
35
+ * @param params - Named parameters object
36
+ * @returns Promise resolving to detailed market information
37
+ */
38
+ export declare function getReserve(params: GetReserveParams): Promise<LendMarket>;
39
+ /**
40
+ * Get multiple reserves (markets)
41
+ * @param params - Parameters including markets to fetch
42
+ * @returns Promise resolving to array of market information
43
+ */
44
+ export declare function getReserves(params: GetReservesParams): Promise<LendMarket[]>;
45
+ /**
46
+ * Get aToken address for a given underlying asset
47
+ * @param params - Parameters including asset address, chain ID, and chain manager
48
+ * @returns Promise resolving to aToken address
49
+ * @description Queries the Aave Pool to get the aToken address for the underlying asset
50
+ */
51
+ export declare function getATokenAddress(params: {
52
+ underlyingAsset: Address;
53
+ chainId: (typeof SUPPORTED_CHAIN_IDS)[number];
54
+ chainManager: ChainManager;
55
+ }): Promise<Address>;
56
+ export {};
57
+ //# sourceMappingURL=sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../../../src/lend/providers/aave/sdk.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAGnC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,uBAAuB,CAAA;AAwB9B;;GAEG;AACH,UAAU,gBAAgB;IACxB,oDAAoD;IACpD,QAAQ,EAAE,YAAY,CAAA;IACtB,6BAA6B;IAC7B,YAAY,EAAE,YAAY,CAAA;IAC1B,qDAAqD;IACrD,UAAU,CAAC,EAAE,kBAAkB,CAAA;CAChC;AAED;;GAEG;AACH,UAAU,iBAAiB;IACzB,YAAY,EAAE,YAAY,CAAA;IAC1B,UAAU,EAAE,kBAAkB,CAAA;IAC9B,OAAO,EAAE,gBAAgB,EAAE,CAAA;CAC5B;AAmBD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,gBAAgB,CAAC,EAAE,GAAG,CAAA;CACvB,GAAG,YAAY,CAcf;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,UAAU,CAAC,CAoHrB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,UAAU,EAAE,CAAC,CAqBvB;AAmED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,eAAe,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;IAC7C,YAAY,EAAE,YAAY,CAAA;CAC3B,GAAG,OAAO,CAAC,OAAO,CAAC,CAsCnB"}