diff options
author | Leonid Logvinov <logvinov.leon@gmail.com> | 2018-12-03 19:07:41 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-03 19:07:41 +0800 |
commit | 5a16e78b545a2698be5cd2c3a4f89b7c2fed49b0 (patch) | |
tree | 9c58d25ed5629d7272af7c3e9be94455e577ffa6 /contracts/core/test/utils/block_timestamp.ts | |
parent | 502e9c7be48caafd7725451789f896efdaf17dac (diff) | |
parent | 6d0c71ef30300d6b5d46a307a77912140fba43e3 (diff) | |
download | dexon-sol-tools-5a16e78b545a2698be5cd2c3a4f89b7c2fed49b0.tar dexon-sol-tools-5a16e78b545a2698be5cd2c3a4f89b7c2fed49b0.tar.gz dexon-sol-tools-5a16e78b545a2698be5cd2c3a4f89b7c2fed49b0.tar.bz2 dexon-sol-tools-5a16e78b545a2698be5cd2c3a4f89b7c2fed49b0.tar.lz dexon-sol-tools-5a16e78b545a2698be5cd2c3a4f89b7c2fed49b0.tar.xz dexon-sol-tools-5a16e78b545a2698be5cd2c3a4f89b7c2fed49b0.tar.zst dexon-sol-tools-5a16e78b545a2698be5cd2c3a4f89b7c2fed49b0.zip |
Merge pull request #1310 from 0xProject/feature/contracts-monorepo
Contracts monorepo I
Diffstat (limited to 'contracts/core/test/utils/block_timestamp.ts')
-rw-r--r-- | contracts/core/test/utils/block_timestamp.ts | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/contracts/core/test/utils/block_timestamp.ts b/contracts/core/test/utils/block_timestamp.ts new file mode 100644 index 000000000..66c13eed1 --- /dev/null +++ b/contracts/core/test/utils/block_timestamp.ts @@ -0,0 +1,43 @@ +import * as _ from 'lodash'; + +import { constants } from './constants'; +import { web3Wrapper } from './web3_wrapper'; + +let firstAccount: string | undefined; + +/** + * Increases time by the given number of seconds and then mines a block so that + * the current block timestamp has the offset applied. + * @param seconds the number of seconds by which to incrase the time offset. + * @returns a new Promise which will resolve with the new total time offset or + * reject if the time could not be increased. + */ +export async function increaseTimeAndMineBlockAsync(seconds: number): Promise<number> { + if (_.isUndefined(firstAccount)) { + const accounts = await web3Wrapper.getAvailableAddressesAsync(); + firstAccount = accounts[0]; + } + + const offset = await web3Wrapper.increaseTimeAsync(seconds); + // Note: we need to send a transaction after increasing time so + // that a block is actually mined. The contract looks at the + // last mined block for the timestamp. + await web3Wrapper.awaitTransactionSuccessAsync( + await web3Wrapper.sendTransactionAsync({ from: firstAccount, to: firstAccount, value: 0 }), + constants.AWAIT_TRANSACTION_MINED_MS, + ); + + return offset; +} + +/** + * Returns the timestamp of the latest block in seconds since the Unix epoch. + * @returns a new Promise which will resolve with the timestamp in seconds. + */ +export async function getLatestBlockTimestampAsync(): Promise<number> { + const currentBlockIfExists = await web3Wrapper.getBlockIfExistsAsync('latest'); + if (_.isUndefined(currentBlockIfExists)) { + throw new Error(`Unable to fetch latest block.`); + } + return currentBlockIfExists.timestamp; +} |