コード例 #1
0
    def __init__(
        self,
        config: Dict,
        chain: BlockChainService,
        default_registry: Registry,
        default_secret_registry: SecretRegistry,
        transport,
        discovery: Discovery = None,
    ):
        self.config = config
        self.discovery = discovery

        try:
            self.raiden = RaidenService(
                chain,
                default_registry,
                default_secret_registry,
                unhexlify(config['privatekey_hex']),
                transport,
                config,
                discovery,
            )
        except filelock.Timeout:
            pubkey = to_normalized_address(
                privatekey_to_address(unhexlify(
                    self.config['privatekey_hex'])), )
            print(
                f'FATAL: Another Raiden instance already running for account {pubkey} on '
                f'network id {chain.network_id}', )
            sys.exit(1)
        self.start_console = self.config['console']

        # raiden.ui.console:Console assumes that a services
        # attribute is available for auto-registration
        self.services = dict()
コード例 #2
0
    def __init__(self, config, chain, discovery, transport_class=UDPTransport):
        self.config = config
        self.discovery = discovery

        if config.get('socket'):
            transport = transport_class(
                None,
                None,
                socket=config['socket'],
            )
        else:
            transport = transport_class(
                config['host'],
                config['port'],
            )

        transport.throttle_policy = TokenBucket(
            config['protocol']['throttle_capacity'],
            config['protocol']['throttle_fill_rate'])
        self.raiden = RaidenService(
            chain,
            decode_hex(config['privatekey_hex']),
            transport,
            discovery,
            config,
        )
        self.start_console = self.config['console']
コード例 #3
0
ファイル: message_handler.py プロジェクト: LitexGit/raiden
def handle_message_crosstransaction(raiden: RaidenService,
                                    message: Crosstransaction):
    cross_type = message.cross_type
    if cross_type == 1:
        raiden.wal.create_crosstransactiontry(
            message.initiator_address, message.target_address,
            message.token_network_identifier, message.sendETH_amount,
            message.sendBTC_amount, message.receiveBTC_address,
            message.identifier)
        raiden.wal.change_crosstransaction_status(message.identifier, 2)
        accept = 1
        acceptcross = AcceptCross(random.randint(0, UINT64_MAX),
                                  message.initiator_address,
                                  message.target_address, message.identifier,
                                  accept)
        raiden.sign(acceptcross)
        raiden.transport.send_async(
            message.initiator_address,
            bytes("123", 'utf-8'),
            acceptcross,
        )
    else:
        message.cross_type = 1
        async_result = raiden.start_crosstransaction(
            message.token_network_identifier, message.initiator_address,
            message.target_address, message.sendETH_amount,
            message.sendBTC_amount, message.receiveBTC_address,
            message.cross_type, message.identifier)
コード例 #4
0
ファイル: udp_transport.py プロジェクト: zengguocheng/raiden
    def start(
        self,
        raiden: RaidenService,
        queueids_to_queues: typing.Dict[typing.QueueIdentifier,
                                        typing.List[Event]],
    ):
        self.raiden = raiden
        self.queueids_to_queues = dict()

        # server.stop() clears the handle. Since this may be a restart the
        # handle must always be set
        self.server.set_handle(self._receive)

        for queue_identifier, queue in queueids_to_queues.items():
            encoded_queue = list()

            for sendevent in queue:
                message = message_from_sendevent(sendevent, raiden.address)
                raiden.sign(message)
                encoded = message.encode()

                encoded_queue.append((encoded, sendevent.message_identifier))

            self.init_queue_for(queue_identifier, encoded_queue)

        self.server.start()
コード例 #5
0
    def start(
        self,
        raiden: RaidenService,
        queueids_to_queues: typing.Dict[QueueIdentifier, typing.List[Event]],
    ):
        if not self.event_stop.ready():
            raise RuntimeError('UDPTransport started while running')

        self.event_stop.clear()
        self.raiden = raiden
        self.queueids_to_queues = dict()

        # server.stop() clears the handle. Since this may be a restart the
        # handle must always be set
        self.server.set_handle(self._receive)

        for queue_identifier, queue in queueids_to_queues.items():
            encoded_queue = list()

            for sendevent in queue:
                message = message_from_sendevent(sendevent, raiden.address)
                raiden.sign(message)
                encoded = message.encode()

                encoded_queue.append((encoded, sendevent.message_identifier))

            self.init_queue_for(queue_identifier, encoded_queue)

        self.server.start()
        super().start()
コード例 #6
0
    def __init__(self, config, chain, default_registry, discovery, transport):
        self.config = config
        self.discovery = discovery

        try:
            self.raiden = RaidenService(
                chain,
                default_registry,
                unhexlify(config['privatekey_hex']),
                transport,
                discovery,
                config,
            )
        except filelock.Timeout:
            pubkey = privatekey_to_address(
                unhexlify(self.config['privatekey_hex']))
            print(
                'FATAL: Another Raiden instance already running for account 0x%s'
                % hexlify(str(pubkey)))
            sys.exit(1)
        self.start_console = self.config['console']

        # raiden.ui.console:Console assumes that a services
        # attribute is available for auto-registration
        self.services = dict()
