Ethereum-Classic

問答:如何以毫秒為單位獲取目前時間?

  • September 30, 2022

這部分自己的問答系列文章分享了在一個項目的工作中獲得的知識

我一直在尋找一種將操作連結到全球時間的方法,但獲取目前時間戳並不是一項顯而易見的任務。

在 EVM 中無法獲得它,但是有幾種解決方法。

第一個是基於區塊的時間戳:每個時間戳都應該大於父節點的時間戳,儘管節點可以操縱時間戳,特別是當它向他們承諾利潤時,區塊也可能在探勘過程中被拒絕。

第二個是基於使用塊的編號,因為它們是一一排序的,並且通過知道平均塊執行時間來計算目前時間——不幸的是,塊探勘的時間也可能會有所不同,尤其是在新的乙太坊更新時。似乎塊的時間戳是更好的選擇。

使用 ethers.js ,我知道如何在區塊鏈上獲取目前時間戳的唯一方法是使用提供者 getBlockNumber() 函式獲取最新塊號,然後使用提供者 getBlock() 函式獲取有關最新塊的詳細資訊. 最後,當您擁有塊時,塊對象將具有時間戳屬性,該屬性以秒為單位為您提供區塊鏈上的目前時間。

如果您想要 ms 版本,只需將秒數乘以 1000。

let latestBlockNumber = await provider.getBlockNumber();
let block = await provider.getBlock(latestBlockNumber);
console.log(block.timestamp);

let latestTimeStampInMs = block.timestamp * 1000;
console.log(latestTimeStampInMs);

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