def subdispatch_targettask( node_state, state_change, payment_network_identifier, token_address, channel_identifier, secrethash): block_number = node_state.block_number sub_task = node_state.payment_mapping.secrethashes_to_task.get(secrethash) if not sub_task: is_valid_subtask = True target_state = None elif sub_task and isinstance(sub_task, PaymentMappingState.TargetTask): is_valid_subtask = ( payment_network_identifier == sub_task.payment_network_identifier and token_address == sub_task.token_address ) target_state = sub_task.target_state else: is_valid_subtask = False events = list() channel_state = None if is_valid_subtask: channel_state = views.get_channelstate_by_tokenaddress( node_state, payment_network_identifier, token_address, channel_identifier, ) if channel_state: pseudo_random_generator = node_state.pseudo_random_generator iteration = target.state_transition( target_state, state_change, channel_state, pseudo_random_generator, block_number, ) events = iteration.events if iteration.new_state: sub_task = PaymentMappingState.TargetTask( payment_network_identifier, token_address, channel_identifier, iteration.new_state, ) node_state.payment_mapping.secrethashes_to_task[secrethash] = sub_task return TransitionResult(node_state, events)
def handle_channel_new_balance(raiden, event, current_block_number): data = event.event_data registry_address = data['registry_address'] channel_identifier = event.originating_contract token_address = data['token_address'] participant_address = data['participant'] new_balance = data['balance'] deposit_block_number = data['block_number'] previous_channel_state = views.get_channelstate_by_tokenaddress( views.state_from_raiden(raiden), registry_address, token_address, channel_identifier, ) # Channels will only be registered if this node is a participant is_participant = previous_channel_state is not None if is_participant: previous_balance = previous_channel_state.our_state.contract_balance balance_was_zero = previous_balance == 0 token_network_identifier = views.get_token_network_identifier_by_token_address( views.state_from_raiden(raiden), registry_address, token_address, ) deposit_transaction = TransactionChannelNewBalance( participant_address, new_balance, deposit_block_number, ) newbalance_statechange = ContractReceiveChannelNewBalance( token_network_identifier, channel_identifier, deposit_transaction, ) raiden.handle_state_change(newbalance_statechange, current_block_number) if balance_was_zero: connection_manager = raiden.connection_manager_for_token( registry_address, token_address, ) gevent.spawn( connection_manager.join_channel, registry_address, participant_address, new_balance, )
def handle_channel_new_balance(raiden, event): data = event.event_data payment_network_identifier = raiden.default_registry.address channel_identifier = event.originating_contract token_address = data['token_address'] participant_address = data['participant'] new_balance = data['balance'] previous_channel_state = views.get_channelstate_by_tokenaddress( views.state_from_raiden(raiden), payment_network_identifier, token_address, channel_identifier, ) # Channels will only be registered if this node is a participant is_participant = previous_channel_state is not None if is_participant: previous_balance = previous_channel_state.our_state.contract_balance balance_was_zero = previous_balance == 0 newbalance_statechange = ContractReceiveChannelNewBalance( channel_identifier, participant_address, new_balance, ) state_change = ActionForTokenNetwork( payment_network_identifier, token_address, newbalance_statechange, ) raiden.handle_state_change(state_change) if balance_was_zero: connection_manager = raiden.connection_manager_for_token( token_address) gevent.spawn( connection_manager.join_channel, participant_address, new_balance, )
def subdispatch_to_paymenttask(node_state, state_change, secrethash): block_number = node_state.block_number sub_task = node_state.payment_mapping.secrethashes_to_task.get(secrethash) events = list() if sub_task: if isinstance(sub_task, PaymentMappingState.InitiatorTask): payment_network_identifier = sub_task.payment_network_identifier token_address = sub_task.token_address token_network_state = get_token_network( node_state, payment_network_identifier, token_address, ) if token_network_state: sub_iteration = initiator_manager.state_transition( sub_task.manager_state, state_change, token_network_state.channelidentifiers_to_channels, block_number, ) events = sub_iteration.events elif isinstance(sub_task, PaymentMappingState.MediatorTask): payment_network_identifier = sub_task.payment_network_identifier token_address = sub_task.token_address token_network_state = get_token_network( node_state, payment_network_identifier, token_address, ) if token_network_state: sub_iteration = mediator.state_transition( sub_task.mediator_state, state_change, token_network_state.channelidentifiers_to_channels, block_number, ) events = sub_iteration.events elif isinstance(sub_task, PaymentMappingState.TargetTask): payment_network_identifier = sub_task.payment_network_identifier token_address = sub_task.token_address channel_identifier = sub_task.channel_identifier channel_state = views.get_channelstate_by_tokenaddress( node_state, payment_network_identifier, token_address, channel_identifier, ) if channel_state: sub_iteration = target.state_transition( sub_task.target_state, state_change, channel_state, block_number, ) events = sub_iteration.events return TransitionResult(node_state, events)