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)
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)
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)
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