Solidity

Solidity:ParserError:預期的編譯指示、導入指令或契約/介面/庫定義。功能

  • April 3, 2021

我將 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()不是您要導入的契約的功能。在這裡查看更多。

引用自:https://ethereum.stackexchange.com/questions/96649