Custom Blocks
You can force-produce blocks using the produceBlocks
helper to achieve an arbitrary block height. This is especially useful when you want to do some testing regarding transaction maturity.
ts
See code in contextimport { DateTime } from 'fuels';
import { launchTestNode } from 'fuels/test-utils';
using launched = await launchTestNode();
const { provider } = launched;
const block = await provider.getBlock('latest');
if (!block) {
throw new Error('No latest block');
}
const { time: timeLastBlockProduced } = block;
const producedBlockHeight = await provider.produceBlocks(3);
const producedBlock = await provider.getBlock(producedBlockHeight.toNumber());
const oldest = DateTime.fromTai64(timeLastBlockProduced);
const newest = DateTime.fromTai64(producedBlock!.time);
// newest >= oldest
console.assert(producedBlock, 'No latest block');
console.assert(newest >= oldest, 'Newest block is not greater or equal to oldest block');
Blocks With Custom Timestamps
You can also produce blocks with a custom block time using the produceBlocks
helper by specifying the second optional parameter.
ts
See code in contextusing launchedWithCustomTimestamp = await launchTestNode();
const { provider: providerWithCustomTimestamp } = launchedWithCustomTimestamp;
const latestBlock = await providerWithCustomTimestamp.getBlock('latest');
if (!latestBlock) {
throw new Error('No latest block');
}
const latestBlockTimestamp = DateTime.fromTai64(latestBlock.time).toUnixMilliseconds();
const newBlockHeight = await providerWithCustomTimestamp.produceBlocks(
3,
latestBlockTimestamp + 1000
);
console.assert(
newBlockHeight.toHex() === latestBlock.height.add(3).toHex(),
'New block height is not equal to latest block height + 3'
);
Full Example
For a full example, see the following file: <<< @/../../docs-snippets2/src/testing/tweaking-the-blockchain.ts#full