Created
September 6, 2021 10:43
-
-
Save xtremetom/b49e79d856e5082199e6e6f417639173 to your computer and use it in GitHub Desktop.
claim and reserve test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.8.0; | |
import '@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol'; | |
import '@openzeppelin/contracts/access/Ownable.sol'; | |
contract Reserve is ERC721Enumerable, Ownable { | |
string _baseTokenURI; | |
uint256 private _price = 0.04 ether; | |
mapping(address => uint256) public claimMap; | |
constructor(string memory baseURI) ERC721("Reserve", "R") { | |
setBaseURI(baseURI); | |
} | |
// pay at the point of reserving | |
// should stop ppl reserving and never claiming | |
function reserve(uint256 num) public payable { | |
require(num < 21, "You can adopt a maximum of 20"); | |
require(msg.value >= _price * num, "Ether sent is not correct"); | |
claimMap[msg.sender] += num; | |
} | |
// limit claim to help prevent gassing out | |
function claim(uint256 num) public { | |
uint256 supply = totalSupply(); | |
uint256 claimCount = claimMap[msg.sender]; | |
require(num >= claimCount, "Cant claim more than you own"); | |
require(num < 21, "You can claim a maximum of 20"); | |
for (uint256 i; i < claimCount; i++) { | |
_safeMint(msg.sender, supply + i); | |
} | |
// account for the claim | |
claimMap[msg.sender] -= num; | |
} | |
// standard minting | |
function adopt(uint256 num) public payable { | |
uint256 supply = totalSupply(); | |
require(num < 21, "You can adopt a maximum of 20"); | |
require(msg.value >= _price * num, "Ether sent is not correct"); | |
for (uint256 i; i < num; i++) { | |
_safeMint(msg.sender, supply + i); | |
} | |
} | |
function _baseURI() internal view virtual override returns (string memory) { | |
return _baseTokenURI; | |
} | |
function setBaseURI(string memory baseURI) public onlyOwner { | |
_baseTokenURI = baseURI; | |
} | |
function getReservedCount() public view returns (uint256){ | |
return claimMap[msg.sender]; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Code is not fully unit tested. Just a small experiment based on this tweet
https://twitter.com/0xfoobar/status/1434574225214296065