Solidity
Solidity:ParserError:預期的編譯指示、導入指令或契約/介面/庫定義。功能
我將 Truffle 與 Ganache 一起使用,但無法執行此程式碼:
pragma solidity >=0.4.21<0.6.0; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/utils/Counters.sol"; contract UniqueAsset is ERC721{ using Counters for Counters.Counter; Counters.Counter private _tokenIds; mapping(string => uint8) hashes; constructor() public ERC721("UniqueAsset", "UNA") {} } function awardItem(address recipient, string memory hash, string memory metadata) public returns (uint256) { require(hashes[hash] != 1); hashes[hash] = 1; _tokenIds.increment(); uint256 newItemId = _tokenIds.current(); _mint(recipient, newItemId); _setTokenURI(newItemId, metadata); return newItemId; }
它向我顯示以下錯誤:
:15:1: ParserError: Expected pragma, import directive or contract/interface/library definition. function awardItem(address recipient, string memory hash, string memory metadata) ^------^
有人知道有什麼問題嗎?
您需要更改許多內容:
- 您的 pragma 語句在版本之間需要一個空格。將其更改為
pragma solidity >=0.4.21 <0.6.0;
- 您導入的 OpenZeppelin 合約需要 Solidity 0.8.0 或更高版本。您將需要更改您的 pragma 聲明以反映這一點
- 在建構子之後的第 13 行有一個右括號。那不應該在那裡——將它移到文件的末尾。
_setTokenURI()
不是您要導入的契約的功能。在這裡查看更多。