fix wallet provider

This commit is contained in:
thesn10
2026-05-21 22:13:16 +02:00
parent 79a990d4f1
commit 6e5251ff4e
3 changed files with 5331 additions and 60 deletions

View File

@@ -10,9 +10,9 @@
"@coral-xyz/anchor": "^0.32.1",
"@descro/sdk": "workspace:*",
"@solana/wallet-adapter-base": "^0.9.27",
"@solana/wallet-adapter-phantom": "^0.9.29",
"@solana/wallet-adapter-react": "^0.15.39",
"@solana/wallet-adapter-react-ui": "^0.9.39",
"@solana/wallet-adapter-wallets": "^0.19.38",
"@solana/web3.js": "^1.98.4",
"@tamagui/config": "^2.0.0-rc.42",
"@tamagui/next-theme": "^2.0.0-rc.42",

View File

@@ -1,43 +1,37 @@
'use client'
import React, { useMemo, useState } from 'react'
import React, { useCallback, useMemo, useState } from 'react'
import { ConnectionProvider, WalletProvider } from '@solana/wallet-adapter-react'
import { WalletAdapterNetwork, type WalletError } from '@solana/wallet-adapter-base'
import { WalletModalProvider } from '@solana/wallet-adapter-react-ui'
import { PhantomWalletAdapter } from '@solana/wallet-adapter-phantom'
import { clusterApiUrl } from '@solana/web3.js'
export type Network = 'devnet' | 'localnet'
interface NetworkContextValue {
network: Network
setNetwork: (n: Network) => void
endpoint: string
network: WalletAdapterNetwork
setNetwork: (n: WalletAdapterNetwork) => void
}
export const NetworkContext = React.createContext<NetworkContextValue>({
network: 'devnet',
network: WalletAdapterNetwork.Devnet,
setNetwork: () => undefined,
endpoint: 'https://api.devnet.solana.com',
})
export function getEndpoint(network: Network): string {
if (network === 'localnet') return 'http://localhost:8899'
return 'https://api.devnet.solana.com'
}
export function WalletProviders({ children }: { children: React.ReactNode }) {
const [network, setNetwork] = useState<Network>('devnet')
const endpoint = getEndpoint(network)
const [network, setNetwork] = useState<WalletAdapterNetwork>(WalletAdapterNetwork.Devnet)
const wallets = useMemo(
() => [new PhantomWalletAdapter()],
// eslint-disable-next-line react-hooks/exhaustive-deps
[network]
)
// You can also provide a custom RPC endpoint
const endpoint = useMemo(() => clusterApiUrl(network), [network]);
const onError = useCallback((error: WalletError) => {
console.warn('[wallet]', error.name, error.message, error.error)
}, [])
return (
<NetworkContext.Provider value={{ network, setNetwork, endpoint }}>
<NetworkContext.Provider value={{ network, setNetwork }}>
<ConnectionProvider endpoint={endpoint}>
<WalletProvider wallets={wallets} autoConnect>
<WalletProvider wallets={[]} autoConnect onError={onError}>
<WalletModalProvider>{children}</WalletModalProvider>
</WalletProvider>
</ConnectionProvider>