partner_chains_smart_contracts_commands/
register.rs1use crate::{GenesisUtxo, PaymentFilePath, option_to_json, transaction_submitted_json};
2use partner_chains_cardano_offchain::register::{run_deregister, run_register};
3use sidechain_domain::{
4 AdaBasedStaking, CandidateRegistration, MainchainSignature, PermissionedCandidateData,
5 SidechainSignature, StakePoolPublicKey, UtxoId,
6};
7
8#[derive(Clone, Debug, clap::Parser)]
10pub struct RegisterCmd {
11 #[clap(flatten)]
12 common_arguments: crate::CommonArguments,
13 #[clap(flatten)]
14 genesis_utxo: GenesisUtxo,
16 #[arg(long)]
17 registration_utxo: UtxoId,
19 #[clap(flatten)]
20 payment_key_file: PaymentFilePath,
22 #[arg(long, alias = "sidechain-public-keys")]
23 partner_chain_public_keys: PermissionedCandidateData,
25 #[arg(long, alias = "sidechain-signature")]
26 partner_chain_signature: SidechainSignature,
28 #[arg(long)]
29 spo_public_key: StakePoolPublicKey,
31 #[arg(long)]
32 spo_signature: MainchainSignature,
34}
35
36impl RegisterCmd {
37 pub async fn execute(self) -> crate::SubCmdResult {
39 let payment_key = self.payment_key_file.read_key()?;
40 let client = self.common_arguments.get_ogmios_client().await?;
41 let candidate_registration = CandidateRegistration {
42 stake_ownership: AdaBasedStaking {
43 pub_key: self.spo_public_key,
44 signature: self.spo_signature,
45 },
46 partner_chain_pub_key: self.partner_chain_public_keys.sidechain_public_key,
47 partner_chain_signature: self.partner_chain_signature,
48 own_pkh: payment_key.to_pub_key_hash(),
49 registration_utxo: self.registration_utxo,
50 keys: self.partner_chain_public_keys.keys,
51 };
52
53 let result = run_register(
54 self.genesis_utxo.into(),
55 &candidate_registration,
56 &payment_key,
57 &client,
58 self.common_arguments.retries(),
59 )
60 .await?;
61 Ok(option_to_json(result.map(transaction_submitted_json)))
62 }
63}
64
65#[derive(Clone, Debug, clap::Parser)]
66pub struct DeregisterCmd {
68 #[clap(flatten)]
69 common_arguments: crate::CommonArguments,
70 #[clap(flatten)]
71 genesis_utxo: GenesisUtxo,
73 #[clap(flatten)]
74 payment_key_file: PaymentFilePath,
76 #[arg(long)]
77 spo_public_key: StakePoolPublicKey,
79}
80
81impl DeregisterCmd {
82 pub async fn execute(self) -> crate::SubCmdResult {
84 let payment_signing_key = self.payment_key_file.read_key()?;
85 let client = self.common_arguments.get_ogmios_client().await?;
86
87 let result = run_deregister(
88 self.genesis_utxo.into(),
89 &payment_signing_key,
90 self.spo_public_key,
91 &client,
92 self.common_arguments.retries(),
93 )
94 .await?;
95 Ok(option_to_json(result.map(transaction_submitted_json)))
96 }
97}