Solidity
混音:ParserError:預期的編譯指示。導入指令,或合約/庫/介面定義
我正在嘗試使用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 版本,您應該預計程式碼中會出現一些錯誤。