[英]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.