Ethereum-Classic
問答:如何以毫秒為單位獲取目前時間?
這部分自己的問答系列文章分享了在一個項目的工作中獲得的知識
我一直在尋找一種將操作連結到全球時間的方法,但獲取目前時間戳並不是一項顯而易見的任務。
在 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);