def test_route_metadata_hashing(): properties = factories.RouteMetadataProperties() one_route_metadata = factories.create(properties) assert isinstance(one_route_metadata, RouteMetadata) one_hash = one_route_metadata.hash another_route_metadata = factories.create(properties) another_hash = another_route_metadata.hash assert one_hash == another_hash, "route metadata with same routes do not match" inverted_route_metadata = factories.create( factories.RouteMetadataProperties( route=[factories.HOP2, factories.HOP1])) inverted_route_hash = inverted_route_metadata.hash assert one_hash != inverted_route_hash, "route metadata with inverted routes still match"
def test_locked_transfer_additional_hash_contains_route_metadata_hash(): one_locked_transfer = factories.create( factories.LockedTransferProperties()) route_metadata = factories.create( factories.RouteMetadataProperties( route=[factories.HOP2, factories.HOP1])) another_locked_transfer = factories.create( factories.LockedTransferProperties(metadata=factories.create( factories.MetadataProperties(routes=[route_metadata])))) assert ( one_locked_transfer.message_hash != another_locked_transfer.message_hash ), "LockedTransfers with different routes should have different message hashes"
def test_resolve_routes(netting_channel_state, chain_state, token_network_state): route_metadata = factories.create( factories.RouteMetadataProperties(route=[ netting_channel_state.our_state.address, netting_channel_state.partner_state.address, ])) route_states = resolve_routes( routes=[route_metadata], token_network_address=token_network_state.address, chain_state=chain_state, ) msg = "route resolved with wrong channel id" channel_id = netting_channel_state.canonical_identifier.channel_identifier assert route_states[0].forward_channel_id == channel_id, msg
def test_changing_route_metadata_will_invalidate_lock_transfer_signature(): one_locked_transfer = factories.create( factories.LockedTransferProperties(sender=ADDRESS, pkey=PRIVKEY)) new_route_metadata = factories.create( factories.RouteMetadataProperties( route=[factories.HOP2, factories.HOP1])) new_metadata = factories.create( factories.Metadata(routes=[new_route_metadata])) assert ADDRESS == recover(one_locked_transfer._data_to_sign(), one_locked_transfer.signature ), "signature does not match signer address" one_locked_transfer.metadata = new_metadata assert ADDRESS != recover( one_locked_transfer._data_to_sign(), one_locked_transfer.signature ), "signature should not be valid after data being altered"