我想了解如何将免费的ERC721或ERC20令牌提供给特定的NFT所有者地址。例如,无聊的Ape游艇俱乐部创造了一个ERC20硬币,它的数量是预先确定的,只能向BAYC的所有者索赔。我试图在他们的智能契约中找到答案,但我找不到他们的ERC20硬币合约,因此我不知道如何限制硬币的分发。
在我的项目中,我希望创建2个ERC721智能契约,第一个合同中的NFT的所有所有者都应该能够创建来自第二个智能契约的免费NFT。如果您是智能合同1的NFT的所有者,您可以从智能合同2中获得免费的NFT。
发布于 2022-07-08 17:29:00
在第二个智能契约中,您可以检查mint函数的调用方是否是第一个智能契约的令牌持有者。
function mint() external {
require(IERC721(_firstToken).balanceOf(msg.sender) > 0, 'should be a holder of the first token');
_mint();
}您可以从ERC721导入openzeppelin文库接口,也可以直接从EIP-721中剪切和粘贴。
发布于 2022-07-11 07:43:38
对于每个单个nftTwo令牌可以创建多少nftOne令牌,必须有一些限制。否则,您将被利用,用户将能够制造无限数量的nftTwo令牌。
IERC721 public nftOne;
uint public nftTwoMaxMintCount;
mapping(uint => uint) public nftTwoMints;
function mintNftTwo(uint nftOneTokenId) external {
// Only the owner of nftOne token can execute mint
require(msg.sender == nftOne.ownerOf(nftOneTokenId), "not the owner of nftOne token");
// The number of allowed nftTwo token mints is limited by nftTwoMaxMintCount
require(nftTwoMints[nftOneTokenId] <= nftTwoMaxMintCount, "nftTwo token mints overflow");
// Increment the number of minted nftTwo tokens per nftOne token id
nftTwoMints[nftOneTokenId] += 1;
// Execute mint
_mintNftTwo();
}请查看OpenZeppelin的ERC721实现并阅读他们的文档以获得更多细节。
https://stackoverflow.com/questions/72914296
复制相似问题