دليل الترحيل
دليل الترحيل
ترحيل 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 وغيرها) ستظهر الآن تلقائيًا في قسم مُثبت
أثناء تجربة ربط المحفظة. هذا يضمن أن المستخدمين يمكنهم دائمًا العثور على محافظهم المفضلة والاتصال بالتطبيقات اللامركزية دون تعارضات أو أزرار احتياطية.
يستمر المطورون في السيطرة الكاملة على قائمة المحافظ المخصصة لتسليط الضوء على المحافظ المفضلة للمستخدمين النهائيين. يُشجع على أن تستمر في تضمين 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
. قم بتثبيتها بالأمر التالي:
**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>
);
};
وأنت انتهيت! 🌈