問題讓一個簡單的 oraclize 範例工作,回調從未執行
我一直在嘗試部署和測試作為 Oraclize 範例提供的基本“SimpleDice”智能合約。
我不得不對其進行調整以使用solidity 0.4.2,但也許我遺漏了一些東西,也許Oraclize 出了問題。
智能合約可以在這裡找到:https ://testnet.etherscan.io/address/0xe1b0d1eecc126b96f94cf55e6cf525ccae4bf0d8
編輯:我還在https://testnet.etherscan.io/address/0xe25229cc19b5044f7cbe0c20abf9972c77b1e36c部署了第二份契約,平衡更多,這修復了無效跳轉但是我仍然看到沒有執行回調
我有以下程式碼(注意,usingOraclize.sol 是位於https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.4.sol的文件):
pragma solidity ^0.4.2; import "usingOraclize.sol"; contract SimpleDice is usingOraclize { address owner; mapping (bytes32 => address) bets; function SimpleDice(){ owner = msg.sender; } function() payable { if (msg.sender != owner) throw; } function __callback(bytes32 myid, string result) { if (msg.sender != oraclize_cbAddress()) throw; if (uint(bytes(result)[0]) - 48 > 3) { if (bets[myid].send(2 wei)) { log0("winner"); } } } function bet() payable { rollDice(); } function rollDice() { bytes32 myid = oraclize_query("WolframAlpha", "random number between 1 and 6"); bets[myid] = msg.sender; } function kill(){ if (msg.sender == owner) suicide(msg.sender); } }
這段程式碼編譯和部署得很好。但是請注意以下問題:
1)我第一次呼叫 bet() 它似乎工作正常。但是,正如您所見,Oraclize 從未執行過它應該執行的操作和/或從未呼叫過我的 __callback 函式
2)我跟注的後續時間,交易失敗,“無效跳轉目的地”
3)隨後的呼叫花費了大量的gas,每次都完全失去。
有誰知道到底發生了什麼?多謝!
來自Oraclize的 Thomas 在這裡。
該問題與 geth 相關,並且僅在 Morden 測試網上遇到過(事件過濾器都搞砸了——geth 中的確切問題仍在調查中)。
我們還在測試網上啟用了基於奇偶校驗的事件偵聽器 - 現在所有待處理的查詢(包括您的查詢)都已處理,對於延遲表示歉意。
您是否在請求中發送了足夠的乙太幣?費用也適用於現代!
我遇到了類似的問題,並且不得不在我的請求中發送大約 1 ETH(至少它當時有效,可能更少就足夠了,但 1 ETH 總是有效的)。當然,我只在 Morden 中這樣做過。