我正在用safeTransferFrom和onlyAllowedOperator一起为NFT编写测试,测试在onlyAllowedOperator和不带D2时都失败了。以下是功能:
function safeTransferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) {
safeTransferFrom(from, to, tokenId);
}下面是一个测试:
describe("ERC721: safeTransferFrom()", function () {
it("safeTransferFrom(): Safe Transfer From owner to newOwner (address)", async function () {
const { nft, owner, operator, newOwner, newOperator, minter } = await loadFixture(deployNFTFixture);
await nft.mintTo(owner.address); // 1
expect(await nft.balanceOf(owner.address)).to.equal(1);
expect(await nft.balanceOf(newOwner.address)).to.equal(0);
await nft.functions["safeTransferFrom(address,address,uint256)"](owner.address, newOwner.address, 1);
expect(await nft.balanceOf(owner.address)).to.equal(0);
expect(await nft.balanceOf(newOwner.address)).to.equal(1);
});
});当我运行测试时,我会收到以下消息:
ERC721: safeTransferFrom()
safeTransferFrom(): Safe Transfer From owner to newOwner (address) fails:
Error: Transaction reverted and Hardhat couldn't infer the reason.
at NFT.safeTransferFrom (contracts/NFT.sol:315)
...
at NFT.safeTransferFrom (contracts/NFT.sol:315)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at runNextTicks (node:internal/process/task_queues:65:3)
at listOnTimeout (node:internal/timers:526:9)
at processTimers (node:internal/timers:500:7)
at async HardhatNode._mineBlockWithPendingTxs (node_modules/hardhat/src/internal/hardhat-network/provider/node.ts:1815:23)
at async HardhatNode.mineBlock (node_modules/hardhat/src/internal/hardhat-network/provider/node.ts:504:16)
at async EthModule._sendTransactionAndReturnHash (node_modules/hardhat/src/internal/hardhat-network/provider/modules/eth.ts:1522:18)我不知道为什么这些代币不被转移。
发布于 2023-01-27 14:53:40
我认为您必须将此写入您的实体文件(添加super.):
function safeTransferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) {
super.safeTransferFrom(from, to, tokenId);
}否则,函数看起来就像在一次又一次地调用自己。
https://ethereum.stackexchange.com/questions/143739
复制相似问题