Go-Ethereum
go-ethereum: SimulateBackend AdjustTime 根本沒有調整時間,或者以意想不到的方式
在使用 SimulateBackend 時,我嘗試將模擬區塊鏈的時間前滾,使用
AdjustTime(604800 *time.Second)
它應該將時間前滾一周。檢查返回的錯誤值表明它為零,但是從我的所有測試看來,時間實際上並沒有向前滾動,而是使用了本地系統時間。嘗試呼叫應該在時間前滾後工作的函式,不起作用。去版本:
go1.10.11 linux/amd64
使用最新的 go-ethereum 版本。
之後您是否正在執行 client.Commit() 。我不記得是否有必要——但我已經養成了這樣做的習慣,所以我認為是的。
您能夠測試此函式的唯一方法是擁有一個返回
now
或block.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()
僅當您嘗試將模擬鏈提前於實際目前時間時,這才會失敗。