Миграция на RainbowKit и Wagmi v2
Зависимости wagmi и viem достигли версии 2.x.x с критическими изменениями.
Следуйте инструкциям ниже для выполнения миграции.
Обновите RainbowKit, wagmi, и viem до последних версий
Установите зависимость @tanstack/react-query
С Wagmi v2, TanStack Query теперь является обязательной зависимостью.
Установите её с помощью следующей команды:
npm i @tanstack/react-query
Обновите конфигурации RainbowKit и Wagmi
import '@rainbow-me/rainbowkit/styles.css'
+ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
- import { createPublicClient, http } from 'viem'
- import { WagmiConfig } from 'wagmi'
+ import { WagmiProvider, http } from 'wagmi'
- import { configureChains, createConfig } from 'wagmi'
import { mainnet } from 'wagmi/chains'
import { RainbowKitProvider } from '@rainbow-me/rainbowkit'
- import { getDefaultWallets, connectorsForWallets } from '@rainbow-me/rainbowkit'
+ import { getDefaultConfig } from '@rainbow-me/rainbowkit'
/* getDefaultWallets is now optional */
- const { wallets } = getDefaultWallets({
- appName: 'RainbowKit demo',
- projectId: 'YOUR_PROJECT_ID',
- chains,
- })
/* connectorsForWallets is now optional */
- const connectors = connectorsForWallets([...wallets])
- const { chains, publicClient } = configureChains(
- [mainnet, sepolia],
- [publicProvider(), publicProvider()],
- )
- const config = createConfig({
- autoConnect: true,
- publicClient,
- })
/* New API that includes Wagmi's createConfig and replaces getDefaultWallets and connectorsForWallets */
+ const config = getDefaultConfig({
+ appName: 'RainbowKit demo',
+ projectId: 'YOUR_PROJECT_ID',
+ chains: [mainnet],
+ transports: {
+ [mainnet.id]: http(),
+ },
+ })
+ const queryClient = new QueryClient()
const App = () => {
return (
- <WagmiConfig config={config}>
+ <WagmiProvider config={config}>
+ <QueryClientProvider client={queryClient}>
- <RainbowKitProvider chains={chains}>
+ <RainbowKitProvider>
{/* Your App */}
</RainbowKitProvider>
+ </QueryClientProvider>
- </WagmiConfig>
+ </WagmiProvider>
)
}
Проверьте наличие критических изменений в wagmi и viem
Если вы используете хуки wagmi и действия viem в своём dApp, вам необходимо следовать руководствам по миграции для версии v2:
Улучшенное поведение для кошельков EIP-6963
Кошельки, поддерживающие новый стандарт подключения EIP-6963 (включая Rainbow, MetaMask и другие), теперь будут автоматически отображаться в разделе Установленные в процессе подключения кошелька. Это обеспечивает пользователям возможность всегда находить любимые кошельки и подключаться к dApps без конфликтов или кнопок возврата.
Разработчики по-прежнему имеют полный контроль над списком Пользовательских кошельков для подчеркивания предпочтительных кошельков для конечных пользователей. Рекомендуется продолжать включать injectedWallet и walletConnectWallet в ваш список для поддержки всех платформ.
Конфигурация Wagmi с getDefaultConfig
Этот новый API упрощает процесс настройки конфигурации и заменяет необходимость в прямом использовании createConfig Wagmi. Конфигурация цепочки упрощена, включая предполагаемых публичных провайдеров для transports.
Список кошельков по умолчанию будет автоматически включен, что исключает необходимость использования getDefaultWallets и connectorsForWallets.
Вы можете создать Пользовательский список кошельков, передав импортированные или Пользовательские коннекторы кошельков в wallets. Больше не требуется создавать экземпляры кошельков и передавать projectId и chains.
const config = getDefaultConfig({
appName: 'RainbowKit demo',
projectId: 'YOUR_PROJECT_ID',
chains: [mainnet],
wallets: [rainbowWallet], /* optional custom wallet list */
/* Wagmi createConfig options including `transports` are also accepted */
})
RainbowKitProvider
Больше не нужно передавать chains в <RainbowKitProvider>.
- <RainbowKitProvider chains={chains}>
+ <RainbowKitProvider>
Пользовательские сети
Тип Chain изменился в соответствии с Wagmi v2 и продолжает поддерживать метаданные RainbowKit iconUrl и iconBackground.
+ import { Chain } from '@rainbow-me/rainbowkit'
const avalanche = {
id: 43_114,
name: 'Avalanche',
iconUrl: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5805.png',
iconBackground: '#fff',
nativeCurrency: { name: 'Avalanche', symbol: 'AVAX', decimals: 18 },
rpcUrls: {
default: { http: ['https://api.avax.network/ext/bc/C/rpc'] },
},
blockExplorers: {
default: { name: 'SnowTrace', url: 'https://snowtrace.io' },
},
contracts: {
multicall3: {
address: '0xca11bde05977b3631167028862be2a173976ca11',
blockCreated: 11_907_934,
},
},
} as const satisfies Chain
Пример с getDefaultConfig:
const config = getDefaultConfig({
+ chains: [
+ avalanche, /* custom chain */
+ {
+ ...mainnet,
+ iconBackground: '#000',
+ iconUrl: 'https://example.com/icons/ethereum.png',
+ }, /* metadata overrides */
+ ],
});
Пример с createConfig:
+ import { Chain } from '@rainbow-me/rainbowkit'
+ const chains: readonly [Chain, ...Chain[]] = [
+ {
+ ...mainnet,
+ iconBackground: '#000',
+ iconUrl: 'https://example.com/icons/ethereum.png',
+ },
+ ];
const config = createConfig({
chains,
transports: {
[mainnet.id]: http(),
},
})
Пользовательские кошельки
Коннекторы кошелька RainbowKit претерпели значительные изменения для поддержки Wagmi v2. Ознакомьтесь с обновленной документацией и примером коннектора для обновления любых Пользовательских Коннекторов Кошельков в вашем dApp.
Коннекторы кошельков теперь также поддерживают стандарт EIP-6963 с параметром rdns. Убедитесь, что это поле заполнено, чтобы избежать дублирования ссылок на кошельки, поддерживающие EIP-6963 в вашем списке кошельков.
Сообщайте о любых проблемах или отзывах для RainbowKit v2 на GitHub здесь.