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

Chainlink UpKeep Automation payable功能使用及performUpkeep转ETH报错问询

Solidity发送原生ETH至合约失败问题排查与解决

问题场景

尝试通过performUpkeep函数向目标合约forgreenAdd发送原生ETH,函数已添加external payable override修饰,但使用call函数时仍报错,提示需使用payable函数,此前其他带payable修饰的函数可正常运行。相关代码:

function performUpkeep(bytes calldata /* performData */) external payable override {
    //call
      (bool sent, ) = forgreenAdd.call{value: 10000000000}("");
}

核心原因

报错本质是目标地址forgreenAdd未被标记为payable类型。Solidity中仅address payable类型的地址可接收原生ETH,普通address类型无法处理ETH转账,即便发起转账的函数已声明为payable也无效。

解决方案

有两种可行修复方式:

  • 方式一:提前声明目标地址为payable类型
    将forgreenAdd的变量声明从普通address改为address payable:

    address payable public forgreenAdd;
    
  • 方式二:调用时显式转换为payable地址
    在调用call前用payable()将普通地址转为payable类型,同时建议添加转账结果检查避免静默失败:

    function performUpkeep(bytes calldata /* performData */) external payable override {
        (bool sent, ) = payable(forgreenAdd).call{value: 10000000000}("");
        require(sent, "ETH transfer failed");
    }
    

内容的提问来源于stack exchange,提问作者MD BAHA UDDIN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:35:08