Brownie配置Ganache初始时间后chain.time返回当前时间如何解决
问题原因
你遇到的问题是Brownie 1.14.x版本的默认行为导致的:Ganache启动时虽然已经正确应用了--time参数将创世块时间设为1980-01-01,但Brownie在初始化环境时会自动挖出1个新块,这个新块的时间默认采用当前系统时间,因此你查询到的最新块时间就是当前系统时间。
解决方案
方案1:修改配置实现永久生效
在你的brownie-config.yaml的ganache配置段,额外添加参数禁止自动挖矿,同时锁定时间不随系统流逝:
networks: development: cmd_settings: time: "1980-01-01T00:00:00+00:00" miner: blockTime: 0 # 关闭自动出块,仅手动调用mine时才会出块 lock: true # 锁定链时间,不会自动跟随系统时间递增
修改后重启Brownie即可,此时查询chain.time()就会返回你设置的初始时间。
方案2:运行时手动调整时间(无需修改配置)
如果不想修改全局配置,每次进入console后先执行以下代码手动重置时间即可:
from datetime import datetime # 计算目标时间与当前链时间的差值,1980-01-01 00:00:00+00:00对应的时间戳为315532800 time_diff = 315532800 - chain.time() chain.sleep(time_diff) # 挖1个块让时间修改生效 chain.mine()
执行后再调用datetime.fromtimestamp(chain.time())就能得到期望的1980年时间。
内容的提问来源于stack exchange,提问作者Dori
相关产品推荐
相关产品推荐

