ERC4907合约_beforeTokenTransfer函数编译参数数量错误排查
解决ERC4907 + OpenZeppelin ERC721编译错误:_beforeTokenTransfer参数不匹配
问题场景
使用以下工具链开发NFT市场:
- Truffle v5.6.8
- Ganache v7.5.0
- Solidity v0.5.16
基于ERC4907智能合约开发时,编译触发错误:_beforeTokenTransfer函数调用传入3个参数,却被预期传入4个。即使参考官方ERC4907实现代码,问题依然存在。
问题原因
OpenZeppelin的ERC721合约在2022-11-08进行了破坏性更新,为_beforeTokenTransfer函数新增了uint256 batchSize参数,导致旧版ERC4907实现中仅传3个参数的调用方式与新版ERC721的函数签名不兼容。
解决方案
修改ERC4907合约中调用_beforeTokenTransfer的代码,补充batchSize参数。由于ERC4907针对单NFT操作,该参数通常传入1:
// 原调用(报错) _beforeTokenTransfer(from, to, tokenId); // 修改后(正常编译) _beforeTokenTransfer(from, to, tokenId, 1);
内容的提问来源于stack exchange,提问作者Roshinie Jayasundara
相关产品推荐
相关产品推荐

