简体   繁体   中英

How do I declare the identifier in this smart contract in remix?

Need to identify totalSupply.

If you find any potential errors or something that can cause an issue, I would highly appreciate you for helping me, preventing any errors in the future.

To avoid adding parameters, because I don't know how to put them into the contract when verification happens

How can I add in the name, symbol in the contract I believe those will be strings and the maxNftSupply as 10000 and the saleStart time those would be uints.

If I can have a verbal conversation with someone that can help, I would love that opportunity.

contract TestMB is ERC721, Ownable { using SafeMath for uint256;

string public TEST_PROVENANCE = "";

uint256 public startingIndexBlock;

uint256 public startingIndex;

uint256 public constant testPrice = 80000000000000000; //0.08 ETH

uint public constant maxTestPurchase = 20;

uint256 public MAX_TEST;

bool public saleIsActive = false;

uint256 public REVEAL_TIMESTAMP;

constructor(string memory name, string memory symbol, uint256 maxNftSupply, uint256 saleStart) ERC721(name, symbol) {
    MAX_TEST = maxNftSupply;
    REVEAL_TIMESTAMP = saleStart + (86400 * 9);
}

function withdraw() public onlyOwner {
(bool os, ) = payable(owner()).call{value: address(this).balance}('');
require(os);

}

function reserveTest() public onlyOwner {        
    uint supply = totalSupply();
    uint i;
    for (i = 0; i < 30; i++) {
        _safeMint(msg.sender, supply + i);
    }
}

function setRevealTimestamp(uint256 revealTimeStamp) public onlyOwner {
    REVEAL_TIMESTAMP = revealTimeStamp;
} 

/*     
* Set provenance once it's calculated
*/
function setProvenanceHash(string memory provenanceHash) public onlyOwner {
    TEST_PROVENANCE = provenanceHash;
}

function setBaseURI(string memory _setBaseURI) public onlyOwner {
    setBaseURI = _setBaseURI;
}

function flipSaleState() public onlyOwner {
    saleIsActive = !saleIsActive;
}

function mintTest(uint numberOfTokens) public payable {
    require(saleIsActive, "Sale must be active to mint Test");
    require(numberOfTokens <= maxTestPurchase, "Can only mint 20 tokens at a time");
    require(totalSupply().add(numberOfTokens) <= MAX_TEST, "Purchase would exceed max supply of Test");
    require(testPrice.mul(numberOfTokens) <= msg.value, "Ether value sent is not correct");
    
    for(uint i = 0; i < numberOfTokens; i++) {
        uint mintIndex = totalSupply();
        if (totalSupply() < MAX_TEST) {
            _safeMint(msg.sender, mintIndex);
        }
    }


    if (startingIndexBlock == 0 && (totalSupply() == MAX_TEST || block.timestamp >= REVEAL_TIMESTAMP)) {
        startingIndexBlock = block.number;
    } 
}


function setStartingIndex() public {
    require(startingIndex == 0, "Starting index is already set");
    require(startingIndexBlock != 0, "Starting index block must be set");
    
    startingIndex = uint(blockhash(startingIndexBlock)) % MAX_TEST;
  
    if (block.number.sub(startingIndexBlock) > 255) {
        startingIndex = uint(blockhash(block.number - 1)) % MAX_TEST;
    }

    if (startingIndex == 0) {
        startingIndex = startingIndex.add(1);
    }
}


function emergencySetStartingIndexBlock() public onlyOwner {
    require(startingIndex == 0, "Starting index is already set");
    
    startingIndexBlock = block.number;
}

}

Your contract inherits from ERC721 instead of ERC721Enumerable , which contains the totalSupply() function, while ERC721 does not. What you can do is import ERC721Enumerable into the contract and have it inherit like so:

contract TestMB is ERC721, ERC721Enumerable, Ownable {}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM