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

当Payable函数未通过require校验时会发生什么?合约是否退还用户资金?

Payable函数未通过require校验的结果说明

当Payable函数中的require校验未通过时,会触发以下结果:

  • 事务完全回滚:EVM会撤销该事务中所有已执行的状态变更操作。以提供的示例代码为例,如果age < 18,logs[msg.sender] = msg.value;这行代码不会被执行,合约的状态不会发生任何改变。
  • 用户资金自动退还:调用者转入合约的ETH会被原路退回到msg.sender的地址,合约不会留存这笔资金。

简单来说,require校验失败会直接终止函数执行,同时回滚所有状态并返还用户转入的资金,相当于这次调用从未发生过(除了已消耗的Gas,因你明确说明不涉及Gas费用咨询,此处不再展开)。

示例代码:

function deposit(uint age) payable {
 require(age >= 18, "Sorry you should be 18+ to deposit");
 logs[msg.sender] = msg.value;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:15:36