Contract-Design

如何使用松露執行與“Oraclize”的契約?

  • January 29, 2017

這是契約程式碼。我已經從 Oraclize github repo 下載了“Oraclize API”(oraclizeAPI_0.4.sol)。我已將此文件添加到 truffle contracts 文件夾中,並將文件重命名為 usingOraclize.sol。它是在給定的契約中導入。

pragma solidity ^0.4.0;

import "./usingOraclize.sol";

contract ApiCall is usingOraclize {

      uint public DieselPriceUSD;

      function DieselPrice() {

               OAR = OraclizeAddrResolverI(0x920cd3f7ed02c5d61e2556308d53a4d9d1e58bf2); 
      }

      function __callback(bytes32 myid, string result) {
               if (msg.sender != oraclize_cbAddress()) throw;
                      DieselPriceUSD = parseInt(result, 2); 
      }

     function update() payable {
               oraclize_query("URL", "xml(https://www.fueleconomy.gov/ws/rest/fuelprices).fuelPrices.diesel");
    }

}

我已經成功編譯並部署了這個合約。然後嘗試使用以下方法呼叫可用的方法。

 contract.getCall().then(console.log);

但它返回以下錯誤。

Error: VM Exception while processing transaction: invalid JUMP at 7ed62a9ee27ba25842c0facef792865de53617fe32c09b7eb974a8bca5dd54c0/b8cd3e9aaf13b8823aa83f0f47f235943dac31c6:692

如何使用參數呼叫這個合約中的_callback函式?這個_callback中的這些參數是什麼意思?

如何在松露的 index.js 中使用這個 _callback?

我覺得你這裡有問題。你相信你的建構子是function DieselPrice(),而事實上它不是你的建構子,因為你的合約被呼叫了contract ApiCall

所以你OAR的總是空的。

另外,Oraclize 的乙太坊網路僅用於測試網和主網。當然不是 TestRPC。

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