Rainbow logo
RainbowKit
2.2.8

遷移指南

遷移指南

遷移 RainbowKit

wagmiviem 的對等相依版本已達 2.x.x,並存在重大變更。

請依照以下步驟進行遷移。

1. 將 RainbowKit、wagmiviem 升級至最新版本

npm i @rainbow-me/rainbowkit@2 wagmi@2 [email protected]

2. 安裝 @tanstack/react-query 對等相依

使用 Wagmi v2,TanStack Query 現在是必需的對等相依。

使用以下命令安裝它:

npm i @tanstack/react-query

3. 升級您的 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> ) }

4. 檢查 wagmiviem 的重大變更

如果您在 dApp 中使用 wagmi 鉤子和 viem 動作,您需要遵循 v2 的遷移指南:

1. 改進對 EIP-6963 錢包的行為

支援新 EIP-6963 連線標準的錢包(包括 RainbowMetaMask 等)現在將會自動顯示在連接錢包體驗的 已安裝 部分中。 這確保用戶能夠始終找到他們喜愛的錢包並連接到 dApps,沒有衝突或後備按鈕。

開發者仍擁有完全控制自定義錢包清單的權限,以強調優先的錢包給終端用戶。 鼓勵您繼續在清單中包括 injectedWalletwalletConnectWallet 來支援所有平臺。

2. 使用 getDefaultConfig 配置 Wagmi

此新 API 簡化了配置體驗,取代了直接使用 Wagmi 的 createConfig 的需求。 鏈配置簡化,包括對 transports 推斷的公共提供者。

預設錢包清單將自動包括,不需要再使用 getDefaultWalletsconnectorsForWallets

您可以透過將導入的或自定義的錢包連接器傳遞給 wallets 來建立自定義錢包清單。 不再需要例化錢包連接器並傳遞 projectIdchains

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 */
})

3. RainbowKitProvider

您不再需要將 chains 傳遞給 <RainbowKitProvider>

- <RainbowKitProvider chains={chains}> + <RainbowKitProvider>

4. 自定義鏈

Chain 類型根據 Wagmi v2 進行了更改,並繼續支援 RainbowKit 的 iconUrliconBackground 中元數據。

+ 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 overides */ + ], });

使用 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(), }, })

5. 自定義錢包

RainbowKit 錢包連接器已經過重大變更以支援 Wagmi v2。 參考更新的文件範例連接器以升級您 dApp 中的任何自定義錢包連接器。

錢包連接器現在也支援 EIP-6963 標準,並帶有 rdns 屬性。 請確保填充此屬性以防止錢包清單中出現對 EIP-6963 支援錢包的重複引用。

wagmi 同步依賴已更新到 1.x.x

請依照以下步驟進行遷移。

1. 升級 RainbowKit 和 wagmi 到最新版本

npm i @rainbow-me/rainbowkit@^1 wagmi@^1

2. 安裝 viem 同步依賴

wagmi v1 需要 viem 同步依賴。 使用以下命令安裝它:

npm i viem

3. 確保綁定器和 polyfill 的相容性

參考我們的Next.js Webpack 配置Create React App polyfills範例,為您的項目提供配置指引。

額外的框架指南(例如 Vite 和 Remix)可在此處找到。

4. 檢查 wagmi 中是否有重大變動

如果您在應用程式中使用 wagmi 鉤子,您將需要遵循 wagmi 的遷移指南到 v1。

您可以在這裡查看他們的遷移指南

wagmi 同步依賴已更新至 0.12.x

RainbowKit 已採用了 wagmi 中的 WalletConnectLegacyConnector 連接器,繼續支持 WalletConnect v1。 支持 WalletConnect v2 和 WalletConnectConnector 將很快作為補丁版本提供,無需重大變動。

錢包將在未來版本中自動轉移。

每個 dApp 現在必須提供 WalletConnect Cloud projectId 以啟用 WalletConnect v2。 這必須在 2023 年 6 月 28 日之前完成,因為 WalletConnect v1 橋接伺服器將在該日期關閉。 如果未指定 projectId,RainbowKit 將靜默偏好使用 v1 進行所有錢包。

