Configuring Chains
configureChains
方法允许使用特定的 provider 来配置你的 chain ,例如:Alchemy、Infura 或其他。这意味着你不需要担心在你的 connector 或 provider 中定义 RPC URLs 和 chain 的配置,这是由 wagmi 内部管理的。
import { configureChains } from 'wagmi'
用法
configureChains
接受一个 chain 的数组和 provider 的数组,然后返回:
chains
: 传递给你的 connectorpublicClient
: 传递给createConfig
webSocketPublicClient
: 也传递给createConfig
,不过是可选的
import { configureChains, createConfig } from 'wagmi'
import { mainnet, optimism } from 'wagmi/chains'
import { alchemyProvider } from 'wagmi/providers/alchemy'
import { publicProvider } from 'wagmi/providers/public'
import { InjectedConnector } from 'wagmi/connectors/injected'
const { chains, publicClient } = configureChains(
[mainnet, optimism],
[alchemyProvider({ apiKey: 'yourAlchemyApiKey' }), publicProvider()],
)
const config = createConfig({
autoConnect: true,
connectors: [new InjectedConnector({ chains })],
publicClient,
})
可以在这里找到 wagmi 里支持的 chain 列表。
多个 Provider
configureChains
方法可以接受多个 Provider. 如果你的 Provider 不能支持所有的 chain 的时候,这会是很有用的。 例如,你可能想用 Alchemy 作为 Etheruem 的 Provider, 用 avax.network 作为 Avalanche 的 Provider
- 如果一个 Provider 宕机了,可以自动转跳到另一个(例如,如果 Infura 宕机了,会将请求打到 Alchemy)。
- 通过设置 targetQuorum 确保响应是合法的。
import { configureChains } from 'wagmi'
import { mainnet, optimism } from 'wagmi/chains'
import { alchemyProvider } from 'wagmi/providers/alchemy'
import { infuraProvider } from 'wagmi/providers/infura'
import { publicProvider } from 'wagmi/providers/public'
const { publicClient } = configureChains(
[mainnet, avalanche],
[
alchemyProvider({ apiKey: 'yourAlchemyApiKey' }),
infuraProvider({ apiKey: 'yourInfuraApiKey' }),
publicProvider(),
],
)
参数
chains
需要配置的 chain。
import { configureChains } from 'wagmi'
import { mainnet, optimism } from 'wagmi/chains'
import { publicProvider } from 'wagmi/providers/public'
const { chains } = configureChains([mainnet, optimism], [publicProvider()])
providers
该 app 支持的 Provider。
如果一个 Provider 不支持一个 chain,它将退回到数组中的下一个。如果没有找到 RPC URL,configureChains
将抛出一个错误。
import { configureChains } from 'wagmi'
import { mainnet, optimism } from 'wagmi/chains'
import { alchemyProvider } from 'wagmi/providers/alchemy'
import { publicProvider } from 'wagmi/providers/public'
const { chains } = configureChains(
[mainnet, optimism],
[alchemyProvider({ apiKey: 'yourAlchemyApiKey' }), publicProvider()],
)
配置项
pollingInterval (可选)
Provider 轮询的频率,以毫秒为单位,默认为 4000
。
import { configureChains } from 'wagmi'
import { mainnet, optimism } from 'wagmi/chains'
import { alchemyProvider } from 'wagmi/providers/alchemy'
import { publicProvider } from 'wagmi/providers/public'
const { chains } = configureChains(
[mainnet, optimism],
[
alchemyProvider({ apiKey: 'yourAlchemyApiKey' }),
infuraProvider({ apiKey: 'yourInfuraApiKey' }),
publicProvider(),
],
{ pollingInterval: 10_000, targetQuorum: 3 },
)
stallTimeout (可选)
请求超时时间,以毫秒为单位,超时后将尝试另一个 Provider。
import { configureChains } from 'wagmi'
import { mainnet, optimism } from 'wagmi/chains'
import { alchemyProvider } from 'wagmi/providers/alchemy'
import { publicProvider } from 'wagmi/providers/public'
const { chains } = configureChains(
[mainnet, optimism],
[
alchemyProvider({ apiKey: 'yourAlchemyApiKey' }),
infuraProvider({ apiKey: 'yourInfuraApiKey' }),
publicProvider(),
],
{ stallTimeout: 5000 },
)