def subdispatch_initiatortask( node_state, state_change, payment_network_identifier, token_address, 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 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: pseudo_random_generator = node_state.pseudo_random_generator 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, pseudo_random_generator, 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.secrethashes_to_task[secrethash] = sub_task return TransitionResult(node_state, events)
def subdispatch_initiatortask( chain_state: ChainState, state_change: StateChange, token_network_identifier: typing.TokenNetworkID, secrethash: typing.SecretHash, ) -> TransitionResult: block_number = chain_state.block_number sub_task = chain_state.payment_mapping.secrethashes_to_task.get(secrethash) if not sub_task: is_valid_subtask = True manager_state = None elif sub_task and isinstance(sub_task, PaymentMappingState.InitiatorTask): is_valid_subtask = ( token_network_identifier == sub_task.token_network_identifier) manager_state = sub_task.manager_state else: is_valid_subtask = False events = list() if is_valid_subtask: pseudo_random_generator = chain_state.pseudo_random_generator token_network_state = views.get_token_network_by_identifier( chain_state, token_network_identifier, ) iteration = initiator_manager.state_transition( manager_state, state_change, token_network_state.channelidentifiers_to_channels, pseudo_random_generator, block_number, ) events = iteration.events if iteration.new_state: sub_task = PaymentMappingState.InitiatorTask( token_network_identifier, iteration.new_state, ) chain_state.payment_mapping.secrethashes_to_task[ secrethash] = sub_task elif secrethash in chain_state.payment_mapping.secrethashes_to_task: del chain_state.payment_mapping.secrethashes_to_task[secrethash] return TransitionResult(chain_state, events)