Solidity

乙太坊區塊鏈的時區是什麼?

  • May 31, 2020

在 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。

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