Oraclize из газа на Ropsten Testnet

Каждый раз, когда я пытаюсь запустить функцию getPairPrice в нижеследующем контракте, я получаю ошибку от газа. У моего контракта всегда есть баланс до того, как я вызову функцию, 2 эфира, если быть точным, но я все еще получаю ошибку от газа. Почему это?

pragma solidity ^0.4.3;
import "github.com/oraclize/ethereum-api/oraclizeAPI_0.4.sol";

contract BinaryTrading is usingOraclize {
  // ********* //
  // VARIABLES //
  // ********* //
  address minter;

  uint balance;

  string public ethusd;

  function BinaryTrading() {
    minter = msg.sender;
    oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS);
  }

  // This function is the fallback function
  function () payable {
    balance += msg.value;
  }

  function updatePrice(string newPrice) {
      ethusd = newPrice;
  }

  // This function is called when the oraclized request results are ready
  function __callback(bytes32 myid, string result, bytes proof) {
    if (msg.sender != oraclize_cbAddress()) throw;
    ethusd = result;
  }

  // IMPORTANT: Add private when in production, so that I can only call what will not give an error
  function getPairPrice() {
    bytes32 myid = oraclize_query("URL", "json(https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD).USD");
  }

}

Я также попытался запустить код, изменяя значение газа до 2000000.

Изменив эту строку:

bytes32 myid = oraclize_query("URL", "json(https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD).USD");

to

bytes32 myid = oraclize_query("URL", "json(https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD).USD", 2000000);

Недостаточно ли 2000000 газа для обновления переменной?

Пожалуйста, дайте мне знать, что может быть причиной этого. Я тестирую его, используя онлайн-компилятор целостности. Когда я создаю контракт с помощью MetaMask, он говорит: «Ошибка транзакции. Исключение, вызванное кодом контракта». Это же сообщение появляется, когда я вызываю функцию getPairPrice, но не остальные.

Вот один из тех тестовых контрактов, которые я создал с помощью приведенного выше кода: https://testnet.etherscan.io/address/0x2831899baa68f655764d17e7a65c8e526e4ac53c

5 голосов | спросил Pabi 20 TueEurope/Moscow2016-12-20T01:23:24+03:00Europe/Moscow12bEurope/MoscowTue, 20 Dec 2016 01:23:24 +0300 2016, 01:23:24

1 ответ


4

Это неудачная транзакция? https://testnet.etherscan.io/tx/0x369c48423586f5cdffefb2d202d6588e3874b6f1075b3feda205c7718f13dff3

Это показывает, что вы отправляете только 78525 газа, чего, вероятно, недостаточно для вызова функции getPairPrice(), которая, в свою очередь, должна оплачивать некоторые начальные функции oraclize - я думаю, что это будет поиск цен, запись события и, возможно, некоторая память.

Параметр газа, который вы добавляете в oraclize_query (), не для вашего вызова getPairPrice(), это для вызова, который Oraclize будет позже использоваться в вашей функции __callback(). Это будет сделано в отдельной транзакции, и эта часть должна выйти из значения, которое будет передано из вашего балансового баланса при отправке oraclize_query(), а не газ, который вы отправляете в getPairPrice().

ответил Edmund Edgar 20 TueEurope/Moscow2016-12-20T04:14:34+03:00Europe/Moscow12bEurope/MoscowTue, 20 Dec 2016 04:14:34 +0300 2016, 04:14:34

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132