Skip to content

Commit f9f8f6a

Browse files
chore: multichain actions
1 parent f35ae73 commit f9f8f6a

21 files changed

+1585
-644
lines changed

dapps/W3MWagmi/android/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ android {
106106
applicationId "com.walletconnect.web3modal.rnsample"
107107
minSdkVersion rootProject.ext.minSdkVersion
108108
targetSdkVersion rootProject.ext.targetSdkVersion
109-
versionCode 119
109+
versionCode 120
110110
versionName "1.1"
111111
resValue "string", "build_config_package", "com.w3mwagmi"
112112
}

dapps/W3MWagmi/package.json

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,26 @@
1616
"copy:production": "./scripts/copy-variant-files.sh 'production'"
1717
},
1818
"dependencies": {
19+
"@bitcoinerlab/secp256k1": "1.2.0",
1920
"@coinbase/wallet-mobile-sdk": "1.1.2",
2021
"@react-native-async-storage/async-storage": "2.1.2",
2122
"@react-native-clipboard/clipboard": "1.16.2",
2223
"@react-native-community/netinfo": "11.4.1",
2324
"@react-navigation/bottom-tabs": "6.6.1",
2425
"@react-navigation/native": "6.1.18",
2526
"@react-navigation/native-stack": "6.10.1",
26-
"@reown/appkit-auth-wagmi-react-native": "0.0.0-feat-onramp-20250401222444",
27-
"@reown/appkit-coinbase-wagmi-react-native": "0.0.0-feat-onramp-20250401222444",
28-
"@reown/appkit-wagmi-react-native": "0.0.0-feat-onramp-20250401222444",
27+
"@reown/appkit-auth-wagmi-react-native": "0.0.0-feat-multichain-20250514142632",
28+
"@reown/appkit-bitcoin-react-native": "0.0.0-feat-multichain-20250514142632",
29+
"@reown/appkit-coinbase-wagmi-react-native": "0.0.0-feat-multichain-20250514142632",
30+
"@reown/appkit-ethers-react-native": "0.0.0-feat-multichain-20250514142632",
31+
"@reown/appkit-react-native": "0.0.0-feat-multichain-20250514142632",
32+
"@reown/appkit-solana-react-native": "0.0.0-feat-multichain-20250514142632",
33+
"@reown/appkit-wagmi-react-native": "0.0.0-feat-multichain-20250514142632",
2934
"@sentry/react-native": "^6.9.1",
3035
"@tanstack/react-query": "5.62.2",
3136
"@walletconnect/react-native-compat": "2.19.1",
37+
"bitcoinjs-lib": "7.0.0-rc.0",
38+
"ethers": "6.13.5",
3239
"expo": "52.0.31",
3340
"react": "18.3.1",
3441
"react-native": "0.77.0",
@@ -44,8 +51,8 @@
4451
"react-native-svg": "15.11.2",
4552
"react-native-toast-message": "2.2.1",
4653
"react-native-webview": "13.13.4",
47-
"viem": "2.23.10",
48-
"wagmi": "2.14.13"
54+
"viem": "2.29.2",
55+
"wagmi": "2.15.2"
4956
},
5057
"devDependencies": {
5158
"@babel/core": "^7.25.2",
@@ -84,6 +91,7 @@
8491
"ws": "^8.18.1",
8592
"braces": "3.0.3",
8693
"undici": "6.21.2",
87-
"serve-static": "1.16.2"
94+
"serve-static": "1.16.2",
95+
"valtio": "1.11.2"
8896
}
8997
}

dapps/W3MWagmi/src/App.tsx

Lines changed: 71 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,33 @@
1+
12
import '@walletconnect/react-native-compat';
3+
24
import React, {useEffect} from 'react';
35
import {Linking} from 'react-native';
46
import BootSplash from 'react-native-bootsplash';
5-
import {
6-
createAppKit,
7-
defaultWagmiConfig,
8-
AppKit,
9-
} from '@reown/appkit-wagmi-react-native';
7+
import {createAppKit, AppKit, solana, bitcoin, AppKitProvider} from '@reown/appkit-react-native';
8+
// import {WagmiAdapter} from '@reown/appkit-wagmi-react-native';
9+
import {SolanaAdapter} from '@reown/appkit-solana-react-native';
10+
import {BitcoinAdapter} from '@reown/appkit-bitcoin-react-native';
11+
import {EthersAdapter} from '@reown/appkit-ethers-react-native';
1012
import {GestureHandlerRootView} from 'react-native-gesture-handler';
1113

1214
// import {coinbaseConnector} from '@reown/appkit-coinbase-wagmi-react-native';
13-
import {authConnector} from '@reown/appkit-auth-wagmi-react-native';
14-
import {WagmiProvider} from 'wagmi';
15-
import {handleResponse} from '@coinbase/wallet-mobile-sdk';
15+
// import {authConnector} from '@reown/appkit-auth-wagmi-react-native';
16+
// import {handleResponse} from '@coinbase/wallet-mobile-sdk';
17+
// import {WagmiProvider} from 'wagmi';
1618
import Toast from 'react-native-toast-message';
1719
import Config from 'react-native-config';
1820
import Clipboard from '@react-native-clipboard/clipboard';
1921
import * as Sentry from '@sentry/react-native';
2022
import {NavigationContainer} from '@react-navigation/native';
2123
import {QueryClient, QueryClientProvider} from '@tanstack/react-query';
2224