コード例 #7
0
ファイル: message_handler.py プロジェクト: AlphaX-IBS/raiden
def handle_message_refundtransfer(raiden: RaidenService, message: RefundTransfer):
    token_network_address = message.token_network_address
    from_transfer = lockedtransfersigned_from_message(message)
    chain_state = views.state_from_raiden(raiden)

    routes = get_best_routes(
        chain_state,
        token_network_address,
        raiden.address,
        from_transfer.target,
        from_transfer.lock.amount,
        message.sender,
    )

    role = views.get_transfer_role(
        chain_state,
        from_transfer.lock.secrethash,
    )

    if role == 'initiator':
        secret = random_secret()
        state_change = ReceiveTransferRefundCancelRoute(
            message.sender,
            routes,
            from_transfer,
            secret,
        )
    else:
        state_change = ReceiveTransferRefund(
            message.sender,
            from_transfer,
            routes,
        )

    raiden.handle_state_change(state_change)
コード例 #8
0
    def __init__(self, config, chain, default_registry, transport, discovery=None):
        register_error_handler(greenlet_error_handler)
        self.config = config
        self.discovery = discovery

        try:
            self.raiden = RaidenService(
                chain,
                default_registry,
                unhexlify(config['privatekey_hex']),
                transport,
                config,
                discovery,
            )
        except filelock.Timeout:
            pubkey = address_encoder(
                privatekey_to_address(unhexlify(self.config['privatekey_hex']))
            )
            print(
                f'FATAL: Another Raiden instance already running for account {pubkey} on '
                f'network id {chain.network_id}'
            )
            sys.exit(1)
        self.start_console = self.config['console']

        # raiden.ui.console:Console assumes that a services
        # attribute is available for auto-registration
        self.services = dict()
コード例 #9
0
ファイル: message_handler.py プロジェクト: LitexGit/raiden
def handle_message_crosslockedtransfer(raiden: RaidenService,
                                       message: CrossLockedTransfer):
    locked_transfer_message = LockedTransfer(
        message.chain_id, message.message_identifier,
        message.payment_identifier, message.nonce,
        message.token_network_address, message.token, message.channel,
        message.transferred_amount, message.locked_amount, message.recipient,
        message.locksroot, message.lock, message.target, message.initiator,
        message.fee)
    #locked_transfer_message.sender = message.sender
    locked_transfer_message.signature = message.locked_transfer_signature
    if message.target == raiden.address:
        raiden.cross_handle_recieved_locked_transfer(locked_transfer_message,
                                                     message.cross_id)

        raiden.wal.change_crosstransaction_status(message.cross_id, 4)
        raiden.wal.storage.change_crosstransaction_r(
            message.cross_id,
            encode_hex(locked_transfer_message.lock.secrethash), "")

        #to do send lnd string to lnd
        lnd_string = message.lnd_string.decode('utf-8')
        raiden.send_payment_request(lnd_string)
    else:
        handle_message_lockedtransfer(raiden, locked_transfer_message)
コード例 #10
0
ファイル: message_handler.py プロジェクト: ChiNeSeFree/raiden
    def handle_message_refundtransfer(self, raiden: RaidenService,
                                      message: RefundTransfer):
        token_network_address = message.token_network_address
        from_transfer = lockedtransfersigned_from_message(message)
        chain_state = views.state_from_raiden(raiden)

        routes = get_best_routes(
            chain_state,
            token_network_address,
            raiden.address,
            from_transfer.target,
            from_transfer.lock.amount,
            message.sender,
        )

        role = views.get_transfer_role(
            chain_state,
            from_transfer.lock.secrethash,
        )

        if role == 'initiator':
            secret = random_secret()
            state_change = ReceiveTransferRefundCancelRoute(
                routes=routes,
                transfer=from_transfer,
                secret=secret,
            )
        else:
            state_change = ReceiveTransferRefund(
                transfer=from_transfer,
                routes=routes,
            )

        raiden.handle_state_change(state_change)
コード例 #11
0
    def __init__(self, config, chain, discovery, transport_class=UDPTransport):
        self.config = config
        self.discovery = discovery

        if config.get('socket'):
            transport = transport_class(
                None,
                None,
                socket=config['socket'],
            )
        else:
            transport = transport_class(
                config['host'],
                config['port'],
            )

        transport.throttle_policy = TokenBucket(
            config['protocol']['throttle_capacity'],
            config['protocol']['throttle_fill_rate'])
        self.raiden = RaidenService(
            chain,
            decode_hex(config['privatekey_hex']),
            transport,
            discovery,
            config,
        )
        self.start_console = self.config['console']

        # raiden.ui.console:Console assumes that a services
        # attribute is available for auto-registration
        self.services = dict()
コード例 #12
0
ファイル: app.py プロジェクト: cyl-e/raiden
class App(object):  # pylint: disable=too-few-public-methods
    default_config = dict(
        host='',
        port=INITIAL_PORT,
        privatekey_hex='',
        # number of blocks that a node requires to learn the secret before the lock expires
        reveal_timeout=DEFAULT_REVEAL_TIMEOUT,
        settle_timeout=DEFAULT_SETTLE_TIMEOUT,
        # how long to wait for a transfer until TimeoutTransfer is sent (time in milliseconds)
        msg_timeout=100.00,
    )

    def __init__(self, config, chain, discovery, transport_class=UDPTransport):
        self.config = config
        self.discovery = discovery
        self.transport = transport_class(config['host'], config['port'])
        self.raiden = RaidenService(
            chain,
            decode_hex(config['privatekey_hex']),
            self.transport,
            discovery,
            config,
        )
        self.services = {'raiden': self.raiden}
        self.start_console = True

    def __repr__(self):
        return '<{} {}>'.format(
            self.__class__.__name__,
            pex(self.raiden.address),
        )

    def stop(self):
        self.transport.stop()
        self.raiden.stop()
コード例 #13
0
ファイル: udp_transport.py プロジェクト: AlphaX-IBS/raiden
    def start(
            self,
            raiden: RaidenService,
            queueids_to_queues: typing.List[SendMessageEvent],
    ):
        self.raiden = raiden
        self.queueids_to_queues = dict()

        # server.stop() clears the handle. Since this may be a restart the
        # handle must always be set
        self.server.set_handle(self._receive)

        for (recipient, queue_name), queue in queueids_to_queues.items():
            encoded_queue = list()

            for sendevent in queue:
                message = message_from_sendevent(sendevent, raiden.address)
                raiden.sign(message)
                encoded = message.encode()

                encoded_queue.append((encoded, sendevent.message_identifier))

            self.init_queue_for(recipient, queue_name, encoded_queue)

        self.server.start()
コード例 #14
0
def handle_tokennetwork_new(raiden: RaidenService, event: Event):
    """ Handles a `TokenNetworkCreated` event. """
    data = event.event_data
    args = data['args']
    block_number = data['block_number']
    token_network_address = args['token_network_address']
    token_address = typing.TokenAddress(args['token_address'])

    token_network_proxy = raiden.chain.token_network(token_network_address)
    raiden.blockchain_events.add_token_network_listener(
        token_network_proxy=token_network_proxy,
        contract_manager=raiden.contract_manager,
        from_block=block_number,
    )

    token_network_state = TokenNetworkState(
        token_network_address,
        token_address,
    )

    transaction_hash = event.event_data['transaction_hash']

    new_token_network = ContractReceiveNewTokenNetwork(
        transaction_hash=transaction_hash,
        payment_network_identifier=event.originating_contract,
        token_network=token_network_state,
        block_number=block_number,
    )
    raiden.handle_state_change(new_token_network)
コード例 #15
0
def handle_channel_closed(raiden: RaidenService, event: Event):
    token_network_identifier = event.originating_contract
    data = event.event_data
    block_number = data['block_number']
    args = data['args']
    channel_identifier = args['channel_identifier']
    transaction_hash = data['transaction_hash']

    channel_state = views.get_channelstate_by_token_network_identifier(
        views.state_from_raiden(raiden),
        token_network_identifier,
        channel_identifier,
    )

    if channel_state:
        # The from address is included in the ChannelClosed event as the
        # closing_participant field
        channel_closed = ContractReceiveChannelClosed(
            transaction_hash=transaction_hash,
            transaction_from=args['closing_participant'],
            token_network_identifier=token_network_identifier,
            channel_identifier=channel_identifier,
            block_number=block_number,
        )
        raiden.handle_state_change(channel_closed)
    else:
        # This is a channel close event of a channel we're not a participant of
        route_closed = ContractReceiveRouteClosed(
            transaction_hash=transaction_hash,
            token_network_identifier=token_network_identifier,
            channel_identifier=channel_identifier,
            block_number=block_number,
        )
        raiden.handle_state_change(route_closed)
コード例 #16
0
ファイル: app.py プロジェクト: hdiedrich/raiden
class App(object):  # pylint: disable=too-few-public-methods
    default_config = dict(
        host='',
        port=INITIAL_PORT,
        privatekey_hex='',
        # number of blocks that a node requires to learn the secret before the lock expires
        reveal_timeout=DEFAULT_REVEAL_TIMEOUT,
        settle_timeout=DEFAULT_SETTLE_TIMEOUT,
        # how long to wait for a transfer until TimeoutTransfer is sent (time in milliseconds)
        msg_timeout=100.00,
    )

    def __init__(self, config, chain, discovery, transport_class=UDPTransport):
        self.config = config
        self.discovery = discovery
        self.transport = transport_class(config['host'], config['port'])
        self.raiden = RaidenService(
            chain,
            config['privatekey_hex'].decode('hex'),
            self.transport,
            discovery,
            config,
        )
        self.services = {'raiden': self.raiden}
        self.start_console = True

    def __repr__(self):
        return '<{} {}>'.format(
            self.__class__.__name__,
            pex(self.raiden.address),
        )

    def stop(self):
        self.transport.stop()
        self.raiden.stop()
