def __init__(self, private_key: Any, jsonrpc_url: str, erc20_token_addresses: List[str], chain: EthereumChain = EthereumChain.ROPSTEN): super().__init__() # Initialize Web3, accounts and contracts. self._w3: Web3 = Web3(Web3.HTTPProvider(jsonrpc_url)) self._chain: EthereumChain = chain self._account: LocalAccount = Account.privateKeyToAccount(private_key) self._ev_loop: asyncio.AbstractEventLoop = asyncio.get_event_loop() # Initialize ERC20 tokens data structures. self._erc20_token_list: List[ERC20Token] = [ ERC20Token(self._w3, erc20_token_address, self._chain) for erc20_token_address in erc20_token_addresses ] self._erc20_tokens: Dict[str, ERC20Token] = OrderedDict() self._asset_decimals: Dict[str, int] = {"ETH": 18} self._weth_token: Optional[ERC20Token] = None # Initialize the event forwarders. self._received_asset_event_forwarder: EventForwarder = EventForwarder( self._received_asset_event_listener ) self._approved_token_event_forwarder: EventForwarder = EventForwarder( self._token_approved_event_listener ) self._wrapped_eth_event_forwarder: EventForwarder = EventForwarder( self._eth_wrapped_event_listener ) self._unwrapped_eth_event_forwarder: EventForwarder = EventForwarder( self._eth_unwrapped_event_listener ) # Blockchain data self._local_nonce: int = -1 # Watchers self._new_blocks_watcher: Optional[NewBlocksWatcher] = None self._account_balance_watcher: Optional[AccountBalanceWatcher] = None self._erc20_events_watcher: Optional[ERC20EventsWatcher] = None self._incoming_eth_watcher: Optional[IncomingEthWatcher] = None self._weth_watcher: Optional[WethWatcher] = None # Tasks and transactions self._check_network_task: Optional[asyncio.Task] = None self._network_status: NetworkStatus = NetworkStatus.STOPPED self._outgoing_transactions_queue: asyncio.Queue = asyncio.Queue() self._outgoing_transactions_task: Optional[asyncio.Task] = None self._check_transaction_receipts_task: Optional[asyncio.Task] = None self._pending_tx_dict: Dict[str, int] = {} self._gas_price: int = self.DEFAULT_GAS_PRICE self._last_timestamp_received_blocks: float = 0.0 self._event_forwarder: EventForwarder = EventForwarder(self._did_receive_new_blocks)
def __init__(self, connector: 'ConnectorBase', activation_interval: float, metrics_dispatcher: LogServerClient, rate_provider: RateOracle, instance_id: str, client_version: str, valuation_token: str = "USDT"): super().__init__() self._connector = connector self._activation_interval = activation_interval self._dispatcher = metrics_dispatcher self._rate_provider = rate_provider self._instance_id = instance_id self._client_version = client_version self._valuation_token = valuation_token self._last_process_tick_timestamp = 0 self._last_executed_collection_process = None self._collected_events = [] self._fill_event_forwarder = EventForwarder(self._register_fill_event) self._event_pairs: List[Tuple[MarketEvent, EventForwarder]] = [ (MarketEvent.OrderFilled, self._fill_event_forwarder), ]
def __init__(self, w3: Web3, blocks_watcher: NewBlocksWatcher, watch_addresses: Iterable[str]): super().__init__(w3) self._watch_addresses: Set[str] = set(watch_addresses) self._blocks_watcher: NewBlocksWatcher = blocks_watcher self._event_forwarder: EventForwarder = EventForwarder( self.did_receive_new_blocks)
def __init__(self, w3: Web3, blocks_watcher: NewBlocksWatcher): super().__init__(w3) self._blocks_watcher: NewBlocksWatcher = blocks_watcher self._poll_fill_logs_task: asyncio.Task = None self._event_forwarder: EventForwarder = EventForwarder( self.did_receive_new_blocks) self._new_blocks_queue: asyncio.Queue = asyncio.Queue() self._event_cache: Set[HexBytes] = set() for abi in exchange_abi: if "name" in abi and abi["name"] == FILL_EVENT: self._event_abi = abi
def __init__(self, w3: Web3, weth_token: ERC20Token, blocks_watcher: NewBlocksWatcher, watch_addresses: Iterable[str]): super().__init__(w3) self._blocks_watcher: NewBlocksWatcher = blocks_watcher self._watch_addresses: Set[str] = set(watch_addresses) self._asset_decimals: Dict[str, int] = {} self._weth_token = weth_token self._weth_contract = weth_token.contract self._contract_event_logger = ContractEventLogger( w3, weth_token.address, weth_token.abi) self._poll_weth_logs_task: asyncio.Task = None self._event_forwarder: EventForwarder = EventForwarder( self.did_receive_new_blocks) self._new_blocks_queue: asyncio.Queue = asyncio.Queue()
def __init__(self, w3: Web3, blocks_watcher: NewBlocksWatcher, account_address: str, erc20_addresses: List[str], erc20_abis: List[any]): super().__init__(w3) self._blocks_watcher: NewBlocksWatcher = blocks_watcher self._account_address: str = account_address self._addresses_to_contracts: Dict[str, Contract] = { address: w3.eth.contract(address=address, abi=abi) for address, abi in zip(erc20_addresses, erc20_abis) } self._erc20_contracts: Dict[str, Contract] = {} self._erc20_decimals: Dict[str, int] = {} self._event_forwarder: EventForwarder = EventForwarder( self.did_receive_new_blocks) self._raw_account_balances: Dict[str, int] = {}
def __init__(self, w3: Web3, blocks_watcher: WSNewBlocksWatcher, contract_addresses: List[str], contract_abi: List[any], watch_addresses: Iterable[str]): if len(contract_addresses) != len(contract_abi): raise ValueError("Each entry in contract_addresses must have a corresponding entry in contract_abi.") super().__init__(w3) self._blocks_watcher: WSNewBlocksWatcher = blocks_watcher self._addresses_to_contracts: Dict[str, Contract] = { address: w3.eth.contract(address=address, abi=abi) for address, abi in zip(contract_addresses, contract_abi) } self._watch_addresses: Set[str] = set(watch_addresses) self._address_to_asset_name_map: Dict[str, str] = {} self._asset_decimals: Dict[str, int] = {} self._contract_event_loggers: Dict[str, ContractEventLogger] = {} self._new_blocks_queue: asyncio.Queue = asyncio.Queue() self._event_forwarder: EventForwarder = EventForwarder(self.did_receive_new_blocks) self._poll_erc20_logs_task: Optional[asyncio.Task] = None
def __init__(self, connector: 'ConnectorBase', activation_interval: Decimal, rate_provider: RateOracle, instance_id: str, valuation_token: str = "USDT"): super().__init__() self._connector = connector self._activation_interval = activation_interval self._dispatcher = LogServerClient( log_server_url=self.DEFAULT_METRICS_SERVER_URL) self._rate_provider = rate_provider self._instance_id = instance_id self._client_version = CLIENT_VERSION self._valuation_token = valuation_token self._last_process_tick_timestamp = 0 self._last_executed_collection_process = None self._collected_events = [] self._fill_event_forwarder = EventForwarder(self._register_fill_event) self._event_pairs: List[Tuple[MarketEvent, EventForwarder]] = [ (MarketEvent.OrderFilled, self._fill_event_forwarder), ]