gpt4 book ai didi

ethereum - 为什么从 ethers.js 获取的区 block 时间戳与 etherscan.io 中显示的不一致?

转载 作者:行者123 更新时间:2023-12-05 02:39:04 49 4
gpt4 key购买 nike

import {providers} from "ethers";

const provider = new providers.InfuraProvider("homestead")

async function main() {
provider.on("block", (blockNum)=> {
console.log(blockNum+ ": " +new Date(Date.now()))
})
}

main()

从上面的代码输出:

13261128: Mon Sep 20 2021 14:57:42 GMT+0800 
13261129: Mon Sep 20 2021 14:58:14 GMT+0800
13261130: Mon Sep 20 2021 14:58:42 GMT+0800
13261131: Mon Sep 20 2021 14:58:58 GMT+0800

来自 etherscan.io:

Sep-20-2021 06:57:12 AM +UTC (https://etherscan.io/block/13261028)
Sep-20-2021 06:57:23 AM +UTC (https://etherscan.io/block/13261129)
Sep-20-2021 06:58:07 AM +UTC (https://etherscan.io/block/13261130)
Sep-20-2021 06:58:38 AM +UTC (https://etherscan.io/block/13261131)

我的问题

  1. 我电脑的时钟是准确的时间,为什么这两种方式有区别?

  2. 我可以从 ethers.js API 获取准确的 block 时间还是可以从其他方式获取?

最佳答案

  1. 该区 block 的时间戳采用 UTC(因此是 @Dmitriy Kashirin 提到的时区偏移),并不代表该区 block 被挖出的确切时间,因为它是由矿工设置的。因此,允许有轻微的偏移量,并且不应将时间戳用作敏感合约的随机性来源。 Read more here.

  2. 是的,使用带有 RPC 提供程序的 ethers.js 可以相当简单地获得确切 block 的时间戳:

const RPC = "RPC_OF_THE_NETWORK";
const blockNumber = 1; // number of the block you want to get timestamp of
const provider = new ethers.providers.JsonRpcProvider(RPC)

const timestamp = (await provider.getBlock(blockNumber)).timestamp;

关于ethereum - 为什么从 ethers.js 获取的区 block 时间戳与 etherscan.io 中显示的不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69250270/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com