Contract-Design

如何在 dapp 前端顯示 Oraclize 的 _callback 函式返回的結果?

  • January 31, 2017

我使用 testrpc 作為客戶端,使用 truffle 作為開發框架。並且還使用 ethereum-bridge 進行 Oraclize。

這是契約程式碼。我已經從 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 ApiCall() {

               OAR = OraclizeAddrResolverI(0x9851eb2d10b765d8857e7e1b060bc1eb166e89f2);
       }

       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");
        }

    }

連結“ https://www.fueleconomy.gov/ws/rest/fuelprices ”中的 XML 文件如下。

    <fuelPrices>
         <cng>2.06</cng>
         <diesel>2.57</diesel>
         <e85>1.93</e85>
         <electric>0.13</electric>
         <lpg>2.68</lpg>
         <midgrade>2.58</midgrade>
         <premium>2.82</premium>
         <regular>2.33</regular>
 </fuelPrices>

我使用“truffle”編譯了契約 在此處輸入圖像描述 Oraclize 使用 ethereum-bridge 將結果柴油價格返回為“2.57”。

在此處輸入圖像描述

我想使用 index.js 文件中的結果在前端顯示。如何在 dapp 前端使用結果?

當您在契約中獲得結果時,將其記錄為事件。使用 web3.js 或 ethjs,編寫 JavaScript 程式碼來偵聽該事件(請參閱watch或的文件filter),並將其顯示在您的 HTML 頁面上。

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