Solidity
如何獲取目前時間?
我的項目完全基於時間。有沒有辦法在不使用 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"); } }