我想请求一些帮助来开发一个铸币功能,该功能限制公共用户只铸币一个,铸币价格为 0(不包括汽油费)的 NFT - 在促销赠品的情况下。这甚至可能吗?我欢迎任何建议,甚至是补充集中式解决方案。
到目前为止,这是我的功能。目前,我可以限制免费铸币 NFT 数量的唯一方法是合约所有者执行铸币。但我希望公共用户执行此功能,特别是如果免费 NFT 的数量很多,因此会产生相关的 gas 费用。它基于 OpenZeppelin 合约:
contract MyTestContract is ERC721, ERC721Enumerable, Ownable {
bool public preLaunchActive = false;
uint256 public maxGiveAway = 3;
function myPreLaunchGiveAway(uint amount, address to) public onlyOwner {
require(preLaunchActive, "preLaunchActive state is not active.");
require(amount <= maxGiveAway, "No more available.");
require(amount > 0, "Amount must be greater than 0.");
for (uint i = 0; i < amount; i++) {
uint256 tokenId = totalSupply();
if (tokenId < maxGiveAway) {
_safeMint(to, tokenId);
}
}
maxGiveAway = maxGiveAway.sub(amount);
}
}