soroban_cli/commands/keys/
public_key.rs

1use clap::arg;
2
3use crate::{
4    commands::config::{address, locator},
5    config::UnresolvedMuxedAccount,
6};
7
8#[derive(thiserror::Error, Debug)]
9pub enum Error {
10    #[error(transparent)]
11    Address(#[from] address::Error),
12}
13
14#[derive(Debug, clap::Parser, Clone)]
15#[group(skip)]
16pub struct Cmd {
17    /// Name of identity to lookup, default test identity used if not provided
18    pub name: UnresolvedMuxedAccount,
19
20    /// If identity is a seed phrase use this hd path, default is 0
21    #[arg(long)]
22    pub hd_path: Option<usize>,
23
24    #[command(flatten)]
25    pub locator: locator::Args,
26}
27
28impl Cmd {
29    pub async fn run(&self) -> Result<(), Error> {
30        println!("{}", self.public_key().await?);
31        Ok(())
32    }
33
34    pub async fn public_key(&self) -> Result<stellar_strkey::ed25519::PublicKey, Error> {
35        let muxed = self
36            .name
37            .resolve_muxed_account(&self.locator, self.hd_path)
38            .await?;
39        let bytes = match muxed {
40            soroban_sdk::xdr::MuxedAccount::Ed25519(uint256) => uint256.0,
41            soroban_sdk::xdr::MuxedAccount::MuxedEd25519(muxed_account) => muxed_account.ed25519.0,
42        };
43        Ok(stellar_strkey::ed25519::PublicKey(bytes))
44    }
45}