wagmi2.X(二)

215 阅读1分钟

之前我们简单的实现了钱包的链接,第二件事情就是要获取一些简单的数据,例如: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: '' 
        }  
    }
}