Rainbow logo
RainbowKit
2.2.4

คู่มือการย้าย

คู่มือการย้าย

การย้าย RainbowKit

การพึ่งพา wagmi และ viem ได้ถึงเวอร์ชัน 2.x.x พร้อมกับการเปลี่ยนแปลงหลัก

ทำตามขั้นตอนด้านล่างเพื่อย้าย.

1. อัปเกรด RainbowKit, wagmi, และ viem ไปยังเวอร์ชันล่าสุด

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

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

หากคุณใช้งาน hooks ของ wagmi และ actions ของ viem ใน dApp ของคุณ, คุณจะต้องทำตามคู่มือการย้ายข้อมูลสำหรับ v2:

**1. พฤติกรรมที่ปรับปรุงสำหรับกระเป๋าสตางค์ EIP-6963

กระเป๋าสตางค์ที่รองรับมาตรฐานการเชื่อมต่อใหม่ EIP-6963 (รวมถึง Rainbow, MetaMask และอื่นๆ) จะปรากฏในส่วน Installed โดยอัตโนมัติระหว่างประสบการณ์การเชื่อมต่อกระเป๋าสตางค์ สิ่งนี้ช่วยให้ผู้ใช้สามารถค้นหากระเป๋าสตางค์ที่ชื่นชอบได้เสมอและเชื่อมต่อกับ dApps โดยไม่มีความขัดแย้งหรือปุ่ม fallback สิ่งนี้ช่วยให้ผู้ใช้สามารถค้นหากระเป๋าสตางค์ที่ชื่นชอบได้เสมอและเชื่อมต่อกับ dApps โดยไม่มีความขัดแย้งหรือปุ่ม fallback

นักพัฒนายังคงมีการควบคุมเต็มที่เหนือรายการกระเป๋าสตางค์ที่กำหนดเองเพื่อเน้นกระเป๋าสตางค์ที่ต้องการสำหรับผู้ใช้ปลายทาง นักพัฒนายังคงมีการควบคุมเต็มที่เหนือรายการกระเป๋าสตางค์ที่กำหนดเองเพื่อเน้นกระเป๋าสตางค์ที่ต้องการสำหรับผู้ใช้ปลายทาง ขอแนะนำให้คุณยังคงรวม injectedWallet และ walletConnectWallet ในรายการของคุณเพื่อรองรับทุกแพลตฟอร์ม

2. การตั้งค่า Wagmi ด้วย getDefaultConfig

API ใหม่นี้ทำให้ประสบการณ์การกำหนดค่าง่ายขึ้นและทดแทนความจำเป็นในการใช้ createConfig ของ Wagmi โดยตรง การกำหนดค่าเชนถูกทำให้ง่ายขึ้น รวมถึงการให้บริการสาธารณะที่สามารถสรุปได้สำหรับ transports การกำหนดค่าเชนถูกทำให้ง่ายขึ้น รวมถึงการให้บริการสาธารณะที่สามารถสรุปได้สำหรับ transports

รายการกระเป๋าเงินเริ่มต้นจะถูกรวมเข้ามาโดยอัตโนมัติ ทำให้ไม่จำเป็นต้องใช้ getDefaultWallets และ connectorsForWallets

คุณสามารถสร้างรายการกระเป๋าเงินที่กำหนดเองได้โดยการส่ง connectors กระเป๋าเงินที่นำเข้ามาหรือเชนที่กำหนดเองไปยัง wallets ไม่จำเป็นต้องสร้าง connectors กระเป๋าเงินและส่ง projectId และ chains อีกต่อไป ไม่จำเป็นต้องสร้าง connectors กระเป๋าเงินและส่ง 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 และยังคงสนับสนุน metadata 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 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 ด้วย prop 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. ให้แน่ใจว่า bundler และการเข้ากันได้ของ polyfill

ในเวอร์ชั่นก่อนหน้าของ wagmi ที่พึ่ง ethers, โมดูล fs, net, และ tls ที่ WalletConnect ต้องการถูก polyfilled โดยอัตโนมัติ. นี้ไม่ใช่กรณีอีกต่อไปด้วย RainbowKit v1 + wagmi v1, ซึ่งสร้างบน viem.

อ้างถึง Next.js Webpack Config และ Create React App polyfills ตัวอย่างของเราสำหรับคำแนะนำการกำหนดค่าให้กับโปรเจ็คของคุณ.

คู่มือเฟรมเวิร์คเพิ่มเติมสำหรับ Vite และ Remix สามารถใช้ได้ here.

4. ตรวจสอบการเปลี่ยนแปลงที่สำคัญใน wagmi

หากคุณใช้งาน wagmi hooks ในแอปพลิเคชันของคุณ คุณจะต้องปฏิบัติตามคำแนะนำการย้ายของ wagmi เพื่อเปลี่ยนเป็น v1.

คุณสามารถดูคำแนะนำการย้ายได้ที่นี่.

การพึ่งพา wagmi ถูกอัปเดตเป็น 0.12.x.

RainbowKit ได้นำเข้า WalletConnectLegacyConnector connector ใน wagmi สำหรับการสนับสนุน WalletConnect v1 อย่างต่อเนื่อง. การสนับสนุนสำหรับ WalletConnect v2 และ WalletConnectConnector จะมีให้บริการในเร็ว ๆ นี้ตามรุ่นแก้ไขที่ไม่ทำให้เกิดการเปลี่ยนแปลงที่เป็นปัญหา

การเปลี่ยนแปลงกระเป๋าเงินจะถูกดำเนินการอัตโนมัติในรุ่นที่จะมาถึง

