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

NFT接受出价场景下nft_transfer_call的receiver_id应为市场还是新买家?

结论

nft_transfer_call的receiver_id必须填写市场合约地址。

原因

按照NEP-171标准的设计逻辑,nft_transfer_call会先将NFT转移给你填写的receiver_id地址,再主动调用该地址的nft_on_transfer接口执行后续自定义逻辑:

  • 如果你填出价人地址作为receiver_id,NFT会直接转移给普通用户地址,普通地址没有实现nft_on_transfer接口,你需要的收益分发、移除出价等逻辑完全无法执行,流程直接中断。
  • 填市场合约地址作为receiver_id,NFT会先临时归属到市场合约名下,再触发市场合约的nft_on_transfer接口,你可以在这个接口内完成份额打款、移除出价等所有交易校验和执行逻辑。

后续流程优化建议

你的nft_resolve_transfer入参里的receiver_id直接填最开始传入的市场合约地址即可,不需要填写出价人地址。
等市场合约逻辑全部执行成功后,你有两种方式完成NFT最终归属:

  • 直接在nft_on_transfer逻辑末尾,由市场合约调用NFT合约的普通nft_transfer方法,将名下的对应NFT转移给出价人
  • 把出价人地址信息通过msg参数或者NFT合约的临时存储传递给nft_resolve_transfer接口,校验市场逻辑执行成功后,直接在NFT合约内部修改NFT所有者为出价人,省掉一次跨合约调用,降低Gas消耗。

内容的提问来源于stack exchange,提问作者Yassine S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 12:54:03