繁体   English   中英

所需气体超过限制:3000000。

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM