Mine a dummy block in blockchain_lifecycle to re-apply any time offset
This commit is contained in:
@@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user