コード例 #17
0
ファイル: message_handler.py プロジェクト: ChiNeSeFree/raiden
 def handle_message_revealsecret(self, raiden: RaidenService,
                                 message: RevealSecret):
     state_change = ReceiveSecretReveal(
         message.secret,
         message.sender,
     )
     raiden.handle_state_change(state_change)
コード例 #18
0
ファイル: message_handler.py プロジェクト: binaryflesh/raiden
    def handle_message_lockedtransfer(raiden: RaidenService,
                                      message: LockedTransfer):
        secret_hash = message.lock.secrethash
        # We must check if the secret was registered against the latest block,
        # even if the block is forked away and the transaction that registers
        # the secret is removed from the blockchain. The rationale here is that
        # someone else does know the secret, regardless of the chain state, so
        # the node must not use it to start a payment.
        #
        # For this particular case, it's preferable to use `latest` instead of
        # having a specific block_hash, because it's preferable to know if the secret
        # was ever known, rather than having a consistent view of the blockchain.
        registered = raiden.default_secret_registry.is_secret_registered(
            secrethash=secret_hash,
            block_identifier='latest',
        )
        if registered:
            log.warning(
                f'Ignoring received locked transfer with secrethash {pex(secret_hash)} '
                f'since it is already registered in the secret registry', )
            return

        if message.target == raiden.address:
            raiden.target_mediated_transfer(message)
        else:
            raiden.mediate_mediated_transfer(message)
コード例 #19
0
class App(object):  # pylint: disable=too-few-public-methods
    default_config = dict(
        host='',
        port=INITIAL_PORT,
        privatekey_hex='',
        # number of blocks that a node requires to learn the secret before the lock expires
        reveal_timeout=DEFAULT_REVEAL_TIMEOUT,
        settle_timeout=DEFAULT_SETTLE_TIMEOUT,
        # how long to wait for a transfer until TimeoutTransfer is sent (time in milliseconds)
        msg_timeout=100.00,
        # throttle policy for token bucket
        throttle_capacity=10.,
        throttle_fill_rate=10.,
        rpc=True,
        console=False,
    )

    def __init__(self, config, chain, discovery, transport_class=UDPTransport):
        self.config = config
        self.discovery = discovery
        if config.get('socket'):
            self.transport = transport_class(None,
                                             None,
                                             socket=config['socket'])
        else:
            self.transport = transport_class(config['host'], config['port'])
        self.transport.throttle_policy = TokenBucket(
            config['throttle_capacity'], config['throttle_fill_rate'])
        self.raiden = RaidenService(
            chain,
            decode_hex(config['privatekey_hex']),
            self.transport,
            discovery,
            config,
        )
        self.services = {'raiden': self.raiden}

        self.start_console = self.config['console']

    def __repr__(self):
        return '<{} {}>'.format(
            self.__class__.__name__,
            pex(self.raiden.address),
        )

    def stop(self, graceful=False):
        """Stop the raiden app.
        Args:
            graceful (bool): if True, also close and settle all channels before stopping
        """
        if graceful:
            self.raiden.close_and_settle()

        self.raiden.stop()

        # The transport must be stopped after the protocol. The protocol can be
        # running multiple threads of execution and it expects the protocol to
        # be available.
        self.transport.stop()
コード例 #20
0
ファイル: message_handler.py プロジェクト: ChiNeSeFree/raiden
 def handle_message_secret(self, raiden: RaidenService, message: Secret):
     balance_proof = balanceproof_from_envelope(message)
     state_change = ReceiveUnlock(
         message_identifier=message.message_identifier,
         secret=message.secret,
         balance_proof=balance_proof,
     )
     raiden.handle_state_change(state_change)
コード例 #21
0
ファイル: message_handler.py プロジェクト: AlphaX-IBS/raiden
def handle_message_secretrequest(raiden: RaidenService, message: SecretRequest):
    secret_request = ReceiveSecretRequest(
        message.payment_identifier,
        message.amount,
        message.secrethash,
        message.sender,
    )
    raiden.handle_state_change(secret_request)
コード例 #22
0
 def handle_message_unlock(raiden: RaidenService, message: Unlock) -> None:
     balance_proof = balanceproof_from_envelope(message)
     state_change = ReceiveUnlock(
         message_identifier=message.message_identifier,
         secret=message.secret,
         balance_proof=balance_proof,
     )
     raiden.handle_and_track_state_change(state_change)
コード例 #23
0
ファイル: message_handler.py プロジェクト: AlphaX-IBS/raiden
def handle_message_secret(raiden: RaidenService, message: Secret):
    balance_proof = balanceproof_from_envelope(message)
    state_change = ReceiveUnlock(
        message_identifier=message.message_identifier,
        secret=message.secret,
        balance_proof=balance_proof,
    )
    raiden.handle_state_change(state_change)
コード例 #24
0
ファイル: udp_message_handler.py プロジェクト: vnblr/raiden
def handle_message_secretrequest(raiden: RaidenService,
                                 message: SecretRequest):
    secret_request = ReceiveSecretRequest(
        message.payment_identifier,
        message.amount,
        message.secrethash,
        message.sender,
    )
    raiden.handle_state_change(secret_request)
コード例 #25
0
ファイル: message_handler.py プロジェクト: LitexGit/raiden
def handle_message_acceptcross(raiden: RaidenService, message: AcceptCross):
    # for sync
    if message.accept == 7:
        raiden.wal.change_crosstransaction_status(message.identifier, 8)
        log.info('##sync received')
        return

    raiden.wal.change_crosstransaction_status(message.identifier, 3)
    raiden.start_send_crosstansfer(message.identifier)
コード例 #26
0
ファイル: message_handler.py プロジェクト: virrius/lumino
 def handle_message_processed(cls,
                              raiden: RaidenService,
                              message: Processed,
                              is_light_client: bool = False) -> None:
     processed = ReceiveProcessed(message.sender,
                                  message.message_identifier)
     raiden.handle_and_track_state_change(processed)
     if is_light_client:
         LightClientMessageHandler.store_lc_processed(message, raiden.wal)
コード例 #27
0
ファイル: message_handler.py プロジェクト: ChiNeSeFree/raiden
 def handle_message_lockexpired(self, raiden: RaidenService,
                                message: LockExpired):
     balance_proof = balanceproof_from_envelope(message)
     state_change = ReceiveLockExpired(
         balance_proof=balance_proof,
         secrethash=message.secrethash,
         message_identifier=message.message_identifier,
     )
     raiden.handle_state_change(state_change)
コード例 #28
0
ファイル: message_handler.py プロジェクト: virrius/lumino
 def handle_message_delivered(cls,
                              raiden: RaidenService,
                              message: Delivered,
                              is_light_client: bool = False) -> None:
     delivered = ReceiveDelivered(message.sender,
                                  message.delivered_message_identifier)
     raiden.handle_and_track_state_change(delivered)
     if is_light_client:
         LightClientMessageHandler.store_lc_delivered(message, raiden.wal)
コード例 #29
0
ファイル: message_handler.py プロジェクト: virrius/lumino
 def handle_message_revealsecret(raiden: RaidenService,
                                 message: RevealSecret,
                                 is_light_client=False) -> None:
     if is_light_client:
         state_change = ReceiveSecretRevealLight(message.secret,
                                                 message.sender, message)
         raiden.handle_and_track_state_change(state_change)
     else:
         state_change = ReceiveSecretReveal(message.secret, message.sender)
         raiden.handle_and_track_state_change(state_change)
コード例 #30
0
def handle_channel_new(raiden: RaidenService, event: Event):
    data = event.event_data
    block_number = data['block_number']
    args = data['args']
    token_network_identifier = event.originating_contract
    transaction_hash = event.event_data['transaction_hash']
    channel_identifier = args['channel_identifier']
    participant1 = args['participant1']
    participant2 = args['participant2']
    is_participant = raiden.address in (participant1, participant2)

    # Raiden node is participant
    if is_participant:
        channel_proxy = raiden.chain.payment_channel(
            token_network_identifier,
            channel_identifier,
        )
        token_address = channel_proxy.token_address()
        channel_state = get_channel_state(
            token_address,
            raiden.default_registry.address,
            token_network_identifier,
            raiden.config['reveal_timeout'],
            channel_proxy,
            block_number,
        )

        new_channel = ContractReceiveChannelNew(
            transaction_hash=transaction_hash,
            token_network_identifier=token_network_identifier,
            channel_state=channel_state,
            block_number=block_number,
        )
        raiden.handle_state_change(new_channel)

        partner_address = channel_state.partner_state.address

        if ConnectionManager.BOOTSTRAP_ADDR != partner_address:
            raiden.start_health_check_for(partner_address)

    # Raiden node is not participant of channel
    else:
        new_route = ContractReceiveRouteNew(
            transaction_hash=transaction_hash,
            token_network_identifier=token_network_identifier,
            channel_identifier=channel_identifier,
            participant1=participant1,
            participant2=participant2,
            block_number=block_number,
        )
        raiden.handle_state_change(new_route)

    # A new channel is available, run the connection manager in case more
    # connections are needed
    connection_manager = raiden.connection_manager_for_token_network(
        token_network_identifier)
    retry_connect = gevent.spawn(connection_manager.retry_connect)
    raiden.add_pending_greenlet(retry_connect)
コード例 #31
0
ファイル: message_handler.py プロジェクト: AlphaX-IBS/raiden
def handle_message_directtransfer(raiden: RaidenService, message: DirectTransfer):
    token_network_identifier = message.token_network_address
    balance_proof = balanceproof_from_envelope(message)

    direct_transfer = ReceiveTransferDirect(
        token_network_identifier,
        message.message_identifier,
        message.payment_identifier,
        balance_proof,
    )

    raiden.handle_state_change(direct_transfer)
