def __init__( self, blockchain_accounts: BlockchainAccounts, ethereum_manager: 'EthereumManager', msg_aggregator: MessagesAggregator, database: DBHandler, greenlet_manager: GreenletManager, premium: Optional[Premium], eth_modules: Optional[List[str]] = None, ): log.debug('Initializing ChainManager') super().__init__() self.ethereum = ethereum_manager self.database = database self.msg_aggregator = msg_aggregator self.accounts = blockchain_accounts self.defi_balances_last_query_ts = Timestamp(0) self.defi_balances: Dict[ChecksumEthAddress, List[DefiProtocolBalances]] = {} # Per account balances self.balances = BlockchainBalances() # Per asset total balances self.totals: Totals = defaultdict(Balance) # TODO: Perhaps turn this mapping into a typed dict? self.eth_modules: Dict[str, EthereumModule] = {} if eth_modules: for given_module in eth_modules: if given_module == 'makerdao_dsr': self.eth_modules['makerdao_dsr'] = MakerDAODSR( ethereum_manager=ethereum_manager, database=self.database, premium=premium, msg_aggregator=msg_aggregator, ) elif given_module == 'makerdao_vaults': self.eth_modules['makerdao_vaults'] = MakerDAOVaults( ethereum_manager=ethereum_manager, database=self.database, premium=premium, msg_aggregator=msg_aggregator, ) elif given_module == 'aave': self.eth_modules['aave'] = Aave( ethereum_manager=ethereum_manager, database=self.database, premium=premium, msg_aggregator=msg_aggregator, ) else: log.error( f'Unrecognized module value {given_module} given. Skipping...' ) self.greenlet_manager = greenlet_manager for name, module in self.eth_modules.items(): self.greenlet_manager.spawn_and_track( task_name=f'startup of {name}', method=module.on_startup, ) # Since Zerion initialization needs a few ENS calls we do it asynchronously self.zerion: Optional[Zerion] = None self.greenlet_manager.spawn_and_track( task_name='Initialize Zerion object', method=self._initialize_zerion, )
def __init__( self, blockchain_accounts: BlockchainAccounts, ethereum_manager: 'EthereumManager', msg_aggregator: MessagesAggregator, database: DBHandler, greenlet_manager: GreenletManager, premium: Optional[Premium], data_directory: Path, eth_modules: Optional[List[str]] = None, ): log.debug('Initializing ChainManager') super().__init__() self.ethereum = ethereum_manager self.database = database self.msg_aggregator = msg_aggregator self.accounts = blockchain_accounts self.data_directory = data_directory self.defi_balances_last_query_ts = Timestamp(0) self.defi_balances: Dict[ChecksumEthAddress, List[DefiProtocolBalances]] = {} self.defi_lock = Semaphore() self.eth2_lock = Semaphore() # Per account balances self.balances = BlockchainBalances(db=database) # Per asset total balances self.totals: BalanceSheet = BalanceSheet() # TODO: Perhaps turn this mapping into a typed dict? self.eth_modules: Dict[str, Union[EthereumModule, Literal['loading']]] = {} if eth_modules: for given_module in eth_modules: if given_module == 'makerdao_dsr': self.eth_modules['makerdao_dsr'] = MakerDAODSR( ethereum_manager=ethereum_manager, database=self.database, premium=premium, msg_aggregator=msg_aggregator, ) elif given_module == 'makerdao_vaults': self.eth_modules['makerdao_vaults'] = MakerDAOVaults( ethereum_manager=ethereum_manager, database=self.database, premium=premium, msg_aggregator=msg_aggregator, ) elif given_module == 'aave': self.eth_modules['aave'] = Aave( ethereum_manager=ethereum_manager, database=self.database, premium=premium, msg_aggregator=msg_aggregator, ) elif given_module == 'compound': self.eth_modules['compound'] = 'loading' # Since Compound initialization needs a few network calls we do it async greenlet_manager.spawn_and_track( after_seconds=None, task_name='Initialize Compound object', method=self._initialize_compound, premium=premium, ) elif given_module == 'uniswap': self.eth_modules['uniswap'] = Uniswap( ethereum_manager=ethereum_manager, database=self.database, premium=premium, msg_aggregator=msg_aggregator, data_directory=self.data_directory, ) elif given_module == 'yearn_vaults': self.eth_modules['yearn_vaults'] = YearnVaults( ethereum_manager=ethereum_manager, database=self.database, premium=premium, msg_aggregator=msg_aggregator, ) else: log.error( f'Unrecognized module value {given_module} given. Skipping...' ) self.premium = premium self.greenlet_manager = greenlet_manager self.zerion = Zerion(ethereum_manager=self.ethereum, msg_aggregator=self.msg_aggregator) for name, module in self.iterate_modules(): self.greenlet_manager.spawn_and_track( after_seconds=None, task_name=f'startup of {name}', method=module.on_startup, )
def __init__( self, blockchain_accounts: BlockchainAccounts, owned_eth_tokens: List[EthereumToken], ethereum_manager: 'EthereumManager', msg_aggregator: MessagesAggregator, alethio: Alethio, greenlet_manager: GreenletManager, premium: Optional[Premium], eth_modules: Optional[List[str]] = None, ): super().__init__() self.ethereum = ethereum_manager self.alethio = alethio self.msg_aggregator = msg_aggregator self.owned_eth_tokens = owned_eth_tokens self.accounts = blockchain_accounts self.defi_balances_last_query_ts = Timestamp(0) self.defi_balances: Dict[ChecksumEthAddress, List[DefiProtocolBalances]] = {} # Per account balances self.balances = BlockchainBalances() # Per asset total balances self.totals: Totals = defaultdict(Balance) # TODO: Perhaps turn this mapping into a typed dict? self.eth_modules: Dict[str, EthereumModule] = {} if eth_modules: for given_module in eth_modules: if given_module == 'makerdao_dsr': assert self.alethio.db, 'Alethio should have an instantiated DB' self.eth_modules['makerdao_dsr'] = MakerDAODSR( ethereum_manager=ethereum_manager, database=self.alethio.db, premium=premium, msg_aggregator=msg_aggregator, ) elif given_module == 'makerdao_vaults': assert self.alethio.db, 'Alethio should have an instantiated DB' self.eth_modules['makerdao_vaults'] = MakerDAOVaults( ethereum_manager=ethereum_manager, database=self.alethio.db, premium=premium, msg_aggregator=msg_aggregator, ) elif given_module == 'aave': assert self.alethio.db, 'Alethio should have an instantiated DB' self.eth_modules['aave'] = Aave( ethereum_manager=ethereum_manager, database=self.alethio.db, premium=premium, msg_aggregator=msg_aggregator, ) else: log.error( f'Unrecognized module value {given_module} given. Skipping...' ) self.greenlet_manager = greenlet_manager for name, module in self.eth_modules.items(): self.greenlet_manager.spawn_and_track( task_name=f'startup of {name}', method=module.on_startup, )