Go-Ethereum

由於gas不足,無法在乙太坊私有鏈上使用“乙太坊錢包”執行合約

  • January 4, 2017

我已經創建了乙太坊私有網路並開采了足夠的乙太幣。我已經部署了一個智能合約“Hello World”並嘗試執行已部署合約中的功能。

但是由於gas低,契約不會被執行。

顯示乙太幣開采的乙太坊錢包

錢包中的合約執行顯示氣體不足錯誤

我已經包含了契約程式碼供您參考。

pragma solidity ^0.4.2;

contract HelloWorld {
   uint public balance;

   function HelloWorld(){
            balance=1000;
   }
   function deposit(uint _value) returns (uint _newValue){
            balance += _value;
            return balance;    
   }
}

我已經使用 browsersolidity 和 truffle 成功地執行了這個合約。但它不會使用乙太坊錢包執行。

在solidity 0.4.0 之後,您需要為任何將接收的函式指定“payable”。它可以防止將乙太幣發送到不期望它並且不知道如何處理它的函式。正如您可能已經猜到的那樣,發送到非付費函式會像您所看到的那樣拋出。

只要您不通過消息發送價值,我看不出您現有契約不會執行的明顯原因。可能值得探索。

作為替代方案,我添加了應付賬款,因此您可以毫無例外地實際轉賬(螢幕截圖中似乎發送了 4 個)。還稍微調整了參數和內部結構,因此“值”是收到的實際值。

pragma solidity ^0.4.2;

contract HelloWorld {
   uint public balance;

   function HelloWorld(){
            balance=1000;
   }
   function deposit() payable returns (uint _newValue){
            balance += msg.value;
            return balance;    
   }
}

希望能幫助到你。

引用自:https://ethereum.stackexchange.com/questions/11095