Esempio n. 1
0
    def setup_eth1_modules(
            self,
            trinity_config: TrinityConfig) -> Tuple[Eth1ChainRPCModule, ...]:
        db_manager = create_db_manager(trinity_config.database_ipc_path)
        db_manager.connect()

        eth1_app_config = trinity_config.get_app_config(Eth1AppConfig)
        chain_config = trinity_config.get_chain_config()

        chain: BaseAsyncChain

        if eth1_app_config.is_light_mode:
            header_db = db_manager.get_headerdb()  # type: ignore
            event_bus_light_peer_chain = EventBusLightPeerChain(
                self.context.event_bus)
            chain = chain_config.light_chain_class(
                header_db, peer_chain=event_bus_light_peer_chain)
        elif eth1_app_config.is_full_mode:
            db = db_manager.get_db()  # type: ignore
            chain = chain_config.full_chain_class(db)
        else:
            raise NotImplementedError(
                f"Unsupported mode: {trinity_config.sync_mode}")

        return initialize_eth1_modules(chain, self.event_bus)
Esempio n. 2
0
def db_shell(use_ipython: bool, database_dir: Path,
             trinity_config: TrinityConfig) -> None:

    db = LevelDB(database_dir)
    chaindb = ChainDB(db)
    head = chaindb.get_canonical_head()
    chain_config = trinity_config.get_chain_config()
    chain = chain_config.full_chain_class(db)

    greeter = f"""
    Head: #{head.block_number}
    Hash: {head.hex_hash}
    State Root: {encode_hex(head.state_root)}

    Available Context Variables:
      - `db`: base database object
      - `chaindb`: `ChainDB` instance
      - `trinity_config`: `TrinityConfig` instance
      - `chain_config`: `ChainConfig` instance
      - `chain`: `Chain` instance
    """

    namespace = {
        'db': db,
        'chaindb': chaindb,
        'trinity_config': trinity_config,
        'chain_config': chain_config,
        'chain': chain,
    }
    shell(use_ipython, namespace, DB_SHELL_BANNER + greeter)
Esempio n. 3
0
    def setup_eth1_modules(
            self,
            trinity_config: TrinityConfig) -> Tuple[Eth1ChainRPCModule, ...]:
        db_manager = create_db_consumer_manager(
            trinity_config.database_ipc_path)

        eth1_app_config = trinity_config.get_app_config(Eth1AppConfig)
        chain_config = trinity_config.get_chain_config()

        chain: BaseAsyncChain

        if eth1_app_config.database_mode is Eth1DbMode.LIGHT:
            header_db = db_manager.get_headerdb()  # type: ignore
            event_bus_light_peer_chain = EventBusLightPeerChain(
                self.context.event_bus)
            chain = chain_config.light_chain_class(
                header_db, peer_chain=event_bus_light_peer_chain)
        elif eth1_app_config.database_mode is Eth1DbMode.FULL:
            db = db_manager.get_db()  # type: ignore
            chain = chain_config.full_chain_class(db)
        else:
            raise Exception(
                f"Unsupported Database Mode: {eth1_app_config.database_mode}")

        return initialize_eth1_modules(chain, self.event_bus)
Esempio n. 4
0
def get_chaindb_manager(trinity_config: TrinityConfig,
                        base_db: BaseAtomicDB) -> BaseManager:
    chain_config = trinity_config.get_chain_config()
    chaindb = AsyncChainDB(base_db)

    if not is_database_initialized(chaindb):
        initialize_database(chain_config, chaindb, base_db)

    headerdb = AsyncHeaderDB(base_db)

    class DBManager(BaseManager):
        pass

    DBManager.register('get_db',
                       callable=lambda: TracebackRecorder(base_db),
                       proxytype=DBProxy)

    DBManager.register(
        'get_chaindb',
        callable=lambda: TracebackRecorder(chaindb),
        proxytype=ChainDBProxy,
    )

    DBManager.register(
        'get_headerdb',
        callable=lambda: TracebackRecorder(headerdb),
        proxytype=AsyncHeaderDBProxy,
    )

    manager = DBManager(address=str(
        trinity_config.database_ipc_path))  # type: ignore
    return manager