23-
import {getCustomWallets, getMetadata} from '@/utils/misc';
25+
import {getMetadata} from '@/utils/misc';
2426
import {RootStackNavigator} from '@/navigators/RootStackNavigator';
25-
import {siweConfig} from '@/utils/SiweUtils';
27+
// import {siweConfig} from '@/utils/SiweUtils';
2628
import {chains} from '@/utils/WagmiUtils';
2729
import SettingsStore from '@/stores/SettingsStore';
30+
// import { Chain } from 'viem';
2831

2932
Sentry.init({
3033
enabled: !__DEV__ && !!Config.ENV_SENTRY_DSN,
@@ -56,41 +59,64 @@ const clipboardClient = {
5659
// redirect: metadata?.redirect?.universal || '',
5760
// });
5861

59-
const _authConnector = authConnector({
62+
// const _authConnector = authConnector({
63+
// projectId,
64+
// metadata,
65+
// });
66+
67+
// const wagmiConfig = defaultWagmiConfig({
68+
// chains,
69+
// projectId,
70+
// metadata,
71+
// // extraConnectors: [
72+
// // // _coinbaseConnector,
73+
// // _authConnector],
74+
// });
75+
76+
const ethersAdapter = new EthersAdapter({
6077
projectId,
61-
metadata,
6278
});
6379

64-
const wagmiConfig = defaultWagmiConfig({
65-
chains,
80+
// const wagmiAdapter = new WagmiAdapter({
81+
// projectId,
82+
// networks: chains as [Chain, ...Chain[]],
83+
// });
84+
85+
const solanaAdapter = new SolanaAdapter({
86+
projectId,
87+
});
88+
89+
const bitcoinAdapter = new BitcoinAdapter({
6690
projectId,
67-
metadata,
68-
extraConnectors: [
69-
// _coinbaseConnector,
70-
_authConnector],
7191
});
7292

73-
const customWallets = getCustomWallets();
93+
const adapters = [ethersAdapter, bitcoinAdapter, solanaAdapter];
94+
95+
const networks = [...chains, solana, bitcoin];
96+
97+
// const customWallets = getCustomWallets();
7498

7599
// 3. Create modal
76-
createAppKit({
100+
const appKit = createAppKit({
77101
projectId,
78-
wagmiConfig,
102+
// wagmiConfig,
103+
adapters,
79104
metadata,
80-
siweConfig,
105+
networks,
106+
// siweConfig,
81107
clipboardClient,
82-
customWallets,
83-
connectorImages: {
84-
coinbaseWallet:
85-
'https://play-lh.googleusercontent.com/wrgUujbq5kbn4Wd4tzyhQnxOXkjiGqq39N4zBvCHmxpIiKcZw_Pb065KTWWlnoejsg',
86-
appKitAuth: 'https://avatars.githubusercontent.com/u/179229932',
87-
},
88-
features: {
89-
email: true,
90-
socials: ['x', 'discord', 'apple'],
91-
emailShowWallets: true,
92-
swaps: true,
93-
},
108+
// customWallets,
109+
// connectorImages: {
110+
// coinbaseWallet:
111+
// 'https://play-lh.googleusercontent.com/wrgUujbq5kbn4Wd4tzyhQnxOXkjiGqq39N4zBvCHmxpIiKcZw_Pb065KTWWlnoejsg',
112+
// appKitAuth: 'https://avatars.githubusercontent.com/u/179229932',
113+
// },
114+
// features: {
115+
// email: true,
116+
// socials: ['x', 'discord', 'apple'],
117+
// emailShowWallets: true,
118+
// swaps: true,
119+
// },
94120
});
95121

96122
const queryClient = new QueryClient();
@@ -99,7 +125,8 @@ function App(): JSX.Element {
99125
// 4. Handle deeplinks for Coinbase SDK
100126
useEffect(() => {
101127
const sub = Linking.addEventListener('url', ({url}) => {
102-
const handledBySdk = handleResponse(new URL(url));
128+
// const handledBySdk = handleResponse(new URL(url));
129+
const handledBySdk = false;
103130
if (!handledBySdk) {
104131
// Handle other deeplinks
105132
if (url.includes('wc_ev')) {
@@ -129,13 +156,15 @@ function App(): JSX.Element {
129156
return (
130157
<GestureHandlerRootView style={{flex: 1}}>
131158
<NavigationContainer>
132-
<WagmiProvider config={wagmiConfig}>
133-
<QueryClientProvider client={queryClient}>
134-
<RootStackNavigator />
135-
<Toast />
136-
<AppKit />
137-
</QueryClientProvider>
138-
</WagmiProvider>
159+
{/* <WagmiProvider config={wagmiAdapter.wagmiConfig}> */}
160+
<AppKitProvider instance={appKit}>
161+
<QueryClientProvider client={queryClient}>
162+
<RootStackNavigator />
163+
<Toast />
164+
<AppKit />
165+
</QueryClientProvider>
166+
</AppKitProvider>
167+
{/* </WagmiProvider> */}
139168
</NavigationContainer>
140169
</GestureHandlerRootView>
141170
);

dapps/W3MWagmi/src/hooks/useSocketStatus.ts

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import SettingsStore from '@/stores/SettingsStore';
22
import {useEffect, useState} from 'react';
3-
import Toast from 'react-native-toast-message';
43
import {useSnapshot} from 'valtio';
54
import {useAccount} from 'wagmi';
65
import {RELAYER_EVENTS} from '@walletconnect/core';
6+
import { ToastUtils } from '@/utils/ToastUtils';
77

88
export function useSocketStatus() {
99
const {connector} = useAccount();
@@ -24,36 +24,24 @@ export function useSocketStatus() {
2424
useEffect(() => {
2525
if (provider?.signer?.client?.core) {
2626
provider?.signer?.client?.core.relayer.on(RELAYER_EVENTS.connect, () => {
27-
Toast.show({
28-
type: 'success',
29-
text1: 'Network connection is restored!',
30-
});
27+
ToastUtils.showSuccessToast('Network connection is restored!');
3128
SettingsStore.setSocketStatus('connected');
3229
});
3330
provider.signer.client.core.relayer.on(RELAYER_EVENTS.disconnect, () => {
34-
Toast.show({
35-
type: 'error',
36-
text1: 'Network connection lost.',
37-
});
31+
ToastUtils.showErrorToast('Network connection lost.', 'Please check your internet connection.');
3832
SettingsStore.setSocketStatus('disconnected');
3933
});
4034
provider.signer.client.core.relayer.on(
4135
RELAYER_EVENTS.connection_stalled,
4236
() => {
43-
Toast.show({
44-
type: 'error',
45-
text1: 'Network connection stalled.',
46-
});
37+
ToastUtils.showErrorToast('Network connection stalled.', 'Please check your internet connection.');
4738
SettingsStore.setSocketStatus('stalled');
4839
},
4940
);
5041
provider.signer.client.core.relayer.on(
5142
RELAYER_EVENTS.transport_closed,
5243
() => {
53-
Toast.show({
54-
type: 'info',
55-
text1: 'Network connection closed.',
56-
});
44+
ToastUtils.showInfoToast('Network connection closed.');
5745
SettingsStore.setSocketStatus('closed');
5846
},
5947
);

dapps/W3MWagmi/src/navigators/RootStackNavigator.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@ import {RootStackParamList} from '@/utils/TypesUtil';
33
import {createNativeStackNavigator} from '@react-navigation/native-stack';
44
import {HomeTabNavigator} from '@/navigators/HomeTabNavigagor';
55
import {useTheme} from '@/hooks/useTheme';
6-
import {useSocketStatus} from '@/hooks/useSocketStatus';
6+
// import {useSocketStatus} from '@/hooks/useSocketStatus';
77
import {LogList} from '@/screens/LogList';
8-
import {useLogs} from '@/hooks/useLogs';
8+
// import {useLogs} from '@/hooks/useLogs';
99

1010
const StackNavigator = createNativeStackNavigator<RootStackParamList>();
1111

1212
export function RootStackNavigator() {
1313
const Theme = useTheme();
14-
useSocketStatus();
15-
useLogs();
14+
// useSocketStatus();
15+
// useLogs();
1616

1717
return (
1818
<StackNavigator.Navigator
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
2+
import React from 'react';
3+
import { StyleSheet } from 'react-native';
4+
import { FlexView } from '@reown/appkit-ui-react-native';
5+
import { useAccount } from '@reown/appkit-react-native';
6+
7+
import { SolanaActionsView } from './SolanaActionsView';
8+
import { BitcoinActionsView } from './BitcoinActionsView';
9+
// import { WagmiActionsView } from './WagmiActionsView';
10+
import { EthersActionsView } from './EthersActionsView';
11+
12+
export function ActionsView() {
13+
const { chainId } = useAccount();
14+
const isConnected = !!chainId;
15+
16+
return isConnected ? (
17+
<FlexView style={styles.container}>
18+
{chainId?.startsWith('eip155') ? (
19+
<EthersActionsView />
20+
) : chainId?.startsWith('solana') ? (
21+
<SolanaActionsView />
22+
) : chainId?.startsWith('bip122') ? (
23+
<BitcoinActionsView />
24+
) : null}
25+
</FlexView>
26+
) : null;
27+
}
28+
29+
const styles = StyleSheet.create({
30+
container: {
31+
marginVertical: 16,
32+
gap: 8,
33+
},
34+
});

0 commit comments

Comments
 (0)