soroban_cli/commands/keys/
public_key.rs

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