Как я могу высмеять время испытаний на прочность?

У моего контракта есть срок годности, который я хотел бы тестировать, но я не знаю, как это сделать. Если бы я мог высмеять время контракта, который был бы допинг. Однако поиск Google не предоставил никакой информации.

4 голоса | спросил Daniel Kobe 27 PMpThu, 27 Apr 2017 21:07:51 +030007Thursday 2017, 21:07:51

3 ответа


3

В качестве общего метода тестирования вы можете создать другой, только отладочный, контракт, снижающийся из вашего производственного контракта. У этого второго контракта могут быть какие-то методы - например, чтобы установить дату истечения срока действия на now.

Если вы хотите использовать время специально, TestRPC имеет метод RPC для ускоренного перемотки вперед. Будьте осторожны, вам придется каким-то образом интегрировать его в свой тестовый провод, так как web3 не приходит с ним.

ответил Matthew Schmidt 29 PMpSat, 29 Apr 2017 20:00:53 +030000Saturday 2017, 20:00:53
5

Я заключил свои контракты из простого контракта, который имеет функцию currTime() и testing boolean. Если я установил testing в true, currTime() возвращает поддельное время, которое я могу манипулировать с помощью таких функций, как addDays(uint days). Если testing является ложным, то currTime() просто возвращает block.timestamp. Каждое место, где я бы проверял метку времени, я вызываю currTime().

ответил Dennis Peterson 29 PMpSat, 29 Apr 2017 19:27:08 +030027Saturday 2017, 19:27:08
1

В Dapphub есть библиотека: https://github.com/dapphub/ds-warp

  

Простой миксин для контроля времени.

     

Возвращает текущее время с помощью эры (). Предварительное время с деформацией.

     

warp (0), чтобы заблокировать текущее время в блочном режиме.

контракт DSWarpTest - это DSTest {
    DSWarp warp;

    функция setUp () {
        warp = новый DSWarp ();
    }
    function testInit () {
        assertEq (warp.era (), теперь);
    }
    function testWarp () {
        var tic = now;
        warp.warp (1);
        assertEq (warp.era (), tic + 1);
    }
    function testWarpLock () {
        warp.warp (0);
        assertEq (warp.era (), теперь);
    }
    function testFailAfterWarpLock () {
        warp.warp (0);
        warp.warp (1);
    }
}
ответил rstormsf 12 J0000006Europe/Moscow 2017, 11:06:21

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132