• React
  • Providers
  • configuring-chains

Configuring Chains

configureChains 方法允许使用特定的 provider 来配置你的 chain ,例如:Alchemy、Infura 或其他。这意味着你不需要担心在你的 connectorprovider 中定义 RPC URLs 和 chain 的配置,这是由 wagmi 内部管理的。

import { configureChains } from 'wagmi'

用法

configureChains 接受一个 chain 的数组和 provider 的数组,然后返回:

  • chains: 传递给你的 connector
  • publicClient: 传递给 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 },
)