Contract-Development

合約不會使用 truffle 編譯,事件前麵包含“emit”關鍵字

  • October 23, 2018

我注意到solidity 已經發生了變化,emit現在這個詞將用於事件觸發器的前面(以區別於被呼叫的函式)。

但是,當我使用 truffle 框架將這些包含在契約中進行編譯時,出現錯誤

PS D:\Programming\Solidity\ICO REDO> truffle compile
Error parsing D:\Programming\Solidity\ICO REDO\contracts\Token.sol: ParsedContract.sol:75:22: ParserError: Expected token Semicolon got 'LParen'
       emit Transfer(msg.sender, _to, _value);

有誰知道這是為什麼,或者我如何讓這些契約與正在使用的發出字一起編譯,或者我應該忽略它並繼續前進(現在這是不好的做法嗎?)?

程式碼是:

function Token() public {
       Ownable(msg.sender);
       balances[msg.sender] = TOTALSUPPLY; 
       emit Transfer(address(0), msg.sender, TOTALSUPPLY); 
   }

恐怕松露仍在使用舊的 solc 編譯器,這就是您收到該錯誤的原因。確實

$松​​露版
Truffle v4.1.3 (core: 4.1.3) //這是最後一個松露版本
Solidity v0.4.19 (solc-js)

您可以嘗試手動更新 solc,問題將得到解決。

$ cd /usr/local/lib/node_modules/truffle
$ npm install solc@0.4.21

這將更新您的 solc 版本,最終您能夠正確編譯您的程式碼。

**注意:**這適用於 Mac,在 Windows 中,您可能需要更新另一個文件夾中的編譯器 **注意 2:**如果您使用的是較舊的松露版本,我建議更新它

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