Exemplo n.º 1
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
Exemplo n.º 2
0
def get_chaindb_manager(trinity_config: TrinityConfig,
                        base_db: BaseAtomicDB) -> BaseManager:
    chaindb = AsyncChainDB(base_db)
    if not is_database_initialized(chaindb):
        initialize_database(trinity_config, chaindb)

    chain_class: Type[BaseChain]
    chain: BaseChain

    if trinity_config.network_id == MAINNET_NETWORK_ID:
        chain_class = MainnetChain
        chain = chain_class(base_db)
    elif trinity_config.network_id == ROPSTEN_NETWORK_ID:
        chain_class = RopstenChain
        chain = chain_class(base_db)
    else:
        raise NotImplementedError(
            "Only the ropsten and mainnet chains are supported")

    headerdb = AsyncHeaderDB(base_db)
    header_chain = AsyncHeaderChain(base_db)

    class DBManager(BaseManager):
        pass

    # Typeshed definitions for multiprocessing.managers is incomplete, so ignore them for now:
    # https://github.com/python/typeshed/blob/85a788dbcaa5e9e9a62e55f15d44530cd28ba830/stdlib/3/multiprocessing/managers.pyi#L3
    DBManager.register(  # type: ignore
        'get_db',
        callable=lambda: TracebackRecorder(base_db),
        proxytype=DBProxy)

    DBManager.register(  # type: ignore
        'get_chaindb',
        callable=lambda: TracebackRecorder(chaindb),
        proxytype=ChainDBProxy,
    )
    DBManager.register(  # type: ignore
        'get_chain',
        callable=lambda: TracebackRecorder(chain),
        proxytype=ChainProxy)

    DBManager.register(  # type: ignore
        'get_headerdb',
        callable=lambda: TracebackRecorder(headerdb),
        proxytype=AsyncHeaderDBProxy,
    )
    DBManager.register(  # type: ignore
        'get_header_chain',
        callable=lambda: TracebackRecorder(header_chain),
        proxytype=AsyncHeaderChainProxy,
    )

    manager = DBManager(address=str(
        trinity_config.database_ipc_path))  # type: ignore
    return manager
Exemplo n.º 3
0
def get_chaindb_manager(trinity_config: TrinityConfig,
                        base_db: BaseAtomicDB) -> BaseManager:
    chaindb = AsyncChainDB(base_db)
    if not is_database_initialized(chaindb):
        initialize_database(trinity_config, chaindb)

    chain_class: Type[BaseChain]
    chain: BaseChain

    if trinity_config.network_id == MAINNET_NETWORK_ID:
        chain_class = MainnetChain
        chain = chain_class(base_db)
    elif trinity_config.network_id == ROPSTEN_NETWORK_ID:
        chain_class = RopstenChain
        chain = chain_class(base_db)
    else:
        raise NotImplementedError(
            "Only the ropsten and mainnet chains are supported")

    headerdb = AsyncHeaderDB(base_db)
    header_chain = AsyncHeaderChain(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_chain',
                       callable=lambda: TracebackRecorder(chain),
                       proxytype=ChainProxy)

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

    manager = DBManager(address=str(
        trinity_config.database_ipc_path))  # type: ignore
    return manager
Exemplo n.º 4
0
def serve_chaindb(chain_config: ChainConfig, base_db: BaseDB) -> None:
    chaindb = AsyncChainDB(base_db)

    if not is_database_initialized(chaindb):
        initialize_database(chain_config, chaindb)
    if chain_config.network_id == MAINNET_NETWORK_ID:
        chain_class = MainnetChain  # type: ignore
    elif chain_config.network_id == ROPSTEN_NETWORK_ID:
        chain_class = RopstenChain  # type: ignore
    else:
        raise NotImplementedError(
            "Only the mainnet and ropsten chains are currently supported")
    chain = chain_class(base_db)  # type: ignore

    headerdb = AsyncHeaderDB(base_db)
    header_chain = AsyncHeaderChain(base_db)

    class DBManager(BaseManager):
        pass

    # Typeshed definitions for multiprocessing.managers is incomplete, so ignore them for now:
    # https://github.com/python/typeshed/blob/85a788dbcaa5e9e9a62e55f15d44530cd28ba830/stdlib/3/multiprocessing/managers.pyi#L3
    DBManager.register('get_db', callable=lambda: base_db,
                       proxytype=DBProxy)  # type: ignore

    DBManager.register(  # type: ignore
        'get_chaindb',
        callable=lambda: chaindb,
        proxytype=ChainDBProxy,
    )
    DBManager.register('get_chain',
                       callable=lambda: chain,
                       proxytype=ChainProxy)  # type: ignore

    DBManager.register(  # type: ignore
        'get_headerdb',
        callable=lambda: headerdb,
        proxytype=AsyncHeaderDBProxy,
    )
    DBManager.register(  # type: ignore
        'get_header_chain',
        callable=lambda: header_chain,
        proxytype=AsyncHeaderChainProxy,
    )

    manager = DBManager(address=str(
        chain_config.database_ipc_path))  # type: ignore
    server = manager.get_server()  # type: ignore

    server.serve_forever()  # type: ignore