Mine a dummy block in blockchain_lifecycle to re-apply any time offset

This commit is contained in:
Alex Browne
2018-07-17 11:26:47 -07:00
parent b18d2b0274
commit 2bfacbb8ba

View File

@@ -34,6 +34,12 @@ export class BlockchainLifecycle {
blockNumber = await this._web3Wrapper.getBlockNumberAsync();
}
this._snapshotIdsStack.push(blockNumber);
// HACK(albrow) It's possible that we applied a time offset but
// the transaction we mined to put that time offset into the
// blockchain was reverted. As a workaround, we mine a new dummy
// block so that the latest block timestamp accounts for any
// possible time offsets.
await this._mineDummyBlockAsync();
break;
default:
throw new Error(`Unknown node type: ${nodeType}`);
@@ -59,22 +65,9 @@ export class BlockchainLifecycle {
}
private async _mineMinimumBlocksAsync(): Promise<void> {
logUtils.warn('WARNING: minimum block number for tests not met. Mining additional blocks...');
if (this._addresses.length === 0) {
this._addresses = await this._web3Wrapper.getAvailableAddressesAsync();
if (this._addresses.length === 0) {
throw new Error('No accounts found');
}
}
while ((await this._web3Wrapper.getBlockNumberAsync()) < MINIMUM_BLOCKS) {
logUtils.warn('Mining block...');
await this._web3Wrapper.awaitTransactionMinedAsync(
await this._web3Wrapper.sendTransactionAsync({
from: this._addresses[0],
to: this._addresses[0],
value: '0',
}),
0,
);
await this._mineDummyBlockAsync();
}
logUtils.warn('Done mining the minimum number of blocks.');
}
@@ -84,4 +77,22 @@ export class BlockchainLifecycle {
}
return this._nodeType;
}
// Sends a transaction that has no real effect on the state and waits for it
// to be mined.
private async _mineDummyBlockAsync(): Promise<void> {
if (this._addresses.length === 0) {
this._addresses = await this._web3Wrapper.getAvailableAddressesAsync();
if (this._addresses.length === 0) {
throw new Error('No accounts found');
}
}
await this._web3Wrapper.awaitTransactionMinedAsync(
await this._web3Wrapper.sendTransactionAsync({
from: this._addresses[0],
to: this._addresses[0],
value: '0',
}),
0,
);
}
}