thirdweb 5.67.1-nightly-040e478ad6cf630dedf666eac7abeb668d323666-20241113000339 → 5.68.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/cjs/adapters/eip1193/from-eip1193.js +149 -0
- package/dist/cjs/adapters/eip1193/from-eip1193.js.map +1 -0
- package/dist/cjs/adapters/eip1193/index.js +8 -0
- package/dist/cjs/adapters/eip1193/index.js.map +1 -0
- package/dist/cjs/adapters/eip1193/to-eip1193.js +122 -0
- package/dist/cjs/adapters/eip1193/to-eip1193.js.map +1 -0
- package/dist/cjs/adapters/eip1193/types.js +3 -0
- package/dist/cjs/adapters/eip1193/types.js.map +1 -0
- package/dist/cjs/exports/wallets.js +3 -1
- package/dist/cjs/exports/wallets.js.map +1 -1
- package/dist/cjs/exports/wallets.native.js +3 -1
- package/dist/cjs/exports/wallets.native.js.map +1 -1
- package/dist/cjs/react/core/hooks/wallets/useAdminWallet.js +1 -0
- package/dist/cjs/react/core/hooks/wallets/useAdminWallet.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.js +6 -7
- package/dist/cjs/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.js.map +1 -1
- package/dist/cjs/react/web/wallets/shared/CoinbaseSDKConnection.js +2 -2
- package/dist/cjs/react/web/wallets/shared/CoinbaseSDKConnection.js.map +1 -1
- package/dist/cjs/transaction/actions/to-serializable-transaction.js +18 -0
- package/dist/cjs/transaction/actions/to-serializable-transaction.js.map +1 -1
- package/dist/cjs/transaction/actions/zksync/send-eip712-transaction.js +61 -43
- package/dist/cjs/transaction/actions/zksync/send-eip712-transaction.js.map +1 -1
- package/dist/cjs/utils/bigint.js +11 -0
- package/dist/cjs/utils/bigint.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/cjs/wallets/__generated__/getWalletInfo.js +23 -3
- package/dist/cjs/wallets/__generated__/getWalletInfo.js.map +1 -1
- package/dist/cjs/wallets/__generated__/wallet/com.blazpay.wallet/image.js +7 -0
- package/dist/cjs/wallets/__generated__/wallet/com.blazpay.wallet/image.js.map +1 -0
- package/dist/cjs/wallets/__generated__/wallet/com.blazpay.wallet/index.js +34 -0
- package/dist/cjs/wallets/__generated__/wallet/com.blazpay.wallet/index.js.map +1 -0
- package/dist/cjs/wallets/__generated__/wallet/com.crypto.wallet/image.js.map +1 -0
- package/dist/cjs/wallets/__generated__/wallet/{com.crypto → com.crypto.wallet}/index.js +3 -3
- package/dist/cjs/wallets/__generated__/wallet/com.crypto.wallet/index.js.map +1 -0
- package/dist/cjs/wallets/__generated__/wallet/com.okex.wallet/index.js +1 -1
- package/dist/cjs/wallets/__generated__/wallet/com.okex.wallet/index.js.map +1 -1
- package/dist/cjs/wallets/__generated__/wallet/com.tomi/image.js +1 -1
- package/dist/cjs/wallets/__generated__/wallet/com.tomi/image.js.map +1 -1
- package/dist/cjs/wallets/__generated__/wallet/com.tomi/index.js +2 -2
- package/dist/cjs/wallets/__generated__/wallet/com.tomi/index.js.map +1 -1
- package/dist/cjs/wallets/__generated__/wallet/com.walletconnect.com/image.js +1 -1
- package/dist/cjs/wallets/__generated__/wallet/com.walletconnect.com/image.js.map +1 -1
- package/dist/cjs/wallets/__generated__/wallet/com.walletconnect.com/index.js +1 -1
- package/dist/cjs/wallets/__generated__/wallet/net.myrenegade/index.js +1 -1
- package/dist/cjs/wallets/__generated__/wallet/net.myrenegade/index.js.map +1 -1
- package/dist/cjs/wallets/__generated__/wallet/nl.greenhood.wallet/image.js +7 -0
- package/dist/cjs/wallets/__generated__/wallet/nl.greenhood.wallet/image.js.map +1 -0
- package/dist/cjs/wallets/__generated__/wallet/nl.greenhood.wallet/index.js +34 -0
- package/dist/cjs/wallets/__generated__/wallet/nl.greenhood.wallet/index.js.map +1 -0
- package/dist/cjs/wallets/__generated__/wallet/social.gm2/image.js +7 -0
- package/dist/cjs/wallets/__generated__/wallet/{com.crypto → social.gm2}/image.js.map +1 -1
- package/dist/cjs/wallets/__generated__/wallet/social.gm2/index.js +34 -0
- package/dist/cjs/wallets/__generated__/wallet/social.gm2/index.js.map +1 -0
- package/dist/cjs/wallets/__generated__/wallet/xyz.abs/image.js +7 -0
- package/dist/cjs/wallets/__generated__/wallet/xyz.abs/image.js.map +1 -0
- package/dist/cjs/wallets/__generated__/wallet/xyz.abs/index.js +34 -0
- package/dist/cjs/wallets/__generated__/wallet/xyz.abs/index.js.map +1 -0
- package/dist/cjs/wallets/__generated__/wallet-infos.js +22 -2
- package/dist/cjs/wallets/__generated__/wallet-infos.js.map +1 -1
- package/dist/cjs/wallets/create-wallet.js +12 -4
- package/dist/cjs/wallets/create-wallet.js.map +1 -1
- package/dist/cjs/wallets/injected/index.js +55 -30
- package/dist/cjs/wallets/injected/index.js.map +1 -1
- package/dist/esm/adapters/eip1193/from-eip1193.js +146 -0
- package/dist/esm/adapters/eip1193/from-eip1193.js.map +1 -0
- package/dist/esm/adapters/eip1193/index.js +3 -0
- package/dist/esm/adapters/eip1193/index.js.map +1 -0
- package/dist/esm/adapters/eip1193/to-eip1193.js +119 -0
- package/dist/esm/adapters/eip1193/to-eip1193.js.map +1 -0
- package/dist/esm/adapters/eip1193/types.js +2 -0
- package/dist/esm/adapters/eip1193/types.js.map +1 -0
- package/dist/esm/exports/wallets.js +2 -0
- package/dist/esm/exports/wallets.js.map +1 -1
- package/dist/esm/exports/wallets.native.js +2 -0
- package/dist/esm/exports/wallets.native.js.map +1 -1
- package/dist/esm/react/core/hooks/wallets/useAdminWallet.js +1 -0
- package/dist/esm/react/core/hooks/wallets/useAdminWallet.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.js +6 -7
- package/dist/esm/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.js.map +1 -1
- package/dist/esm/react/web/wallets/shared/CoinbaseSDKConnection.js +2 -2
- package/dist/esm/react/web/wallets/shared/CoinbaseSDKConnection.js.map +1 -1
- package/dist/esm/transaction/actions/to-serializable-transaction.js +18 -0
- package/dist/esm/transaction/actions/to-serializable-transaction.js.map +1 -1
- package/dist/esm/transaction/actions/zksync/send-eip712-transaction.js +62 -45
- package/dist/esm/transaction/actions/zksync/send-eip712-transaction.js.map +1 -1
- package/dist/esm/utils/bigint.js +9 -0
- package/dist/esm/utils/bigint.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/esm/wallets/__generated__/getWalletInfo.js +23 -3
- package/dist/esm/wallets/__generated__/getWalletInfo.js.map +1 -1
- package/dist/esm/wallets/__generated__/wallet/com.blazpay.wallet/image.js +5 -0
- package/dist/esm/wallets/__generated__/wallet/com.blazpay.wallet/image.js.map +1 -0
- package/dist/esm/wallets/__generated__/wallet/com.blazpay.wallet/index.js +31 -0
- package/dist/esm/wallets/__generated__/wallet/com.blazpay.wallet/index.js.map +1 -0
- package/dist/esm/wallets/__generated__/wallet/com.crypto.wallet/image.js.map +1 -0
- package/dist/esm/wallets/__generated__/wallet/{com.crypto → com.crypto.wallet}/index.js +3 -3
- package/dist/esm/wallets/__generated__/wallet/com.crypto.wallet/index.js.map +1 -0
- package/dist/esm/wallets/__generated__/wallet/com.okex.wallet/index.js +1 -1
- package/dist/esm/wallets/__generated__/wallet/com.okex.wallet/index.js.map +1 -1
- package/dist/esm/wallets/__generated__/wallet/com.tomi/image.js +1 -1
- package/dist/esm/wallets/__generated__/wallet/com.tomi/image.js.map +1 -1
- package/dist/esm/wallets/__generated__/wallet/com.tomi/index.js +2 -2
- package/dist/esm/wallets/__generated__/wallet/com.tomi/index.js.map +1 -1
- package/dist/esm/wallets/__generated__/wallet/com.walletconnect.com/image.js +1 -1
- package/dist/esm/wallets/__generated__/wallet/com.walletconnect.com/image.js.map +1 -1
- package/dist/esm/wallets/__generated__/wallet/com.walletconnect.com/index.js +1 -1
- package/dist/esm/wallets/__generated__/wallet/net.myrenegade/index.js +1 -1
- package/dist/esm/wallets/__generated__/wallet/net.myrenegade/index.js.map +1 -1
- package/dist/esm/wallets/__generated__/wallet/nl.greenhood.wallet/image.js +5 -0
- package/dist/esm/wallets/__generated__/wallet/nl.greenhood.wallet/image.js.map +1 -0
- package/dist/esm/wallets/__generated__/wallet/nl.greenhood.wallet/index.js +31 -0
- package/dist/esm/wallets/__generated__/wallet/nl.greenhood.wallet/index.js.map +1 -0
- package/dist/esm/wallets/__generated__/wallet/social.gm2/image.js +5 -0
- package/dist/esm/wallets/__generated__/wallet/{com.crypto → social.gm2}/image.js.map +1 -1
- package/dist/esm/wallets/__generated__/wallet/social.gm2/index.js +31 -0
- package/dist/esm/wallets/__generated__/wallet/social.gm2/index.js.map +1 -0
- package/dist/esm/wallets/__generated__/wallet/xyz.abs/image.js +5 -0
- package/dist/esm/wallets/__generated__/wallet/xyz.abs/image.js.map +1 -0
- package/dist/esm/wallets/__generated__/wallet/xyz.abs/index.js +31 -0
- package/dist/esm/wallets/__generated__/wallet/xyz.abs/index.js.map +1 -0
- package/dist/esm/wallets/__generated__/wallet-infos.js +22 -2
- package/dist/esm/wallets/__generated__/wallet-infos.js.map +1 -1
- package/dist/esm/wallets/create-wallet.js +12 -4
- package/dist/esm/wallets/create-wallet.js.map +1 -1
- package/dist/esm/wallets/injected/index.js +53 -28
- package/dist/esm/wallets/injected/index.js.map +1 -1
- package/dist/types/adapters/eip1193/from-eip1193.d.ts +48 -0
- package/dist/types/adapters/eip1193/from-eip1193.d.ts.map +1 -0
- package/dist/types/adapters/eip1193/index.d.ts +4 -0
- package/dist/types/adapters/eip1193/index.d.ts.map +1 -0
- package/dist/types/adapters/eip1193/to-eip1193.d.ts +48 -0
- package/dist/types/adapters/eip1193/to-eip1193.d.ts.map +1 -0
- package/dist/types/adapters/eip1193/types.d.ts +6 -0
- package/dist/types/adapters/eip1193/types.d.ts.map +1 -0
- package/dist/types/analytics/track/transaction.d.ts +1 -1
- package/dist/types/analytics/track/transaction.d.ts.map +1 -1
- package/dist/types/exports/wallets.d.ts +1 -0
- package/dist/types/exports/wallets.d.ts.map +1 -1
- package/dist/types/exports/wallets.native.d.ts +1 -0
- package/dist/types/exports/wallets.native.d.ts.map +1 -1
- package/dist/types/react/core/hooks/wallets/useAdminWallet.d.ts +1 -0
- package/dist/types/react/core/hooks/wallets/useAdminWallet.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/CoinbaseSDKConnection.d.ts +3 -4
- package/dist/types/react/web/wallets/shared/CoinbaseSDKConnection.d.ts.map +1 -1
- package/dist/types/transaction/actions/to-serializable-transaction.d.ts.map +1 -1
- package/dist/types/transaction/actions/zksync/send-eip712-transaction.d.ts +10 -0
- package/dist/types/transaction/actions/zksync/send-eip712-transaction.d.ts.map +1 -1
- package/dist/types/utils/bigint.d.ts +6 -0
- package/dist/types/utils/bigint.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/version.d.ts.map +1 -1
- package/dist/types/wallets/__generated__/getWalletInfo.d.ts.map +1 -1
- package/dist/types/wallets/__generated__/wallet/com.blazpay.wallet/image.d.ts +3 -0
- package/dist/types/wallets/__generated__/wallet/com.blazpay.wallet/image.d.ts.map +1 -0
- package/dist/types/wallets/__generated__/wallet/com.blazpay.wallet/index.d.ts +29 -0
- package/dist/types/wallets/__generated__/wallet/com.blazpay.wallet/index.d.ts.map +1 -0
- package/dist/types/wallets/__generated__/wallet/com.crypto.wallet/image.d.ts.map +1 -0
- package/dist/types/wallets/__generated__/wallet/{com.crypto → com.crypto.wallet}/index.d.ts +3 -3
- package/dist/types/wallets/__generated__/wallet/com.crypto.wallet/index.d.ts.map +1 -0
- package/dist/types/wallets/__generated__/wallet/com.okex.wallet/index.d.ts +1 -1
- package/dist/types/wallets/__generated__/wallet/com.tomi/image.d.ts +1 -1
- package/dist/types/wallets/__generated__/wallet/com.tomi/image.d.ts.map +1 -1
- package/dist/types/wallets/__generated__/wallet/com.tomi/index.d.ts +2 -2
- package/dist/types/wallets/__generated__/wallet/com.walletconnect.com/image.d.ts +1 -1
- package/dist/types/wallets/__generated__/wallet/com.walletconnect.com/image.d.ts.map +1 -1
- package/dist/types/wallets/__generated__/wallet/com.walletconnect.com/index.d.ts +1 -1
- package/dist/types/wallets/__generated__/wallet/net.myrenegade/index.d.ts +1 -1
- package/dist/types/wallets/__generated__/wallet/nl.greenhood.wallet/image.d.ts +3 -0
- package/dist/types/wallets/__generated__/wallet/nl.greenhood.wallet/image.d.ts.map +1 -0
- package/dist/types/wallets/__generated__/wallet/nl.greenhood.wallet/index.d.ts +29 -0
- package/dist/types/wallets/__generated__/wallet/nl.greenhood.wallet/index.d.ts.map +1 -0
- package/dist/types/wallets/__generated__/wallet/social.gm2/image.d.ts +3 -0
- package/dist/types/wallets/__generated__/wallet/social.gm2/image.d.ts.map +1 -0
- package/dist/types/wallets/__generated__/wallet/social.gm2/index.d.ts +29 -0
- package/dist/types/wallets/__generated__/wallet/{com.crypto → social.gm2}/index.d.ts.map +1 -1
- package/dist/types/wallets/__generated__/wallet/xyz.abs/image.d.ts +3 -0
- package/dist/types/wallets/__generated__/wallet/xyz.abs/image.d.ts.map +1 -0
- package/dist/types/wallets/__generated__/wallet/xyz.abs/index.d.ts +29 -0
- package/dist/types/wallets/__generated__/wallet/xyz.abs/index.d.ts.map +1 -0
- package/dist/types/wallets/__generated__/wallet-ids.d.ts +2 -2
- package/dist/types/wallets/__generated__/wallet-ids.d.ts.map +1 -1
- package/dist/types/wallets/__generated__/wallet-infos.d.ts +18 -2
- package/dist/types/wallets/__generated__/wallet-infos.d.ts.map +1 -1
- package/dist/types/wallets/create-wallet.d.ts.map +1 -1
- package/dist/types/wallets/getAllWalletsList.d.ts +18 -2
- package/dist/types/wallets/getAllWalletsList.d.ts.map +1 -1
- package/dist/types/wallets/injected/index.d.ts +15 -8
- package/dist/types/wallets/injected/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/adapters/eip1193/from-eip1193.test.ts +138 -0
- package/src/adapters/eip1193/from-eip1193.ts +171 -0
- package/src/adapters/eip1193/index.ts +11 -0
- package/src/adapters/eip1193/to-eip1193.test.ts +187 -0
- package/src/adapters/eip1193/to-eip1193.ts +132 -0
- package/src/adapters/eip1193/types.ts +9 -0
- package/src/analytics/track/transaction.ts +1 -1
- package/src/exports/wallets.native.ts +3 -0
- package/src/exports/wallets.ts +3 -0
- package/src/react/core/hooks/wallets/useAdminWallet.ts +1 -0
- package/src/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.tsx +21 -22
- package/src/react/web/wallets/shared/CoinbaseSDKConnection.tsx +3 -4
- package/src/transaction/actions/to-serializable-transaction.ts +21 -0
- package/src/transaction/actions/zksync/send-eip712-transaction.ts +78 -53
- package/src/utils/bigint.ts +41 -0
- package/src/version.ts +1 -1
- package/src/wallets/__generated__/getWalletInfo.ts +39 -3
- package/src/wallets/__generated__/wallet/com.blazpay.wallet/image.ts +7 -0
- package/src/wallets/__generated__/wallet/com.blazpay.wallet/index.ts +32 -0
- package/src/wallets/__generated__/wallet/{com.crypto → com.crypto.wallet}/index.ts +4 -3
- package/src/wallets/__generated__/wallet/com.okex.wallet/index.ts +1 -1
- package/src/wallets/__generated__/wallet/com.tomi/image.ts +1 -1
- package/src/wallets/__generated__/wallet/com.tomi/index.ts +2 -2
- package/src/wallets/__generated__/wallet/com.walletconnect.com/image.ts +1 -1
- package/src/wallets/__generated__/wallet/com.walletconnect.com/index.ts +1 -1
- package/src/wallets/__generated__/wallet/net.myrenegade/index.ts +1 -1
- package/src/wallets/__generated__/wallet/nl.greenhood.wallet/image.ts +7 -0
- package/src/wallets/__generated__/wallet/nl.greenhood.wallet/index.ts +32 -0
- package/src/wallets/__generated__/wallet/social.gm2/image.ts +7 -0
- package/src/wallets/__generated__/wallet/social.gm2/index.ts +32 -0
- package/src/wallets/__generated__/wallet/xyz.abs/image.ts +7 -0
- package/src/wallets/__generated__/wallet/xyz.abs/index.ts +31 -0
- package/src/wallets/__generated__/wallet-ids.ts +11 -5
- package/src/wallets/__generated__/wallet-infos.ts +22 -2
- package/src/wallets/create-wallet.ts +11 -8
- package/src/wallets/injected/index.ts +75 -42
- package/dist/cjs/wallets/__generated__/wallet/com.crypto/index.js.map +0 -1
- package/dist/esm/wallets/__generated__/wallet/com.crypto/index.js.map +0 -1
- package/dist/types/wallets/__generated__/wallet/com.crypto/image.d.ts.map +0 -1
- /package/dist/cjs/wallets/__generated__/wallet/{com.crypto → com.crypto.wallet}/image.js +0 -0
- /package/dist/esm/wallets/__generated__/wallet/{com.crypto → com.crypto.wallet}/image.js +0 -0
- /package/dist/types/wallets/__generated__/wallet/{com.crypto → com.crypto.wallet}/image.d.ts +0 -0
- /package/src/wallets/__generated__/wallet/{com.crypto → com.crypto.wallet}/image.ts +0 -0
@@ -0,0 +1,171 @@
|
|
1
|
+
import * as ox__Hex from "ox/Hex";
|
2
|
+
import { trackConnect } from "../../analytics/track/connect.js";
|
3
|
+
import type { Chain } from "../../chains/types.js";
|
4
|
+
import { getCachedChainIfExists } from "../../chains/utils.js";
|
5
|
+
import {
|
6
|
+
autoConnectEip1193Wallet,
|
7
|
+
connectEip1193Wallet,
|
8
|
+
} from "../../wallets/injected/index.js";
|
9
|
+
import type { Account, Wallet } from "../../wallets/interfaces/wallet.js";
|
10
|
+
import { createWalletEmitter } from "../../wallets/wallet-emitter.js";
|
11
|
+
import type { WalletId } from "../../wallets/wallet-types.js";
|
12
|
+
import type { EIP1193Provider } from "./types.js";
|
13
|
+
|
14
|
+
/**
|
15
|
+
* Options for creating an EIP-1193 provider adapter.
|
16
|
+
*/
|
17
|
+
export type FromEip1193AdapterOptions = {
|
18
|
+
provider: EIP1193Provider | (() => Promise<EIP1193Provider>);
|
19
|
+
walletId?: WalletId;
|
20
|
+
};
|
21
|
+
|
22
|
+
/**
|
23
|
+
* Creates a Thirdweb wallet from an EIP-1193 compatible provider.
|
24
|
+
*
|
25
|
+
* This adapter allows you to use any EIP-1193 provider (like MetaMask, WalletConnect, etc.) as a Thirdweb wallet.
|
26
|
+
* It handles all the necessary conversions between the EIP-1193 interface and Thirdweb's wallet interface.
|
27
|
+
*
|
28
|
+
* @param options - Configuration options for creating the wallet adapter
|
29
|
+
* @param options.provider - An EIP-1193 compatible provider or a function that returns one
|
30
|
+
* @param options.walletId - Optional custom wallet ID to identify this provider (defaults to "adapter")
|
31
|
+
* @returns A Thirdweb wallet instance that wraps the EIP-1193 provider
|
32
|
+
*
|
33
|
+
* @example
|
34
|
+
* ```ts
|
35
|
+
* import { EIP1193 } from "thirdweb/wallets";
|
36
|
+
*
|
37
|
+
* // Create a Thirdweb wallet from MetaMask's provider
|
38
|
+
* const wallet = EIP1193.fromProvider({
|
39
|
+
* provider: window.ethereum,
|
40
|
+
* walletId: "io.metamask"
|
41
|
+
* });
|
42
|
+
*
|
43
|
+
* // Use like any other Thirdweb wallet
|
44
|
+
* const account = await wallet.connect({
|
45
|
+
* client: createThirdwebClient({ clientId: "..." })
|
46
|
+
* });
|
47
|
+
*
|
48
|
+
* // Sign messages
|
49
|
+
* await account.signMessage({ message: "Hello World" });
|
50
|
+
*
|
51
|
+
* // Send transactions
|
52
|
+
* await account.sendTransaction({
|
53
|
+
* to: "0x...",
|
54
|
+
* value: 1000000000000000000n
|
55
|
+
* });
|
56
|
+
* ```
|
57
|
+
*/
|
58
|
+
export function fromProvider(options: FromEip1193AdapterOptions): Wallet {
|
59
|
+
const id: WalletId = options.walletId ?? "adapter";
|
60
|
+
const emitter = createWalletEmitter();
|
61
|
+
let account: Account | undefined = undefined;
|
62
|
+
let chain: Chain | undefined = undefined;
|
63
|
+
let provider: EIP1193Provider | undefined = undefined;
|
64
|
+
const getProvider = async () => {
|
65
|
+
if (!provider) {
|
66
|
+
provider =
|
67
|
+
typeof options.provider === "function"
|
68
|
+
? await options.provider()
|
69
|
+
: options.provider;
|
70
|
+
}
|
71
|
+
return provider;
|
72
|
+
};
|
73
|
+
|
74
|
+
const unsubscribeChain = emitter.subscribe("chainChanged", (newChain) => {
|
75
|
+
chain = newChain;
|
76
|
+
});
|
77
|
+
|
78
|
+
function reset() {
|
79
|
+
account = undefined;
|
80
|
+
chain = undefined;
|
81
|
+
}
|
82
|
+
|
83
|
+
let handleDisconnect = async () => {};
|
84
|
+
|
85
|
+
const unsubscribeDisconnect = emitter.subscribe("disconnect", () => {
|
86
|
+
reset();
|
87
|
+
unsubscribeChain();
|
88
|
+
unsubscribeDisconnect();
|
89
|
+
});
|
90
|
+
|
91
|
+
emitter.subscribe("accountChanged", (_account) => {
|
92
|
+
account = _account;
|
93
|
+
});
|
94
|
+
|
95
|
+
let handleSwitchChain: (c: Chain) => Promise<void> = async (c) => {
|
96
|
+
await provider?.request({
|
97
|
+
method: "wallet_switchEthereumChain",
|
98
|
+
params: [{ chainId: ox__Hex.fromNumber(c.id) }],
|
99
|
+
});
|
100
|
+
};
|
101
|
+
|
102
|
+
return {
|
103
|
+
id,
|
104
|
+
subscribe: emitter.subscribe,
|
105
|
+
getConfig: () => undefined,
|
106
|
+
getChain() {
|
107
|
+
if (!chain) {
|
108
|
+
return undefined;
|
109
|
+
}
|
110
|
+
|
111
|
+
chain = getCachedChainIfExists(chain.id) || chain;
|
112
|
+
return chain;
|
113
|
+
},
|
114
|
+
getAccount: () => account,
|
115
|
+
connect: async (connectOptions) => {
|
116
|
+
const [connectedAccount, connectedChain, doDisconnect, doSwitchChain] =
|
117
|
+
await connectEip1193Wallet({
|
118
|
+
id,
|
119
|
+
provider: await getProvider(),
|
120
|
+
client: connectOptions.client,
|
121
|
+
chain: connectOptions.chain,
|
122
|
+
emitter,
|
123
|
+
});
|
124
|
+
// set the states
|
125
|
+
account = connectedAccount;
|
126
|
+
chain = connectedChain;
|
127
|
+
handleDisconnect = doDisconnect;
|
128
|
+
handleSwitchChain = doSwitchChain;
|
129
|
+
emitter.emit("onConnect", connectOptions);
|
130
|
+
trackConnect({
|
131
|
+
client: connectOptions.client,
|
132
|
+
walletType: id,
|
133
|
+
walletAddress: account.address,
|
134
|
+
});
|
135
|
+
// return account
|
136
|
+
return account;
|
137
|
+
},
|
138
|
+
autoConnect: async (connectOptions) => {
|
139
|
+
const [connectedAccount, connectedChain, doDisconnect, doSwitchChain] =
|
140
|
+
await autoConnectEip1193Wallet({
|
141
|
+
id,
|
142
|
+
provider: await getProvider(),
|
143
|
+
emitter,
|
144
|
+
chain: connectOptions.chain,
|
145
|
+
client: connectOptions.client,
|
146
|
+
});
|
147
|
+
// set the states
|
148
|
+
account = connectedAccount;
|
149
|
+
chain = connectedChain;
|
150
|
+
handleDisconnect = doDisconnect;
|
151
|
+
handleSwitchChain = doSwitchChain;
|
152
|
+
emitter.emit("onConnect", connectOptions);
|
153
|
+
trackConnect({
|
154
|
+
client: connectOptions.client,
|
155
|
+
walletType: id,
|
156
|
+
walletAddress: account.address,
|
157
|
+
});
|
158
|
+
// return account
|
159
|
+
return account;
|
160
|
+
},
|
161
|
+
disconnect: async () => {
|
162
|
+
reset();
|
163
|
+
await handleDisconnect();
|
164
|
+
emitter.emit("disconnect", undefined);
|
165
|
+
},
|
166
|
+
switchChain: async (c) => {
|
167
|
+
await handleSwitchChain(c);
|
168
|
+
emitter.emit("chainChanged", c);
|
169
|
+
},
|
170
|
+
};
|
171
|
+
}
|
@@ -0,0 +1,187 @@
|
|
1
|
+
import * as ox__Hex from "ox/Hex";
|
2
|
+
import { describe, expect, test, vi } from "vitest";
|
3
|
+
import { TEST_WALLET_B } from "~test/addresses.js";
|
4
|
+
import { TEST_ACCOUNT_A } from "~test/test-wallets.js";
|
5
|
+
import { typedData } from "~test/typed-data.js";
|
6
|
+
import { ANVIL_CHAIN } from "../../../test/src/chains.js";
|
7
|
+
import { TEST_CLIENT } from "../../../test/src/test-clients.js";
|
8
|
+
import { prepareTransaction } from "../../transaction/prepare-transaction.js";
|
9
|
+
import type { Account, Wallet } from "../../wallets/interfaces/wallet.js";
|
10
|
+
import { createWalletEmitter } from "../../wallets/wallet-emitter.js";
|
11
|
+
import { toProvider } from "./to-eip1193.js";
|
12
|
+
|
13
|
+
describe("toProvider", () => {
|
14
|
+
const mockAccount: Account = TEST_ACCOUNT_A;
|
15
|
+
const emitter = createWalletEmitter();
|
16
|
+
|
17
|
+
const mockWallet: Wallet = {
|
18
|
+
id: "io.metamask",
|
19
|
+
subscribe: emitter.subscribe,
|
20
|
+
connect: vi.fn().mockResolvedValue(mockAccount),
|
21
|
+
autoConnect: vi.fn().mockResolvedValue(mockAccount),
|
22
|
+
disconnect: vi.fn(),
|
23
|
+
getAccount: () => mockAccount,
|
24
|
+
getChain: () => ANVIL_CHAIN,
|
25
|
+
getConfig: () => undefined,
|
26
|
+
switchChain: vi.fn(),
|
27
|
+
};
|
28
|
+
|
29
|
+
test("should create a provider with the correct interface", () => {
|
30
|
+
const provider = toProvider({
|
31
|
+
wallet: mockWallet,
|
32
|
+
chain: ANVIL_CHAIN,
|
33
|
+
client: TEST_CLIENT,
|
34
|
+
});
|
35
|
+
|
36
|
+
expect(provider.on).toBeDefined();
|
37
|
+
expect(provider.removeListener).toBeDefined();
|
38
|
+
expect(provider.request).toBeDefined();
|
39
|
+
});
|
40
|
+
|
41
|
+
test("should handle eth_requestAccounts", async () => {
|
42
|
+
const provider = toProvider({
|
43
|
+
wallet: mockWallet,
|
44
|
+
chain: ANVIL_CHAIN,
|
45
|
+
client: TEST_CLIENT,
|
46
|
+
});
|
47
|
+
|
48
|
+
const accounts = await provider.request({
|
49
|
+
method: "eth_requestAccounts",
|
50
|
+
params: [],
|
51
|
+
});
|
52
|
+
|
53
|
+
expect(accounts).toEqual([mockAccount.address]);
|
54
|
+
});
|
55
|
+
|
56
|
+
test("should handle eth_accounts", async () => {
|
57
|
+
const provider = toProvider({
|
58
|
+
wallet: mockWallet,
|
59
|
+
chain: ANVIL_CHAIN,
|
60
|
+
client: TEST_CLIENT,
|
61
|
+
});
|
62
|
+
|
63
|
+
const accounts = await provider.request({
|
64
|
+
method: "eth_accounts",
|
65
|
+
params: [],
|
66
|
+
});
|
67
|
+
|
68
|
+
expect(accounts).toEqual([mockAccount.address]);
|
69
|
+
});
|
70
|
+
|
71
|
+
test("should handle personal_sign", async () => {
|
72
|
+
const provider = toProvider({
|
73
|
+
wallet: mockWallet,
|
74
|
+
chain: ANVIL_CHAIN,
|
75
|
+
client: TEST_CLIENT,
|
76
|
+
});
|
77
|
+
|
78
|
+
const message = "0x48656c6c6f20776f726c64";
|
79
|
+
const result = await provider.request({
|
80
|
+
method: "personal_sign",
|
81
|
+
params: [message, mockAccount.address],
|
82
|
+
});
|
83
|
+
|
84
|
+
expect(result).toEqual(
|
85
|
+
"0x15a3fe3974ebe469b00e67ad67bb3860ad3fc3d739287cdbc4ba558ce7130bee205e5e38d6ef156f1ff6a4df17bfa72a1e61c429f92613f3efbc58394d00c9891b",
|
86
|
+
);
|
87
|
+
});
|
88
|
+
|
89
|
+
test("should handle eth_signTypedData_v4", async () => {
|
90
|
+
const provider = toProvider({
|
91
|
+
wallet: mockWallet,
|
92
|
+
chain: ANVIL_CHAIN,
|
93
|
+
client: TEST_CLIENT,
|
94
|
+
});
|
95
|
+
|
96
|
+
const result = await provider.request({
|
97
|
+
method: "eth_signTypedData_v4",
|
98
|
+
params: [mockAccount.address, JSON.stringify(typedData.basic)],
|
99
|
+
});
|
100
|
+
|
101
|
+
expect(result).toEqual(
|
102
|
+
"0x32f3d5975ba38d6c2fba9b95d5cbed1febaa68003d3d588d51f2de522ad54117760cfc249470a75232552e43991f53953a3d74edf6944553c6bef2469bb9e5921b",
|
103
|
+
);
|
104
|
+
});
|
105
|
+
|
106
|
+
test("should handle eth_sendTransaction", async () => {
|
107
|
+
const provider = toProvider({
|
108
|
+
wallet: mockWallet,
|
109
|
+
chain: ANVIL_CHAIN,
|
110
|
+
client: TEST_CLIENT,
|
111
|
+
});
|
112
|
+
|
113
|
+
const tx = prepareTransaction({
|
114
|
+
chain: ANVIL_CHAIN,
|
115
|
+
client: TEST_CLIENT,
|
116
|
+
value: 100n,
|
117
|
+
to: TEST_WALLET_B,
|
118
|
+
});
|
119
|
+
|
120
|
+
const result = await provider.request({
|
121
|
+
method: "eth_sendTransaction",
|
122
|
+
params: [tx],
|
123
|
+
});
|
124
|
+
|
125
|
+
expect(ox__Hex.validate(result)).toBe(true);
|
126
|
+
});
|
127
|
+
|
128
|
+
test("should handle eth_estimateGas", async () => {
|
129
|
+
const provider = toProvider({
|
130
|
+
wallet: mockWallet,
|
131
|
+
chain: ANVIL_CHAIN,
|
132
|
+
client: TEST_CLIENT,
|
133
|
+
});
|
134
|
+
|
135
|
+
const tx = prepareTransaction({
|
136
|
+
chain: ANVIL_CHAIN,
|
137
|
+
client: TEST_CLIENT,
|
138
|
+
value: 100n,
|
139
|
+
to: TEST_WALLET_B,
|
140
|
+
});
|
141
|
+
|
142
|
+
const result = await provider.request({
|
143
|
+
method: "eth_estimateGas",
|
144
|
+
params: [tx],
|
145
|
+
});
|
146
|
+
|
147
|
+
expect(result).toBeGreaterThan(0n);
|
148
|
+
});
|
149
|
+
|
150
|
+
test("should throw error when account is not connected", async () => {
|
151
|
+
const walletWithoutAccount = {
|
152
|
+
...mockWallet,
|
153
|
+
getAccount: () => undefined,
|
154
|
+
};
|
155
|
+
|
156
|
+
const provider = toProvider({
|
157
|
+
wallet: walletWithoutAccount,
|
158
|
+
chain: ANVIL_CHAIN,
|
159
|
+
client: TEST_CLIENT,
|
160
|
+
});
|
161
|
+
|
162
|
+
await expect(
|
163
|
+
provider.request({
|
164
|
+
method: "eth_accounts",
|
165
|
+
params: [],
|
166
|
+
}),
|
167
|
+
).rejects.toThrow("Account not connected");
|
168
|
+
});
|
169
|
+
|
170
|
+
test("should use custom connect override when provided", async () => {
|
171
|
+
const customConnect = vi.fn().mockResolvedValue(mockAccount);
|
172
|
+
|
173
|
+
const provider = toProvider({
|
174
|
+
wallet: mockWallet,
|
175
|
+
chain: ANVIL_CHAIN,
|
176
|
+
client: TEST_CLIENT,
|
177
|
+
connectOverride: customConnect,
|
178
|
+
});
|
179
|
+
|
180
|
+
await provider.request({
|
181
|
+
method: "eth_requestAccounts",
|
182
|
+
params: [],
|
183
|
+
});
|
184
|
+
|
185
|
+
expect(customConnect).toHaveBeenCalledWith(mockWallet);
|
186
|
+
});
|
187
|
+
});
|
@@ -0,0 +1,132 @@
|
|
1
|
+
import type { Account } from "viem/accounts";
|
2
|
+
|
3
|
+
import type { Chain } from "../../chains/types.js";
|
4
|
+
import type { ThirdwebClient } from "../../client/client.js";
|
5
|
+
import { getRpcClient } from "../../rpc/rpc.js";
|
6
|
+
import { estimateGas } from "../../transaction/actions/estimate-gas.js";
|
7
|
+
import { sendTransaction } from "../../transaction/actions/send-transaction.js";
|
8
|
+
import { prepareTransaction } from "../../transaction/prepare-transaction.js";
|
9
|
+
import type { Wallet } from "../../wallets/interfaces/wallet.js";
|
10
|
+
import type { EIP1193Provider } from "./types.js";
|
11
|
+
|
12
|
+
export type ToEip1193ProviderOptions = {
|
13
|
+
wallet: Wallet;
|
14
|
+
chain: Chain;
|
15
|
+
client: ThirdwebClient;
|
16
|
+
connectOverride?: (wallet: Wallet) => Promise<Account>;
|
17
|
+
};
|
18
|
+
|
19
|
+
/**
|
20
|
+
* Converts a Thirdweb wallet into an EIP-1193 compatible provider.
|
21
|
+
*
|
22
|
+
* This adapter allows you to use a Thirdweb wallet with any library or dApp that expects an EIP-1193 provider.
|
23
|
+
* The provider implements the standard EIP-1193 interface including request handling and event subscription.
|
24
|
+
*
|
25
|
+
* @param options - Configuration options for creating the provider
|
26
|
+
* @param options.wallet - The Thirdweb wallet to adapt into a provider
|
27
|
+
* @param options.chain - The blockchain chain to connect to
|
28
|
+
* @param options.client - The Thirdweb client instance
|
29
|
+
* @param options.connectOverride - Optional custom connect handler to override default connection behavior
|
30
|
+
* @returns An EIP-1193 compatible provider that wraps the Thirdweb wallet
|
31
|
+
*
|
32
|
+
* @example
|
33
|
+
* ```ts
|
34
|
+
* import { EIP1193 } from "thirdweb/wallets";
|
35
|
+
*
|
36
|
+
* // Create an EIP-1193 provider from a Thirdweb wallet
|
37
|
+
* const provider = EIP1193.toProvider({
|
38
|
+
* wallet,
|
39
|
+
* chain: ethereum,
|
40
|
+
* client: createThirdwebClient({ clientId: "..." })
|
41
|
+
* });
|
42
|
+
*
|
43
|
+
* // Use with any EIP-1193 compatible library
|
44
|
+
* const accounts = await provider.request({
|
45
|
+
* method: "eth_requestAccounts"
|
46
|
+
* });
|
47
|
+
*
|
48
|
+
* // Listen for events
|
49
|
+
* provider.on("accountsChanged", (accounts) => {
|
50
|
+
* console.log("Active accounts:", accounts);
|
51
|
+
* });
|
52
|
+
* ```
|
53
|
+
*/
|
54
|
+
export function toProvider(options: ToEip1193ProviderOptions): EIP1193Provider {
|
55
|
+
const { chain, client, wallet, connectOverride } = options;
|
56
|
+
const rpcClient = getRpcClient({ client, chain });
|
57
|
+
return {
|
58
|
+
on: wallet.subscribe,
|
59
|
+
removeListener: () => {
|
60
|
+
// should invoke the return fn from subscribe instead
|
61
|
+
},
|
62
|
+
request: async (request) => {
|
63
|
+
if (request.method === "eth_sendTransaction") {
|
64
|
+
const account = wallet.getAccount();
|
65
|
+
if (!account) {
|
66
|
+
throw new Error("Account not connected");
|
67
|
+
}
|
68
|
+
const result = await sendTransaction({
|
69
|
+
transaction: prepareTransaction({
|
70
|
+
...request.params[0],
|
71
|
+
chain,
|
72
|
+
client,
|
73
|
+
}),
|
74
|
+
account: account,
|
75
|
+
});
|
76
|
+
return result.transactionHash;
|
77
|
+
}
|
78
|
+
if (request.method === "eth_estimateGas") {
|
79
|
+
const account = wallet.getAccount();
|
80
|
+
if (!account) {
|
81
|
+
throw new Error("Account not connected");
|
82
|
+
}
|
83
|
+
return estimateGas({
|
84
|
+
transaction: prepareTransaction({
|
85
|
+
...request.params[0],
|
86
|
+
chain,
|
87
|
+
client,
|
88
|
+
}),
|
89
|
+
account,
|
90
|
+
});
|
91
|
+
}
|
92
|
+
if (request.method === "personal_sign") {
|
93
|
+
const account = wallet.getAccount();
|
94
|
+
if (!account) {
|
95
|
+
throw new Error("Account not connected");
|
96
|
+
}
|
97
|
+
return account.signMessage({
|
98
|
+
message: {
|
99
|
+
raw: request.params[0],
|
100
|
+
},
|
101
|
+
});
|
102
|
+
}
|
103
|
+
if (request.method === "eth_signTypedData_v4") {
|
104
|
+
const account = wallet.getAccount();
|
105
|
+
if (!account) {
|
106
|
+
throw new Error("Account not connected");
|
107
|
+
}
|
108
|
+
const data = JSON.parse(request.params[1]);
|
109
|
+
return account.signTypedData(data);
|
110
|
+
}
|
111
|
+
if (request.method === "eth_accounts") {
|
112
|
+
const account = wallet.getAccount();
|
113
|
+
if (!account) {
|
114
|
+
throw new Error("Account not connected");
|
115
|
+
}
|
116
|
+
return [account.address];
|
117
|
+
}
|
118
|
+
if (request.method === "eth_requestAccounts") {
|
119
|
+
const account = connectOverride
|
120
|
+
? await connectOverride(wallet)
|
121
|
+
: await wallet.connect({
|
122
|
+
client,
|
123
|
+
});
|
124
|
+
if (!account) {
|
125
|
+
throw new Error("Unable to connect wallet");
|
126
|
+
}
|
127
|
+
return [account.address];
|
128
|
+
}
|
129
|
+
return rpcClient(request);
|
130
|
+
},
|
131
|
+
};
|
132
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
// loose interface on purpose to adapt to any version of viem, ethers, ox, web3js, etc
|
2
|
+
export type EIP1193Provider = {
|
3
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
4
|
+
on(event: any, listener: (params: any) => any): void;
|
5
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
6
|
+
removeListener(event: any, listener: (params: any) => any): void;
|
7
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
8
|
+
request: (params: any) => Promise<any>;
|
9
|
+
};
|
@@ -134,6 +134,9 @@ export type {
|
|
134
134
|
WalletConnectSession,
|
135
135
|
} from "../wallets/wallet-connect/receiver/types.js";
|
136
136
|
|
137
|
+
// eip1193
|
138
|
+
export * as EIP1193 from "../adapters/eip1193/index.js";
|
139
|
+
|
137
140
|
// NOT SUPPORTED
|
138
141
|
|
139
142
|
export const injectedProvider = () => {
|
package/src/exports/wallets.ts
CHANGED
@@ -5,6 +5,7 @@ import { useConnectedWallets } from "./useConnectedWallets.js";
|
|
5
5
|
* Get the admin wallet for the active wallet
|
6
6
|
* Useful for smart wallets to get the underlying personal account
|
7
7
|
* @returns The admin wallet for the active wallet, or the active wallet if it doesn't have an admin account
|
8
|
+
* @walletConnection
|
8
9
|
*/
|
9
10
|
export function useAdminWallet() {
|
10
11
|
const activeWallet = useActiveWallet();
|
@@ -9,7 +9,6 @@ import type {
|
|
9
9
|
InjectedSupportedWalletIds,
|
10
10
|
WCSupportedWalletIds,
|
11
11
|
} from "../../../../../wallets/__generated__/wallet-ids.js";
|
12
|
-
import { COINBASE } from "../../../../../wallets/constants.js";
|
13
12
|
import { isEcosystemWallet } from "../../../../../wallets/ecosystem/is-ecosystem-wallet.js";
|
14
13
|
import { getInstalledWalletProviders } from "../../../../../wallets/injected/mipdStore.js";
|
15
14
|
import type { Wallet } from "../../../../../wallets/interfaces/wallet.js";
|
@@ -197,27 +196,6 @@ export function AnyWalletConnectUI(props: {
|
|
197
196
|
);
|
198
197
|
}
|
199
198
|
|
200
|
-
// coinbase wallet sdk
|
201
|
-
if (props.wallet.id === COINBASE) {
|
202
|
-
return (
|
203
|
-
<Suspense fallback={<LoadingScreen />}>
|
204
|
-
<CoinbaseSDKWalletConnectUI
|
205
|
-
locale={locale}
|
206
|
-
onGetStarted={() => {
|
207
|
-
setScreen("get-started");
|
208
|
-
}}
|
209
|
-
onBack={props.onBack}
|
210
|
-
done={props.done}
|
211
|
-
wallet={props.wallet as Wallet<typeof COINBASE>}
|
212
|
-
walletInfo={walletInfo.data}
|
213
|
-
chain={props.chain}
|
214
|
-
client={props.client}
|
215
|
-
size={props.size}
|
216
|
-
/>
|
217
|
-
</Suspense>
|
218
|
-
);
|
219
|
-
}
|
220
|
-
|
221
199
|
// wallet connect
|
222
200
|
if (walletInfo.data.mobile.native || walletInfo.data.mobile.universal) {
|
223
201
|
return (
|
@@ -294,6 +272,27 @@ export function AnyWalletConnectUI(props: {
|
|
294
272
|
);
|
295
273
|
}
|
296
274
|
|
275
|
+
// any other known wallet
|
276
|
+
if (props.wallet.id) {
|
277
|
+
return (
|
278
|
+
<Suspense fallback={<LoadingScreen />}>
|
279
|
+
<CoinbaseSDKWalletConnectUI
|
280
|
+
locale={locale}
|
281
|
+
onGetStarted={() => {
|
282
|
+
setScreen("get-started");
|
283
|
+
}}
|
284
|
+
onBack={props.onBack}
|
285
|
+
done={props.done}
|
286
|
+
wallet={props.wallet}
|
287
|
+
walletInfo={walletInfo.data}
|
288
|
+
chain={props.chain}
|
289
|
+
client={props.client}
|
290
|
+
size={props.size}
|
291
|
+
/>
|
292
|
+
</Suspense>
|
293
|
+
);
|
294
|
+
}
|
295
|
+
|
297
296
|
// if can't connect in any way - show get started screen
|
298
297
|
return (
|
299
298
|
<GetStartedScreen
|
@@ -1,7 +1,6 @@
|
|
1
1
|
import { useCallback, useEffect, useRef, useState } from "react";
|
2
2
|
import type { Chain } from "../../../../chains/types.js";
|
3
3
|
import type { ThirdwebClient } from "../../../../client/client.js";
|
4
|
-
import type { COINBASE } from "../../../../wallets/constants.js";
|
5
4
|
import type { Wallet } from "../../../../wallets/interfaces/wallet.js";
|
6
5
|
import type { WalletInfo } from "../../../../wallets/wallet-info.js";
|
7
6
|
import type { InjectedWalletLocale } from "../injected/locale/types.js";
|
@@ -10,12 +9,12 @@ import { ConnectingScreen } from "./ConnectingScreen.js";
|
|
10
9
|
/**
|
11
10
|
* @internal
|
12
11
|
*/
|
13
|
-
function
|
12
|
+
function ExternalWalletConnectUI(props: {
|
14
13
|
onBack?: () => void;
|
15
14
|
onGetStarted: () => void;
|
16
15
|
done: () => void;
|
17
16
|
locale: InjectedWalletLocale;
|
18
|
-
wallet: Wallet
|
17
|
+
wallet: Wallet;
|
19
18
|
walletInfo: WalletInfo;
|
20
19
|
client: ThirdwebClient;
|
21
20
|
chain: Chain | undefined;
|
@@ -70,4 +69,4 @@ function CoinbaseSDKWalletConnectUI(props: {
|
|
70
69
|
);
|
71
70
|
}
|
72
71
|
|
73
|
-
export default
|
72
|
+
export default ExternalWalletConnectUI;
|
@@ -1,6 +1,8 @@
|
|
1
1
|
import type { TransactionSerializable } from "viem";
|
2
2
|
import { getGasOverridesForTransaction } from "../../gas/fee-data.js";
|
3
3
|
import { getRpcClient } from "../../rpc/rpc.js";
|
4
|
+
import { getAddress } from "../../utils/address.js";
|
5
|
+
import { isZkSyncChain } from "../../utils/any-evm/zksync/isZkSyncChain.js";
|
4
6
|
import { resolvePromisedValue } from "../../utils/promise/resolve-promised-value.js";
|
5
7
|
import type { PreparedTransaction } from "../prepare-transaction.js";
|
6
8
|
import { encode } from "./encode.js";
|
@@ -45,6 +47,25 @@ export type ToSerializableTransactionOptions = {
|
|
45
47
|
export async function toSerializableTransaction(
|
46
48
|
options: ToSerializableTransactionOptions,
|
47
49
|
) {
|
50
|
+
// zk chains require a different rpc method for gas estimation and gas fees
|
51
|
+
const isZkSync = await isZkSyncChain(options.transaction.chain);
|
52
|
+
if (isZkSync) {
|
53
|
+
const { getZkGasFees } = await import(
|
54
|
+
"./zksync/send-eip712-transaction.js"
|
55
|
+
);
|
56
|
+
const { gas, maxFeePerGas, maxPriorityFeePerGas } = await getZkGasFees({
|
57
|
+
transaction: options.transaction,
|
58
|
+
from: options.from ? getAddress(options.from) : undefined,
|
59
|
+
});
|
60
|
+
// passing these values here will avoid re-fetching them below
|
61
|
+
options.transaction = {
|
62
|
+
...options.transaction,
|
63
|
+
gas,
|
64
|
+
maxFeePerGas,
|
65
|
+
maxPriorityFeePerGas,
|
66
|
+
};
|
67
|
+
}
|
68
|
+
|
48
69
|
const rpcRequest = getRpcClient(options.transaction);
|
49
70
|
const chainId = options.transaction.chain.id;
|
50
71
|
const from = options.from;
|