所以我试图从智能合约中向用户发送一些以太币,但我无法用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
。在您的松露中。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;