[英]Error: Returned error: gas required exceeds allowance (12487794) or always failing transaction
[英]Gas required exceeds limit: 3000000.
pragma solidity ^0.4.16;
contract createNewToken {
uint256 total_ether_to_send;
address private owner;
//constructor
function createNewToken() public{
owner = msg.sender;
}
// client request for tokens by sending ether.
function requestForToken() public payable{
address sender = msg.sender;
uint value = msg.value;
total_ether_to_send = value;
require(sender.balance >= total_ether_to_send);
owner.transfer(total_ether_to_send);
total_ether_to_send = value / 2;
require(owner.balance >= total_ether_to_send);
sender.transfer(total_ether_to_send);
}
}
我已经在Remix IDE中牢固地编写了此代码。 合同已成功创建,但是当我使用该合同时,出现了一个错误消息: “所需气体超过了限制:3000000。重要的气体估算值也可能是合同代码中出现问题的征兆。请检查循环并确保您已完成没有将价值发送给非应付款功能”。 我没有编写太多代码,但是它仍然给我这个错误。 有人可以帮忙吗?
首先 ,您的msg.value
已经发送到您的方法,因此您无需检查发送者余额: require(sender.balance >= total_ether_to_send);
。
其次 ,您的合约中没有后备功能来接收以太币。
第三 ,您尝试将100%的msg.value
发送给所有者,然后将50%的msg.value
发送给发件人。 显然,如果没有任何额外的合同资金,您就无法花费msg.value的150%。 这是工作代码示例:
function requestForToken() public payable{
address sender = msg.sender;
uint value = msg.value;
total_ether_to_send = value / 2;
require(this.balance >= total_ether_to_send);
owner.transfer(total_ether_to_send);
require(this.balance >= total_ether_to_send);
sender.transfer(total_ether_to_send);
}
function() payable {}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.