Мой проект полностью основан на времени. Есть ли способ получить текущее время без использования NOW? СЕЙЧАС просто возвращает время, когда блок был добыт, и всегда показывает, что «транзакция не будет выполнена», когда я это делаю require(now > 1517735968)
, но если я его игнорирую, все работает нормально.
Вы можете использовать сервис Oraclize.
Что вам нужно:
Сделав простой пользовательский запрос в моем браузере:
https://api.wolframalpha.com/v1/result?i=Timestamp+now%3F&appid=YOUR-APPID
Я смог получить результат:
1517736939 Unix time
Когда я опубликовал этот ответ, я понял, что есть более короткий способ сделать ваш запрос из контракта. Ниже вы можете увидеть рабочий пример, который вы можете протестировать в browser-solidity . Просто нажмите кнопку «Создать», и после нескольких нажатий на временную метку должно появиться: string: 1517738717
(временная метка в то время, когда я ее писал).
pragma solidity ^0.4.0;
import "github.com/oraclize/ethereum-api/oraclizeAPI.sol";
contract WolframAlpha is usingOraclize {
string public timestamp;
event newOraclizeQuery(string description);
event newTimestampMeasure(string timestamp);
function WolframAlpha() {
update();
}
function __callback(bytes32 myid, string result) {
if (msg.sender != oraclize_cbAddress()) throw;
timestamp = result;
newTimestampMeasure(timestamp);
}
function update() payable {
newOraclizeQuery("Oraclize query was sent, standing by for the answer..");
oraclize_query("WolframAlpha", "Timestamp now");
}
}
Дж. Руоф