Advertisement
Guest User

Untitled

a guest
May 25th, 2022
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.05 KB | None | 0 0
  1. // SPDX-License-Identifier: MIT
  2.  
  3. pragma solidity ^0.8.0;
  4. import "hardhat/console.sol";
  5.  
  6. import '@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol';
  7. import '@openzeppelin/contracts/access/Ownable.sol';
  8.  
  9. contract ArtDistilled is ERC721Enumerable, Ownable {
  10. using Strings for uint256;
  11.  
  12. string _baseTokenURI;
  13.  
  14. bool public paused = true;
  15. bool public onlyWhitelisted = true;
  16. mapping(address => bool) public whitelistedAddresses;
  17. mapping(address => uint) public mintedAddress;
  18.  
  19. uint256 private _phaseLimit = 2500;
  20. uint256 private _reserved = 100;
  21. uint256 private _price = 0.05 ether;
  22. address private _vault = 0x8c606755f7c9F56b7660615C17e8c3f87d2E7c20;
  23.  
  24. constructor(string memory baseURI) ERC721("ArtHouse Spirits", "AHSD") {
  25. setBaseURI(baseURI);
  26. }
  27. function _baseURI() internal view virtual override returns (string memory) {
  28. return _baseTokenURI;
  29. }
  30. function getPrice() external view returns (uint256){
  31. return _price;
  32. }
  33. function getURI() external view returns (string memory){
  34. return _baseTokenURI;
  35. }
  36. function checkWhitelist(address wallet) external view returns (bool){
  37. return whitelistedAddresses[wallet];
  38. }
  39.  
  40. function mint(uint256 num) public payable {
  41. uint256 supply = totalSupply() + 1;
  42. require(!paused, "Sale paused" );
  43. require(num <= 3, "You can mint a maximum of 3 NFTs" );
  44. require(mintedAddress[msg.sender] + num <= 3, "Wallet cant mint only 3 NFTs" );
  45. require(supply + num < 20000 - _reserved, "Exceeds maximum NFT supply" );
  46. require(supply + num < _phaseLimit, "Can't mint more NFTs in this phase" );
  47. require(msg.value >= _price * num, "Ether sent is not correct" );
  48.  
  49. if(onlyWhitelisted == true) {
  50. require(whitelistedAddresses[msg.sender], "Wallet is not whitelisted");
  51. }
  52.  
  53. for(uint256 i; i < num; i++){
  54. _safeMint(msg.sender, supply + i );
  55. mintedAddress[msg.sender] += 1;
  56. }
  57. (bool success, bytes memory data) = payable(_vault).call{value: msg.value}("");
  58. require(success, "Can't transfer money" );
  59.  
  60. }
  61. function walletOfOwner(address _owner) public view returns(uint256[] memory) {
  62. uint256 tokenCount = balanceOf(_owner);
  63. uint256[] memory tokensId = new uint256[](tokenCount);
  64. for(uint256 i; i < tokenCount; i++){
  65. tokensId[i] = tokenOfOwnerByIndex(_owner, i);
  66. }
  67. return tokensId;
  68. }
  69.  
  70.  
  71. //@dev Owner setting set up
  72. function giveAway(address _to, uint256 _amount) external onlyOwner() {
  73. require( _amount <= _reserved, "Exceeds reserved NFT supply" );
  74.  
  75. uint256 supply = totalSupply()+1;
  76. for(uint256 i; i < _amount; i++){
  77. _safeMint( _to, supply + i );
  78. }
  79.  
  80. _reserved -= _amount;
  81. }
  82. function setVaultAddress(address newAddress) external onlyOwner() {
  83. _vault = newAddress;
  84. }
  85. function withdrawAll() external onlyOwner() {
  86. (bool success, bytes memory data) = payable(_vault).call{value: address(this).balance}("");
  87. require(success, "Can't transfer" );
  88. }
  89. function setPhaseLimit(uint limit) external onlyOwner() {
  90. _phaseLimit = limit;
  91. }
  92. function setBaseURI(string memory baseURI) public onlyOwner() {
  93. _baseTokenURI = baseURI;
  94. }
  95. function setPrice(uint256 newPrice) external onlyOwner() {
  96. _price = newPrice;
  97. }
  98. function setPause(bool newState) external onlyOwner() {
  99. paused = newState;
  100. }
  101. function setOnlyWhitelisted(bool state) external onlyOwner() {
  102. onlyWhitelisted = state;
  103. }
  104. function whitelistUsers(address[] calldata wallets, bool state) external onlyOwner() {
  105. for(uint256 i; i < wallets.length; i++){
  106. whitelistedAddresses[wallets[i]] = state;
  107. }
  108. }
  109.  
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement