簡體   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