Example #1
0
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
Example #2
0
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
Example #3
0
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