之前我们简单的实现了钱包的链接,第二件事情就是要获取一些简单的数据,例如:chainID,address等。
在2.x版本中我们最好全局定义config,因为很多地方都是需要到这个配置的。
要想获取数据我们需要使用getWalletClient方法:
const client = await getWalletClient(config)
通过client我们就能够获取当前钱包用户的一些信息。
获取完信息后,就是合约的实例化:
在0.x和1.x版本中合约的实例化是通过 getContract:
import {getContract} from '@wagmi/core'
但是在2.x版本中删除了这个,转而需要使用viem来进行实例化:
import { getContract } from 'viem'
在viem文档中实例化是这样的:
const contract = getContract({
address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',
abi: wagmiAbi,
// 1a. Insert a single client
client: publicClient,
// 1b. Or public and/or wallet clients
client: { public: publicClient, wallet: walletClient }
})
其中的 client 属于可选项,但是我在实践中发现这个是必选项,如果只填一个wallet 或者是不填,那么返回值只有一个abi的数据和一个address:
{
abi:[],
address:""
}
对此极其苦恼,翻来覆去的查找资料就是不行,最后把client配置齐全就得到了跟官方一致的结果了。
而client的配置也是可以自定义的,需要和config保持一致:
const walletClient = createWalletClient({ chain: QngTestnet, transport: custom(window.ethereum)})const publicClient = createPublicClient({ chain: QngTestnet, transport: http(),})
export const QngTestnet = {
id: ,
name: '',
network: '',
nativeCurrency: {
decimals:,
name: '',
symbol: ''
},
rpcUrls: {
public: {
http: ['']
},
default: {
http: ['']
}
},
blockExplorers: {
etherscan: {
name: '',
url: ''
},
default: {
name: '',
url: ''
}
}
}