HashLips来源ERC-721合约预期铸造1个NFT却每次产出2个故障咨询
问题根源
你代码中的mint函数循环条件书写错误,是导致每次铸造多生成1个NFT的核心原因。
原代码的循环逻辑如下:
for (uint256 i = 0; i <= _mintAmount; i++) { //start the index at 0 _safeMint(_to, supply + i); }
你使用了<=比较符,当传入的_mintAmount为1时,循环会执行2次:
- 第一次i=0,满足
0 <= 1,铸造1个NFT - 第二次i=1,满足
1 <= 1,再铸造1个NFT
两次执行结束后刚好生成2个NFT,和你遇到的现象完全一致。这个问题也会影响其他铸造数量的调用,比如传入_mintAmount=3时,原代码会铸造4个NFT,和你设置的maxMintAmount=3规则冲突。
修复方案
把循环条件里的<=改成<即可,修改后代码如下:
for (uint256 i = 0; i < _mintAmount; i++) { //start the index at 0 _safeMint(_to, supply + i); }
修改后当传入_mintAmount = 1时,只有i=0满足0 < 1的条件,循环仅执行1次,刚好铸造1个NFT,符合预期。同时该修改也适配你设置的maxMintAmount=3、maxSupply=3的规则,不会出现超量铸造的问题。
内容的提问来源于stack exchange,提问作者Meowsleydale
相关产品推荐
相关产品推荐

