【问题标题】:Solidity transaction error: The called function should be payable if you send value and the value you send should be less than your current balanceSolidity 交易错误:调用的函数应该是 payable if you send value 并且你发送的值应该小于你当前的余额
【发布时间】:2023-01-21 06:04:12
【问题描述】:
我试图在合约之间发送一些以太币,但我收到了这个错误:
事务已恢复到初始状态。
注意:如果您发送价值,并且您发送的价值应小于您的当前余额,则调用的函数应该是可支付的。
调试事务以获取更多信息。
我的合同:
contract test {
address public owner;
address payable public receiverContract;
constructor(address payable _receiverContract) payable{
receiverContract = _receiverContract;
owner = msg.sender;
}
function sendEther() public payable {
receiverContract.transfer(msg.value);
}
receive() external payable {
}
}
接收方合约也有一个 receive() external payable 函数,当我用一些以太币调用 sendEther() 并且在用一些以太币播种测试合约后出现错误
【问题讨论】:
标签:
ethereum
solidity
evm
【解决方案1】:
该消息表明您应该添加一个要求来测试用户是否确实拥有他试图发送到合约的以太币。
address public owner;
address payable public receiverContract;
constructor(address payable _receiverContract) payable{
receiverContract = _receiverContract;
owner = msg.sender;
}
function sendEther() public payable {
require(address(this).balance > msg.value, "Not enough funds" );
receiverContract.transfer(msg.value);
}
receive() external payable {
}
} ```