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;
所以我正在尝试从智能合约向用户发送一些以太币,但我无法用 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;