cli/commands/
misc.rs

1use libp2p_identity::PeerId;
2use node::{account::AccountSecretKey, p2p::identity::SecretKey};
3
4#[derive(Debug, clap::Args)]
5pub struct Misc {
6    #[command(subcommand)]
7    command: MiscCommand,
8}
9
10impl Misc {
11    pub fn run(self) -> anyhow::Result<()> {
12        match self.command {
13            MiscCommand::P2PKeyPair(command) => command.run(),
14            MiscCommand::MinaKeyPair(command) => command.run(),
15        }
16    }
17}
18
19#[derive(Clone, Debug, clap::Subcommand)]
20pub enum MiscCommand {
21    P2PKeyPair(P2PKeyPair),
22    MinaKeyPair(MinaKeyPair),
23}
24
25#[derive(Debug, Clone, clap::Args)]
26pub struct P2PKeyPair {
27    #[arg(long, short = 's', env = "OPENMINA_P2P_SEC_KEY")]
28    p2p_secret_key: Option<SecretKey>,
29}
30
31impl P2PKeyPair {
32    pub fn run(self) -> anyhow::Result<()> {
33        let secret_key = self.p2p_secret_key.unwrap_or_else(SecretKey::rand);
34        let public_key = secret_key.public_key();
35        let peer_id = public_key.peer_id();
36        let libp2p_peer_id = PeerId::try_from(peer_id)?;
37        println!("secret key: {secret_key}");
38        println!("public key: {public_key}");
39        println!("peer_id:    {peer_id}");
40        println!("libp2p_id:  {libp2p_peer_id}");
41
42        Ok(())
43    }
44}
45
46#[derive(Debug, Clone, clap::Args)]
47pub struct MinaKeyPair {
48    #[arg(long, short = 's', env = "OPENMINA_SEC_KEY")]
49    secret_key: Option<AccountSecretKey>,
50}
51
52impl MinaKeyPair {
53    pub fn run(self) -> anyhow::Result<()> {
54        let secret_key = self.secret_key.unwrap_or_else(AccountSecretKey::rand);
55        let public_key = secret_key.public_key();
56        println!("secret key: {secret_key}");
57        println!("public key: {public_key}");
58
59        Ok(())
60    }
61}