การย้ายไปยัง RainbowKit และ Wagmi v2
ส่วนประกอบ wagmi และ viem เวอร์ชันเสถียรได้ถึง 2.x.x และมีการเปลี่ยนแปลงที่ไม่สามารถกลับได้ตามเดิม
ทำตามขั้นตอนด้านล่างเพื่อทำการย้าย
1. อัปเกรด RainbowKit, wagmi และ viem เป็นเวอร์ชั่นล่าสุด
2. ติดตั้ง @tanstack/react-query ซึ่งเป็น peer dependency
กับ Wagmi v2, TanStack Query กลายเป็น peer dependency ที่จำเป็น
ติดตั้งด้วยคำสั่งตามนี้:
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
ถ้าคุณใช้ hook ของ wagmi และ action ของ viem ใน dApp ของคุณ คุณต้องทำตามคู่มือการย้ายไปยัง v2:
1. การปรับปรุงพฤติกรรมสำหรับกระเป๋าคอนเนคชั่น EIP-6963
กระเป๋าที่สนับสนุนมาตรฐานการเชื่อมต่อ EIP-6963 ใหม่ (รวมถึง Rainbow, MetaMask และอื่น ๆ) จะปรากฏอยู่ในส่วน ติดตั้งแล้ว อัตโนมัติในระหว่างการเชื่อมต่อกระเป๋าเงิน. สิ่งนี้จะทำให้แน่ใจว่าผู้ใช้สามารถหากระเป๋าที่ชื่นชอบและเชื่อมต่อกับ dApps ได้โดยไม่มีข้อขัดแย้งหรือปุ่มย้อนกลับ.
นักพัฒนายังคงมีการควบคุมเต็มรูปแบบในรายชื่อกระเป๋าเงินเพื่อเน้นกระเป๋าที่ต้องการสำหรับผู้ใช้ ควรที่จะรวม injectedWallet และ walletConnectWallet ในรายการเพื่อสนับสนุนทุกแพลตฟอร์ม
2. การกำหนดค่า Wagmi ด้วย getDefaultConfig
API ใหม่นี้ทำให้ประสบการณ์การกำหนดค่าง่ายขึ้นและแทนที่จำเป็นต้องใช้ createConfig ของ Wagmi โดยตรง. การกำหนดค่าโซ่ง่ายขึ้น, รวมถึงการอนุมาน Public Providers ใน 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 และยังคงรองรับข้อมูลเมตา iconUrl และ iconBackground ของ RainbowKit
+ 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(),
},
})
5. กระเป๋าที่กำหนดเอง
ตัวเชื่อมต่อกระเป๋า RainbowKit มีการเปลี่ยนแปลงครั้งใหญ่เพื่อรองรับ Wagmi v2 อ้างอิงเอกสารที่อัปเดตแล้ว และตัวเชื่อมต่อตัวอย่าง เพื่ออัปเกรดตัวเชื่อมต่อกระเป๋าที่กำหนดเองใน dApp ของคุณ
ตัวเชื่อมกระเป๋าตอนนี้สนับสนุนมาตรฐาน EIP-6963 โดย rdns prop. ตรวจสอบให้แน่ใจว่าได้ดำเนินการในรายการกระเป๋าของคุณเพื่อป้องกันการอ้างอิงซ้ำกันในกระเป๋าที่สนับสนุน EIP-6963.
กรุณารายงานปัญหาหรือคำติชมสำหรับ RainbowKit v2 ใน GitHub ที่นี่