Как я могу получить текущее время?

Мой проект полностью основан на времени. Есть ли способ получить текущее время без использования NOW? СЕЙЧАС просто возвращает время, когда блок был добыт, и всегда показывает, что «транзакция не будет выполнена», когда я это делаю require(now > 1517735968), но если я его игнорирую, все работает нормально.

Ответы (1)

Вы можете использовать сервис Oraclize.


Что вам нужно:

  • базовое понимание того, как работают оракулы
  • выберите, какой API вы хотите использовать (в нашем случае мы можем использовать API коротких ответов)
  • зарегистрируйтесь на Wolfram , чтобы получить свой AppId

Сделав простой пользовательский запрос в моем браузере:

https://api.wolframalpha.com/v1/result?i=Timestamp+now%3F&appid=YOUR-APPID

Я смог получить результат:

1517736939 Unix time

API коротких ответов


Когда я опубликовал этот ответ, я понял, что есть более короткий способ сделать ваш запрос из контракта. Ниже вы можете увидеть рабочий пример, который вы можете протестировать в 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");
    }
} 
Большое спасибо. Я понял, что тестировал свой контракт в частной сети, и я забыл, что время в блокчейне Ethereum основано на последнем добытом блоке. Попытался отправить немного эфира на другую учетную запись, чтобы обновить время, и это сработало, как и ожидалось. Спасибо вам большое в любом случае.