partner_chains_smart_contracts_commands/
permissioned_candidates.rs

1use crate::{GenesisUtxo, PaymentFilePath, option_to_json, parse_partnerchain_public_keys};
2use partner_chains_cardano_offchain::permissioned_candidates::upsert_permissioned_candidates;
3use std::fs::read_to_string;
4
5#[derive(Clone, Debug, clap::Parser)]
6/// Command for upserting the permissioned candidates on the main chain
7pub struct UpsertPermissionedCandidatesCmd {
8	#[clap(flatten)]
9	common_arguments: crate::CommonArguments,
10	#[arg(long)]
11	/// Path to the file containing the permissioned candidates data.
12	/// Each line represents one permissioned candidate in format SIDECHAIN_KEY:AURA_KEY:GRANDPA_KEY
13	permissioned_candidates_file: String,
14	#[clap(flatten)]
15	/// Path to the payment key file
16	payment_key_file: PaymentFilePath,
17	#[clap(flatten)]
18	/// Genesis UTXO
19	genesis_utxo: GenesisUtxo,
20}
21
22impl UpsertPermissionedCandidatesCmd {
23	/// Upserts the permissioned candidates on the main chain.
24	pub async fn execute(self) -> crate::SubCmdResult {
25		let payment_key = self.payment_key_file.read_key()?;
26
27		let mut permissioned_candidates = Vec::new();
28
29		let file_content = read_to_string(&self.permissioned_candidates_file).map_err(|e| {
30			format!(
31				"Could not read permissioned candidates file '{}'. Cause: {e}",
32				&self.permissioned_candidates_file
33			)
34		})?;
35		for line in file_content.lines() {
36			if line.is_empty() {
37				continue;
38			}
39			let permissioned_candidate = parse_partnerchain_public_keys(line).map_err(|e| {
40				format!("Failed to parse permissioned candidate: '{}', because of {}", line, e)
41			})?;
42			permissioned_candidates.push(permissioned_candidate);
43		}
44
45		let client = self.common_arguments.get_ogmios_client().await?;
46
47		let result = upsert_permissioned_candidates(
48			self.genesis_utxo.into(),
49			&permissioned_candidates,
50			&payment_key,
51			&client,
52			&self.common_arguments.retries(),
53		)
54		.await?;
55		Ok(option_to_json(result))
56	}
57}