@eth-optimism/actions-sdk 0.0.4 → 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.
- package/dist/actions.d.ts +19 -7
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +49 -19
- package/dist/actions.js.map +1 -1
- package/dist/actions.test.js +30 -80
- package/dist/actions.test.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lend/core/LendProvider.d.ts +3 -2
- package/dist/lend/core/LendProvider.d.ts.map +1 -1
- package/dist/lend/core/LendProvider.js.map +1 -1
- package/dist/lend/core/__tests__/LendProvider.test.js +18 -48
- package/dist/lend/core/__tests__/LendProvider.test.js.map +1 -1
- package/dist/lend/index.d.ts +1 -0
- package/dist/lend/index.d.ts.map +1 -1
- package/dist/lend/index.js +1 -0
- package/dist/lend/index.js.map +1 -1
- package/dist/lend/namespaces/ActionsLendNamespace.d.ts +35 -8
- package/dist/lend/namespaces/ActionsLendNamespace.d.ts.map +1 -1
- package/dist/lend/namespaces/ActionsLendNamespace.js +45 -8
- package/dist/lend/namespaces/ActionsLendNamespace.js.map +1 -1
- package/dist/lend/namespaces/WalletLendNamespace.d.ts +35 -8
- package/dist/lend/namespaces/WalletLendNamespace.d.ts.map +1 -1
- package/dist/lend/namespaces/WalletLendNamespace.js +59 -11
- package/dist/lend/namespaces/WalletLendNamespace.js.map +1 -1
- package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js +23 -15
- package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js.map +1 -1
- package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js +29 -11
- package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js.map +1 -1
- package/dist/lend/providers/aave/AaveLendProvider.d.ts +82 -0
- package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -0
- package/dist/lend/providers/aave/AaveLendProvider.js +346 -0
- package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -0
- package/dist/lend/providers/aave/addresses.d.ts +57 -0
- package/dist/lend/providers/aave/addresses.d.ts.map +1 -0
- package/dist/lend/providers/aave/addresses.js +83 -0
- package/dist/lend/providers/aave/addresses.js.map +1 -0
- package/dist/lend/providers/aave/sdk.d.ts +57 -0
- package/dist/lend/providers/aave/sdk.d.ts.map +1 -0
- package/dist/lend/providers/aave/sdk.js +260 -0
- package/dist/lend/providers/aave/sdk.js.map +1 -0
- package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +4 -3
- package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
- package/dist/lend/providers/morpho/MorphoLendProvider.js +2 -2
- package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
- package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js +1 -33
- package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js.map +1 -1
- package/dist/lend/providers/morpho/__tests__/sdk.test.js +1 -0
- package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
- package/dist/lend/providers/morpho/sdk.d.ts +4 -3
- package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
- package/dist/supported/tokens.d.ts.map +1 -1
- package/dist/supported/tokens.js +18 -2
- package/dist/supported/tokens.js.map +1 -1
- package/dist/test/MockLendProvider.d.ts +5 -4
- package/dist/test/MockLendProvider.d.ts.map +1 -1
- package/dist/test/MockLendProvider.js +5 -5
- package/dist/test/MockLendProvider.js.map +1 -1
- package/dist/types/actions.d.ts +26 -2
- package/dist/types/actions.d.ts.map +1 -1
- package/dist/types/lend/base.d.ts +6 -19
- package/dist/types/lend/base.d.ts.map +1 -1
- package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +9 -9
- package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
- package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js +8 -8
- package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js.map +1 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +12 -3
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js +3 -2
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
- package/dist/wallet/core/providers/hosted/types/index.d.ts +8 -2
- package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +14 -6
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js +10 -6
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
- package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js +36 -13
- package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js.map +1 -1
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts +19 -7
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/abstract/Wallet.js +9 -7
- package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +9 -3
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js +4 -4
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
- package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js +1 -1
- package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +10 -3
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +5 -3
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +4 -3
- package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +5 -4
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +9 -2
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +6 -3
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +4 -3
- package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +10 -3
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +5 -4
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +8 -2
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +6 -2
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +3 -3
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js +19 -7
- package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +6 -2
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -3
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +7 -3
- package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +6 -2
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +3 -3
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +6 -3
- package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +6 -6
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +6 -2
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +3 -3
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts +6 -0
- package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +6 -2
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +6 -2
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
- package/package.json +4 -1
- package/src/actions.test.ts +32 -93
- package/src/actions.ts +82 -26
- package/src/index.ts +1 -2
- package/src/lend/core/LendProvider.ts +6 -5
- package/src/lend/core/__tests__/LendProvider.test.ts +19 -61
- package/src/lend/index.ts +1 -0
- package/src/lend/namespaces/ActionsLendNamespace.ts +77 -13
- package/src/lend/namespaces/WalletLendNamespace.ts +98 -18
- package/src/lend/namespaces/__tests__/ActionsLendNamespace.spec.ts +24 -18
- package/src/lend/namespaces/__tests__/WalletLendNamespace.spec.ts +49 -11
- package/src/lend/providers/aave/AaveLendProvider.ts +463 -0
- package/src/lend/providers/aave/addresses.ts +95 -0
- package/src/lend/providers/aave/sdk.ts +369 -0
- package/src/lend/providers/morpho/MorphoLendProvider.ts +5 -5
- package/src/lend/providers/morpho/__tests__/MorphoLendProvider.test.ts +5 -53
- package/src/lend/providers/morpho/__tests__/sdk.test.ts +1 -0
- package/src/lend/providers/morpho/sdk.ts +3 -3
- package/src/supported/tokens.ts +24 -2
- package/src/test/MockLendProvider.ts +9 -9
- package/src/types/actions.ts +30 -2
- package/src/types/lend/base.ts +6 -22
- package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +9 -9
- package/src/wallet/core/providers/__tests__/WalletProvider.spec.ts +8 -8
- package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +15 -4
- package/src/wallet/core/providers/hosted/types/index.ts +8 -2
- package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +24 -9
- package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts +38 -46
- package/src/wallet/core/wallets/abstract/Wallet.ts +25 -17
- package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +17 -10
- package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +4 -7
- package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +13 -5
- package/src/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +4 -4
- package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +6 -4
- package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +13 -4
- package/src/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +4 -4
- package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +18 -6
- package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +16 -5
- package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +8 -4
- package/src/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.ts +25 -14
- package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +8 -4
- package/src/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +7 -7
- package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +8 -4
- package/src/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +6 -7
- package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +6 -6
- package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +12 -5
- package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +6 -0
- package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +12 -5
- package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +12 -5
- package/dist/constants/config.d.ts +0 -10
- package/dist/constants/config.d.ts.map +0 -1
- package/dist/constants/config.js +0 -10
- package/dist/constants/config.js.map +0 -1
- package/src/constants/config.ts +0 -9
package/src/types/actions.ts
CHANGED
|
@@ -1,7 +1,22 @@
|
|
|
1
|
+
import type { Asset } from '@/types/asset.js'
|
|
1
2
|
import type { ChainConfig } from '@/types/chain.js'
|
|
2
|
-
import type {
|
|
3
|
+
import type { LendProviderConfig } from '@/types/lend/index.js'
|
|
3
4
|
import type { ProviderSpec } from '@/wallet/core/providers/hosted/types/index.js'
|
|
4
5
|
|
|
6
|
+
// Re-export LendProviderConfig for convenience
|
|
7
|
+
export type { LendProviderConfig }
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Lending configuration
|
|
11
|
+
* @description Configuration for all lending providers
|
|
12
|
+
*/
|
|
13
|
+
export interface LendConfig {
|
|
14
|
+
/** Morpho lending provider configuration */
|
|
15
|
+
morpho?: LendProviderConfig
|
|
16
|
+
/** Aave lending provider configuration */
|
|
17
|
+
aave?: LendProviderConfig
|
|
18
|
+
}
|
|
19
|
+
|
|
5
20
|
/**
|
|
6
21
|
* Network configuration for lending providers
|
|
7
22
|
* @description Basic network information that lending providers need
|
|
@@ -11,6 +26,17 @@ export interface LendNetworkConfig {
|
|
|
11
26
|
name: string
|
|
12
27
|
}
|
|
13
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Assets configuration
|
|
31
|
+
* @description Configuration for supported assets
|
|
32
|
+
*/
|
|
33
|
+
export interface AssetsConfig {
|
|
34
|
+
/** Allowlist of assets to support (optional - defaults to all SUPPORTED_TOKENS) */
|
|
35
|
+
allow?: Asset[]
|
|
36
|
+
/** Blocklist of assets to exclude (optional) */
|
|
37
|
+
block?: Asset[]
|
|
38
|
+
}
|
|
39
|
+
|
|
14
40
|
/**
|
|
15
41
|
* Actions SDK configuration
|
|
16
42
|
* @description Configuration object for initializing the Actions SDK
|
|
@@ -21,8 +47,10 @@ export interface ActionsConfig<
|
|
|
21
47
|
> {
|
|
22
48
|
/** Wallet configuration */
|
|
23
49
|
wallet: WalletConfig<THostedWalletProviderType, TConfigMap>
|
|
24
|
-
/** Lending
|
|
50
|
+
/** Lending providers configuration (optional) */
|
|
25
51
|
lend?: LendConfig
|
|
52
|
+
/** Assets configuration (optional) */
|
|
53
|
+
assets?: AssetsConfig
|
|
26
54
|
/** Chains to use for the SDK */
|
|
27
55
|
chains: ChainConfig[]
|
|
28
56
|
}
|
package/src/types/lend/base.ts
CHANGED
|
@@ -30,7 +30,7 @@ export type LendMarketConfigMetadata = {
|
|
|
30
30
|
/** Asset information for this market */
|
|
31
31
|
asset: Asset
|
|
32
32
|
/** Lending provider type */
|
|
33
|
-
lendProvider: 'morpho'
|
|
33
|
+
lendProvider: 'morpho' | 'aave'
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
/**
|
|
@@ -215,32 +215,16 @@ export interface LendOptions {
|
|
|
215
215
|
}
|
|
216
216
|
|
|
217
217
|
/**
|
|
218
|
-
*
|
|
219
|
-
* @description
|
|
218
|
+
* Individual lending provider configuration
|
|
219
|
+
* @description Configuration for a single lending provider
|
|
220
220
|
*/
|
|
221
|
-
export interface
|
|
222
|
-
/** Default slippage tolerance (basis points) */
|
|
223
|
-
defaultSlippage?: number
|
|
221
|
+
export interface LendProviderConfig {
|
|
224
222
|
/** Allowlist of markets available for lending */
|
|
225
223
|
marketAllowlist?: LendMarketConfig[]
|
|
224
|
+
/** Blocklist of markets to exclude from lending */
|
|
225
|
+
marketBlocklist?: LendMarketConfig[]
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
-
/**
|
|
229
|
-
* Morpho lending provider configuration
|
|
230
|
-
* @description Configuration specific to Morpho lending provider
|
|
231
|
-
*/
|
|
232
|
-
export interface MorphoLendConfig extends BaseLendConfig {
|
|
233
|
-
/** Lending provider name */
|
|
234
|
-
provider: 'morpho'
|
|
235
|
-
// Morpho-specific fields can be added here in the future
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
/**
|
|
239
|
-
* Lending provider configuration
|
|
240
|
-
* @description Union of all possible lending provider configurations
|
|
241
|
-
*/
|
|
242
|
-
export type LendConfig = MorphoLendConfig
|
|
243
|
-
|
|
244
228
|
/**
|
|
245
229
|
* Market position information
|
|
246
230
|
* @description Position details for a user in a lending market
|
|
@@ -46,7 +46,7 @@ describe('WalletNamespace', () => {
|
|
|
46
46
|
})
|
|
47
47
|
const smartWalletProvider = new DefaultSmartWalletProvider(
|
|
48
48
|
mockChainManager,
|
|
49
|
-
mockLendProvider,
|
|
49
|
+
{ morpho: mockLendProvider },
|
|
50
50
|
)
|
|
51
51
|
const walletProvider = new WalletProvider(
|
|
52
52
|
hostedWalletProvider,
|
|
@@ -71,7 +71,7 @@ describe('WalletNamespace', () => {
|
|
|
71
71
|
})
|
|
72
72
|
const smartWalletProvider = new DefaultSmartWalletProvider(
|
|
73
73
|
mockChainManager,
|
|
74
|
-
mockLendProvider,
|
|
74
|
+
{ morpho: mockLendProvider },
|
|
75
75
|
)
|
|
76
76
|
const walletProvider = new WalletProvider(
|
|
77
77
|
hostedWalletProvider,
|
|
@@ -92,7 +92,7 @@ describe('WalletNamespace', () => {
|
|
|
92
92
|
})
|
|
93
93
|
const smartWalletProvider = new DefaultSmartWalletProvider(
|
|
94
94
|
mockChainManager,
|
|
95
|
-
mockLendProvider,
|
|
95
|
+
{ morpho: mockLendProvider },
|
|
96
96
|
)
|
|
97
97
|
const walletProvider = new WalletProvider(
|
|
98
98
|
hostedWalletProvider,
|
|
@@ -133,7 +133,7 @@ describe('WalletNamespace', () => {
|
|
|
133
133
|
})
|
|
134
134
|
const smartWalletProvider = new DefaultSmartWalletProvider(
|
|
135
135
|
mockChainManager,
|
|
136
|
-
mockLendProvider,
|
|
136
|
+
{ morpho: mockLendProvider },
|
|
137
137
|
)
|
|
138
138
|
const walletProvider = new WalletProvider(
|
|
139
139
|
hostedWalletProvider,
|
|
@@ -217,7 +217,7 @@ describe('WalletNamespace', () => {
|
|
|
217
217
|
})
|
|
218
218
|
const smartWalletProvider = new DefaultSmartWalletProvider(
|
|
219
219
|
mockChainManager,
|
|
220
|
-
mockLendProvider,
|
|
220
|
+
{ morpho: mockLendProvider },
|
|
221
221
|
)
|
|
222
222
|
const walletProvider = new WalletProvider(
|
|
223
223
|
hostedWalletProvider,
|
|
@@ -259,7 +259,7 @@ describe('WalletNamespace', () => {
|
|
|
259
259
|
})
|
|
260
260
|
const smartWalletProvider = new DefaultSmartWalletProvider(
|
|
261
261
|
mockChainManager,
|
|
262
|
-
mockLendProvider,
|
|
262
|
+
{ morpho: mockLendProvider },
|
|
263
263
|
)
|
|
264
264
|
const walletProvider = new WalletProvider(
|
|
265
265
|
hostedWalletProvider,
|
|
@@ -295,7 +295,7 @@ describe('WalletNamespace', () => {
|
|
|
295
295
|
})
|
|
296
296
|
const smartWalletProvider = new DefaultSmartWalletProvider(
|
|
297
297
|
mockChainManager,
|
|
298
|
-
mockLendProvider,
|
|
298
|
+
{ morpho: mockLendProvider },
|
|
299
299
|
)
|
|
300
300
|
const walletProvider = new WalletProvider(
|
|
301
301
|
hostedWalletProvider,
|
|
@@ -338,7 +338,7 @@ describe('WalletNamespace', () => {
|
|
|
338
338
|
})
|
|
339
339
|
const smartWalletProvider = new DefaultSmartWalletProvider(
|
|
340
340
|
mockChainManager,
|
|
341
|
-
mockLendProvider,
|
|
341
|
+
{ morpho: mockLendProvider },
|
|
342
342
|
)
|
|
343
343
|
const walletProvider = new WalletProvider(
|
|
344
344
|
hostedWalletProvider,
|
|
@@ -368,7 +368,7 @@ describe('WalletNamespace', () => {
|
|
|
368
368
|
})
|
|
369
369
|
const smartWalletProvider = new DefaultSmartWalletProvider(
|
|
370
370
|
mockChainManager,
|
|
371
|
-
mockLendProvider,
|
|
371
|
+
{ morpho: mockLendProvider },
|
|
372
372
|
)
|
|
373
373
|
const walletProvider = new WalletProvider(
|
|
374
374
|
hostedWalletProvider,
|
|
@@ -42,7 +42,7 @@ describe('WalletProvider', () => {
|
|
|
42
42
|
})
|
|
43
43
|
const smartWalletProvider = new DefaultSmartWalletProvider(
|
|
44
44
|
mockChainManager,
|
|
45
|
-
mockLendProvider,
|
|
45
|
+
{ morpho: mockLendProvider },
|
|
46
46
|
)
|
|
47
47
|
const walletProvider = new WalletProvider(
|
|
48
48
|
hostedWalletProvider,
|
|
@@ -96,7 +96,7 @@ describe('WalletProvider', () => {
|
|
|
96
96
|
})
|
|
97
97
|
const smartWalletProvider = new DefaultSmartWalletProvider(
|
|
98
98
|
mockChainManager,
|
|
99
|
-
mockLendProvider,
|
|
99
|
+
{ morpho: mockLendProvider },
|
|
100
100
|
)
|
|
101
101
|
const walletProvider = new WalletProvider(
|
|
102
102
|
hostedWalletProvider,
|
|
@@ -151,7 +151,7 @@ describe('WalletProvider', () => {
|
|
|
151
151
|
})
|
|
152
152
|
const smartWalletProvider = new DefaultSmartWalletProvider(
|
|
153
153
|
mockChainManager,
|
|
154
|
-
mockLendProvider,
|
|
154
|
+
{ morpho: mockLendProvider },
|
|
155
155
|
)
|
|
156
156
|
const walletProvider = new WalletProvider(
|
|
157
157
|
hostedWalletProvider,
|
|
@@ -204,7 +204,7 @@ describe('WalletProvider', () => {
|
|
|
204
204
|
})
|
|
205
205
|
const smartWalletProvider = new DefaultSmartWalletProvider(
|
|
206
206
|
mockChainManager,
|
|
207
|
-
mockLendProvider,
|
|
207
|
+
{ morpho: mockLendProvider },
|
|
208
208
|
)
|
|
209
209
|
const walletProvider = new WalletProvider(
|
|
210
210
|
hostedWalletProvider,
|
|
@@ -237,7 +237,7 @@ describe('WalletProvider', () => {
|
|
|
237
237
|
})
|
|
238
238
|
const smartWalletProvider = new DefaultSmartWalletProvider(
|
|
239
239
|
mockChainManager,
|
|
240
|
-
mockLendProvider,
|
|
240
|
+
{ morpho: mockLendProvider },
|
|
241
241
|
)
|
|
242
242
|
const mockWalletAddress = getRandomAddress()
|
|
243
243
|
const getWalletAddressSpy = vi
|
|
@@ -284,7 +284,7 @@ describe('WalletProvider', () => {
|
|
|
284
284
|
})
|
|
285
285
|
const smartWalletProvider = new DefaultSmartWalletProvider(
|
|
286
286
|
mockChainManager,
|
|
287
|
-
mockLendProvider,
|
|
287
|
+
{ morpho: mockLendProvider },
|
|
288
288
|
)
|
|
289
289
|
const walletProvider = new WalletProvider(
|
|
290
290
|
hostedWalletProvider,
|
|
@@ -318,7 +318,7 @@ describe('WalletProvider', () => {
|
|
|
318
318
|
})
|
|
319
319
|
const smartWalletProvider = new DefaultSmartWalletProvider(
|
|
320
320
|
mockChainManager,
|
|
321
|
-
mockLendProvider,
|
|
321
|
+
{ morpho: mockLendProvider },
|
|
322
322
|
)
|
|
323
323
|
const walletProvider = new WalletProvider(
|
|
324
324
|
hostedWalletProvider,
|
|
@@ -358,7 +358,7 @@ describe('WalletProvider', () => {
|
|
|
358
358
|
})
|
|
359
359
|
const smartWalletProvider = new DefaultSmartWalletProvider(
|
|
360
360
|
mockChainManager,
|
|
361
|
-
mockLendProvider,
|
|
361
|
+
{ morpho: mockLendProvider },
|
|
362
362
|
)
|
|
363
363
|
const walletProvider = new WalletProvider(
|
|
364
364
|
hostedWalletProvider,
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { LocalAccount } from 'viem'
|
|
2
2
|
|
|
3
|
+
import type { LendProvider } from '@/lend/core/LendProvider.js'
|
|
3
4
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
4
|
-
import type {
|
|
5
|
+
import type { LendProviderConfig } from '@/types/actions.js'
|
|
6
|
+
import type { Asset } from '@/types/asset.js'
|
|
5
7
|
import type { Wallet } from '@/wallet/core/wallets/abstract/Wallet.js'
|
|
6
8
|
|
|
7
9
|
/**
|
|
@@ -15,14 +17,23 @@ export abstract class HostedWalletProvider<
|
|
|
15
17
|
TOptionsMap extends Record<TType, unknown>,
|
|
16
18
|
> {
|
|
17
19
|
protected chainManager: ChainManager
|
|
18
|
-
protected
|
|
20
|
+
protected lendProviders: {
|
|
21
|
+
morpho?: LendProvider<LendProviderConfig>
|
|
22
|
+
aave?: LendProvider<LendProviderConfig>
|
|
23
|
+
}
|
|
24
|
+
protected supportedAssets?: Asset[]
|
|
19
25
|
|
|
20
26
|
protected constructor(
|
|
21
27
|
chainManager: ChainManager,
|
|
22
|
-
|
|
28
|
+
lendProviders?: {
|
|
29
|
+
morpho?: LendProvider<LendProviderConfig>
|
|
30
|
+
aave?: LendProvider<LendProviderConfig>
|
|
31
|
+
},
|
|
32
|
+
supportedAssets?: Asset[],
|
|
23
33
|
) {
|
|
24
34
|
this.chainManager = chainManager
|
|
25
|
-
this.
|
|
35
|
+
this.lendProviders = lendProviders || {}
|
|
36
|
+
this.supportedAssets = supportedAssets
|
|
26
37
|
}
|
|
27
38
|
/**
|
|
28
39
|
* Convert a hosted wallet to an Actions wallet
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import type { LendProvider } from '@/lend/core/LendProvider.js'
|
|
1
2
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
2
|
-
import type {
|
|
3
|
+
import type { LendProviderConfig } from '@/types/actions.js'
|
|
4
|
+
import type { Asset } from '@/types/asset.js'
|
|
3
5
|
import type { HostedWalletProvider } from '@/wallet/core/providers/hosted/abstract/HostedWalletProvider.js'
|
|
4
6
|
|
|
5
7
|
/**
|
|
@@ -10,7 +12,11 @@ import type { HostedWalletProvider } from '@/wallet/core/providers/hosted/abstra
|
|
|
10
12
|
*/
|
|
11
13
|
export interface HostedProviderDeps {
|
|
12
14
|
chainManager: ChainManager
|
|
13
|
-
|
|
15
|
+
lendProviders?: {
|
|
16
|
+
morpho?: LendProvider<LendProviderConfig>
|
|
17
|
+
aave?: LendProvider<LendProviderConfig>
|
|
18
|
+
}
|
|
19
|
+
supportedAssets?: Asset[]
|
|
14
20
|
}
|
|
15
21
|
|
|
16
22
|
/**
|
|
@@ -2,8 +2,10 @@ import type { Address, Hex, LocalAccount } from 'viem'
|
|
|
2
2
|
import { keccak256, slice, toHex } from 'viem'
|
|
3
3
|
|
|
4
4
|
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
5
|
+
import type { LendProvider } from '@/lend/core/LendProvider.js'
|
|
5
6
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
6
|
-
import type {
|
|
7
|
+
import type { LendProviderConfig } from '@/types/actions.js'
|
|
8
|
+
import type { Asset } from '@/types/asset.js'
|
|
7
9
|
import { SmartWalletProvider } from '@/wallet/core/providers/smart/abstract/SmartWalletProvider.js'
|
|
8
10
|
import type { SmartWalletCreationResult } from '@/wallet/core/providers/smart/abstract/types/index.js'
|
|
9
11
|
import type { Signer } from '@/wallet/core/wallets/smart/abstract/types/index.js'
|
|
@@ -24,25 +26,36 @@ import { SmartWalletDeploymentError } from '@/wallet/core/wallets/smart/error/er
|
|
|
24
26
|
export class DefaultSmartWalletProvider extends SmartWalletProvider {
|
|
25
27
|
/** Manages supported blockchain networks */
|
|
26
28
|
private chainManager: ChainManager
|
|
27
|
-
/**
|
|
28
|
-
private
|
|
29
|
+
/** Providers for lending market operations */
|
|
30
|
+
private lendProviders: {
|
|
31
|
+
morpho?: LendProvider<LendProviderConfig>
|
|
32
|
+
aave?: LendProvider<LendProviderConfig>
|
|
33
|
+
}
|
|
34
|
+
/** Supported assets for this wallet provider */
|
|
35
|
+
private supportedAssets?: Asset[]
|
|
29
36
|
/** Optional 16-byte attribution suffix appended to callData */
|
|
30
37
|
private attributionSuffix?: Hex
|
|
31
38
|
|
|
32
39
|
/**
|
|
33
40
|
* Initialize the Smart Wallet Provider
|
|
34
41
|
* @param chainManager - Manages supported blockchain networks
|
|
35
|
-
* @param
|
|
36
|
-
* @param
|
|
42
|
+
* @param lendProviders - Providers for lending market operations
|
|
43
|
+
* @param supportedAssets - Optional list of supported assets
|
|
44
|
+
* @param attributionSuffix - Optional attribution suffix
|
|
37
45
|
*/
|
|
38
46
|
constructor(
|
|
39
47
|
chainManager: ChainManager,
|
|
40
|
-
|
|
48
|
+
lendProviders?: {
|
|
49
|
+
morpho?: LendProvider<LendProviderConfig>
|
|
50
|
+
aave?: LendProvider<LendProviderConfig>
|
|
51
|
+
},
|
|
52
|
+
supportedAssets?: Asset[],
|
|
41
53
|
attributionSuffix?: string,
|
|
42
54
|
) {
|
|
43
55
|
super()
|
|
44
56
|
this.chainManager = chainManager
|
|
45
|
-
this.
|
|
57
|
+
this.lendProviders = lendProviders || {}
|
|
58
|
+
this.supportedAssets = supportedAssets
|
|
46
59
|
if (attributionSuffix) {
|
|
47
60
|
this.attributionSuffix =
|
|
48
61
|
DefaultSmartWalletProvider.computeAttributionSuffix(attributionSuffix)
|
|
@@ -79,7 +92,8 @@ export class DefaultSmartWalletProvider extends SmartWalletProvider {
|
|
|
79
92
|
signers,
|
|
80
93
|
signer,
|
|
81
94
|
chainManager: this.chainManager,
|
|
82
|
-
|
|
95
|
+
lendProviders: this.lendProviders,
|
|
96
|
+
supportedAssets: this.supportedAssets,
|
|
83
97
|
nonce,
|
|
84
98
|
attributionSuffix: this.attributionSuffix,
|
|
85
99
|
})
|
|
@@ -167,7 +181,8 @@ export class DefaultSmartWalletProvider extends SmartWalletProvider {
|
|
|
167
181
|
signers,
|
|
168
182
|
signer,
|
|
169
183
|
chainManager: this.chainManager,
|
|
170
|
-
|
|
184
|
+
lendProviders: this.lendProviders,
|
|
185
|
+
supportedAssets: this.supportedAssets,
|
|
171
186
|
deploymentAddress: walletAddress,
|
|
172
187
|
attributionSuffix: this.attributionSuffix,
|
|
173
188
|
})
|
package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts
CHANGED
|
@@ -35,6 +35,7 @@ const mockSigner: LocalAccount = {
|
|
|
35
35
|
address: getRandomAddress(),
|
|
36
36
|
type: 'local',
|
|
37
37
|
} as unknown as LocalAccount
|
|
38
|
+
const supportedAssets = undefined
|
|
38
39
|
|
|
39
40
|
describe('DefaultSmartWalletProvider', () => {
|
|
40
41
|
const mockWallet: ReturnType<typeof createDefaultSmartWalletMock> =
|
|
@@ -75,10 +76,9 @@ describe('DefaultSmartWalletProvider', () => {
|
|
|
75
76
|
})
|
|
76
77
|
|
|
77
78
|
it('should create a wallet and return deployment results', async () => {
|
|
78
|
-
const provider = new DefaultSmartWalletProvider(
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
)
|
|
79
|
+
const provider = new DefaultSmartWalletProvider(mockChainManager, {
|
|
80
|
+
morpho: mockLendProvider,
|
|
81
|
+
})
|
|
82
82
|
const signers = [mockSigner.address, getRandomAddress()]
|
|
83
83
|
const nonce = BigInt(123)
|
|
84
84
|
|
|
@@ -117,10 +117,9 @@ describe('DefaultSmartWalletProvider', () => {
|
|
|
117
117
|
})
|
|
118
118
|
|
|
119
119
|
it('should report deployment successes across multiple chains', async () => {
|
|
120
|
-
const provider = new DefaultSmartWalletProvider(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
)
|
|
120
|
+
const provider = new DefaultSmartWalletProvider(mockChainManager, {
|
|
121
|
+
morpho: mockLendProvider,
|
|
122
|
+
})
|
|
124
123
|
const signers = [mockSigner.address, getRandomAddress()]
|
|
125
124
|
const nonce = BigInt(123)
|
|
126
125
|
|
|
@@ -159,10 +158,9 @@ describe('DefaultSmartWalletProvider', () => {
|
|
|
159
158
|
})
|
|
160
159
|
|
|
161
160
|
it('should report deployment failures', async () => {
|
|
162
|
-
const provider = new DefaultSmartWalletProvider(
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
)
|
|
161
|
+
const provider = new DefaultSmartWalletProvider(mockChainManager, {
|
|
162
|
+
morpho: mockLendProvider,
|
|
163
|
+
})
|
|
166
164
|
const signers = [mockSigner.address, getRandomAddress()]
|
|
167
165
|
const nonce = BigInt(123)
|
|
168
166
|
|
|
@@ -205,10 +203,9 @@ describe('DefaultSmartWalletProvider', () => {
|
|
|
205
203
|
})
|
|
206
204
|
|
|
207
205
|
it('should handle mixed deployment successes and failures', async () => {
|
|
208
|
-
const provider = new DefaultSmartWalletProvider(
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
)
|
|
206
|
+
const provider = new DefaultSmartWalletProvider(mockChainManager, {
|
|
207
|
+
morpho: mockLendProvider,
|
|
208
|
+
})
|
|
212
209
|
const signers = [mockSigner.address, getRandomAddress()]
|
|
213
210
|
const nonce = BigInt(123)
|
|
214
211
|
|
|
@@ -255,10 +252,9 @@ describe('DefaultSmartWalletProvider', () => {
|
|
|
255
252
|
})
|
|
256
253
|
|
|
257
254
|
it('should respect deploymentChainIds parameter', async () => {
|
|
258
|
-
const provider = new DefaultSmartWalletProvider(
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
)
|
|
255
|
+
const provider = new DefaultSmartWalletProvider(mockChainManager, {
|
|
256
|
+
morpho: mockLendProvider,
|
|
257
|
+
})
|
|
262
258
|
const signers = [mockSigner.address, getRandomAddress()]
|
|
263
259
|
const nonce = BigInt(123)
|
|
264
260
|
const deploymentChainIds: SupportedChainId[] = [1]
|
|
@@ -286,10 +282,9 @@ describe('DefaultSmartWalletProvider', () => {
|
|
|
286
282
|
})
|
|
287
283
|
|
|
288
284
|
it('should throw error for non-SmartWalletDeploymentError failures', async () => {
|
|
289
|
-
const provider = new DefaultSmartWalletProvider(
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
)
|
|
285
|
+
const provider = new DefaultSmartWalletProvider(mockChainManager, {
|
|
286
|
+
morpho: mockLendProvider,
|
|
287
|
+
})
|
|
293
288
|
const signers = [mockSigner.address, getRandomAddress()]
|
|
294
289
|
const nonce = BigInt(123)
|
|
295
290
|
|
|
@@ -306,10 +301,9 @@ describe('DefaultSmartWalletProvider', () => {
|
|
|
306
301
|
})
|
|
307
302
|
|
|
308
303
|
it('should get wallet address with correct contract call', async () => {
|
|
309
|
-
const provider = new DefaultSmartWalletProvider(
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
)
|
|
304
|
+
const provider = new DefaultSmartWalletProvider(mockChainManager, {
|
|
305
|
+
morpho: mockLendProvider,
|
|
306
|
+
})
|
|
313
307
|
const signers = [mockSigner.address, getRandomAddress()]
|
|
314
308
|
const nonce = BigInt(456)
|
|
315
309
|
const mockAddress = getRandomAddress()
|
|
@@ -329,10 +323,9 @@ describe('DefaultSmartWalletProvider', () => {
|
|
|
329
323
|
})
|
|
330
324
|
|
|
331
325
|
it('should get wallet address with default nonce', async () => {
|
|
332
|
-
const provider = new DefaultSmartWalletProvider(
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
)
|
|
326
|
+
const provider = new DefaultSmartWalletProvider(mockChainManager, {
|
|
327
|
+
morpho: mockLendProvider,
|
|
328
|
+
})
|
|
336
329
|
const signers = [getRandomAddress()]
|
|
337
330
|
const mockAddress = getRandomAddress()
|
|
338
331
|
|
|
@@ -351,10 +344,9 @@ describe('DefaultSmartWalletProvider', () => {
|
|
|
351
344
|
})
|
|
352
345
|
|
|
353
346
|
it('should handle WebAuthn accounts in wallet address calculation', async () => {
|
|
354
|
-
const provider = new DefaultSmartWalletProvider(
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
)
|
|
347
|
+
const provider = new DefaultSmartWalletProvider(mockChainManager, {
|
|
348
|
+
morpho: mockLendProvider,
|
|
349
|
+
})
|
|
358
350
|
const webAuthnAccount: WebAuthnAccount = {
|
|
359
351
|
type: 'webAuthn',
|
|
360
352
|
publicKey: '0x123456789abcdef',
|
|
@@ -380,10 +372,9 @@ describe('DefaultSmartWalletProvider', () => {
|
|
|
380
372
|
})
|
|
381
373
|
|
|
382
374
|
it('should throw error for invalid signer type', async () => {
|
|
383
|
-
const provider = new DefaultSmartWalletProvider(
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
)
|
|
375
|
+
const provider = new DefaultSmartWalletProvider(mockChainManager, {
|
|
376
|
+
morpho: mockLendProvider,
|
|
377
|
+
})
|
|
387
378
|
const invalidSigner = { type: 'invalid' } as unknown as Address
|
|
388
379
|
const signers = [invalidSigner]
|
|
389
380
|
|
|
@@ -393,10 +384,9 @@ describe('DefaultSmartWalletProvider', () => {
|
|
|
393
384
|
})
|
|
394
385
|
|
|
395
386
|
it('should get existing wallet', async () => {
|
|
396
|
-
const provider = new DefaultSmartWalletProvider(
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
)
|
|
387
|
+
const provider = new DefaultSmartWalletProvider(mockChainManager, {
|
|
388
|
+
morpho: mockLendProvider,
|
|
389
|
+
})
|
|
400
390
|
const walletAddress = getRandomAddress()
|
|
401
391
|
|
|
402
392
|
const wallet = await provider.getWallet({
|
|
@@ -424,7 +414,8 @@ describe('DefaultSmartWalletProvider', () => {
|
|
|
424
414
|
DefaultSmartWalletProvider.computeAttributionSuffix(attributionSeed)
|
|
425
415
|
const provider = new DefaultSmartWalletProvider(
|
|
426
416
|
mockChainManager,
|
|
427
|
-
mockLendProvider,
|
|
417
|
+
{ morpho: mockLendProvider },
|
|
418
|
+
supportedAssets,
|
|
428
419
|
attributionSeed,
|
|
429
420
|
)
|
|
430
421
|
|
|
@@ -450,7 +441,8 @@ describe('DefaultSmartWalletProvider', () => {
|
|
|
450
441
|
DefaultSmartWalletProvider.computeAttributionSuffix(attributionSeed)
|
|
451
442
|
const provider = new DefaultSmartWalletProvider(
|
|
452
443
|
mockChainManager,
|
|
453
|
-
mockLendProvider,
|
|
444
|
+
{ morpho: mockLendProvider },
|
|
445
|
+
supportedAssets,
|
|
454
446
|
attributionSeed,
|
|
455
447
|
)
|
|
456
448
|
|
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
import type { Address, LocalAccount } from 'viem'
|
|
2
2
|
|
|
3
3
|
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
4
|
+
import type { LendProvider } from '@/lend/core/LendProvider.js'
|
|
4
5
|
import { WalletLendNamespace } from '@/lend/namespaces/WalletLendNamespace.js'
|
|
5
6
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
6
7
|
import { fetchERC20Balance, fetchETHBalance } from '@/services/tokenBalance.js'
|
|
7
8
|
import { SUPPORTED_TOKENS } from '@/supported/tokens.js'
|
|
8
|
-
import type {
|
|
9
|
-
import type {
|
|
10
|
-
|
|
11
|
-
LendConfig,
|
|
12
|
-
LendProvider,
|
|
13
|
-
TransactionData,
|
|
14
|
-
} from '@/types/lend/index.js'
|
|
9
|
+
import type { LendProviderConfig } from '@/types/actions.js'
|
|
10
|
+
import type { Asset, TokenBalance } from '@/types/asset.js'
|
|
11
|
+
import type { TransactionData } from '@/types/lend/index.js'
|
|
15
12
|
import type {
|
|
16
13
|
BatchTransactionReturnType,
|
|
17
14
|
TransactionReturnType,
|
|
@@ -24,11 +21,16 @@ import type {
|
|
|
24
21
|
*/
|
|
25
22
|
export abstract class Wallet {
|
|
26
23
|
/** Lend namespace with all lending operations */
|
|
27
|
-
lend?: WalletLendNamespace
|
|
28
|
-
/**
|
|
29
|
-
protected
|
|
24
|
+
lend?: WalletLendNamespace
|
|
25
|
+
/** Providers for lending market operations */
|
|
26
|
+
protected lendProviders: {
|
|
27
|
+
morpho?: LendProvider<LendProviderConfig>
|
|
28
|
+
aave?: LendProvider<LendProviderConfig>
|
|
29
|
+
}
|
|
30
30
|
/** Manages supported blockchain networks and RPC clients */
|
|
31
31
|
protected chainManager: ChainManager
|
|
32
|
+
/** List of supported assets for this wallet */
|
|
33
|
+
protected supportedAssets: Asset[]
|
|
32
34
|
/** Promise to initialize the wallet */
|
|
33
35
|
private initPromise?: Promise<void>
|
|
34
36
|
|
|
@@ -50,27 +52,33 @@ export abstract class Wallet {
|
|
|
50
52
|
/**
|
|
51
53
|
* Create a new wallet
|
|
52
54
|
* @param chainManager - Chain manager for the wallet
|
|
53
|
-
* @param
|
|
55
|
+
* @param lendProviders - Lend providers for the wallet
|
|
56
|
+
* @param supportedAssets - List of supported assets (defaults to all SUPPORTED_TOKENS)
|
|
54
57
|
*/
|
|
55
58
|
protected constructor(
|
|
56
59
|
chainManager: ChainManager,
|
|
57
|
-
|
|
60
|
+
lendProviders?: {
|
|
61
|
+
morpho?: LendProvider<LendProviderConfig>
|
|
62
|
+
aave?: LendProvider<LendProviderConfig>
|
|
63
|
+
},
|
|
64
|
+
supportedAssets?: Asset[],
|
|
58
65
|
) {
|
|
59
66
|
this.chainManager = chainManager
|
|
60
|
-
this.
|
|
61
|
-
|
|
62
|
-
|
|
67
|
+
this.lendProviders = lendProviders || {}
|
|
68
|
+
this.supportedAssets = supportedAssets || SUPPORTED_TOKENS
|
|
69
|
+
if (this.lendProviders.morpho || this.lendProviders.aave) {
|
|
70
|
+
this.lend = new WalletLendNamespace(this.lendProviders, this)
|
|
63
71
|
}
|
|
64
72
|
}
|
|
65
73
|
|
|
66
74
|
/**
|
|
67
75
|
* Get asset balances across all supported chains
|
|
68
76
|
* @description Fetches ETH and ERC20 token balances for this wallet across all supported networks.
|
|
77
|
+
* Uses the configured supported assets from ActionsConfig.assets if provided.
|
|
69
78
|
* @returns Promise resolving to array of token balances with chain breakdown
|
|
70
79
|
*/
|
|
71
80
|
async getBalance(): Promise<TokenBalance[]> {
|
|
72
|
-
|
|
73
|
-
const tokenBalancePromises = SUPPORTED_TOKENS.map(async (asset) => {
|
|
81
|
+
const tokenBalancePromises = this.supportedAssets.map(async (asset) => {
|
|
74
82
|
return fetchERC20Balance(this.chainManager, this.address, asset)
|
|
75
83
|
})
|
|
76
84
|
const ethBalancePromise = fetchETHBalance(this.chainManager, this.address)
|