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