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}