raiden_state_machine/machine/
utils.rs

1#![warn(clippy::missing_docs_in_private_items)]
2
3use raiden_primitives::types::SecretHash;
4
5use crate::types::{
6	ChainState,
7	ChannelState,
8	ContractReceiveSecretReveal,
9	ReceiveSecretReveal,
10};
11
12/// Replace existing channel state with a new one.
13pub(crate) fn update_channel(
14	chain_state: &mut ChainState,
15	channel_state: ChannelState,
16) -> Result<(), String> {
17	let token_network_registries = &mut chain_state.identifiers_to_tokennetworkregistries;
18	let token_network_registry =
19		match token_network_registries.get_mut(&channel_state.token_network_registry_address) {
20			Some(token_network_registry) => token_network_registry,
21			None =>
22				return Err(format!(
23					"Token network registry {} was not found",
24					channel_state.token_network_registry_address
25				)),
26		};
27	let token_network = match token_network_registry
28		.tokennetworkaddresses_to_tokennetworks
29		.get_mut(&channel_state.canonical_identifier.token_network_address)
30	{
31		Some(token_network) => token_network,
32		None =>
33			return Err(format!(
34				"Token network {} was not found",
35				channel_state.canonical_identifier.token_network_address
36			)),
37	};
38
39	token_network
40		.channelidentifiers_to_channels
41		.insert(channel_state.canonical_identifier.channel_identifier, channel_state);
42
43	Ok(())
44}
45
46/// True if secrethashes of an existing transfer matches state change.
47pub(super) fn is_valid_secret_reveal(
48	state_change: &ReceiveSecretReveal,
49	transfer_secrethash: SecretHash,
50) -> bool {
51	state_change.secrethash == transfer_secrethash
52}
53
54/// True if secrethashes of an existing transfer matches state change.
55pub(super) fn is_valid_onchain_secret_reveal(
56	state_change: &ContractReceiveSecretReveal,
57	transfer_secrethash: SecretHash,
58) -> bool {
59	state_change.secrethash == transfer_secrethash
60}