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

مع 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

إذا كنت تستخدم خطافات wagmi وإجراءات viem في تطبيقك اللامركزي، ستحتاج إلى اتباع دليل الهجرة للإصدار v2:

1. تحسين سلوك محافظ EIP-6963

المحافظ التي تدعم معيار الاتصال الجديد EIP-6963 (بما في ذلك Rainbow وMetaMask وغيرها) ستظهر الآن تلقائيًا في قسم مُثبت أثناء تجربة ربط المحفظة. هذا يضمن أن المستخدمين يمكنهم دائمًا العثور على محافظهم المفضلة والاتصال بالتطبيقات اللامركزية دون تعارضات أو أزرار احتياطية.

يستمر المطورون في السيطرة الكاملة على قائمة المحافظ المخصصة لتسليط الضوء على المحافظ المفضلة للمستخدمين النهائيين. يُشجع على أن تستمر في تضمين injectedWallet و walletConnectWallet في قائمتك لدعم جميع المنصات.

2. تكوين Wagmi مع getDefaultConfig

هذه الواجهة البرمجية الجديدة تبسط تجربة التكوين وتحل محل الحاجة لاستخدام createConfig من Wagmi مباشرةً. تم تبسيط تكوين السلسلة، بما في ذلك مزودي الخدمات العامة المستنتجة لـ 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 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**

في الإصدارات السابقة من wagmi التي تعتمد على ethers، كانت الوحدات fs، net، و tls المطلوبة من WalletConnect تتم تلقائيًا. هذا لم يعد الحال مع RainbowKit v1 + wagmi v1، اللذان تم بناؤهما على viem.

راجع تكوين Webpack لـ Next.js و أمثلة Create React App polyfills لتوجيهات التكوين لمشروعك.

دلائل إطار العمل الإضافية لـ Vite و Remix متوفرة here.

**4. تحقق من التغييرات الكبيرة في wagmi **

إذا كنت تستخدم خطافات wagmi في تطبيقك، ستحتاج إلى اتباع دليل wagmi للانتقال إلى الإصدار v1.

يمكنك مشاهدة دليل الترحيل الخاص بهم هنا.

تم تحديث التبعية المتبادلة لـ wagmi إلى 0.12.x.

لقد اعتمد RainbowKit موصل WalletConnectLegacyConnector في wagmi للاستمرار في دعم WalletConnect v1. سيتم قريبًا توفر دعم لـ WalletConnect v2 و WalletConnectConnector كإصدار تصحيحي، دون تغييرات تكسر.

سيتم التحويل إلى المحافظ تلقائيًا في الإصدارات المستقبلية.

يجب الآن على كل dApp تقديم projectId من WalletConnect Cloud لتمكين WalletConnect v2. يجب إكمال هذا قبل إغلاق خوادم جسر WalletConnect v1 في 28 يونيو 2023. سيفضل RainbowKit بصمت النسخة v1 لجميع المحافظ إذا لم يتم تحديد projectId.

اتبع الخطوات أدناه للترحيل.

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

كل تطبيق dApp يعتمد على 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

إذا كنت تستخدم خطافات 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.

-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.

يمكنك مشاهدة دليل الانتقال هنا.

تمت إزالة العامل chainId من createConnector على نوع Wallet.

لاحظ أن جميع المحافظ المدمجة تستخدم واجهة برمجة التطبيقات الجديدة. معظم المستخدمين لن يتأثروا. هذا التغيير يؤثر فقط على المستهلكين الذين أنشأوا/استهلكوا محافظ مخصصة.

إذا قمت سابقًا بإشتقاق عناوين URL لـ RPC من chainId على createConnector, يمكنك الآن إزالة هذه المنطق حيث أن wagmi يعالج الآن عناوين URL لـ RPC داخليًا عند استخدامها مع 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 للإعتماد على النظير إلى ^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> ); };

وأنت انتهيت! 🌈