def subdispatch_targettask( node_state, state_change, payment_network_identifier, token_address, channel_identifier, hashlock): block_number = node_state.block_number sub_task = node_state.payment_mapping.hashlocks_to_task.get(hashlock) 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: iteration = target.state_transition( target_state, state_change, channel_state, 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.hashlocks_to_task[hashlock] = sub_task return TransitionResult(node_state, events)
def subdispatch_initiatortask( node_state, state_change, payment_network_identifier, token_address, hashlock): block_number = node_state.block_number sub_task = node_state.payment_mapping.hashlocks_to_task.get(hashlock) if not sub_task: is_valid_subtask = True manager_state = None elif sub_task and isinstance(sub_task, PaymentMappingState.InitiatorTask): is_valid_subtask = ( payment_network_identifier == sub_task.payment_network_identifier and token_address == sub_task.token_address ) manager_state = sub_task.manager_state else: is_valid_subtask = False events = list() if is_valid_subtask: token_network_state = get_token_network( node_state, payment_network_identifier, token_address, ) iteration = initiator_manager.state_transition( manager_state, state_change, token_network_state.channelidentifiers_to_channels, block_number, ) events = iteration.events if iteration.new_state: sub_task = PaymentMappingState.InitiatorTask( payment_network_identifier, token_address, iteration.new_state, ) node_state.payment_mapping.hashlocks_to_task[hashlock] = sub_task return TransitionResult(node_state, events)