Вот мой смарт-контракт, который использует oraclize для покупки биткойнов за эфир.
pragma solidity ^0.4.0;
import "https://github.com/oraclize/ethereum-api/oraclizeAPI_0.4.sol";
contract BuyBitcoin is usingOraclize {
address owner;
string public temp;
function BuyBitcoin() {
owner = msg.sender;
OAR = OraclizeAddrResolverI(0x51efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa);
update();
}
function __callback(bytes32 myid, string result) {
if (msg.sender != oraclize_cbAddress()) throw;
result;
}
function update() payable {
oraclize_query("URL", "json(https://www.shapeshift.io/shift).orderId", '{"withdrawal":"3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy", "pair":"eth_btc" , "amount" : 1000}');
}
function kill(){
if (msg.sender == owner) suicide(msg.sender);
}
}
Обновлять :
Я отправляю 0,01 эфира в рамках транзакции
Я могу скомпилировать контракт, но когда я пытаюсь запустить функцию обновления, я получаю «Исключение VM: недействительный JUMP».
Я что-то упустил в своем контракте?
и используя виртуальную машину Javascript:
Я пропустил шаг?
Я использую метамаску и имею эфир в аккаунте:
Возможно, будет немного поздно получить ответ на этот вопрос. Вероятно, у вас может быть ответ с вами.
Итак, вот мой взгляд на эту проблему. когда вы используете версию Solidity ^0.4.0 и пытаетесь отправить значение в контракт, 0,01 Ether в вашем случае, вы должны использовать функцию по умолчанию, предоставленную в Solidity, а также использовать ключевое слово payable.
С этой проблемой чаще всего сталкиваются те, кто пытается сделать что-то подобное. Попробуйте сделать это один раз.
Надеюсь, наблюдение поможет.
Спасибо.
Томас Бертани
update()
вызову? Первый oraclize_query бесплатен, но за другие придется заплатить (даже при имитации).голубое небо
Томас Бертани
oraclize_query
взимает с баланса контракта правильную сумму в соответствии с ценами на Oraclize API: docs.oraclize.it/#pricing . Тем не менее, вы можете отправить около 0,01 эфира, и любые изменения останутся на балансе вашего контракта.пользователь34
Сиг Тури
голубое небо