@eth-optimism/actions-sdk 0.2.0 → 0.3.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/__mocks__/MockAssets.d.ts.map +1 -1
- package/dist/__mocks__/MockAssets.js +2 -0
- package/dist/__mocks__/MockAssets.js.map +1 -1
- package/dist/__tests__/actions.test.js +0 -4
- package/dist/__tests__/actions.test.js.map +1 -1
- package/dist/actions.d.ts +20 -1
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +37 -13
- package/dist/actions.js.map +1 -1
- package/dist/constants/assets.d.ts +4 -0
- package/dist/constants/assets.d.ts.map +1 -1
- package/dist/constants/assets.js +15 -0
- package/dist/constants/assets.js.map +1 -1
- package/dist/constants/contracts.d.ts +4 -0
- package/dist/constants/contracts.d.ts.map +1 -0
- package/dist/constants/contracts.js +3 -0
- package/dist/constants/contracts.js.map +1 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/lend/core/LendProvider.d.ts +0 -6
- package/dist/lend/core/LendProvider.d.ts.map +1 -1
- package/dist/lend/core/LendProvider.js +6 -15
- package/dist/lend/core/LendProvider.js.map +1 -1
- package/dist/lend/core/__tests__/LendProvider.test.js +2 -4
- package/dist/lend/core/__tests__/LendProvider.test.js.map +1 -1
- package/dist/lend/providers/morpho/__tests__/sdk.test.js +3 -2
- package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
- package/dist/lend/providers/morpho/api.d.ts +4 -0
- package/dist/lend/providers/morpho/api.d.ts.map +1 -1
- package/dist/lend/providers/morpho/api.js.map +1 -1
- package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
- package/dist/lend/providers/morpho/sdk.js +10 -1
- package/dist/lend/providers/morpho/sdk.js.map +1 -1
- package/dist/supported/tokens.d.ts.map +1 -1
- package/dist/supported/tokens.js +9 -2
- package/dist/supported/tokens.js.map +1 -1
- package/dist/swap/__mocks__/MockSwapProvider.d.ts +38 -0
- package/dist/swap/__mocks__/MockSwapProvider.d.ts.map +1 -0
- package/dist/swap/__mocks__/MockSwapProvider.js +138 -0
- package/dist/swap/__mocks__/MockSwapProvider.js.map +1 -0
- package/dist/swap/core/SwapProvider.d.ts +56 -0
- package/dist/swap/core/SwapProvider.d.ts.map +1 -0
- package/dist/swap/core/SwapProvider.js +177 -0
- package/dist/swap/core/SwapProvider.js.map +1 -0
- package/dist/swap/core/__tests__/SwapProvider.test.d.ts +2 -0
- package/dist/swap/core/__tests__/SwapProvider.test.d.ts.map +1 -0
- package/dist/swap/core/__tests__/SwapProvider.test.js +329 -0
- package/dist/swap/core/__tests__/SwapProvider.test.js.map +1 -0
- package/dist/swap/index.d.ts +7 -0
- package/dist/swap/index.d.ts.map +1 -0
- package/dist/swap/index.js +8 -0
- package/dist/swap/index.js.map +1 -0
- package/dist/swap/namespaces/ActionsSwapNamespace.d.ts +8 -0
- package/dist/swap/namespaces/ActionsSwapNamespace.d.ts.map +1 -0
- package/dist/swap/namespaces/ActionsSwapNamespace.js +8 -0
- package/dist/swap/namespaces/ActionsSwapNamespace.js.map +1 -0
- package/dist/swap/namespaces/BaseSwapNamespace.d.ts +33 -0
- package/dist/swap/namespaces/BaseSwapNamespace.d.ts.map +1 -0
- package/dist/swap/namespaces/BaseSwapNamespace.js +58 -0
- package/dist/swap/namespaces/BaseSwapNamespace.js.map +1 -0
- package/dist/swap/namespaces/WalletSwapNamespace.d.ts +22 -0
- package/dist/swap/namespaces/WalletSwapNamespace.d.ts.map +1 -0
- package/dist/swap/namespaces/WalletSwapNamespace.js +60 -0
- package/dist/swap/namespaces/WalletSwapNamespace.js.map +1 -0
- package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.d.ts +2 -0
- package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.d.ts.map +1 -0
- package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js +106 -0
- package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js.map +1 -0
- package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.d.ts +2 -0
- package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.d.ts.map +1 -0
- package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js +132 -0
- package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js.map +1 -0
- package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts +68 -0
- package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/UniswapSwapProvider.js +206 -0
- package/dist/swap/providers/uniswap/UniswapSwapProvider.js.map +1 -0
- package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.d.ts +2 -0
- package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js +257 -0
- package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js.map +1 -0
- package/dist/swap/providers/uniswap/__tests__/sdk.test.d.ts +2 -0
- package/dist/swap/providers/uniswap/__tests__/sdk.test.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/__tests__/sdk.test.js +312 -0
- package/dist/swap/providers/uniswap/__tests__/sdk.test.js.map +1 -0
- package/dist/swap/providers/uniswap/abis.d.ts +227 -0
- package/dist/swap/providers/uniswap/abis.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/abis.js +138 -0
- package/dist/swap/providers/uniswap/abis.js.map +1 -0
- package/dist/swap/providers/uniswap/addresses.d.ts +21 -0
- package/dist/swap/providers/uniswap/addresses.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/addresses.js +81 -0
- package/dist/swap/providers/uniswap/addresses.js.map +1 -0
- package/dist/swap/providers/uniswap/encoding.d.ts +77 -0
- package/dist/swap/providers/uniswap/encoding.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/encoding.js +233 -0
- package/dist/swap/providers/uniswap/encoding.js.map +1 -0
- package/dist/swap/providers/uniswap/types.d.ts +20 -0
- package/dist/swap/providers/uniswap/types.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/types.js +2 -0
- package/dist/swap/providers/uniswap/types.js.map +1 -0
- package/dist/types/actions.d.ts +19 -5
- package/dist/types/actions.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/lend/base.d.ts +3 -13
- package/dist/types/lend/base.d.ts.map +1 -1
- package/dist/types/lend/base.js.map +1 -1
- package/dist/types/swap/base.d.ts +238 -0
- package/dist/types/swap/base.d.ts.map +1 -0
- package/dist/types/swap/base.js +4 -0
- package/dist/types/swap/base.js.map +1 -0
- package/dist/types/swap/index.d.ts +2 -0
- package/dist/types/swap/index.d.ts.map +1 -0
- package/dist/types/swap/index.js +2 -0
- package/dist/types/swap/index.js.map +1 -0
- package/dist/types/transaction.d.ts +14 -0
- package/dist/types/transaction.d.ts.map +1 -0
- package/dist/types/transaction.js +2 -0
- package/dist/types/transaction.js.map +1 -0
- package/dist/utils/assets.d.ts +4 -5
- package/dist/utils/assets.d.ts.map +1 -1
- package/dist/utils/assets.js +4 -11
- package/dist/utils/assets.js.map +1 -1
- package/dist/utils/assets.test.js +13 -1
- package/dist/utils/assets.test.js.map +1 -1
- package/dist/utils/permit2.d.ts +46 -0
- package/dist/utils/permit2.d.ts.map +1 -0
- package/dist/utils/permit2.js +100 -0
- package/dist/utils/permit2.js.map +1 -0
- package/dist/utils/permit2.test.d.ts +2 -0
- package/dist/utils/permit2.test.d.ts.map +1 -0
- package/dist/utils/permit2.test.js +110 -0
- package/dist/utils/permit2.test.js.map +1 -0
- package/dist/utils/validation.d.ts +12 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +44 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +7 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js +2 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
- package/dist/wallet/core/providers/hosted/types/index.d.ts +5 -1
- package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +7 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js +5 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
- package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js +2 -2
- package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js.map +1 -1
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts +13 -2
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/abstract/Wallet.js +7 -1
- package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +7 -2
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js +6 -5
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +6 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.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 +4 -3
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +5 -1
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +4 -2
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +6 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +4 -3
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +5 -1
- 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 +7 -1
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +6 -2
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js +1 -0
- 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 -1
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +5 -2
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +1 -0
- 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 -3
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +5 -4
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts.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 +7 -1
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +5 -3
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +5 -1
- 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 +5 -1
- 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 +2 -2
- package/src/__mocks__/MockAssets.ts +2 -0
- package/src/__tests__/actions.test.ts +0 -4
- package/src/actions.ts +57 -19
- package/src/constants/assets.ts +16 -0
- package/src/constants/contracts.ts +5 -0
- package/src/index.ts +30 -2
- package/src/lend/core/LendProvider.ts +6 -18
- package/src/lend/core/__tests__/LendProvider.test.ts +2 -5
- package/src/lend/providers/morpho/__tests__/sdk.test.ts +3 -2
- package/src/lend/providers/morpho/api.ts +4 -0
- package/src/lend/providers/morpho/sdk.ts +10 -1
- package/src/supported/tokens.ts +16 -2
- package/src/swap/__mocks__/MockSwapProvider.ts +216 -0
- package/src/swap/core/SwapProvider.ts +319 -0
- package/src/swap/core/__tests__/SwapProvider.test.ts +478 -0
- package/src/swap/index.ts +14 -0
- package/src/swap/namespaces/ActionsSwapNamespace.ts +7 -0
- package/src/swap/namespaces/BaseSwapNamespace.ts +77 -0
- package/src/swap/namespaces/WalletSwapNamespace.ts +82 -0
- package/src/swap/namespaces/__tests__/BaseSwapNamespace.spec.ts +138 -0
- package/src/swap/namespaces/__tests__/WalletSwapNamespace.spec.ts +162 -0
- package/src/swap/providers/uniswap/UniswapSwapProvider.ts +304 -0
- package/src/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.ts +299 -0
- package/src/swap/providers/uniswap/__tests__/sdk.test.ts +370 -0
- package/src/swap/providers/uniswap/abis.ts +144 -0
- package/src/swap/providers/uniswap/addresses.ts +108 -0
- package/src/swap/providers/uniswap/encoding.ts +406 -0
- package/src/swap/providers/uniswap/types.ts +24 -0
- package/src/types/actions.ts +22 -6
- package/src/types/index.ts +2 -0
- package/src/types/lend/base.ts +4 -14
- package/src/types/swap/base.ts +259 -0
- package/src/types/swap/index.ts +1 -0
- package/src/types/transaction.ts +14 -0
- package/src/utils/assets.test.ts +16 -1
- package/src/utils/assets.ts +13 -10
- package/src/utils/permit2.test.ts +142 -0
- package/src/utils/permit2.ts +144 -0
- package/src/utils/validation.ts +76 -0
- package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +9 -1
- package/src/wallet/core/providers/hosted/types/index.ts +5 -1
- package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +13 -1
- package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts +2 -0
- package/src/wallet/core/wallets/abstract/Wallet.ts +18 -2
- package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +14 -5
- package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +13 -2
- package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +10 -2
- package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +8 -2
- package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +11 -2
- package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +10 -2
- package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +10 -2
- package/src/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.ts +1 -0
- package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +9 -2
- package/src/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +1 -0
- package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +9 -4
- package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +18 -6
- package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +12 -2
- package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +10 -2
- package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +10 -2
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import type { Address, PublicClient } from 'viem'
|
|
2
|
+
import { encodeFunctionData, erc20Abi, maxUint256 } from 'viem'
|
|
3
|
+
|
|
4
|
+
import type { TransactionData } from '@/types/transaction.js'
|
|
5
|
+
|
|
6
|
+
/** Default Permit2 approval expiry: 30 days in seconds */
|
|
7
|
+
export const DEFAULT_PERMIT2_EXPIRY_SECONDS = 30 * 24 * 60 * 60
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Permit2 ABI (subset for approvals)
|
|
11
|
+
*/
|
|
12
|
+
const PERMIT2_ABI = [
|
|
13
|
+
{
|
|
14
|
+
name: 'allowance',
|
|
15
|
+
type: 'function',
|
|
16
|
+
stateMutability: 'view',
|
|
17
|
+
inputs: [
|
|
18
|
+
{ name: 'owner', type: 'address' },
|
|
19
|
+
{ name: 'token', type: 'address' },
|
|
20
|
+
{ name: 'spender', type: 'address' },
|
|
21
|
+
],
|
|
22
|
+
outputs: [
|
|
23
|
+
{ name: 'amount', type: 'uint160' },
|
|
24
|
+
{ name: 'expiration', type: 'uint48' },
|
|
25
|
+
{ name: 'nonce', type: 'uint48' },
|
|
26
|
+
],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'approve',
|
|
30
|
+
type: 'function',
|
|
31
|
+
stateMutability: 'nonpayable',
|
|
32
|
+
inputs: [
|
|
33
|
+
{ name: 'token', type: 'address' },
|
|
34
|
+
{ name: 'spender', type: 'address' },
|
|
35
|
+
{ name: 'amount', type: 'uint160' },
|
|
36
|
+
{ name: 'expiration', type: 'uint48' },
|
|
37
|
+
],
|
|
38
|
+
outputs: [],
|
|
39
|
+
},
|
|
40
|
+
] as const
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Permit2 allowance info
|
|
44
|
+
*/
|
|
45
|
+
export interface Permit2Allowance {
|
|
46
|
+
amount: bigint
|
|
47
|
+
expiration: number
|
|
48
|
+
nonce: number
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Check Permit2 allowance for a token/spender pair
|
|
53
|
+
*/
|
|
54
|
+
export async function checkPermit2Allowance(params: {
|
|
55
|
+
publicClient: PublicClient
|
|
56
|
+
permit2Address: Address
|
|
57
|
+
owner: Address
|
|
58
|
+
token: Address
|
|
59
|
+
spender: Address
|
|
60
|
+
}): Promise<Permit2Allowance> {
|
|
61
|
+
const { publicClient, permit2Address, owner, token, spender } = params
|
|
62
|
+
|
|
63
|
+
const result = await publicClient.readContract({
|
|
64
|
+
address: permit2Address,
|
|
65
|
+
abi: PERMIT2_ABI,
|
|
66
|
+
functionName: 'allowance',
|
|
67
|
+
args: [owner, token, spender],
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
amount: BigInt(result[0]),
|
|
72
|
+
expiration: Number(result[1]),
|
|
73
|
+
nonce: Number(result[2]),
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Build ERC20 token approval transaction to Permit2
|
|
79
|
+
*/
|
|
80
|
+
export function buildTokenApprovalTx(
|
|
81
|
+
token: Address,
|
|
82
|
+
permit2Address: Address,
|
|
83
|
+
): TransactionData {
|
|
84
|
+
const data = encodeFunctionData({
|
|
85
|
+
abi: erc20Abi,
|
|
86
|
+
functionName: 'approve',
|
|
87
|
+
// ERC20 -> Permit2: maxUint256 is the Uniswap-canonical pattern.
|
|
88
|
+
// Permit2 is immutable with no owner — spending is scoped by its own allowance system.
|
|
89
|
+
args: [permit2Address, maxUint256],
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
return {
|
|
93
|
+
to: token,
|
|
94
|
+
data,
|
|
95
|
+
value: 0n,
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Build Permit2 approval transaction for a spender
|
|
101
|
+
*/
|
|
102
|
+
export function buildPermit2ApprovalTx(params: {
|
|
103
|
+
permit2Address: Address
|
|
104
|
+
token: Address
|
|
105
|
+
spender: Address
|
|
106
|
+
amount: bigint
|
|
107
|
+
expirySeconds?: number
|
|
108
|
+
}): TransactionData {
|
|
109
|
+
const { permit2Address, token, spender, amount } = params
|
|
110
|
+
const expiration =
|
|
111
|
+
Math.floor(Date.now() / 1000) +
|
|
112
|
+
(params.expirySeconds ?? DEFAULT_PERMIT2_EXPIRY_SECONDS)
|
|
113
|
+
|
|
114
|
+
const data = encodeFunctionData({
|
|
115
|
+
abi: PERMIT2_ABI,
|
|
116
|
+
functionName: 'approve',
|
|
117
|
+
args: [token, spender, amount, expiration],
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
return {
|
|
121
|
+
to: permit2Address,
|
|
122
|
+
data,
|
|
123
|
+
value: 0n,
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Check ERC20 token allowance
|
|
129
|
+
*/
|
|
130
|
+
export async function checkTokenAllowance(params: {
|
|
131
|
+
publicClient: PublicClient
|
|
132
|
+
token: Address
|
|
133
|
+
owner: Address
|
|
134
|
+
spender: Address
|
|
135
|
+
}): Promise<bigint> {
|
|
136
|
+
const { publicClient, token, owner, spender } = params
|
|
137
|
+
|
|
138
|
+
return publicClient.readContract({
|
|
139
|
+
address: token,
|
|
140
|
+
abi: erc20Abi,
|
|
141
|
+
functionName: 'allowance',
|
|
142
|
+
args: [owner, spender],
|
|
143
|
+
})
|
|
144
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { Address } from 'viem'
|
|
2
|
+
|
|
3
|
+
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
4
|
+
import type { Asset } from '@/types/asset.js'
|
|
5
|
+
import { isAssetSupportedOnChain } from '@/utils/assets.js'
|
|
6
|
+
|
|
7
|
+
const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'
|
|
8
|
+
|
|
9
|
+
export function validateAmountProvided(
|
|
10
|
+
amountIn?: number,
|
|
11
|
+
amountOut?: number,
|
|
12
|
+
): void {
|
|
13
|
+
if (amountIn === undefined && amountOut === undefined) {
|
|
14
|
+
throw new Error('Either amountIn or amountOut must be provided')
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function validateAmountPositiveIfExists(amount?: number): void {
|
|
19
|
+
if (amount !== undefined && amount <= 0) {
|
|
20
|
+
throw new Error('Amount must be positive')
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function validateNotBothAmounts(
|
|
25
|
+
amountIn?: number,
|
|
26
|
+
amountOut?: number,
|
|
27
|
+
): void {
|
|
28
|
+
if (amountIn !== undefined && amountOut !== undefined) {
|
|
29
|
+
throw new Error('Provide either amountIn or amountOut, not both')
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function validateNotSameAsset(assetIn: Asset, assetOut: Asset): void {
|
|
34
|
+
if (
|
|
35
|
+
assetIn.metadata.symbol.toLowerCase() ===
|
|
36
|
+
assetOut.metadata.symbol.toLowerCase()
|
|
37
|
+
) {
|
|
38
|
+
throw new Error('Cannot swap an asset for itself')
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function validateNotZeroAddress(address: Address, label: string): void {
|
|
43
|
+
if (address === ZERO_ADDRESS) {
|
|
44
|
+
throw new Error(`${label} cannot be the zero address`)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function validateSlippage(slippage: number, maxSlippage: number): void {
|
|
49
|
+
if (slippage < 0 || slippage > maxSlippage) {
|
|
50
|
+
throw new Error(
|
|
51
|
+
`Slippage ${slippage} exceeds allowed range [0, ${maxSlippage * 100}%]`,
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function validateChainSupported(
|
|
57
|
+
chainId: number,
|
|
58
|
+
supportedChainIds: readonly number[],
|
|
59
|
+
): void {
|
|
60
|
+
if (!supportedChainIds.includes(chainId)) {
|
|
61
|
+
throw new Error(
|
|
62
|
+
`Chain ${chainId} is not supported. Supported chains: ${supportedChainIds.join(', ')}`,
|
|
63
|
+
)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function validateAssetOnChain(
|
|
68
|
+
asset: Asset,
|
|
69
|
+
chainId: SupportedChainId,
|
|
70
|
+
): void {
|
|
71
|
+
if (!isAssetSupportedOnChain(asset, chainId)) {
|
|
72
|
+
throw new Error(
|
|
73
|
+
`Asset ${asset.metadata.symbol} not supported on chain ${chainId}`,
|
|
74
|
+
)
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -2,7 +2,8 @@ import type { LocalAccount } from 'viem'
|
|
|
2
2
|
|
|
3
3
|
import type { LendProvider } from '@/lend/core/LendProvider.js'
|
|
4
4
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
5
|
-
import type {
|
|
5
|
+
import type { SwapProvider } from '@/swap/core/SwapProvider.js'
|
|
6
|
+
import type { LendProviderConfig, SwapProviderConfig } from '@/types/actions.js'
|
|
6
7
|
import type { Asset } from '@/types/asset.js'
|
|
7
8
|
import type { Wallet } from '@/wallet/core/wallets/abstract/Wallet.js'
|
|
8
9
|
|
|
@@ -21,6 +22,9 @@ export abstract class HostedWalletProvider<
|
|
|
21
22
|
morpho?: LendProvider<LendProviderConfig>
|
|
22
23
|
aave?: LendProvider<LendProviderConfig>
|
|
23
24
|
}
|
|
25
|
+
protected swapProviders: {
|
|
26
|
+
uniswap?: SwapProvider<SwapProviderConfig>
|
|
27
|
+
}
|
|
24
28
|
protected supportedAssets?: Asset[]
|
|
25
29
|
|
|
26
30
|
protected constructor(
|
|
@@ -29,10 +33,14 @@ export abstract class HostedWalletProvider<
|
|
|
29
33
|
morpho?: LendProvider<LendProviderConfig>
|
|
30
34
|
aave?: LendProvider<LendProviderConfig>
|
|
31
35
|
},
|
|
36
|
+
swapProviders?: {
|
|
37
|
+
uniswap?: SwapProvider<SwapProviderConfig>
|
|
38
|
+
},
|
|
32
39
|
supportedAssets?: Asset[],
|
|
33
40
|
) {
|
|
34
41
|
this.chainManager = chainManager
|
|
35
42
|
this.lendProviders = lendProviders || {}
|
|
43
|
+
this.swapProviders = swapProviders || {}
|
|
36
44
|
this.supportedAssets = supportedAssets
|
|
37
45
|
}
|
|
38
46
|
/**
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { LendProvider } from '@/lend/core/LendProvider.js'
|
|
2
2
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
3
|
-
import type {
|
|
3
|
+
import type { SwapProvider } from '@/swap/core/SwapProvider.js'
|
|
4
|
+
import type { LendProviderConfig, SwapProviderConfig } from '@/types/actions.js'
|
|
4
5
|
import type { Asset } from '@/types/asset.js'
|
|
5
6
|
import type { HostedWalletProvider } from '@/wallet/core/providers/hosted/abstract/HostedWalletProvider.js'
|
|
6
7
|
|
|
@@ -16,6 +17,9 @@ export interface HostedProviderDeps {
|
|
|
16
17
|
morpho?: LendProvider<LendProviderConfig>
|
|
17
18
|
aave?: LendProvider<LendProviderConfig>
|
|
18
19
|
}
|
|
20
|
+
swapProviders?: {
|
|
21
|
+
uniswap?: SwapProvider<SwapProviderConfig>
|
|
22
|
+
}
|
|
19
23
|
supportedAssets?: Asset[]
|
|
20
24
|
}
|
|
21
25
|
|
|
@@ -4,7 +4,8 @@ import { keccak256, slice, toHex } from 'viem'
|
|
|
4
4
|
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
5
5
|
import type { LendProvider } from '@/lend/core/LendProvider.js'
|
|
6
6
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
7
|
-
import type {
|
|
7
|
+
import type { SwapProvider } from '@/swap/core/SwapProvider.js'
|
|
8
|
+
import type { LendProviderConfig, SwapProviderConfig } from '@/types/actions.js'
|
|
8
9
|
import type { Asset } from '@/types/asset.js'
|
|
9
10
|
import { SmartWalletProvider } from '@/wallet/core/providers/smart/abstract/SmartWalletProvider.js'
|
|
10
11
|
import type { SmartWalletCreationResult } from '@/wallet/core/providers/smart/abstract/types/index.js'
|
|
@@ -31,6 +32,10 @@ export class DefaultSmartWalletProvider extends SmartWalletProvider {
|
|
|
31
32
|
morpho?: LendProvider<LendProviderConfig>
|
|
32
33
|
aave?: LendProvider<LendProviderConfig>
|
|
33
34
|
}
|
|
35
|
+
/** Providers for swap operations */
|
|
36
|
+
private swapProviders: {
|
|
37
|
+
uniswap?: SwapProvider<SwapProviderConfig>
|
|
38
|
+
}
|
|
34
39
|
/** Supported assets for this wallet provider */
|
|
35
40
|
private supportedAssets?: Asset[]
|
|
36
41
|
/** Optional 16-byte attribution suffix appended to callData */
|
|
@@ -40,6 +45,7 @@ export class DefaultSmartWalletProvider extends SmartWalletProvider {
|
|
|
40
45
|
* Initialize the Smart Wallet Provider
|
|
41
46
|
* @param chainManager - Manages supported blockchain networks
|
|
42
47
|
* @param lendProviders - Providers for lending market operations
|
|
48
|
+
* @param swapProviders - Providers for swap operations
|
|
43
49
|
* @param supportedAssets - Optional list of supported assets
|
|
44
50
|
* @param attributionSuffix - Optional attribution suffix
|
|
45
51
|
*/
|
|
@@ -49,12 +55,16 @@ export class DefaultSmartWalletProvider extends SmartWalletProvider {
|
|
|
49
55
|
morpho?: LendProvider<LendProviderConfig>
|
|
50
56
|
aave?: LendProvider<LendProviderConfig>
|
|
51
57
|
},
|
|
58
|
+
swapProviders?: {
|
|
59
|
+
uniswap?: SwapProvider<SwapProviderConfig>
|
|
60
|
+
},
|
|
52
61
|
supportedAssets?: Asset[],
|
|
53
62
|
attributionSuffix?: string,
|
|
54
63
|
) {
|
|
55
64
|
super()
|
|
56
65
|
this.chainManager = chainManager
|
|
57
66
|
this.lendProviders = lendProviders || {}
|
|
67
|
+
this.swapProviders = swapProviders || {}
|
|
58
68
|
this.supportedAssets = supportedAssets
|
|
59
69
|
if (attributionSuffix) {
|
|
60
70
|
this.attributionSuffix =
|
|
@@ -93,6 +103,7 @@ export class DefaultSmartWalletProvider extends SmartWalletProvider {
|
|
|
93
103
|
signer,
|
|
94
104
|
chainManager: this.chainManager,
|
|
95
105
|
lendProviders: this.lendProviders,
|
|
106
|
+
swapProviders: this.swapProviders,
|
|
96
107
|
supportedAssets: this.supportedAssets,
|
|
97
108
|
nonce,
|
|
98
109
|
attributionSuffix: this.attributionSuffix,
|
|
@@ -182,6 +193,7 @@ export class DefaultSmartWalletProvider extends SmartWalletProvider {
|
|
|
182
193
|
signer,
|
|
183
194
|
chainManager: this.chainManager,
|
|
184
195
|
lendProviders: this.lendProviders,
|
|
196
|
+
swapProviders: this.swapProviders,
|
|
185
197
|
supportedAssets: this.supportedAssets,
|
|
186
198
|
deploymentAddress: walletAddress,
|
|
187
199
|
attributionSuffix: this.attributionSuffix,
|
package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts
CHANGED
|
@@ -413,6 +413,7 @@ describe('DefaultSmartWalletProvider', () => {
|
|
|
413
413
|
const provider = new DefaultSmartWalletProvider(
|
|
414
414
|
mockChainManager,
|
|
415
415
|
{ morpho: mockLendProvider },
|
|
416
|
+
undefined,
|
|
416
417
|
supportedAssets,
|
|
417
418
|
attributionSeed,
|
|
418
419
|
)
|
|
@@ -440,6 +441,7 @@ describe('DefaultSmartWalletProvider', () => {
|
|
|
440
441
|
const provider = new DefaultSmartWalletProvider(
|
|
441
442
|
mockChainManager,
|
|
442
443
|
{ morpho: mockLendProvider },
|
|
444
|
+
undefined,
|
|
443
445
|
supportedAssets,
|
|
444
446
|
attributionSeed,
|
|
445
447
|
)
|
|
@@ -6,9 +6,11 @@ import { WalletLendNamespace } from '@/lend/namespaces/WalletLendNamespace.js'
|
|
|
6
6
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
7
7
|
import { fetchERC20Balance, fetchETHBalance } from '@/services/tokenBalance.js'
|
|
8
8
|
import { SUPPORTED_TOKENS } from '@/supported/tokens.js'
|
|
9
|
-
import type {
|
|
9
|
+
import type { SwapProvider } from '@/swap/core/SwapProvider.js'
|
|
10
|
+
import { WalletSwapNamespace } from '@/swap/namespaces/WalletSwapNamespace.js'
|
|
11
|
+
import type { LendProviderConfig, SwapProviderConfig } from '@/types/actions.js'
|
|
10
12
|
import type { Asset, TokenBalance } from '@/types/asset.js'
|
|
11
|
-
import type { TransactionData } from '@/types/
|
|
13
|
+
import type { TransactionData } from '@/types/transaction.js'
|
|
12
14
|
import type {
|
|
13
15
|
BatchTransactionReturnType,
|
|
14
16
|
TransactionReturnType,
|
|
@@ -27,6 +29,12 @@ export abstract class Wallet {
|
|
|
27
29
|
morpho?: LendProvider<LendProviderConfig>
|
|
28
30
|
aave?: LendProvider<LendProviderConfig>
|
|
29
31
|
}
|
|
32
|
+
/** Swap namespace with all swap operations */
|
|
33
|
+
swap?: WalletSwapNamespace
|
|
34
|
+
/** Providers for swap operations */
|
|
35
|
+
protected swapProviders: {
|
|
36
|
+
uniswap?: SwapProvider<SwapProviderConfig>
|
|
37
|
+
}
|
|
30
38
|
/** Manages supported blockchain networks and RPC clients */
|
|
31
39
|
protected chainManager: ChainManager
|
|
32
40
|
/** List of supported assets for this wallet */
|
|
@@ -53,6 +61,7 @@ export abstract class Wallet {
|
|
|
53
61
|
* Create a new wallet
|
|
54
62
|
* @param chainManager - Chain manager for the wallet
|
|
55
63
|
* @param lendProviders - Lend providers for the wallet
|
|
64
|
+
* @param swapProviders - Swap providers for the wallet
|
|
56
65
|
* @param supportedAssets - List of supported assets (defaults to all SUPPORTED_TOKENS)
|
|
57
66
|
*/
|
|
58
67
|
protected constructor(
|
|
@@ -61,14 +70,21 @@ export abstract class Wallet {
|
|
|
61
70
|
morpho?: LendProvider<LendProviderConfig>
|
|
62
71
|
aave?: LendProvider<LendProviderConfig>
|
|
63
72
|
},
|
|
73
|
+
swapProviders?: {
|
|
74
|
+
uniswap?: SwapProvider<SwapProviderConfig>
|
|
75
|
+
},
|
|
64
76
|
supportedAssets?: Asset[],
|
|
65
77
|
) {
|
|
66
78
|
this.chainManager = chainManager
|
|
67
79
|
this.lendProviders = lendProviders || {}
|
|
80
|
+
this.swapProviders = swapProviders || {}
|
|
68
81
|
this.supportedAssets = supportedAssets || SUPPORTED_TOKENS
|
|
69
82
|
if (this.lendProviders.morpho || this.lendProviders.aave) {
|
|
70
83
|
this.lend = new WalletLendNamespace(this.lendProviders, this)
|
|
71
84
|
}
|
|
85
|
+
if (this.swapProviders.uniswap) {
|
|
86
|
+
this.swap = new WalletSwapNamespace(this.swapProviders, this)
|
|
87
|
+
}
|
|
72
88
|
}
|
|
73
89
|
|
|
74
90
|
/**
|
|
@@ -15,9 +15,10 @@ import { TransactionConfirmedButRevertedError } from '@/core/error/errors.js'
|
|
|
15
15
|
import { retryOnStaleRead } from '@/core/utils/retryOnStaleRead.js'
|
|
16
16
|
import type { LendProvider } from '@/lend/core/LendProvider.js'
|
|
17
17
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
18
|
-
import type {
|
|
18
|
+
import type { SwapProvider } from '@/swap/core/SwapProvider.js'
|
|
19
|
+
import type { LendProviderConfig, SwapProviderConfig } from '@/types/actions.js'
|
|
19
20
|
import type { Asset } from '@/types/asset.js'
|
|
20
|
-
import type { TransactionData } from '@/types/
|
|
21
|
+
import type { TransactionData } from '@/types/transaction.js'
|
|
21
22
|
import { parseAssetAmount } from '@/utils/assets.js'
|
|
22
23
|
import { SmartWallet } from '@/wallet/core/wallets/smart/abstract/SmartWallet.js'
|
|
23
24
|
import type { Signer } from '@/wallet/core/wallets/smart/abstract/types/index.js'
|
|
@@ -59,6 +60,7 @@ export class DefaultSmartWallet extends SmartWallet {
|
|
|
59
60
|
* @param signer - Local account for signing transactions
|
|
60
61
|
* @param chainManager - Network management service
|
|
61
62
|
* @param lendProviders - Lending operations providers
|
|
63
|
+
* @param swapProviders - Swap operations providers
|
|
62
64
|
* @param deploymentAddress - Known wallet address (if already deployed)
|
|
63
65
|
* @param ownerIndex - Index of signer in owners array
|
|
64
66
|
* @param nonce - Nonce for address generation
|
|
@@ -71,12 +73,15 @@ export class DefaultSmartWallet extends SmartWallet {
|
|
|
71
73
|
morpho?: LendProvider<LendProviderConfig>
|
|
72
74
|
aave?: LendProvider<LendProviderConfig>
|
|
73
75
|
},
|
|
76
|
+
swapProviders?: {
|
|
77
|
+
uniswap?: SwapProvider<SwapProviderConfig>
|
|
78
|
+
},
|
|
74
79
|
supportedAssets?: Asset[],
|
|
75
80
|
deploymentAddress?: Address,
|
|
76
81
|
nonce?: bigint,
|
|
77
82
|
attributionSuffix?: Hex,
|
|
78
83
|
) {
|
|
79
|
-
super(chainManager, lendProviders, supportedAssets)
|
|
84
|
+
super(chainManager, lendProviders, swapProviders, supportedAssets)
|
|
80
85
|
|
|
81
86
|
const { signersWithLocalAccount, signerIndex } =
|
|
82
87
|
DefaultSmartWallet.ensureLocalAccountSigner(signers, signer)
|
|
@@ -121,6 +126,9 @@ export class DefaultSmartWallet extends SmartWallet {
|
|
|
121
126
|
morpho?: LendProvider<LendProviderConfig>
|
|
122
127
|
aave?: LendProvider<LendProviderConfig>
|
|
123
128
|
}
|
|
129
|
+
swapProviders?: {
|
|
130
|
+
uniswap?: SwapProvider<SwapProviderConfig>
|
|
131
|
+
}
|
|
124
132
|
supportedAssets?: Asset[]
|
|
125
133
|
deploymentAddress?: Address
|
|
126
134
|
nonce?: bigint
|
|
@@ -132,6 +140,7 @@ export class DefaultSmartWallet extends SmartWallet {
|
|
|
132
140
|
params.signer,
|
|
133
141
|
params.chainManager,
|
|
134
142
|
params.lendProviders,
|
|
143
|
+
params.swapProviders,
|
|
135
144
|
params.supportedAssets,
|
|
136
145
|
params.deploymentAddress,
|
|
137
146
|
params.nonce,
|
|
@@ -540,7 +549,7 @@ export class DefaultSmartWallet extends SmartWallet {
|
|
|
540
549
|
|
|
541
550
|
// Handle ETH transfers
|
|
542
551
|
if (asset.type === 'native') {
|
|
543
|
-
const parsedAmount = parseAssetAmount(
|
|
552
|
+
const parsedAmount = parseAssetAmount(asset, amount)
|
|
544
553
|
|
|
545
554
|
return {
|
|
546
555
|
to: recipientAddress,
|
|
@@ -550,7 +559,7 @@ export class DefaultSmartWallet extends SmartWallet {
|
|
|
550
559
|
}
|
|
551
560
|
|
|
552
561
|
// Handle ERC20 token transfers
|
|
553
|
-
const parsedAmount = parseAssetAmount(
|
|
562
|
+
const parsedAmount = parseAssetAmount(asset, amount)
|
|
554
563
|
|
|
555
564
|
// Encode ERC20 transfer function call
|
|
556
565
|
const transferData = encodeFunctionData({
|
|
@@ -4,7 +4,8 @@ import { getAddress } from 'viem'
|
|
|
4
4
|
|
|
5
5
|
import type { LendProvider } from '@/lend/core/LendProvider.js'
|
|
6
6
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
7
|
-
import type {
|
|
7
|
+
import type { SwapProvider } from '@/swap/core/SwapProvider.js'
|
|
8
|
+
import type { LendProviderConfig, SwapProviderConfig } from '@/types/actions.js'
|
|
8
9
|
import type { Asset } from '@/types/asset.js'
|
|
9
10
|
import { HostedWalletProvider } from '@/wallet/core/providers/hosted/abstract/HostedWalletProvider.js'
|
|
10
11
|
import type { Wallet } from '@/wallet/core/wallets/abstract/Wallet.js'
|
|
@@ -32,6 +33,7 @@ export class PrivyHostedWalletProvider extends HostedWalletProvider<
|
|
|
32
33
|
* @param params.privyClient - Privy client instance
|
|
33
34
|
* @param params.chainManager - Chain manager for multi-chain operations
|
|
34
35
|
* @param params.lendProviders - Optional lend providers for DeFi operations
|
|
36
|
+
* @param params.swapProviders - Optional swap providers for trading operations
|
|
35
37
|
* @param params.supportedAssets - Optional list of supported assets
|
|
36
38
|
* @param params.authorizationContext - Optional authorization context for the Privy client.
|
|
37
39
|
* Used when Privy needs to sign requests.
|
|
@@ -45,10 +47,18 @@ export class PrivyHostedWalletProvider extends HostedWalletProvider<
|
|
|
45
47
|
morpho?: LendProvider<LendProviderConfig>
|
|
46
48
|
aave?: LendProvider<LendProviderConfig>
|
|
47
49
|
}
|
|
50
|
+
swapProviders?: {
|
|
51
|
+
uniswap?: SwapProvider<SwapProviderConfig>
|
|
52
|
+
}
|
|
48
53
|
supportedAssets?: Asset[]
|
|
49
54
|
authorizationContext?: AuthorizationContext
|
|
50
55
|
}) {
|
|
51
|
-
super(
|
|
56
|
+
super(
|
|
57
|
+
params.chainManager,
|
|
58
|
+
params.lendProviders,
|
|
59
|
+
params.swapProviders,
|
|
60
|
+
params.supportedAssets,
|
|
61
|
+
)
|
|
52
62
|
this.privyClient = params.privyClient
|
|
53
63
|
this.authorizationContext = params.authorizationContext
|
|
54
64
|
}
|
|
@@ -63,6 +73,7 @@ export class PrivyHostedWalletProvider extends HostedWalletProvider<
|
|
|
63
73
|
address: getAddress(params.address),
|
|
64
74
|
chainManager: this.chainManager,
|
|
65
75
|
lendProviders: this.lendProviders,
|
|
76
|
+
swapProviders: this.swapProviders,
|
|
66
77
|
supportedAssets: this.supportedAssets,
|
|
67
78
|
})
|
|
68
79
|
}
|
|
@@ -28,11 +28,15 @@ export class NodeHostedWalletProviderRegistry extends HostedWalletProviderRegist
|
|
|
28
28
|
validateOptions(options): options is NodeOptionsMap['privy'] {
|
|
29
29
|
return Boolean((options as NodeOptionsMap['privy'])?.privyClient)
|
|
30
30
|
},
|
|
31
|
-
create(
|
|
31
|
+
create(
|
|
32
|
+
{ chainManager, lendProviders, swapProviders, supportedAssets },
|
|
33
|
+
options,
|
|
34
|
+
) {
|
|
32
35
|
return new PrivyHostedWalletProvider({
|
|
33
36
|
privyClient: options.privyClient,
|
|
34
37
|
chainManager,
|
|
35
38
|
lendProviders,
|
|
39
|
+
swapProviders,
|
|
36
40
|
supportedAssets,
|
|
37
41
|
authorizationContext: options.authorizationContext,
|
|
38
42
|
})
|
|
@@ -45,11 +49,15 @@ export class NodeHostedWalletProviderRegistry extends HostedWalletProviderRegist
|
|
|
45
49
|
const o = options as NodeOptionsMap['turnkey']
|
|
46
50
|
return Boolean(o?.client)
|
|
47
51
|
},
|
|
48
|
-
create(
|
|
52
|
+
create(
|
|
53
|
+
{ chainManager, lendProviders, swapProviders, supportedAssets },
|
|
54
|
+
options,
|
|
55
|
+
) {
|
|
49
56
|
return new TurnkeyHostedWalletProvider(
|
|
50
57
|
options.client,
|
|
51
58
|
chainManager,
|
|
52
59
|
lendProviders,
|
|
60
|
+
swapProviders,
|
|
53
61
|
supportedAssets,
|
|
54
62
|
)
|
|
55
63
|
},
|
|
@@ -5,7 +5,8 @@ import type { LocalAccount } from 'viem'
|
|
|
5
5
|
|
|
6
6
|
import type { LendProvider } from '@/lend/core/LendProvider.js'
|
|
7
7
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
8
|
-
import type {
|
|
8
|
+
import type { SwapProvider } from '@/swap/core/SwapProvider.js'
|
|
9
|
+
import type { LendProviderConfig, SwapProviderConfig } from '@/types/actions.js'
|
|
9
10
|
import type { Asset } from '@/types/asset.js'
|
|
10
11
|
import { HostedWalletProvider } from '@/wallet/core/providers/hosted/abstract/HostedWalletProvider.js'
|
|
11
12
|
import type { Wallet } from '@/wallet/core/wallets/abstract/Wallet.js'
|
|
@@ -29,6 +30,7 @@ export class TurnkeyHostedWalletProvider extends HostedWalletProvider<
|
|
|
29
30
|
* @param client - Turnkey client instance (HTTP, server, or core SDK base)
|
|
30
31
|
* @param chainManager - Chain manager used to resolve chains and RPC transports
|
|
31
32
|
* @param lendProviders - Optional lend providers for DeFi operations
|
|
33
|
+
* @param swapProviders - Optional swap providers for trading operations
|
|
32
34
|
* @param supportedAssets - Optional list of supported assets
|
|
33
35
|
*/
|
|
34
36
|
constructor(
|
|
@@ -41,9 +43,12 @@ export class TurnkeyHostedWalletProvider extends HostedWalletProvider<
|
|
|
41
43
|
morpho?: LendProvider<LendProviderConfig>
|
|
42
44
|
aave?: LendProvider<LendProviderConfig>
|
|
43
45
|
},
|
|
46
|
+
swapProviders?: {
|
|
47
|
+
uniswap?: SwapProvider<SwapProviderConfig>
|
|
48
|
+
},
|
|
44
49
|
supportedAssets?: Asset[],
|
|
45
50
|
) {
|
|
46
|
-
super(chainManager, lendProviders, supportedAssets)
|
|
51
|
+
super(chainManager, lendProviders, swapProviders, supportedAssets)
|
|
47
52
|
}
|
|
48
53
|
|
|
49
54
|
/**
|
|
@@ -65,6 +70,7 @@ export class TurnkeyHostedWalletProvider extends HostedWalletProvider<
|
|
|
65
70
|
ethereumAddress: params.ethereumAddress,
|
|
66
71
|
chainManager: this.chainManager,
|
|
67
72
|
lendProviders: this.lendProviders,
|
|
73
|
+
swapProviders: this.swapProviders,
|
|
68
74
|
supportedAssets: this.supportedAssets,
|
|
69
75
|
})
|
|
70
76
|
}
|
|
@@ -3,7 +3,8 @@ import { type Address, type LocalAccount } from 'viem'
|
|
|
3
3
|
|
|
4
4
|
import type { LendProvider } from '@/lend/core/LendProvider.js'
|
|
5
5
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
6
|
-
import type {
|
|
6
|
+
import type { SwapProvider } from '@/swap/core/SwapProvider.js'
|
|
7
|
+
import type { LendProviderConfig, SwapProviderConfig } from '@/types/actions.js'
|
|
7
8
|
import type { Asset } from '@/types/asset.js'
|
|
8
9
|
import { EOAWallet } from '@/wallet/core/wallets/eoa/EOAWallet.js'
|
|
9
10
|
import { createSigner } from '@/wallet/node/wallets/hosted/privy/utils/createSigner.js'
|
|
@@ -26,6 +27,7 @@ export class PrivyWallet extends EOAWallet {
|
|
|
26
27
|
* @param address - Ethereum address of the wallet
|
|
27
28
|
* @param chainManager - Chain manager for multi-chain operations
|
|
28
29
|
* @param lendProviders - Optional lend providers for DeFi operations
|
|
30
|
+
* @param swapProviders - Optional swap providers for trading operations
|
|
29
31
|
* @param supportedAssets - Optional list of supported assets
|
|
30
32
|
*/
|
|
31
33
|
private constructor(
|
|
@@ -37,10 +39,13 @@ export class PrivyWallet extends EOAWallet {
|
|
|
37
39
|
morpho?: LendProvider<LendProviderConfig>
|
|
38
40
|
aave?: LendProvider<LendProviderConfig>
|
|
39
41
|
},
|
|
42
|
+
swapProviders?: {
|
|
43
|
+
uniswap?: SwapProvider<SwapProviderConfig>
|
|
44
|
+
},
|
|
40
45
|
supportedAssets?: Asset[],
|
|
41
46
|
authorizationContext?: AuthorizationContext,
|
|
42
47
|
) {
|
|
43
|
-
super(chainManager, lendProviders, supportedAssets)
|
|
48
|
+
super(chainManager, lendProviders, swapProviders, supportedAssets)
|
|
44
49
|
this.privyClient = privyClient
|
|
45
50
|
this.authorizationContext = authorizationContext
|
|
46
51
|
this.walletId = walletId
|
|
@@ -57,6 +62,9 @@ export class PrivyWallet extends EOAWallet {
|
|
|
57
62
|
morpho?: LendProvider<LendProviderConfig>
|
|
58
63
|
aave?: LendProvider<LendProviderConfig>
|
|
59
64
|
}
|
|
65
|
+
swapProviders?: {
|
|
66
|
+
uniswap?: SwapProvider<SwapProviderConfig>
|
|
67
|
+
}
|
|
60
68
|
supportedAssets?: Asset[]
|
|
61
69
|
}): Promise<PrivyWallet> {
|
|
62
70
|
const wallet = new PrivyWallet(
|
|
@@ -65,6 +73,7 @@ export class PrivyWallet extends EOAWallet {
|
|
|
65
73
|
params.address,
|
|
66
74
|
params.chainManager,
|
|
67
75
|
params.lendProviders,
|
|
76
|
+
params.swapProviders,
|
|
68
77
|
params.supportedAssets,
|
|
69
78
|
params.authorizationContext,
|
|
70
79
|
)
|