コード例 #32
0
ファイル: app.py プロジェクト: cyl-e/raiden
 def __init__(self, config, chain, discovery, transport_class=UDPTransport):
     self.config = config
     self.discovery = discovery
     self.transport = transport_class(config['host'], config['port'])
     self.raiden = RaidenService(
         chain,
         decode_hex(config['privatekey_hex']),
         self.transport,
         discovery,
         config,
     )
     self.services = {'raiden': self.raiden}
     self.start_console = True
コード例 #33
0
ファイル: message_handler.py プロジェクト: ChiNeSeFree/raiden
    def handle_message_lockedtransfer(self, raiden: RaidenService,
                                      message: LockedTransfer):
        secret_hash = message.lock.secrethash
        if raiden.default_secret_registry.check_registered(secret_hash):
            log.warning(
                f'Ignoring received locked transfer with secrethash {pex(secret_hash)} '
                f'since it is already registered in the secret registry', )
            return

        if message.target == raiden.address:
            raiden.target_mediated_transfer(message)
        else:
            raiden.mediate_mediated_transfer(message)
コード例 #34
0
    def handle_message_directtransfer(self, raiden: RaidenService,
                                      message: DirectTransfer):
        token_network_identifier = message.token_network_address
        balance_proof = balanceproof_from_envelope(message)

        direct_transfer = ReceiveTransferDirect(
            token_network_identifier,
            message.message_identifier,
            message.payment_identifier,
            balance_proof,
        )

        raiden.handle_state_change(direct_transfer)
コード例 #35
0
def handle_channel_new_balance(raiden: RaidenService, event: Event):
    data = event.event_data
    args = data['args']
    block_number = data['block_number']
    channel_identifier = args['channel_identifier']
    token_network_identifier = event.originating_contract
    participant_address = args['participant']
    total_deposit = args['total_deposit']
    transaction_hash = data['transaction_hash']

    previous_channel_state = views.get_channelstate_by_token_network_identifier(
        views.state_from_raiden(raiden),
        token_network_identifier,
        channel_identifier,
    )

    # Channels will only be registered if this node is a participant
    is_participant = previous_channel_state is not None

    if is_participant:
        assert previous_channel_state is not None
        previous_balance = previous_channel_state.our_state.contract_balance
        balance_was_zero = previous_balance == 0

        deposit_transaction = TransactionChannelNewBalance(
            participant_address,
            total_deposit,
            block_number,
        )

        newbalance_statechange = ContractReceiveChannelNewBalance(
            transaction_hash=transaction_hash,
            token_network_identifier=token_network_identifier,
            channel_identifier=channel_identifier,
            deposit_transaction=deposit_transaction,
            block_number=block_number,
        )
        raiden.handle_state_change(newbalance_statechange)

        if balance_was_zero and participant_address != raiden.address:
            connection_manager = raiden.connection_manager_for_token_network(
                token_network_identifier, )

            join_channel = gevent.spawn(
                connection_manager.join_channel,
                participant_address,
                total_deposit,
            )

            raiden.add_pending_greenlet(join_channel)
コード例 #36
0
    def __init__(
        self,
        config: Dict,
        chain: BlockChainService,
        default_registry: TokenNetworkRegistry,
        default_secret_registry: SecretRegistry,
        transport,
        discovery: Discovery = None,
    ):
        self.config = config
        self.discovery = discovery

        # check that the settlement timeout fits the limits of the contract
        invalid_timeout = (config['settle_timeout'] <
                           default_registry.settlement_timeout_min()
                           or config['settle_timeout'] >
                           default_registry.settlement_timeout_max())
        if invalid_timeout:
            raise InvalidSettleTimeout(
                ('Settlement timeout for Registry contract {} must '
                 'be in range [{}, {}], is {}').format(
                     to_checksum_address(default_registry.address),
                     default_registry.settlement_timeout_min(),
                     default_registry.settlement_timeout_max(),
                     config['settle_timeout'],
                 ), )

        try:
            self.raiden = RaidenService(
                chain,
                default_registry,
                default_secret_registry,
                unhexlify(config['privatekey_hex']),
                transport,
                config,
                discovery,
            )
        except filelock.Timeout:
            pubkey = to_normalized_address(
                privatekey_to_address(unhexlify(
                    self.config['privatekey_hex'])), )
            print(
                f'FATAL: Another Raiden instance already running for account {pubkey} on '
                f'network id {chain.network_id}', )
            sys.exit(1)
        self.start_console = self.config['console']

        # raiden.ui.console:Console assumes that a services
        # attribute is available for auto-registration
        self.services = dict()
コード例 #37
0
ファイル: app.py プロジェクト: hdiedrich/raiden
 def __init__(self, config, chain, discovery, transport_class=UDPTransport):
     self.config = config
     self.discovery = discovery
     self.transport = transport_class(config['host'], config['port'])
     self.raiden = RaidenService(
         chain,
         config['privatekey_hex'].decode('hex'),
         self.transport,
         discovery,
         config,
     )
     self.services = {'raiden': self.raiden}
     self.start_console = True
