def _transfer_secret_not_requested( initiator_app: RaidenService, target_app: RaidenService, token_address: TokenAddress, amount: PaymentAmount, identifier: PaymentID, timeout: Optional[float] = None, ) -> SecretHash: if timeout is None: timeout = 10 secret, secrethash = make_secret_with_hash() assert isinstance(target_app.raiden_event_handler, HoldRaidenEventHandler) hold_secret_request = target_app.raiden_event_handler.hold( SendSecretRequest, {"secrethash": secrethash}) token_network_registry_address = initiator_app.default_registry.address token_network_address = views.get_token_network_address_by_token_address( chain_state=views.state_from_raiden(initiator_app), token_network_registry_address=token_network_registry_address, token_address=token_address, ) assert token_network_address initiator_app.mediated_transfer_async( token_network_address=token_network_address, amount=amount, target=TargetAddress(target_app.address), identifier=identifier, secret=secret, secrethash=secrethash, ) with Timeout(seconds=timeout): hold_secret_request.get() return secrethash
def _transfer_expired( initiator_app: RaidenService, target_app: RaidenService, token_address: TokenAddress, amount: PaymentAmount, identifier: PaymentID, timeout: Optional[float] = None, ) -> SecretHash: assert identifier is not None, "The identifier must be provided" assert isinstance(target_app.message_handler, WaitForMessage) # This timeout has to be larger then the lock expiration. The lock # expiration unit is block numbers, and its value is defined relative to # the node's reveal timeout configuration. For the integration tests the # reveal timeout is chosen proportionally to the number of nodes, 90 # seconds is a rough default that should work with the standard # configuration. if timeout is None: timeout = 90 secret, secrethash = make_secret_with_hash() wait_for_remove_expired_lock = target_app.message_handler.wait_for_message( LockExpired, {"secrethash": secrethash}) token_network_registry_address = initiator_app.default_registry.address token_network_address = views.get_token_network_address_by_token_address( chain_state=views.state_from_raiden(initiator_app), token_network_registry_address=token_network_registry_address, token_address=token_address, ) assert token_network_address payment_status = initiator_app.mediated_transfer_async( token_network_address=token_network_address, amount=amount, target=TargetAddress(target_app.address), identifier=identifier, secret=secret, secrethash=secrethash, ) with Timeout(seconds=timeout): wait_for_remove_expired_lock.get() msg = (f"transfer from {to_checksum_address(initiator_app.address)} " f"to {to_checksum_address(target_app.address)} did not expire.") assert payment_status.payment_done.get() is False, msg return secrethash
def _transfer_unlocked( initiator_app: RaidenService, target_app: RaidenService, token_address: TokenAddress, amount: PaymentAmount, identifier: PaymentID, timeout: Optional[float] = None, expect_unlock_failures: bool = False, route_states: List[RouteState] = None, ) -> SecretHash: assert isinstance(target_app.message_handler, WaitForMessage) if timeout is None: timeout = 10 wait_for_unlock = target_app.message_handler.wait_for_message( Unlock, {"payment_identifier": identifier}) token_network_registry_address = initiator_app.default_registry.address token_network_address = views.get_token_network_address_by_token_address( chain_state=views.state_from_raiden(initiator_app), token_network_registry_address=token_network_registry_address, token_address=token_address, ) assert token_network_address secret, secrethash = make_secret_with_hash() payment_status = initiator_app.mediated_transfer_async( token_network_address=token_network_address, amount=amount, target=TargetAddress(target_app.address), identifier=identifier, secret=secret, secrethash=secrethash, route_states=route_states, ) apps = [initiator_app, target_app] with watch_for_unlock_failures( *apps) if not expect_unlock_failures else nullcontext(): with Timeout(seconds=timeout): wait_for_unlock.get() msg = ( f"transfer from {to_checksum_address(initiator_app.address)} " f"to {to_checksum_address(target_app.address)} failed.") assert payment_status.payment_done.get(), msg return secrethash