コード例 #1
0
ファイル: test_aave.py プロジェクト: toro09/rotki
def aave(
    ethereum_manager,
    database,
    function_scope_messages_aggregator,
    start_with_valid_premium,
    rotki_premium_credentials,
):
    premium = None
    if start_with_valid_premium:
        premium = Premium(rotki_premium_credentials)

    aave = Aave(
        ethereum_manager=ethereum_manager,
        database=database,
        premium=premium,
        msg_aggregator=function_scope_messages_aggregator,
    )
    return aave
コード例 #2
0
    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,
            )
コード例 #3
0
ファイル: manager.py プロジェクト: rudygt/rotki
    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,
        )
コード例 #4
0
ファイル: manager.py プロジェクト: davbre/rotki
    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,
            )