دليل الترحيل
دليل الترحيل
ترحيل 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
إذا كنت تستخدم الأساليب والوظائف wagmi وviem في تطبيقك، فستحتاج إلى اتباع إرشادات الهجرة للإصدار v2:
1. تحسين السلوك لمحافظ EIP-6963
المحافظ التي تدعم معيار الاتصال الجديد EIP-6963 (بما في ذلك Rainbow وMetaMask وغيرها) ستظهر الآن تلقائيًا في قسم Installed أثناء تجربة الاتصال بالمحفظة. يضمن ذلك أن المستخدمين يمكن أن يجدوا محافظهم المفضلة دائمًا ويتصلوا بتطبيقات dApps بدون تعارضات أو أزرار احتياطية.
لا يزال لدى المطورين السيطرة الكاملة على قائمة المحافظ المخصصة لتأكيد المحافظ المفضلة للمستخدمين النهائيين. يُفضل أن تستمر في تضمين injectedWallet وwalletConnectWallet في قائمتك لدعم جميع المنصات.
2. إعداد Wagmi مع getDefaultConfig
يُبسط هذا API الجديد تجربة الإعداد ويستبدل الحاجة لاستخدام 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، ويواصل دعم بيانات 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. ضمان توافق البندلرات والبوليفيل
ارجع إلى عينة تكوين Webpack في Next.js لتوجيه التكوين لمشروعك.
إرشادات إطار عمل إضافية لـ Vite وRemix متاحة هنا.
4. تحقق من التغييرات الجذرية في wagmi
إذا كنت تستخدم Windows
يمكنك رؤية دليل الترحيل الخاص بهم هنا.
تم تحديث التبعية النظيرة لـ wagmi إلى 0.12.x.
اعتمدت RainbowKit على موصل WalletConnectLegacyConnector في wagmi لدعم WalletConnect v1 المستمر. سيتم إصدار دعم للـ WalletConnect v2 وموصل WalletConnectConnector قريبًا كإصدار ترقيعي، دون تغييرات جذرية.
سيتم نقل محافظ تلقائيًا في الإصدارات المستقبلية.
يجب على كل dApp الآن توفير WalletConnect Cloud projectId لتمكين 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: [
readyWallet({ projectId, chains }),
trustWallet({ projectId, chains }),
ledgerWallet({ projectId, chains }),
],
},
]);
تم تحديث التبعية النظيرة لـ wagmi إلى 0.11.x.
اتبع الخطوات أدناه للهجرة.
npm i @rainbow-me/rainbowkit@^0.11.0 wagmi@^0.11.0
إذا كنت تستخدم وظائف (hooks) wagmi في تطبيقك، ستحتاج إلى التحقق مما إذا كان التطبيق قد تأثر بالتغييرات الجذرية في wagmi.
يمكنك رؤية دليل الترحيل الخاص بهم هنا.
تم تحديث التبعية النظيرة لـ wagmi إلى 0.10.x.
اتبع الخطوات أدناه للهجرة.
npm i @rainbow-me/rainbowkit@^0.10.0 wagmi@^0.10.0
إذا كنت تستخدم وظائف (hooks) wagmi في تطبيقك، ستحتاج إلى التحقق مما إذا كان التطبيق قد تأثر بالتغييرات الجذرية في wagmi.
يمكنك رؤية دليل الترحيل الخاص بهم هنا.
تم تحديث التبعية النظيرة لـ wagmi إلى 0.9.x.
اتبع الخطوات أدناه للهجرة.
npm i @rainbow-me/rainbowkit@^0.9.0 wagmi@^0.9.0
إذا كنت تستخدم وظائف (hooks) wagmi في تطبيقك، ستحتاج إلى التحقق مما إذا كان التطبيق قد تأثر بالتغييرات الجذرية في wagmi.
يمكنك رؤية دليل الترحيل الخاص بهم هنا.
تم تحديث التبعية النظيرة لـ wagmi إلى 0.8.x.
اتبع الخطوات أدناه للهجرة.
npm i @rainbow-me/rainbowkit@^0.8.0 wagmi@^0.8.0
إذا كنت تستخدم وظائف (hooks) 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 إلى 0.5.x.
اتبع الخطوات أدناه للهجرة.
قم بترقية RainbowKit وwagmi إلى أحدث نسخة
npm i @rainbow-me/rainbowkit@^0.4.0 wagmi@^0.5.0
إذا كنت تستخدم وظائف (hooks) wagmi في تطبيقك، ستحتاج إلى التحقق مما إذا كان التطبيق قد تأثر بالتغييرات الجذرية في wagmi.
يمكنك رؤية دليل الترحيل الخاص بهم هنا.
تم إزالة معامل chainId من createConnector في نوع Wallet.
لاحظ أن جميع المحافظ المدمجة تستخدم API الجديد. لن يتأثر معظم المستهلكين. يؤثر هذا التغيير فقط على المستهلكين الذين قاموا بإنشاء/استهلاك محافظ مخصصة.
إذا كنت تستمد روابط RPC سابقًا من chainId على createConnector، يمكنك الآن إزالة هذه الطريقة حيث يتعامل wagmi الآن مع روابط 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 إلى ^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 يصدر API لـ apiProvider. استبدله بالمزود المرغوب فيه من 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>
);
};
وانتهيت! 🌈