Solidity

編譯器版本不兼容噩夢

  • May 10, 2020

我是 Solidity 和 Truffle 的新手。我正在嘗試在 Truffle 中編譯我的 Solidity 程式碼以創建 ERC-20 令牌。我有@truffle/hdwallet-provider並且@openzeppelin/contracts作為我的依賴。現在,我只有兩個 Solidity 文件,它們都有pragma solidity ^0.6.0;. 我一直在解除安裝並重新安裝到不同的版本,並將編譯器版本truffle-config.js更改為錯誤消息告訴我更改以及更改我擁有的兩個文件中的 pragma solidity 版本。我還必須更改節點模組中的各個文件以適應正確的版本。

最後,我認為版本從更改^0.6.2^0.6.0破壞了Address.sol節點模組中合約的實用程序文件夾中呼叫的文件:

   function sendValue(address payable recipient, uint256 amount) internal {
       require(address(this).balance >= amount, "Address: insufficient balance");

       (bool success, ) = recipient.call{ value: amount }(""); // here
       require(success, "Address: unable to send value, recipient may have reverted");
   }

錯誤資訊顯示:

ParserError:預期的’;’ 但得到了’{'

指示緊隨其後的點call

首先,我該如何解決這個問題?其次,每次 Truffle、Solidity 或我的任何依賴項有更新時,我應該期待這個版本不兼容問題嗎?

編譯停止工作​​的原因是因為執行 a 的方式call僅在Solidity0.6.2中可用:

允許在外部函式呼叫中使用c.f{gas: 10000, value: 4 ether}().

在此之前0.6.2,您必須使用c.gas(_gasLimit).value(_value)(_data);

此更改只是一項附加功能,而不是重大更改。您可以將後一種call格式用於任何版本的solidity,包括pre-和post- 0.6.2。引入新版本是為了方便,而不是強制執行。

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