Solidity

發送 eth 時不會呼叫備份函式

  • July 12, 2017

使用此程式碼,在創建合約時(在 tx 中發送一些 eth),不應該呼叫 fallback 函式嗎?那麼狀態變數回饋不應該是“正確呼叫備份函式”嗎?我錯過了什麼?我在 Javascript VM 上執行契約。

contract MyToken {

   mapping (address => uint256) public balanceOf;
   string name;
   string symbol;
   uint8 decimals; 
   string fallback;

   function MyToken(uint256 initialSupply, string tokenName, string tokenSymbol) payable {
       balanceOf[msg.sender] = initialSupply;             
       name = tokenName;
       symbol = tokenSymbol;
       decimals = 18;
       fallback = "Fallback not called!";
   }

   function feedBack() {
       fallback = "Fallback function correctly called!";
   }

   function getFeedback() constant returns(string) {
       return fallback;
   }

   function() payable {
       feedBack();
   }
}

合約部署的輸出:

在此處輸入圖像描述

當您創建合約(在 remix + javascript VM 中)並在交易中設置一些乙太幣時,您將執行然後合約的建構子 function MyToken將返回 fallback = "Fallback not called!";

以執行您的備份函式,您需要向合約發送具有價值的交易(沒有 fct 呼叫)因為我知道這在 javscript VM 中是不可能的(您需要在本地部署它,或者您可以直接呼叫回退函式)。

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