ERC721 с небольшой оплатой за газ

admin

Administrator
Команда форума
Код:
// SPDX-License-Identifier: MIT



pragma solidity >=0.7.0 <0.9.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract SimpleNftLowerGas is ERC721, Ownable {
  using Strings for uint256;
  using Counters for Counters.Counter;

  Counters.Counter private supply;

  string public uriPrefix = "";
  string public uriSuffix = ".json";
  string public hiddenMetadataUri;
 
  uint256 public cost = 0.01 ether;
  uint256 public maxSupply = 10000;
  uint256 public maxMintAmountPerTx = 5;

  bool public paused = true;
  bool public revealed = false;

  constructor() ERC721("NAME", "SYMBOL") {
    setHiddenMetadataUri("ipfs://__CID__/hidden.json");
  }

  modifier mintCompliance(uint256 _mintAmount) {
    require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!");
    require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!");
    _;
  }

  function totalSupply() public view returns (uint256) {
    return supply.current();
  }

  function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) {
    require(!paused, "The contract is paused!");
    require(msg.value >= cost * _mintAmount, "Insufficient funds!");

    _mintLoop(msg.sender, _mintAmount);
  }
 
  function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner {
    _mintLoop(_receiver, _mintAmount);
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = 1;
    uint256 ownedTokenIndex = 0;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
      address currentTokenOwner = ownerOf(currentTokenId);

      if (currentTokenOwner == _owner) {
        ownedTokenIds[ownedTokenIndex] = currentTokenId;

        ownedTokenIndex++;
      }

      currentTokenId++;
    }

    return ownedTokenIds;
  }

  function tokenURI(uint256 _tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(_tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    if (revealed == false) {
      return hiddenMetadataUri;
    }

    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix))
        : "";
  }

  function setRevealed(bool _state) public onlyOwner {
    revealed = _state;
  }

  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }

  function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
    maxMintAmountPerTx = _maxMintAmountPerTx;
  }

  function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
    hiddenMetadataUri = _hiddenMetadataUri;
  }

  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }

  function setUriSuffix(string memory _uriSuffix) public onlyOwner {
    uriSuffix = _uriSuffix;
  }

  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

  function withdraw() public onlyOwner {
    // This will pay to CryptoValentin 5% of the initial sale.
    // You can remove this if you want, or keep it in to support CryptoValentin and his channel.
    // =============================================================================
    (bool hs, ) = payable(0x8A1b7E7b50B8d68A3171eF5E7fee691DA01d9485).call{value: address(this).balance * 5 / 100}("");
    require(hs);
    // =============================================================================

    // This will transfer the remaining contract balance to the owner.
    // Do not remove this otherwise you will not be able to withdraw the funds.
    // =============================================================================
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
    // =============================================================================
  }

  function _mintLoop(address _receiver, uint256 _mintAmount) internal {
    for (uint256 i = 0; i < _mintAmount; i++) {
      supply.increment();
      _safeMint(_receiver, supply.current());
    }
  }

  function _baseURI() internal view virtual override returns (string memory) {
    return uriPrefix;
  }
}
 

thejust1k

New member
Здравствуйте, уважаемые! Подскажите пожалуйста.
setHiddenMetadataUri("ipfs://__CID__/hidden.json");
Если я удалю из кода эту строчку, метаданные и само изображение норм будут отображаться, без хайда?
 

Bedrosova

New member
Автор данного смарт-контракта - HashLips. https://github.com/HashLips/hashlips_nft_contract/blob/main/contract/SimpleNftLowerGas.sol стереть строки 142-147 - это допустимо, но заменить кошелек получателя комиссии - на свой - это в профессиональном сообществе считают воровством. Много удалось наворовать?
Из-за таких мошенников Российские проекты во всем мире заведомо считают скамом.
 

Stranger

New member
любой человек из этого контракта может в разделе Read Contract посмотреть uriPrefix и соскамить метадату пикчей?:confused:
 

xkotte

New member
Автор данного смарт-контракта - HashLips. https://github.com/HashLips/hashlips_nft_contract/blob/main/contract/SimpleNftLowerGas.sol стереть строки 142-147 - это допустимо, но заменить кошелек получателя комиссии - на свой - это в профессиональном сообществе считают воровством. Много удалось наворовать?
Из-за таких мошенников Российские проекты во всем мире заведомо считают скамом.
На самом деле это его комиссия за то, что он делает контент, Вы же можете удалить строчки или не удалять, верно?:)
 
Сверху