aboutsummaryrefslogtreecommitdiffstats
path: root/contracts/core/test/utils/block_timestamp.ts
diff options
context:
space:
mode:
authorLeonid Logvinov <logvinov.leon@gmail.com>2018-12-03 19:07:41 +0800
committerGitHub <noreply@github.com>2018-12-03 19:07:41 +0800
commit5a16e78b545a2698be5cd2c3a4f89b7c2fed49b0 (patch)
tree9c58d25ed5629d7272af7c3e9be94455e577ffa6 /contracts/core/test/utils/block_timestamp.ts
parent502e9c7be48caafd7725451789f896efdaf17dac (diff)
parent6d0c71ef30300d6b5d46a307a77912140fba43e3 (diff)
downloaddexon-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.ts43
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;
+}