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
1 ответ
Это неудачная транзакция? https://testnet.etherscan.io/tx/0x369c48423586f5cdffefb2d202d6588e3874b6f1075b3feda205c7718f13dff3
Это показывает, что вы отправляете только 78525 газа, чего, вероятно, недостаточно для вызова функции getPairPrice()
, которая, в свою очередь, должна оплачивать некоторые начальные функции oraclize - я думаю, что это будет поиск цен, запись события и, возможно, некоторая память.
Параметр газа, который вы добавляете в oraclize_query (), не для вашего вызова getPairPrice()
, это для вызова, который Oraclize будет позже использоваться в вашей функции __callback()
. Это будет сделано в отдельной транзакции, и эта часть должна выйти из значения, которое будет передано из вашего балансового баланса при отправке oraclize_query()
, а не газ, который вы отправляете в getPairPrice()
.