Solidity
VM 異常:當我呼叫第二個函式時跳轉無效
我正在嘗試使用 Solidity 瀏覽器
這是我的契約程式碼:
合約測試{ 映射(地址=> uint256)weismap; 函式賭注(uint vote)應付回報(uint256 weis){ 如果(msg.value==0)拋出; weismap[msg.sender]=msg.value; 返回weismap[msg.sender]; } 函式 test() 返回 (uint myVote) { 返回 1; } }
如果我設置為交易價值1
,創建合約並呼叫函式bet,參數為1
函式執行成功。
如果在那之後,我呼叫我得到的 test() 函式
虛擬機異常:無效的跳轉
任何想法,關於什麼是錯的?
您需要將
constant
關鍵字添加到test()
函式中,例如:pragma solidity ^0.4.0; contract Test { mapping (address => uint256) weismap; function bet(uint vote) payable returns (uint256 weis) { if (msg.value==0) throw; weismap[msg.sender]= msg.value; return weismap[msg.sender]; } function test() constant returns (uint myVote) { return 1; } }
使用值 2呼叫
bet(...)
。請注意,我在交易中也發送了 2 個乙太幣:現在我打電話
test()
AND 我留下了價值 2。此呼叫test()
失敗,因為常量函式被稱為事務,而不是從區塊鏈中讀取值:如果我呼叫
test()
AND 我已將 value 設置為 blank,則此呼叫test()
成功,因為常量函式被呼叫為從區塊鏈中讀取值: