1.1.0 • Published 3 years ago

ether-time-traveler v1.1.0

Weekly downloads
94
License
ISC
Repository
github
Last release
3 years ago

ether-time-traveler

A utility that simplifies writing time dependent or stateless tests on a local Ethereum blockchain.

Forked from ejwessel's ganache-time-traveler to allow use in a testing environment using ethers.js.

Install

  • npm i ether-time-traveler

Usage

The general outline is to add require at the top of your tests

const timeMachine = require('ether-time-traveler');

add the beforeEach and afterEach hooks into your test file

contract('Test', async (accounts) =>  {

   const provider = new MockProvider();
   let exampleContract;

   beforeEach(async() => {
       let snapshotId = await timeMachine.takeSnapshot(provider);
   };

   afterEach(async() => {
       await timeMachine.revertToSnapshot(provider, snapshotId);
   });

   before('Deploy Contracts', async() => {
       /* DEPLOY CONTRACTS HERE */
       exampleContract = await ExampleContract.new();
   });

   /* ADD TESTS HERE */

   it('Time Dependent Test', async () => {
       await timeMachine.advanceTimeAndBlock(provider, SECONDS_TO_ADVANCE_BY)
   });
});

Methods

advanceTime(<ethers_provider>, <seconds_to_advance_by>)

Advances the time on the blockchain forward. Takes an extra parameter, which is the number of seconds to advance by. Note: for advancetime() to take effect, the block must also be mined using advanceBlock(). See advanceTimeAndBlock() to do both.

advanceBlock(<ethers_provider>)

Mines a new block; advances the block forward by 1 block.

advanceBlockAndSetTime(<ethers_provider>, <new_time>)

Advances the block forward by 1 and sets the time to a new time.

advanceTimeAndBlock(<ethers_provider>, <seconds_to_advance_by>)

Advances the block by 1 in addition to advancing the time on the blockchain forward. Takes an extra parameter, which is the number of seconds to advance by.

takeSnapshot(<ethers_provider>)

Snapshot the state of the blockchain at the current block. Returns the integer id of the snapshot created.

revertToSnapshot(<ethers_provider>, <id_to_revert_to>)

Revert the state of the blockchain to a previous snapshot. Takes an extra parameter, which is the snapshot id to revert to.

Resources