soroban_cli/commands/keys/
public_key.rs1use 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 pub name: UnresolvedMuxedAccount,
19
20 #[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}