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

GMP调用Gas不足未补充的执行后果及链上通知安全问询

GMP调用Gas不足的结果及相关问题解答

一、Gas不足且未补充的直接结果

当发起GMP(通用消息传递)调用时提供的Gas不足,且未通过UI或编程方式补充Gas,源链上的callContract交易本身不会回滚——只要源链上执行该调用的基础Gas足够完成消息提交到Axelar网关的操作,交易就会在源链确认。但目标链上的合约调用会因预留Gas不足以覆盖执行逻辑而失败回滚,跨链消息无法在目标链完成执行。

二、指定调用是否会回滚?

你先执行以下代码:

GAS_RECEIVER.payNativeGasForContractCall{value: msg.value}(address(this), destinationChain, destContract, payload, msg.sender);

再执行:

AXELAR_GATEWAY.callContract(destinationChain, destContract, payload);

这个流程中:

  • 只要源链上这两个调用的执行Gas足够(比如能完成向网关提交消息、支付Gas的操作),源链交易不会回滚,消息会成功提交到Axelar跨链系统。
  • 但如果payNativeGasForContractCall传入的msg.value对应的目标链Gas不足以覆盖目标合约执行所需Gas,目标链上的合约调用会失败回滚,源链交易不受影响。

三、获取Gas不足未执行的链上通知的安全事项

要在目标链调用因Gas不足失败时获得链上通知,需注意以下安全要点:

  • 在目标合约中添加失败回调逻辑:用try/catch包裹核心执行代码,当执行失败(包括Gas不足)时,发射包含调用信息、失败原因的事件。需确保回调逻辑本身所需Gas足够,避免连事件都无法发射。
  • 验证回调来源合法性:如果通过Axelar的回调机制接收通知,必须验证回调发送者是Axelar官方网关合约,防止攻击者伪造失败通知。
  • 防范重入攻击:处理失败通知的回调函数中,避免调用外部不可信合约,或使用重入锁机制,防止恶意利用回调发起重入攻击。
  • 保证事件数据完整性:发射的失败事件需包含源链地址、交易ID、目标合约方法、失败类型(明确标记Gas不足)等关键信息,方便后续查询与验证。
  • 预留通知逻辑的冗余Gas:调用payNativeGasForContractCall时,除目标合约执行所需Gas外,额外预留部分Gas用于失败通知的事件发射或回调执行,避免因通知逻辑Gas不足导致无法发出通知。

内容的提问来源于stack exchange,提问作者mohamed abu younes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 22:57:55