Dapps
要求陣列長度無效
我有以下功能
function mint(uint256[] memory tokens) public payable { require(saleIsActive, "Sale is not active"); require(tokens.length == 0, "No tokens to mint"); require( tokens.length > maxGradisPurchase, "number of tokens incorrect" ); for (uint256 i = 0; i < tokens.length; i++) { _safeMint(msg.sender, tokens[i]); _setTokenURI(tokens[i], "sometokeuri"); _totalTokens.increment(); } }
但
require(tokens.length == 0, "No tokens to mint");
不起作用,這是我的 javascript 測試:it('should not allow to mint a gradis if token array is empty', async () => { // activate sales before test await myContractInstance.flipSaleState({ from: accounts[0] }); const tokensToMint = [1]; await myContractInstance.flipSaleState .mint(tokensToMint, { from: accounts[1], value: 1000000000000000, }) .catch((error) => { console.log(error); assert( error.message, 'Returned error: VM Exception while processing transaction: revert Sale is not active -- Reason given: Token is not correct.' ); }); const minted = await gradisInstance.totalSupply(); });
但是總是觸發要求,我不明白為什麼程式碼總是
token.length
等於零,即使我正在編寫正確的令牌
您說 require 不起作用並且令牌正在被鑄造,但這正如預期的那樣:
require(condition, revertString)
意味著如果條件為false,則事務將恢復。在您的情況下,由於您傳遞給滿足條件的函式參數(長度為 0 或 6 的令牌列表),因此不會觸發 require 並且令牌會按照您的描述進行鑄造。
如果您想測試它是否正常工作,只需將 4 項傳遞給它:
const tokensToMint = [1, 2, 3, 4]
."Token is not correct"
然後交易應該與您的消息一起恢復。