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

智能合约ETH无法提取求助:调用withdraw成功但余额未变化

问题排查方案

1. 验证调用者的Owner权限

  • 调用合约的owner()视图函数,确认当前MetaMask连接地址与返回的owner地址完全一致。若不一致,切换到owner地址后再尝试调用withdraw。

2. 排查金额单位不匹配问题

合约中withdraw的amount参数单位是wei,如果Scaffold-Eth UI未做单位转换:

  • 输入的20实际对应20 wei(约0.00000000000000002 ETH),转出后合约余额变化极小,肉眼难以察觉。
  • 解决方式:在UI的金额输入逻辑中添加单位转换,比如用ethers.parseEther(inputValue)将ETH数值转为wei后传入;或直接传入wei格式的目标金额(如转出1 ETH需传入1000000000000000000)。

3. 确认合约状态与逻辑执行

  • 调用paused()函数,确认合约处于未暂停状态(返回false)。
  • 本地Hardhat节点测试验证:
    1. 部署合约并转入ETH;
    2. 传入正确wei数值调用withdraw;
    3. 检查是否触发EthWithdrawal事件,同时确认合约余额减少、owner地址余额增加。
      若本地测试正常,说明链上合约逻辑无问题,问题出在Scaffold-Eth的UI调用配置。

4. 排查转账调用的潜在异常

  • 代码中call{value: amount}可能因链上特殊Gas限制未执行成功,但未触发TransferFailed回退。可尝试给call指定最低Gas上限:
    (bool success, ) = payable(owner()).call{value: amount, gas: 2300}("");
    
  • 查看区块浏览器交易详情的Internal Transactions,确认是否存在合约向owner转账的内部交易。若无,则说明call未执行成功,需进一步排查链上转账规则。

内容的提问来源于stack exchange,提问作者Fergus Johnson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 09:47:19