Truffle 无法编译,但 remix 可以

Truffle doesn't compile but remix does

所以我正在尝试从智能合约向用户发送一些以太币,但我无法用 truffle 对其进行编译,它确实在 remix 上进行编译,所以我找不到问题所在,一切除此功能外编译正常,有人知道是什么原因造成的吗?

function sendEther(address _to, uint _amount) public returns(bool){
    require(address(this).balance >= _amount);
    (bool success, bytes memory data) = payable(_to).call{value: _amount}("");
    require(success, "Failed to send Ether");
    return true;
}

function sellTokens(uint _amount) public{
    uint etherAmount = _amount / rate;
    token.transferFrom(msg.sender, address(this), _amount);
    sendEther(msg.sender, etherAmount);
    emit TokensSold(msg.sender, address(token), _amount, rate);
}   

它抛出一个解析错误:

expected primary expression when the call function is called.

您的消息表明这一行:

 (bool success, bytes memory data) = payable(_to).call{value: _amount}("");

语法正确。 truffle 未编译的原因可能是您使用的是旧的 solc 版本。如果你没有在 truffle 配置中设置 solc 版本,我认为默认情况下 truffle 使用版本 5.6。在你的 truffle.config.js

compilers: {
    solc: {
     // adjus tthis based on contract's solidity version
      version: "0.8.4",
    }
  }

合约上的 solidity 版本不需要正好是“0.8.4”。你可以这样设置:

pragma solidity >=0.4.22 <0.9.0;