Solidity

如何獲取目前時間?

  • February 4, 2018

我的項目完全基於時間。有沒有辦法在不使用 NOW 的情況下獲取目前時間?現在只是返回塊被探勘的時間,並且當我這樣做時總是顯示“事務將失敗” require(now > 1517735968),但如果我忽略它,一切正常。

您可以使用 Oraclize 服務。


你需要什麼:

  • 基本了解 Oracle 的工作原理
  • 選擇您要使用的 API(在我們的例子中,我們可以使用 Short Answers 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");
   }
} 

引用自:https://ethereum.stackexchange.com/questions/38492