Solidity
編譯器版本不兼容噩夢
我是 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
。引入新版本是為了方便,而不是強制執行。