raiden-state-machine 0.1.0

Raiden Network implementation in Rust
Documentation
#![warn(clippy::missing_docs_in_private_items)]

use raiden_primitives::types::SecretHash;

use crate::types::{
	ChainState,
	ChannelState,
	ContractReceiveSecretReveal,
	ReceiveSecretReveal,
};

/// Replace existing channel state with a new one.
pub(crate) fn update_channel(
	chain_state: &mut ChainState,
	channel_state: ChannelState,
) -> Result<(), String> {
	let token_network_registries = &mut chain_state.identifiers_to_tokennetworkregistries;
	let token_network_registry =
		match token_network_registries.get_mut(&channel_state.token_network_registry_address) {
			Some(token_network_registry) => token_network_registry,
			None =>
				return Err(format!(
					"Token network registry {} was not found",
					channel_state.token_network_registry_address
				)),
		};
	let token_network = match token_network_registry
		.tokennetworkaddresses_to_tokennetworks
		.get_mut(&channel_state.canonical_identifier.token_network_address)
	{
		Some(token_network) => token_network,
		None =>
			return Err(format!(
				"Token network {} was not found",
				channel_state.canonical_identifier.token_network_address
			)),
	};

	token_network
		.channelidentifiers_to_channels
		.insert(channel_state.canonical_identifier.channel_identifier, channel_state);

	Ok(())
}

/// True if secrethashes of an existing transfer matches state change.
pub(super) fn is_valid_secret_reveal(
	state_change: &ReceiveSecretReveal,
	transfer_secrethash: SecretHash,
) -> bool {
	state_change.secrethash == transfer_secrethash
}

/// True if secrethashes of an existing transfer matches state change.
pub(super) fn is_valid_onchain_secret_reveal(
	state_change: &ContractReceiveSecretReveal,
	transfer_secrethash: SecretHash,
) -> bool {
	state_change.secrethash == transfer_secrethash
}