Ejemplo n.º 1
0
def apply_fixture_block_to_chain(
        block_fixture: Dict[str, Any],
        chain: ChainAPI,
        perform_validation: bool = True) -> Tuple[BlockAPI, BlockAPI, bytes]:
    """
    :return: (premined_block, mined_block, rlp_encoded_mined_block)
    """
    # The block to import may be in a different block-class-range than the
    # chain's current one, so we use the block number specified in the
    # fixture to look up the correct block class.
    if 'blockHeader' in block_fixture:
        block_number = block_fixture['blockHeader']['number']
        block_class = chain.get_vm_class_for_block_number(
            block_number).get_block_class()
    else:
        block_class = chain.get_vm().get_block_class()

    block = rlp.decode(block_fixture['rlp'], sedes=block_class)

    import_result = chain.import_block(block,
                                       perform_validation=perform_validation)
    mined_block = import_result.imported_block

    rlp_encoded_mined_block = rlp.encode(mined_block, sedes=block_class)

    return (block, mined_block, rlp_encoded_mined_block)
Ejemplo n.º 2
0
def genesis(chain_class: ChainAPI,
            db: AtomicDatabaseAPI = None,
            params: Dict[str, HeaderParams] = None,
            state: GeneralState = None) -> ChainAPI:
    """
    Initialize the given chain class with the given genesis header parameters
    and chain state.
    """
    if state is None:
        genesis_state: AccountState = {}
    else:
        genesis_state = _fill_and_normalize_state(state)

    genesis_params_defaults = _get_default_genesis_params(genesis_state)

    if params is None:
        genesis_params = genesis_params_defaults
    else:
        genesis_params = merge(genesis_params_defaults, params)

    if db is None:
        base_db: AtomicDatabaseAPI = AtomicDB()
    else:
        base_db = db

    return chain_class.from_genesis(base_db, genesis_params, genesis_state)
Ejemplo n.º 3
0
 def _import_blocks(chain: ChainAPI) -> ChainAPI:
     for block in blocks:
         chain.import_block(block)
     return chain
Ejemplo n.º 4
0
def import_block(block: BlockAPI, chain: ChainAPI) -> ChainAPI:
    """
    Import the provided ``block`` into the chain.
    """
    chain.import_block(block)
    return chain