コード例 #38
0
ファイル: app.py プロジェクト: AlphaX-IBS/raiden
    def __init__(
            self,
            config: typing.Dict,
            chain: BlockChainService,
            query_start_block: typing.BlockNumber,
            default_registry: TokenNetworkRegistry,
            default_secret_registry: SecretRegistry,
            transport,
            discovery: Discovery = None,
    ):
        self.config = config
        self.discovery = discovery

        # check that the settlement timeout fits the limits of the contract
        invalid_timeout = (
            config['settle_timeout'] < default_registry.settlement_timeout_min() or
            config['settle_timeout'] > default_registry.settlement_timeout_max()
        )
        if invalid_timeout:
            raise InvalidSettleTimeout(
                (
                    'Settlement timeout for Registry contract {} must '
                    'be in range [{}, {}], is {}'
                ).format(
                    to_checksum_address(default_registry.address),
                    default_registry.settlement_timeout_min(),
                    default_registry.settlement_timeout_max(),
                    config['settle_timeout'],
                ),
            )

        try:
            self.raiden = RaidenService(
                chain=chain,
                query_start_block=query_start_block,
                default_registry=default_registry,
                default_secret_registry=default_secret_registry,
                private_key_bin=unhexlify(config['privatekey_hex']),
                transport=transport,
                config=config,
                discovery=discovery,
            )
        except filelock.Timeout:
            pubkey = to_normalized_address(
                privatekey_to_address(unhexlify(self.config['privatekey_hex'])),
            )
            print(
                f'FATAL: Another Raiden instance already running for account {pubkey} on '
                f'network id {chain.network_id}',
            )
            sys.exit(1)
コード例 #39
0
    def __init__(self, config, chain, default_registry, discovery, transport_class=UDPTransport):
        self.config = config
        self.discovery = discovery

        if config.get('socket'):
            transport = transport_class(
                None,
                None,
                socket=config['socket'],
            )
        else:
            transport = transport_class(
                config['host'],
                config['port'],
            )

        transport.throttle_policy = TokenBucket(
            config['protocol']['throttle_capacity'],
            config['protocol']['throttle_fill_rate']
        )
        try:
            self.raiden = RaidenService(
                chain,
                default_registry,
                unhexlify(config['privatekey_hex']),
                transport,
                discovery,
                config,
            )
        except filelock.Timeout:
            pubkey = privatekey_to_address(unhexlify(self.config['privatekey_hex']))
            print('FATAL: Another Raiden instance already running for account 0x%s' %
                  hexlify(str(pubkey)))
            sys.exit(1)
        self.start_console = self.config['console']

        # raiden.ui.console:Console assumes that a services
        # attribute is available for auto-registration
        self.services = dict()
コード例 #40
0
ファイル: message_handler.py プロジェクト: AlphaX-IBS/raiden
def handle_message_lockedtransfer(raiden: RaidenService, message: LockedTransfer):
    if message.target == raiden.address:
        raiden.target_mediated_transfer(message)
    else:
        raiden.mediate_mediated_transfer(message)
コード例 #41
0
ファイル: message_handler.py プロジェクト: AlphaX-IBS/raiden
def handle_message_processed(raiden: RaidenService, message: Processed):
    processed = ReceiveProcessed(message.message_identifier)
    raiden.handle_state_change(processed)
コード例 #42
0
ファイル: message_handler.py プロジェクト: AlphaX-IBS/raiden
def handle_message_revealsecret(raiden: RaidenService, message: RevealSecret):
    state_change = ReceiveSecretReveal(
        message.secret,
        message.sender,
    )
    raiden.handle_state_change(state_change)
コード例 #43
0
class App:  # pylint: disable=too-few-public-methods
    DEFAULT_CONFIG = {
        'host': '',
        'port': INITIAL_PORT,
        'external_ip': '',
        'external_port': INITIAL_PORT,
        'privatekey_hex': '',
        'reveal_timeout': DEFAULT_REVEAL_TIMEOUT,
        'settle_timeout': DEFAULT_SETTLE_TIMEOUT,
        'database_path': '',
        'msg_timeout': 100.0,
        'protocol': {
            'retry_interval': DEFAULT_PROTOCOL_RETRY_INTERVAL,
            'retries_before_backoff': DEFAULT_PROTOCOL_RETRIES_BEFORE_BACKOFF,
            'throttle_capacity': DEFAULT_PROTOCOL_THROTTLE_CAPACITY,
            'throttle_fill_rate': DEFAULT_PROTOCOL_THROTTLE_FILL_RATE,
            'nat_invitation_timeout': DEFAULT_NAT_INVITATION_TIMEOUT,
            'nat_keepalive_retries': DEFAULT_NAT_KEEPALIVE_RETRIES,
            'nat_keepalive_timeout': DEFAULT_NAT_KEEPALIVE_TIMEOUT,
        },
        'rpc': True,
        'console': False,
        'shutdown_timeout': DEFAULT_SHUTDOWN_TIMEOUT,
    }

    def __init__(self, config, chain, default_registry, discovery, transport_class=UDPTransport):
        self.config = config
        self.discovery = discovery

        if config.get('socket'):
            transport = transport_class(
                None,
                None,
                socket=config['socket'],
            )
        else:
            transport = transport_class(
                config['host'],
                config['port'],
            )

        transport.throttle_policy = TokenBucket(
            config['protocol']['throttle_capacity'],
            config['protocol']['throttle_fill_rate']
        )
        try:
            self.raiden = RaidenService(
                chain,
                default_registry,
                unhexlify(config['privatekey_hex']),
                transport,
                discovery,
                config,
            )
        except filelock.Timeout:
            pubkey = privatekey_to_address(unhexlify(self.config['privatekey_hex']))
            print('FATAL: Another Raiden instance already running for account 0x%s' %
                  hexlify(str(pubkey)))
            sys.exit(1)
        self.start_console = self.config['console']

        # raiden.ui.console:Console assumes that a services
        # attribute is available for auto-registration
        self.services = dict()

    def __repr__(self):
        return '<{} {}>'.format(
            self.__class__.__name__,
            pex(self.raiden.address),
        )

    def stop(self, leave_channels=False):
        """
        Stop the raiden app.

        Args:
            leave_channels (bool): if True, also close and settle all channels before stopping
        """
        if leave_channels:
            self.raiden.close_and_settle()

        self.raiden.stop()