แอปพลิเคชันทุกๆ โปรแกรมต้องเตรียม projectId จาก WalletConnect Cloud เพื่อเปิดใช้งาน WalletConnect v2. หน้าที่นี้ต้องสำเร็จก่อนที่เซิร์ฟเวอร์สะพาน WalletConnect v1 จะปิดใช้งานในวันที่ 28 มิถุนายน 2566. RainbowKit จะเลือกใช้ v1 สำหรับกระเป๋าเงินทั้งหมดโดยไม่มีการแจ้งเตือนถ้า projectId ไม่ระบุ.

ทำตามขั้นตอนด้านล่างเพื่อย้าย.

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

แอปพลิเคชันทุกๆ โปรแกรมที่พึ่งพา WalletConnect ตอนนี้จำเป็นต้องเรียก projectId จาก WalletConnect Cloud. นี่เป็นบริการฟรีและใช้เวลาไม่กี่นาที.

ให้ 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

หากคุณใช้ hook wagmi ในแอปพลิเคชันของคุณ, คุณจะต้องตรวจสอบว่าแอปพลิเคชันของคุณได้รับผลกระทบจากการเปลี่ยนแปลงที่สำคัญใน wagmi หรือไม่.

คุณสามารถดูคู่มือการย้ายข้อมูลของพวกเขาที่นี่.

การพึ่งพา wagmi ถูกอัปเดตเป็น 0.10.x.

ทำตามขั้นตอนด้านล่างเพื่อย้าย.

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

หากคุณใช้ hook wagmi ในแอปพลิเคชันของคุณ, คุณจะต้องตรวจสอบว่าแอปพลิเคชันของคุณได้รับผลกระทบจากการเปลี่ยนแปลงที่สำคัญใน wagmi หรือไม่.

คุณสามารถดูคู่มือการย้ายข้อมูลของพวกเขาที่นี่.

การพึ่งพา wagmi ถูกอัปเดตเป็น 0.9.x.

ทำตามขั้นตอนด้านล่างเพื่อย้าย.

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

หากคุณใช้ hook wagmi ในแอปพลิเคชันของคุณ, คุณจะต้องตรวจสอบว่าแอปพลิเคชันของคุณได้รับผลกระทบจากการเปลี่ยนแปลงที่สำคัญใน wagmi หรือไม่.

คุณสามารถดูคู่มือการย้ายข้อมูลของพวกเขาที่นี่.

การพึ่งพา wagmi ถูกอัปเดตเป็น 0.8.x.

ทำตามขั้นตอนด้านล่างเพื่อย้าย.

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

หากคุณใช้ hook wagmi ในแอปพลิเคชันของคุณ, คุณจะต้องตรวจสอบว่าแอปพลิเคชันของคุณได้รับผลกระทบจากการเปลี่ยนแปลงที่สำคัญใน wagmi หรือไม่.

คุณสามารถดูคู่มือการย้ายข้อมูลของพวกเขาที่นี่.

หากคุณกำลังสร้างรายการ wallet ที่กำหนดเอง, คุณต้องนำเข้าแต่ละ wallet เป็นรายตัวเพื่อลดขนาดของ bundle. ทราบว่าตั้งแต่ wallet ไม่ได้มีการกำหนด namespace ผ่านวัตถุ wallet ไว้, wallet ทั้งหมดขณะนี้จะมี Wallet เป็น suffix.

-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 ที่เป็น peer dependency ไปเป็น 0.5.x.

ทำตามขั้นตอนด้านล่างเพื่อย้าย.

อัปเกรด RainbowKit และ wagmi ไปยังเวอร์ชันล่าสุด

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

หากคุณใช้ hook wagmi ในแอปพลิเคชันของคุณ, คุณจะต้องตรวจสอบว่าแอปพลิเคชันของคุณได้รับผลกระทบจากการเปลี่ยนแปลงที่สำคัญใน wagmi หรือไม่.

คุณสามารถดูคู่มือการย้ายที่นี่.

ลบพารามิเตอร์ chainId ออกจาก createConnector บน Wallet type.

โปรดทราบว่าวอลเล็ตที่มีอยู่ถูกสร้างขึ้นโดยใช้ API ใหม่ทั้งหมด. ผู้บริโภคส่วนใหญ่จะไม่ได้รับผลกระทบ. การเปลี่ยนแปลงนี้มีผลกระทบเฉพาะกับผู้บริโภคที่ได้สร้าง/บริโภค วอลเล็ตที่ลูกค้ากำหนดเอง.

หากคุณเคยสกัด RPC URLs จาก chainId บน createConnector, คุณสามารถลบโลจิคนั้นได้ตอนนี้เนื่องจาก wagmi จัดการกับ RPC URLs ภายในเวลาที่ใช้กับ configureChains.

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 peer dependency เป็น ^0.4.

ทำตามขั้นตอนด้านล่างเพื่อย้าย.

อัปเกรด RainbowKit และ wagmi ไปยังเวอร์ชันล่าสุด

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

นำเข้า configureChains จาก wagmi แทน RainbowKit:

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

RainbowKit ไม่ออก apiProvider API อีกต่อไป. แทนที่ด้วยผู้ให้ที่คุณต้องการจาก wagmi.

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

นำเข้า alchemyProvider จาก wagmi/providers/alchemy.

+ 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 })] );

นำเข้า infuraProvider จาก wagmi/providers/infura.

+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 })] );

นำเข้า jsonRpcProvider จาก wagmi/providers/jsonRpc.

+ 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`, + }), + }), ] );

นำเข้า publicProvider จาก wagmi/providers/public.

+ 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> ); };

และคุณเสร็จสิ้น! 🌈