def handle_init( payment_state: Optional[InitiatorPaymentState], state_change: ActionInitInitiator, addresses_to_channel: Dict[Tuple[TokenNetworkAddress, Address], NettingChannelState], nodeaddresses_to_networkstates: NodeNetworkStateMap, pseudo_random_generator: random.Random, block_number: BlockNumber, ) -> TransitionResult[Optional[InitiatorPaymentState]]: events: List[Event] = list() if payment_state is None: sub_iteration = initiator.try_new_route( addresses_to_channel=addresses_to_channel, nodeaddresses_to_networkstates=nodeaddresses_to_networkstates, candidate_route_states=state_change.routes, transfer_description=state_change.transfer, pseudo_random_generator=pseudo_random_generator, block_number=block_number, ) events = sub_iteration.events if sub_iteration.new_state: payment_state = InitiatorPaymentState( initiator_transfers={ sub_iteration.new_state.transfer.lock.secrethash: sub_iteration.new_state }, routes=state_change.routes, ) return TransitionResult(payment_state, events)
def handle_init( payment_state: InitiatorPaymentState, state_change: ActionInitInitiator, channelidentifiers_to_channels: typing.ChannelMap, pseudo_random_generator: random.Random, block_number: typing.BlockNumber, ) -> TransitionResult: events: typing.List[Event] if payment_state is None: sub_iteration = initiator.try_new_route( old_initiator_state=None, channelidentifiers_to_channels=channelidentifiers_to_channels, available_routes=state_change.routes, transfer_description=state_change.transfer, pseudo_random_generator=pseudo_random_generator, block_number=block_number, ) events = sub_iteration.events if sub_iteration.new_state: payment_state = InitiatorPaymentState(sub_iteration.new_state) else: events = list() iteration = TransitionResult(payment_state, events) return iteration
def handle_init( payment_state: Optional[InitiatorPaymentState], state_change: ActionInitInitiator, channelidentifiers_to_channels: ChannelMap, pseudo_random_generator: random.Random, block_number: BlockNumber, ) -> TransitionResult[InitiatorPaymentState]: events: List[Event] if payment_state is None: sub_iteration = initiator.try_new_route( channelidentifiers_to_channels=channelidentifiers_to_channels, available_routes=state_change.routes, transfer_description=state_change.transfer, pseudo_random_generator=pseudo_random_generator, block_number=block_number, ) events = sub_iteration.events if sub_iteration.new_state: payment_state = InitiatorPaymentState( initiator_transfers={ sub_iteration.new_state.transfer.lock.secrethash: sub_iteration.new_state }) else: events = list() iteration = TransitionResult(payment_state, events) return iteration
def handle_init( payment_state: InitiatorPaymentState, state_change: ActionInitInitiator, channelidentifiers_to_channels: initiator.ChannelMap, pseudo_random_generator: random.Random, block_number: typing.BlockNumber, ) -> TransitionResult: if payment_state is None: sub_iteration = initiator.try_new_route( state_change.payment_network_identifier, channelidentifiers_to_channels, state_change.routes, state_change.transfer, pseudo_random_generator, block_number, ) events = sub_iteration.events if sub_iteration.new_state: payment_state = InitiatorPaymentState(sub_iteration.new_state) else: events = list() iteration = TransitionResult(payment_state, events) return iteration
def test_get_transfer_secret_none_for_none_transfer_state(chain_state): secret = factories.make_secret() transfer = factories.create(factories.LockedTransferUnsignedStateProperties(secret=secret)) secrethash = transfer.lock.secrethash payment_state = InitiatorPaymentState(initiator_transfers={secrethash: None}, routes=[]) task = InitiatorTask( token_network_address=factories.UNIT_TOKEN_NETWORK_ADDRESS, manager_state=payment_state ) chain_state.payment_mapping.secrethashes_to_task[secrethash] = task assert get_transfer_secret(chain_state=chain_state, secrethash=secrethash) is None
def test_initiator_task_view(): """Test transfer_tasks_view(), which is used to generate the output of the pending transfers API, with an initiator task. """ channel_id = factories.UNIT_CHANNEL_ID secret = factories.make_secret() transfer = factories.create( factories.LockedTransferUnsignedStateProperties(secret=secret)) secrethash = transfer.lock.secrethash transfer_description = TransferDescriptionWithSecretState( token_network_registry_address=factories. UNIT_TOKEN_NETWORK_REGISTRY_ADDRESS, payment_identifier=transfer.payment_identifier, amount=transfer.balance_proof.locked_amount, token_network_address=factories.UNIT_TOKEN_NETWORK_ADDRESS, initiator=transfer.initiator, target=transfer.target, secret=secret, secrethash=sha256_secrethash(secret), ) transfer_state = InitiatorTransferState( route=RouteState(route=[transfer.initiator, transfer.target], forward_channel_id=channel_id), transfer_description=transfer_description, channel_identifier=channel_id, transfer=transfer, ) payment_state = InitiatorPaymentState( routes=[], initiator_transfers={secrethash: transfer_state}) task = InitiatorTask( token_network_address=factories.UNIT_TOKEN_NETWORK_ADDRESS, manager_state=payment_state) payment_mapping = {secrethash: cast(TransferTask, task)} view = transfer_tasks_view(payment_mapping) assert len(view) == 1 pending_transfer = view[0] assert pending_transfer.get("role") == "initiator" balance_proof = transfer.balance_proof assert pending_transfer.get("channel_identifier") == str( balance_proof.channel_identifier) assert pending_transfer.get("locked_amount") == str( balance_proof.locked_amount) assert pending_transfer.get("transferred_amount") == str( balance_proof.transferred_amount)
def test_initiator_task_view(): """Test transfer_tasks_view(), which is used to generate the output of the pending transfers API, with an initiator task. """ channel_id = factories.UNIT_CHANNEL_ID secret = factories.make_secret() payment_hash_invoice = factories.make_payment_hash_invoice() transfer = factories.create( factories.LockedTransferUnsignedStateProperties( secret=secret, payment_hash_invoice=payment_hash_invoice)) secrethash = transfer.lock.secrethash transfer_description = TransferDescriptionWithSecretState( payment_network_identifier=factories.UNIT_PAYMENT_NETWORK_IDENTIFIER, payment_identifier=transfer.payment_identifier, payment_hash_invoice=transfer.payment_hash_invoice, amount=transfer.balance_proof.locked_amount, allocated_fee=0, token_network_identifier=factories.UNIT_TOKEN_NETWORK_ADDRESS, initiator=transfer.initiator, target=transfer.target, secret=secret, ) transfer_state = InitiatorTransferState( transfer_description=transfer_description, channel_identifier=channel_id, transfer=transfer, revealsecret=None, ) payment_state = InitiatorPaymentState({secrethash: transfer_state}) task = InitiatorTask( token_network_identifier=factories.UNIT_TOKEN_NETWORK_ADDRESS, manager_state=payment_state) payment_mapping = {secrethash: task} view = transfer_tasks_view(payment_mapping) assert len(view) == 1 pending_transfer = view[0] assert pending_transfer.get("role") == "initiator" balance_proof = transfer.balance_proof assert pending_transfer.get("channel_identifier") == str( balance_proof.channel_identifier) assert pending_transfer.get("locked_amount") == str( balance_proof.locked_amount) assert pending_transfer.get("transferred_amount") == str( balance_proof.transferred_amount)
def handle_init(payment_state, state_change, channelidentifiers_to_channels, block_number): if payment_state is None: sub_iteration = initiator.try_new_route( channelidentifiers_to_channels, state_change.routes, state_change.transfer, block_number, ) events = sub_iteration.events if sub_iteration.new_state: payment_state = InitiatorPaymentState(sub_iteration.new_state) else: events = list() iteration = TransitionResult(payment_state, events) return iteration
def handle_init_light( payment_state: Optional[InitiatorPaymentState], state_change: ActionInitInitiatorLight, channelidentifiers_to_channels: ChannelMap, ) -> TransitionResult[InitiatorPaymentState]: events: List[Event] = list() if payment_state is None: sub_iteration = initiator.try_new_route_light( channelidentifiers_to_channels=channelidentifiers_to_channels, available_routes=state_change.routes, transfer_description=state_change.transfer, signed_locked_transfer=state_change.signed_locked_transfer ) events = sub_iteration.events if sub_iteration.new_state: payment_state = InitiatorPaymentState( initiator_transfers={ sub_iteration.new_state.transfer.lock.secrethash: sub_iteration.new_state } ) return TransitionResult(payment_state, events)