Back

blockchain - solidity - blockchain.timestamp 只有在出现新块或者同步时间戳后才会更新,不会每秒自动更新

发布时间: 2024-04-04 08:28:00

如题  来自kimi

完整答案:

block.timestamp会在以下情况下增加:

区块生成:每当新的区块被挖掘并添加到以太坊区块链上时,block.timestamp会增加。每个区块的timestamp通常都会比前一个区块的timestamp稍大,因为每个区块的产生都需要一定的时间。

挖矿时间:矿工在挖矿过程中会设置区块的时间戳。虽然矿工可以在一定程度上影响区块的时间戳,但这个影响是有限的,因为每个区块的时间戳不能比前一个区块的时间戳提前太多,也不能延后太多(通常在几分钟之内)。

网络时间调整:在某些情况下,网络中的节点可能会对时间戳进行微小的调整,以确保整个网络的时间同步。这种调整通常不会导致block.timestamp发生显著变化。

查询某个函数不一定会触发新块的出现。

可以随便创建个contract,例如 Sum contract

forge script script/ShowBlocktime.s.sol:ShowBlocktime --private-key 0x85b1546a856b158557f2d1bb6513472ba277bfed1cd8e38aa1756431f1138c12 --fork-url http://35.89.151.219:8000/f691e2ed-9c1e-4585-9ad6-42d8e82b7445 --broadcast

// SPDX-License-Identifier: UNLICENSED
import "forge-std/Script.sol";

pragma solidity ^0.8.0;
contract Sum {
  uint public lastResult;
  function sum(uint a, uint b) public returns (uint) {

    uint result = a + b;
    lastResult = result;
    return result;
  }
}

contract CallSumScript is Script {
  function run() public {

    vm.startBroadcast();
    Sum sum = new Sum();
    sum.sum(1,2);

    vm.stopBroadcast();
  }
}

Back