Solidity

問題讓一個簡單的 oraclize 範例工作,回調從未執行

  • September 23, 2019

我一直在嘗試部署和測試作為 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 中這樣做過。

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