// SPDX-License-Identifier: MIT pragma solidity ^0.6.6; import "https://github.com/provable-things/ethereum-api/blob/master/provableAPI_0.6.sol"; contract EthCostContract is usingProvable { uint256 public ETHUSD; uint256 public USDDiesel; uint256 public ETHDiesel; mapping(bytes32=>bool) validIds; mapping(bytes32=>bool) validIdsDiesel; event LogConstructorInitiated(string nextStep); event LogPriceUpdated(string price); event LogNewProvableQuery(string description, uint queryPrice); //Solidity 0.6 necesita specificarea modificatorului de acces pentru constructor constructor () public payable{ emit LogConstructorInitiated("Constructor was initiated. Call 'updatePrice()' to send the Provable Query."); } function pay() public payable {} function balance() public view returns(uint256) { return address(this).balance; } function updatePrice() public payable { uint queryPrice = provable_getPrice("URL"); if (2 * queryPrice > address(this).balance) { emit LogNewProvableQuery("Provable query was NOT sent, please add some ETH to cover for the query fee", queryPrice); revert(); } bytes32 queryId = provable_query("URL", "json(https://api.pro.coinbase.com/products/ETH-USD/ticker).price"); validIds[queryId] = true; bytes32 queryIdDiesel = provable_query("URL", "xml(https://www.fueleconomy.gov/ws/rest/fuelprices).fuelPrices.diesel"); validIdsDiesel[queryIdDiesel] = true; emit LogNewProvableQuery("Provable query was sent, standing by for the answer..", 2 * queryPrice); } function __callback(bytes32 myid, string memory result) override public { //verificarea corespondentei raspunsului cu o cerere trimisa if (!validIds[myid] && !validIdsDiesel[myid]) revert(); //verificarea apelantului functiei ca fiind oracolul if (msg.sender != provable_cbAddress()) revert(); if (validIds[myid]) { ETHUSD = parseInt(result, 2); emit LogPriceUpdated(result); delete validIds[myid]; } if (validIdsDiesel[myid]) { USDDiesel = parseInt(result, 2); emit LogPriceUpdated(result); delete validIdsDiesel[myid]; } // TODO compute cost } }
0.6.6