При использовании 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()
Это не удастся, только если вы попытаетесь опережать смоделированную цепочку вашего реального времени.
гекстет
Дэйв Эпплтон