遷移指南
遷移指南
遷移 RainbowKit
wagmi 和 viem 的對等相依版本已達 2.x.x
,並存在重大變更。
請依照以下步驟進行遷移。
1. 將 RainbowKit、wagmi
和 viem
升級至最新版本
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. 檢查 wagmi
和 viem
的重大變更
如果您在 dApp 中使用 wagmi
鉤子和 viem
動作,您需要遵循 v2 的遷移指南:
1. 改進對 EIP-6963 錢包的行為
支援新 EIP-6963 連線標準的錢包(包括 Rainbow、MetaMask 等)現在將會自動顯示在連接錢包體驗的 已安裝
部分中。 這確保用戶能夠始終找到他們喜愛的錢包並連接到 dApps,沒有衝突或後備按鈕。
開發者仍擁有完全控制自定義錢包清單的權限,以強調優先的錢包給終端用戶。 鼓勵您繼續在清單中包括 injectedWallet
和 walletConnectWallet
來支援所有平臺。
2. 使用 getDefaultConfig 配置 Wagmi
此新 API 簡化了配置體驗,取代了直接使用 Wagmi 的 createConfig
的需求。 鏈配置簡化,包括對 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 */
})
3. RainbowKitProvider
您不再需要將 chains
傳遞給 <RainbowKitProvider>
。
- <RainbowKitProvider chains={chains}>
+ <RainbowKitProvider>
4. 自定義鏈
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 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
同步依賴。 使用以下命令安裝它:
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>
);
};
完成了! 🌈