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)
Beispiel #4
0
 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
Beispiel #5
0
 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
Beispiel #8
0
    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),
        ]