2020-07-13 08:54:08 +00:00
|
|
|
import BigNumber from 'bignumber.js';
|
|
|
|
import BN = require('bn.js');
|
|
|
|
import low from 'lowdb';
|
|
|
|
import FileSync from 'lowdb/adapters/FileSync';
|
|
|
|
import {WAD} from './constants';
|
2020-08-20 15:38:57 +00:00
|
|
|
import {Wallet, ContractTransaction} from 'ethers';
|
2020-07-13 08:54:08 +00:00
|
|
|
import {BuidlerRuntimeEnvironment} from '@nomiclabs/buidler/types';
|
2020-10-15 17:19:02 +00:00
|
|
|
import path from 'path';
|
|
|
|
import fs from 'fs';
|
2020-05-29 14:55:31 +00:00
|
|
|
|
2020-07-13 08:54:08 +00:00
|
|
|
export const toWad = (value: string | number) => new BigNumber(value).times(WAD).toFixed();
|
2020-05-29 14:55:31 +00:00
|
|
|
|
2020-07-13 08:54:08 +00:00
|
|
|
export const bnToBigNumber = (amount: BN): BigNumber => new BigNumber(<any>amount);
|
|
|
|
export const stringToBigNumber = (amount: string): BigNumber => new BigNumber(amount);
|
2020-05-29 14:55:31 +00:00
|
|
|
|
2020-07-13 08:54:08 +00:00
|
|
|
export const getDb = () => low(new FileSync('./deployed-contracts.json'));
|
2020-05-29 14:55:31 +00:00
|
|
|
|
|
|
|
export let BRE: BuidlerRuntimeEnvironment = {} as BuidlerRuntimeEnvironment;
|
|
|
|
export const setBRE = (_BRE: BuidlerRuntimeEnvironment) => {
|
|
|
|
BRE = _BRE;
|
|
|
|
};
|
|
|
|
|
|
|
|
export const sleep = (milliseconds: number) => {
|
|
|
|
return new Promise((resolve) => setTimeout(resolve, milliseconds));
|
|
|
|
};
|
2020-06-03 10:44:10 +00:00
|
|
|
|
|
|
|
export const createRandomAddress = () => Wallet.createRandom().address;
|
2020-06-08 12:03:40 +00:00
|
|
|
|
2020-07-13 08:54:08 +00:00
|
|
|
export const evmSnapshot = async () => await BRE.ethereum.send('evm_snapshot', []);
|
2020-06-08 12:03:40 +00:00
|
|
|
|
2020-07-13 08:54:08 +00:00
|
|
|
export const evmRevert = async (id: string) => BRE.ethereum.send('evm_revert', [id]);
|
2020-06-13 09:12:49 +00:00
|
|
|
|
|
|
|
export const timeLatest = async () => {
|
2020-07-13 08:54:08 +00:00
|
|
|
const block = await BRE.ethers.provider.getBlock('latest');
|
2020-06-13 09:12:49 +00:00
|
|
|
return new BigNumber(block.timestamp);
|
|
|
|
};
|
|
|
|
|
|
|
|
export const advanceBlock = async (timestamp: number) =>
|
2020-07-13 08:54:08 +00:00
|
|
|
await BRE.ethers.provider.send('evm_mine', [timestamp]);
|
2020-06-13 09:12:49 +00:00
|
|
|
|
2020-07-13 08:54:08 +00:00
|
|
|
export const increaseTime = async (secondsToIncrease: number) => {
|
|
|
|
await BRE.ethers.provider.send('evm_increaseTime', [secondsToIncrease]);
|
|
|
|
await BRE.ethers.provider.send('evm_mine', []);
|
|
|
|
};
|
2020-08-20 15:38:57 +00:00
|
|
|
|
2020-10-21 11:35:52 +00:00
|
|
|
export const waitForTx = async (tx: ContractTransaction) => await tx.wait(1);
|
2020-08-21 11:07:32 +00:00
|
|
|
|
|
|
|
export const filterMapBy = (raw: {[key: string]: any}, fn: (key: string) => boolean) =>
|
|
|
|
Object.keys(raw)
|
|
|
|
.filter(fn)
|
|
|
|
.reduce<{[key: string]: any}>((obj, key) => {
|
|
|
|
obj[key] = raw[key];
|
|
|
|
return obj;
|
|
|
|
}, {});
|
2020-10-23 16:38:27 +00:00
|
|
|
|
|
|
|
export const chunk = <T>(arr: Array<T>, chunkSize: number): Array<Array<T>> => {
|
|
|
|
return arr.reduce(
|
|
|
|
(prevVal: any, currVal: any, currIndx: number, array: Array<T>) =>
|
|
|
|
!(currIndx % chunkSize)
|
|
|
|
? prevVal.concat([array.slice(currIndx, currIndx + chunkSize)])
|
|
|
|
: prevVal,
|
|
|
|
[]
|
|
|
|
);
|
|
|
|
};
|