def mine_blocks(num_blocks: int, chain: MiningChainAPI) -> MiningChainAPI: """ Variadic argument version of :func:`~eth.tools.builder.chain.mine_block` """ if not isinstance(chain, MiningChainAPI): raise ValidationError('`mine_block` may only be used on MiningChain instances') for _ in range(num_blocks): chain.mine_block() return chain
def mine_block(chain: MiningChainAPI, **kwargs: Any) -> MiningChainAPI: """ Mine a new block on the chain. Header parameters for the new block can be overridden using keyword arguments. """ if not isinstance(chain, MiningChainAPI): raise ValidationError('`mine_block` may only be used on MiningChain instances') chain.mine_block(**kwargs) return chain
def at_block_number(block_number: Union[int, BlockNumber], chain: MiningChainAPI) -> MiningChainAPI: """ Rewind the chain back to the given block number. Calls to things like ``get_canonical_head`` will still return the canonical head of the chain, however, you can use ``mine_block`` to mine fork chains. """ if not isinstance(chain, MiningChainAPI): raise ValidationError("`at_block_number` may only be used with 'MiningChain") at_block = chain.get_canonical_block_by_number(BlockNumber(block_number)) db = chain.chaindb.db chain_at_block = type(chain)(db, chain.create_header_from_parent(at_block.header)) return chain_at_block