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

如何使用ERC777作为支付方式并校验支付成功以推进后续操作

ERC777 send方法支付成功校验方案

核心逻辑:ERC777失败自动回滚,无需返回值判断

ERC777代币标准和ERC20的设计逻辑不同,标准明确要求send方法遇到任何异常场景(包括但不限于付款方余额不足、未给合约授权对应额度、收款方地址不支持接收ERC777代币)时,必须直接回滚整个交易,不会继续执行后续代码。
只要token.send()这行代码执行完成后没有抛出异常,就已经说明代币转账100%成功,你可以直接执行后续的NFT转账逻辑,不需要额外做返回值判断。

可选:新增余额双重校验

如果你的业务场景需要更高的安全性,也可以在转账前后增加余额校验逻辑,进一步确认转账金额正确:

// ERC777 校验示例
uint256 sellerBeforeBalance = token.balanceOf(idToMarketItem[itemId].seller);
token.send(idToMarketItem[itemId].seller, amount, "");
uint256 sellerAfterBalance = token.balanceOf(idToMarketItem[itemId].seller);
require(sellerAfterBalance - sellerBeforeBalance == amount, "ERC777 transfer amount mismatch");
// 校验通过再执行NFT转账
IERC721(nftContract).transferFrom(address(this), msg.sender, tokenId);

注意事项

  • 不要用ERC20的返回值判断逻辑套用到ERC777上,两者的错误处理机制完全不同
  • 如果你调用的是符合ERC777标准的代币,不需要担心send成功但实际没到账的问题,不符合标准的代币不在通用方案覆盖范围内

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:09:01