コード例 #44
0
ファイル: app.py プロジェクト: AlphaX-IBS/raiden
class App:  # pylint: disable=too-few-public-methods
    DEFAULT_CONFIG = {
        'host': '',
        'port': INITIAL_PORT,
        'external_ip': '',
        'external_port': INITIAL_PORT,
        'privatekey_hex': '',
        'reveal_timeout': DEFAULT_REVEAL_TIMEOUT,
        'settle_timeout': DEFAULT_SETTLE_TIMEOUT,
        'database_path': '',
        'msg_timeout': 100.0,
        'transport': {
            'retry_interval': DEFAULT_TRANSPORT_RETRY_INTERVAL,
            'retries_before_backoff': DEFAULT_TRANSPORT_RETRIES_BEFORE_BACKOFF,
            'throttle_capacity': DEFAULT_TRANSPORT_THROTTLE_CAPACITY,
            'throttle_fill_rate': DEFAULT_TRANSPORT_THROTTLE_FILL_RATE,
            'nat_invitation_timeout': DEFAULT_NAT_INVITATION_TIMEOUT,
            'nat_keepalive_retries': DEFAULT_NAT_KEEPALIVE_RETRIES,
            'nat_keepalive_timeout': DEFAULT_NAT_KEEPALIVE_TIMEOUT,
        },
        'rpc': True,
        'console': False,
        'shutdown_timeout': DEFAULT_SHUTDOWN_TIMEOUT,
        'transport_type': 'udp',
        'matrix': {
            'server': 'auto',
            'available_servers': [
                'https://transport01.raiden.network',
                'https://transport02.raiden.network',
                'https://transport03.raiden.network',
            ],
            'discovery_room': {
                'alias_fragment': 'discovery',
                'server': 'transport01.raiden.network',
            },
        },
    }

    def __init__(
            self,
            config: typing.Dict,
            chain: BlockChainService,
            query_start_block: typing.BlockNumber,
            default_registry: TokenNetworkRegistry,
            default_secret_registry: SecretRegistry,
            transport,
            discovery: Discovery = None,
    ):
        self.config = config
        self.discovery = discovery

        # check that the settlement timeout fits the limits of the contract
        invalid_timeout = (
            config['settle_timeout'] < default_registry.settlement_timeout_min() or
            config['settle_timeout'] > default_registry.settlement_timeout_max()
        )
        if invalid_timeout:
            raise InvalidSettleTimeout(
                (
                    'Settlement timeout for Registry contract {} must '
                    'be in range [{}, {}], is {}'
                ).format(
                    to_checksum_address(default_registry.address),
                    default_registry.settlement_timeout_min(),
                    default_registry.settlement_timeout_max(),
                    config['settle_timeout'],
                ),
            )

        try:
            self.raiden = RaidenService(
                chain=chain,
                query_start_block=query_start_block,
                default_registry=default_registry,
                default_secret_registry=default_secret_registry,
                private_key_bin=unhexlify(config['privatekey_hex']),
                transport=transport,
                config=config,
                discovery=discovery,
            )
        except filelock.Timeout:
            pubkey = to_normalized_address(
                privatekey_to_address(unhexlify(self.config['privatekey_hex'])),
            )
            print(
                f'FATAL: Another Raiden instance already running for account {pubkey} on '
                f'network id {chain.network_id}',
            )
            sys.exit(1)

    def __repr__(self):
        return '<{} {}>'.format(
            self.__class__.__name__,
            pex(self.raiden.address),
        )

    def stop(self, leave_channels: bool = False):
        """
        Stop the raiden app.

        Args:
            leave_channels: if True, also close and settle all channels before stopping
        """
        if leave_channels:
            self.raiden.close_and_settle()

        self.raiden.stop()