You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用wagmi调用合约写方法时如何设置gasLimit?

使用wagmi的writeContractAsync设置gasLimit

在wagmi的writeContractAsync调用中,直接在配置对象里添加gasLimit参数就能手动指定gas限额,参数支持BigInt类型数值或字符串格式的数值(需和链上单位一致,比如wei)。

基础示例(手动固定gasLimit)

修改你现有代码,添加gasLimit字段即可:

const { writeContractAsync } = useWriteContract();
writeContractAsync({
    address: positionManagerContract,
    abi: POSITION_MANAGER_ABI,
    functionName: "create",
    account: address,
    args: [inputs.tokenOneAddress],
    // 手动设置gasLimit,示例设为1000000,根据合约实际需求调整
    gasLimit: BigInt(1000000)
})

更合理的方式:先预估gas再设置

为避免gas设置不足导致交易失败,或设置过高浪费费用,建议先用useEstimateGasContract预估所需gas,再额外加10%-20%的缓冲:

import { useWriteContract, useEstimateGasContract } from 'wagmi';

// 先预估gas
const { data: estimatedGas } = useEstimateGasContract({
    address: positionManagerContract,
    abi: POSITION_MANAGER_ABI,
    functionName: "create",
    account: address,
    args: [inputs.tokenOneAddress]
});

// 调用writeContractAsync时使用预估gas加缓冲
const { writeContractAsync } = useWriteContract();
const handleCreate = async () => {
    if (!estimatedGas) return;
    // 加15%缓冲,避免预估不准
    const gasLimit = estimatedGas * BigInt(115) / BigInt(100);
    try {
        await writeContractAsync({
            address: positionManagerContract,
            abi: POSITION_MANAGER_ABI,
            functionName: "create",
            account: address,
            args: [inputs.tokenOneAddress],
            gasLimit: gasLimit
        });
        console.log("交易成功");
    } catch (error) {
        console.error("交易失败:", error);
    }
};

注意事项

  • gasLimit必须是符合链上要求的数值,推荐用BigInt类型避免精度丢失
  • 手动设置时要确保数值足够覆盖合约执行的gas消耗,否则交易会因out of gas失败
  • 预估gas时如果合约执行逻辑有问题,estimatedGas会返回undefined,需提前做判断处理

内容的提问来源于stack exchange,提问作者Sajjad Javadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 02:32:06