Contract-Development
使用 Oraclize 為另一個合約變數賦值
我正在使用 oraclize 使用以下程式碼獲取價格資訊:
import "oraclizeAPI.sol"; contract PriceFeed is usingOraclize{ uint public BTCUSD; function PriceFeed(){ oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS); update(0); // first check at contract creation } function __callback(bytes32 myid, string result, bytes proof) { if (msg.sender != oraclize_cbAddress()) throw; BTCUSD = parseInt(result, 2); // save it as $ cents // The following line is what I do which ends up with the error message //MyContract.BTCUSD = BTCUSD; update(360); // schedule another check in 60 seconds } function update(uint delay){ oraclize_query(delay, "URL", "json(https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms=USD).USD"); } }
現在我在同一個文件中有第二個合約,它有一個名為 BTCUSD 的變數。當我從 oraclize 獲得回調時,我需要更新該變數。我嘗試了多種方法,使用 MyContract.BTCUSD = BTCUSD 樣式分配在兩個合約上編寫了 setter/getter 方法,但我得到了錯誤。
contract MyContract { uint public BTCUSD; }
我在 atom 上使用 linter,這些是我得到的錯誤,具體取決於我如何嘗試分配值:
在類型(契約 MyContract)中依賴參數查找後,成員“BTCUSD”未找到或不可見
正如@Thomas Bertani 在評論中提到的那樣,Oraclize 可以直接用於
MyContract
. 如果您需要使用 2 個合約,擴展他的評論,那麼您需要創建一個 setter,並在MyContract
. 例子:contract MyContract { uint public BTCUSD; function set(uint val) { BTCUSD = val; } } contract PriceFeed { function setVal(address addr) { MyContract(addr).set(2); } }