Rainbow logo
RainbowKit
2.2.5

遷移指南

遷移指南

遷移 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,沒有衝突或後備按鈕。 這確保用戶能夠始終找到他們喜愛的錢包並連接到 dApps,沒有衝突或後備按鈕。

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

2. 使用 getDefaultConfig 配置 Wagmi

此新 API 簡化了配置體驗,取代了直接使用 Wagmi 的 createConfig 的需求。 鏈配置簡化,包括對 transports 推斷的公共提供者。 鏈配置簡化,包括對 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。 RainbowKit 錢包連接器已經過重大變更以支援 Wagmi v2。 參考更新的文件範例連接器以升級您 dApp 中的任何自定義錢包連接器。

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

在以前依賴 ethers 的 wagmi 版本中,WalletConnect 所需的 fsnettls 模組是自動 polyfilled。 在 RainbowKit v1 + wagmi v1 中,這種情況已不再發生,這些版本建立在 viem 之上。 在 RainbowKit v1 + wagmi v1 中,這種情況已不再發生,這些版本建立在 viem 之上。

參考我們的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 將很快作為補丁版本提供,無需重大變動。 支持 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 後綴。 請注意,由於錢包不再通過 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 提供商替換它。 用你想要的 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> ); };

完成了! 🌈