請依照以下步驟進行遷移。

npm i @rainbow-me/rainbowkit@^0.12.0 wagmi@^0.12.0

現在所有依賴WalletConnect的dApp都需要從WalletConnect 自雲端獲取 projectId。 這是完全免費的,只需幾分鐘。

projectId 提供給 getDefaultWallets 和個別 RainbowKit 錢包連接器,例如以下:

const projectId = 'YOUR_PROJECT_ID';
const { wallets } = getDefaultWallets({
appName: 'My RainbowKit App',
projectId,
chains,
});
const connectors = connectorsForWallets([
...wallets,
{
groupName: 'Other',
wallets: [
argentWallet({ projectId, chains }),
trustWallet({ projectId, chains }),
ledgerWallet({ projectId, chains }),
],
},
]);

wagmi 同步依賴已更新至 0.11.x

請依照以下步驟進行遷移。

npm i @rainbow-me/rainbowkit@^0.11.0 wagmi@^0.11.0

如果您在應用程式中使用 wagmi 鉤子,您將需要檢查您的應用程式是否受到了 wagmi 重大變動的影響。

您可以在這裡查看他們的遷移指南

wagmi 同步依賴已更新至 0.10.x

請依照以下步驟進行遷移。

npm i @rainbow-me/rainbowkit@^0.10.0 wagmi@^0.10.0

如果您在應用程式中使用 wagmi 鉤子,您將需要檢查您的應用程式是否受到了 wagmi 重大變動的影響。

您可以在這裡查看他們的遷移指南

wagmi 同步依賴已更新至 0.9.x

請依照以下步驟進行遷移。

npm i @rainbow-me/rainbowkit@^0.9.0 wagmi@^0.9.0

如果您在應用程式中使用 wagmi 鉤子,您將需要檢查您的應用程式是否受到了 wagmi 重大變動的影響。

您可以在這裡查看他們的遷移指南

wagmi 同步依賴已更新至 0.8.x

請依照以下步驟進行遷移。

npm i @rainbow-me/rainbowkit@^0.8.0 wagmi@^0.8.0

如果您在應用程式中使用 wagmi 鉤子,您將需要檢查您的應用程式是否受到了 wagmi 重大變動的影響。

您可以在這裡查看他們的遷移指南

如果您正在創建自定義的錢包列表,您現在必須單獨導入每個錢包以減少綁定大小。 請注意,由於錢包不再通過 wallet 對象命名空間,所有錢包現在都有一個 Wallet 後綴。

-import { connectorsForWallets, wallet } from '@rainbow-me/rainbowkit'; +import { connectorsForWallets } from '@rainbow-me/rainbowkit'; +import { + injectedWallet, + rainbowWallet, + metaMaskWallet, + coinbaseWallet, + walletConnectWallet, +} from '@rainbow-me/rainbowkit/wallets';
const wallets = [
- wallet.injected({ chains }), - wallet.rainbow({ chains }), - wallet.metaMask({ chains }), - wallet.coinbase({ chains, appName: 'My App' }), - wallet.walletConnect({ chains }), + injectedWallet({ chains }), + rainbowWallet({ chains }), + metaMaskWallet({ chains }), + coinbaseWallet({ chains, appName: 'My App' }), + walletConnectWallet({ chains }), ];

還請注意,Steakwallet 向後相容層已被移除。 應使用 Omni 替代。

-import { wallet } from '@rainbow-me/rainbowkit'; +import { omniWallet } from '@rainbow-me/rainbowkit/wallets';
const wallets = [
- wallet.steak({ chains }), + omniWallet({ chains }), ];

RainbowKit 已更新 wagmi 同步依賴到 0.5.x

請依照以下步驟進行遷移。

升級 RainbowKit 和 wagmi 到最新版本

npm i @rainbow-me/rainbowkit@^0.4.0 wagmi@^0.5.0

如果您在應用程式中使用 wagmi 鉤子,您將需要檢查您的應用程式是否受到了 wagmi 重大變動的影響。

你可以在這裡查看他們的遷移指南.

