Solidity

混音:ParserError:預期的編譯指示。導入指令,或合約/庫/介面定義

  • December 3, 2020

我正在嘗試使用Remix與一套契約進行互動。使用的合約之一是 OpenZeppelin 的Ownable 合約。我從上面的連結複製,並將其粘貼到 Remix 中,並進行了一些更改以取出 OpenGSN 內容,並刪除了 Solidity 版本(由於套件中其他地方的要求):

pragma solidity ^0.5.0;

/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable {
   address private _owner;
   ....

這會產生以下錯誤:

ParserError: Expected pragma. import directive, or contract/library/interface definition
abstract contract Ownable {
^-------^

我已經嘗試過各種各樣的事情。通過此處的評論,我嘗試手動重新輸入第一行以及契約程式碼的第一行。我嘗試刪除abstract更新:我犯了一個錯誤,請參閱答案),我嘗試編造一個import,從 Solidity 版本中刪除插入符號(^),並在程式碼中進行一般的胡鬧以使其工作。沒有什麼能擺脫這個錯誤。

這個精確錯誤還有許多其他問題,儘管我無法從我所看到的任何問題中推斷出為什麼會出現這裡錯誤。

為什麼我會收到此錯誤?

abstract關鍵字已在 Solidity 版本 0.6.0 中引入。

只需將您的契約從 0.5.0 版本更新到 0.6.0,或者,如果不能,將其更改為與 0.5.0 版本兼容。這個關於兩個版本之間的重大變化的頁面可以幫助你很多:(https://docs.soliditylang.org/en/v0.6.0/060-break-changes.html)。

請注意,0penZeppelin Ownable 合約使用的 pragma 指令是pragma solidity >=0.6.0 <0.8.0;. 如果您使用以前的 Solidity 版本,您應該預計程式碼中會出現一些錯誤。

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