Go-Ethereum

go-ethereum: SimulateBackend AdjustTime 根本沒有調整時間,或者以意想不到的方式

  • June 12, 2018

在使用 SimulateBackend 時,我嘗試將模擬區塊鏈的時間前滾,使用AdjustTime(604800 *time.Second)它應該將時間前滾一周。檢查返回的錯誤值表明它為零,但是從我的所有測試看來,時間實際上並沒有向前滾動,而是使用了本地系統時間。嘗試呼叫應該在時間前滾後工作的函式,不起作用。

去版本:go1.10.11 linux/amd64

使用最新的 go-ethereum 版本。

之後您是否正在執行 client.Commit() 。我不記得是否有必要——但我已經養成了這樣做的習慣,所以我認為是的。

您能夠測試此函式的唯一方法是擁有一個返回nowblock.timestamp

我通過簽訂一份小契約來做到這一點:

pragma solidity ^0.4.24;

contract Canary {

   function timeStamp() constant returns (uint256) {
       return now;
   }
}

這允許您在調整時間之前和之後檢查時間 - 或(例如)在眾籌期間 - 將時間調整為特定的新時間,例如銷售開始。

now, err := canary.TimeStamp(nil)
if err != nil {
   log.Fatal(err)
}

timeOffset := new(big.Int).Sub(targetTime, now).Int64()
c.AdjustTime(time.Duration(timeOffset) * time.Second)
c.Commit()

僅當您嘗試將模擬鏈提前於實際目前時間時,這才會失敗。

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