40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
|
# standard imports
|
||
|
import logging
|
||
|
from collections import deque
|
||
|
|
||
|
# third-party imports
|
||
|
from cic_eth.api import Api
|
||
|
|
||
|
# local imports
|
||
|
from cic_ussd.transactions import from_wei
|
||
|
|
||
|
logg = logging.getLogger()
|
||
|
|
||
|
|
||
|
class BalanceManager:
|
||
|
|
||
|
def __init__(self, address: str, chain_str: str, token_symbol: str):
|
||
|
"""
|
||
|
:param address: Ethereum address of account whose balance is being queried
|
||
|
:type address: str, 0x-hex
|
||
|
:param chain_str: The chain name and network id.
|
||
|
:type chain_str: str
|
||
|
:param token_symbol: ERC20 token symbol of whose balance is being queried
|
||
|
:type token_symbol: str
|
||
|
"""
|
||
|
self.address = address
|
||
|
self.chain_str = chain_str
|
||
|
self.token_symbol = token_symbol
|
||
|
|
||
|
def get_operational_balance(self) -> float:
|
||
|
"""This question queries cic-eth for an account's balance
|
||
|
:return: The current balance of the account as reflected on the blockchain.
|
||
|
:rtype: int
|
||
|
"""
|
||
|
cic_eth_api = Api(chain_str=self.chain_str, callback_task=None)
|
||
|
balance_request_task = cic_eth_api.balance(address=self.address, token_symbol=self.token_symbol)
|
||
|
balance_request_task_results = balance_request_task.collect()
|
||
|
balance_result = deque(balance_request_task_results, maxlen=1).pop()
|
||
|
balance = from_wei(value=balance_result[-1])
|
||
|
return balance
|