Example #1
0
    def create_token_network_for_address(
        self,
        token_network_address: Address,
        token_address: Address,
        block_number: int = 0,
    ):
        # get token infos
        token_contract = self.web3.eth.contract(
            address=token_address,
            abi=self.contract_manager.get_contract_abi(
                CONTRACT_HUMAN_STANDARD_TOKEN),
        )
        token_infos = get_token_info(token_contract)

        token_network = TokenNetwork(token_network_address, token_infos)
        self.token_networks[token_network_address] = token_network

        log.info('Creating token network for %s, token=%r',
                 token_network_address, token_infos)
        token_network_listener = BlockchainListener(
            web3=self.web3,
            contract_manager=self.contract_manager,
            contract_address=token_network_address,
            contract_name=CONTRACT_TOKEN_NETWORK,
            sync_start_block=block_number,
            required_confirmations=self.required_confirmations,
        )

        # subscribe to event notifications from blockchain listener
        token_network_listener.add_confirmed_listener(
            create_channel_event_topics(),
            self.handle_channel_event,
        )
        token_network_listener.start()
        self.token_network_listeners.append(token_network_listener)
Example #2
0
    def __init__(
        self,
        web3: Web3,
        contract_manager: ContractManager,
        registry_address: Address,
        sync_start_block: int = 0,
    ) -> None:
        """ Creates a new pathfinding service

        Args:
            contract_manager: A contract manager
            token_network_registry_listener: A blockchain listener object for the network registry
        """
        super().__init__()
        self.web3 = web3
        self.contract_manager = contract_manager

        self.is_running = gevent.event.Event()
        self.token_networks: Dict[Address, TokenNetwork] = {}
        self.token_network_listeners: List[BlockchainListener] = []

        log.info('Starting TokenNetworkRegistry Listener...')
        self.token_network_registry_listener = BlockchainListener(
            web3=web3,
            contract_manager=contract_manager,
            contract_name=CONTRACT_TOKEN_NETWORK_REGISTRY,
            contract_address=registry_address,
            sync_start_block=sync_start_block,
        )
        self._setup_token_networks()
Example #3
0
    def __init__(
        self,
        web3: Web3,
        contract_manager: ContractManager,
        registry_address: Address,
        sync_start_block: int = 0,
        required_confirmations: int = 5,  # the default
    ) -> None:
        """ Creates a new metrics service

        Args:
            contract_manager: A contract manager
            token_network_registry_listener: A blockchain listener object for the network registry
        """
        super().__init__()
        self.web3 = web3
        self.contract_manager = contract_manager
        self.required_confirmations = required_confirmations

        self.is_running = gevent.event.Event()
        self.token_networks: Dict[Address, TokenNetwork] = {}
        self.token_network_listeners: List[BlockchainListener] = []

        self.state = PaymentNetworkMetrics()

        log.info('Starting TokenNetworkRegistry Listener (required confirmations: {})...'.format(
            self.required_confirmations,
        ))
        self.token_network_registry_listener = BlockchainListener(
            web3=web3,
            contract_manager=contract_manager,
            contract_name=CONTRACT_TOKEN_NETWORK_REGISTRY,
            contract_address=registry_address,
            sync_start_block=sync_start_block,
            required_confirmations=self.required_confirmations,
        )
        log.info(
            f'Listening to token network registry @ {registry_address} '
            f'from block {sync_start_block}'
        )
        self._setup_token_networks()
Example #4
0
    def create_token_network_for_address(
        self,
        token_network_address: Address,
        block_number: int = 0,
    ):
        token_network = TokenNetwork(token_network_address)
        self.token_networks[token_network_address] = token_network

        log.info('Creating token network for %s', token_network_address)
        token_network_listener = BlockchainListener(
            web3=self.web3,
            contract_manager=self.contract_manager,
            contract_address=token_network_address,
            contract_name=CONTRACT_TOKEN_NETWORK,
            sync_start_block=block_number,
        )

        # subscribe to event notifications from blockchain listener
        token_network_listener.add_confirmed_listener(
            create_channel_event_topics(),
            self.handle_channel_event,
        )
        token_network_listener.start()
        self.token_network_listeners.append(token_network_listener)