Bei der Verwendung von SimulateBackend habe ich versucht, die Zeit der simulierten Blockchain vorzurücken, AdjustTime(604800 *time.Second)
die die Zeit um eine Woche vorrücken sollte. Die Überprüfung des zurückgegebenen Fehlerwerts zeigt, dass er null ist, aber nach all meinen Tests scheint es, dass die Zeit nicht wirklich vorwärts rollt und die lokale Systemzeit verwendet wird. Der Versuch, Funktionen aufzurufen, die funktionieren sollten, nachdem die Zeit vorwärts gerollt wurde, funktioniert nicht.
go-Version:go1.10.11 linux/amd64
Verwenden der neuesten Go-Ethereum-Version.
Machst du danach ein client.Commit()? Ich kann mich nicht erinnern, ob es notwendig ist - aber ich habe es mir angewöhnt, also nehme ich an, dass es so ist.
Sie können diese Funktion nur testen, wenn Sie eine Funktion haben, die now
oder zurückgibtblock.timestamp
Ich mache das, indem ich einen kleinen Vertrag habe:
pragma solidity ^0.4.24;
contract Canary {
function timeStamp() constant returns (uint256) {
return now;
}
}
So können Sie die Uhrzeit vor und nach dem Einstellen der Uhrzeit überprüfen – oder (zB) während eines Crowdsales – um die Uhrzeit auf einen bestimmten neuen Zeitpunkt, zB Verkaufsstart, einzustellen.
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()
Dies schlägt nur fehl, wenn Sie versuchen, die simulierte Kette vor Ihrer realen aktuellen Zeit zu nehmen.
hextet
David Appleton