已從 Wallet 類型的 createConnector 中移除了 chainId 參數。

請注意,所有內建錢包都在使用新的 API。 大多數用戶不受影響。 此更改只影響已經創建或使用了自定義錢包的用戶。

如果你之前在 createConnector 中從 chainId 派生出 RPC URL,你可以現在移除該邏輯,因為 wagmi 現在在使用 configureChains 時內部處理 RPC URL。

import { connectorsForWallets, wallet, Chain, Wallet } from '@rainbow-me/rainbowkit';
import { chain, configureChains } from 'wagmi';
import { alchemyProvider } from 'wagmi/providers/alchemy';
import { publicProvider } from 'wagmi/providers/public';
import { WalletConnectConnector } from 'wagmi/connectors/walletConnect';
export interface MyWalletOptions {
chains: Chain[]; }
-const chains = [chain.mainnet] +const { chains } = configureChains( + [chain.mainnet], + [ + alchemyProvider({ alchemyId: process.env.ALCHEMY_ID }), + publicProvider(), + ] +);
export const rainbow = ({ chains }: MyWalletOptions): Wallet => ({
... - createConnector: ({ chainId }) => { + createConnector: () => { - const rpc = chains.reduce( - (rpcUrlMap, chain) => ({ - ...rpcUrlMap, - [chainId]: chain.rpcUrls.default, - }), - {} - ); const connector = new WalletConnectConnector({ chains, options: { qrcode: false, - rpc, }, }); } ... }
const connectors = connectorsForWallets([
{ groupName: 'Recommended', wallets: [ rainbow({ chains }), ], }, ]);

RainbowKit 已將 wagmi 的對等依賴升級到 ^0.4

請依照以下步驟進行遷移。

升級 RainbowKit 和 wagmi 到最新版本

npm i @rainbow-me/rainbowkit@^0.2.0 wagmi@^0.4.2

從 wagmi 而非 RainbowKit 導入 configureChains

- import { configureChains } from '@rainbow-me/rainbowkit'; + import { configureChains } from 'wagmi';

RainbowKit 不再導出 apiProvider API。 用你想要的 wagmi 提供商替換它。

- import { apiProvider } from '@rainbow-me/rainbowkit';

wagmi/providers/alchemy 導入 alchemyProvider

+ import { alchemyProvider } from 'wagmi/providers/alchemy';
const { chains, provider } = configureChains(
[chain.mainnet, chain.polygon, chain.optimism, chain.arbitrum], - [apiProvider.alchemy(process.env.ALCHEMY_ID)] + [alchemyProvider({ alchemyId: process.env.ALCHEMY_ID })] );

wagmi/providers/infura 導入 infuraProvider

+import { infuraProvider } from 'wagmi/providers/infura';
const { chains, provider } = configureChains(
[chain.mainnet, chain.polygon, chain.optimism, chain.arbitrum], - [apiProvider.infura(process.env.INFURA_ID)] + [infuraProvider({ infuraId: process.env.INFURA_ID })] );

wagmi/providers/jsonRpc 導入 jsonRpcProvider

+ import { jsonRpcProvider } from 'wagmi/providers/jsonRpc';
const { chains, provider } = configureChains(
[chain.mainnet, chain.polygon], [ - apiProvider.jsonRpc(chain => ({ - rpcUrl: `https://${chain.id}.example.com`, - })), + jsonRpcProvider({ + rpc: chain => ({ + http: `https://${chain.id}.example.com`, + }), + }), ] );

wagmi/providers/public 導入 publicProvider

+ import { publicProvider } from 'wagmi/providers/public';
const { chains, provider } = configureChains(
[chain.mainnet, chain.polygon], - [apiProvider.fallback()] + [publicProvider()] );

WagmiProvider 重命名為 WagmiConfig

import {
- WagmiProvider + WagmiConfig } from 'wagmi'
const App = () => {
return ( - <WagmiProvider client={wagmiClient}>...</WagmiProvider> + <WagmiConfig client={wagmiClient}>...</WagmiConfig> ); };

完成了! 🌈