Solidity
乙太坊區塊鏈的時區是什麼?
在 Solidty 中,您可以使用
now
關鍵字或block.timestamp
獲取目前區塊的時間戳。該值由區塊礦工設置,可用於處理智能合約中的時間(它將“現在”視為礦工說程式碼執行的時間)。返回的數字以標準 UNIX ’epoch’ 時間給出,它是自 1970 年 1 月 1 日 00:00:00(午夜,一天的開始)以來的 UINT32 秒數。
我做了一些研究,發現 UNIX 的“紀元”時間是 UTC,即“世界協調時間”。儘管從技術上講 UTC 不是時區,但 GMT 是,UTC 直接轉換為 UTC,並且可以輕鬆轉換為任何本地時區。有關更多詳細資訊,請參見此處。
為了確認這一點,我使用 Remix 來部署和執行一個簡單的智能合約,該合約使用乙太坊測試網路 Rinkeby。我的智能合約只是通過使用“block.timestamp”請求目前時間並允許查詢該值:
pragma solidity ^0.5.2; contract NowContract { uint32 public nowValue = 0; constructor () public NowContract() { computeNow(); } function computeNow() public { nowValue = uint32(block.timestamp); } }
在 2019 年 3 月 7 日加利福尼亞州 (PDT) 的下午 5 點左右,我呼叫
computeNow
,然後進行了檢查nowValue
。我取回了1552006848
然後將其輸入到該站點以將其轉換為日期的值。我回來了:2019 年 3 月 8 日上午 1:00 (UTC)
很容易驗證 3/7/2019 @5:00pm (PDT) 與 03/08/2019 @ 1:00am (UTC) 相同。
故事的寓意:正如人們所希望的那樣,在建構需要了解目前日期/時間的區塊鏈應用程序時,您可以確保無論您的智能合約程式碼在哪裡執行,結果始終是 UTC。