Skip to content

Commit 27f3c82

Browse files
authored
Add support for identities as signer on tx new set-options. (#2216)
1 parent c79946d commit 27f3c82

3 files changed

Lines changed: 18 additions & 9 deletions

File tree

cmd/soroban-cli/src/commands/tx/args.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,4 +164,15 @@ impl Args {
164164
pub fn resolve_asset(&self, asset: &builder::Asset) -> Result<xdr::Asset, Error> {
165165
Ok(asset.resolve(&self.config.locator)?)
166166
}
167+
168+
pub fn resolve_signer_key(
169+
&self,
170+
signer_account: &UnresolvedMuxedAccount,
171+
) -> Result<xdr::SignerKey, Error> {
172+
let resolved_account = self.resolve_account_id(signer_account)?;
173+
let signer_key = match resolved_account.0 {
174+
xdr::PublicKey::PublicKeyTypeEd25519(uint256) => xdr::SignerKey::Ed25519(uint256),
175+
};
176+
Ok(signer_key)
177+
}
167178
}

cmd/soroban-cli/src/commands/tx/new/revoke_sponsorship.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,10 @@ impl TryFrom<&Cmd> for xdr::OperationBody {
9696

9797
let revoke_op = if let Some(signer_key) = &cmd.op.signer_key {
9898
// Signer sponsorship
99-
let resolved_account = cmd.tx.resolve_account_id(signer_key)?;
100-
let signer_key = match resolved_account.0 {
101-
xdr::PublicKey::PublicKeyTypeEd25519(uint256) => xdr::SignerKey::Ed25519(uint256),
102-
};
99+
let resolved_signer_key = cmd.tx.resolve_signer_key(signer_key)?;
103100
xdr::RevokeSponsorshipOp::Signer(xdr::RevokeSponsorshipOpSigner {
104101
account_id: account_id_key,
105-
signer_key,
102+
signer_key: resolved_signer_key,
106103
})
107104
} else if let Some(asset) = &cmd.op.asset {
108105
// Trustline sponsorship

cmd/soroban-cli/src/commands/tx/new/set_options.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ pub struct Args {
3737
pub home_domain: Option<xdr::StringM<32>>,
3838
#[arg(long, requires = "signer_weight")]
3939
/// Add, update, or remove a signer from an account.
40-
pub signer: Option<xdr::SignerKey>,
40+
pub signer: Option<address::UnresolvedMuxedAccount>,
4141
#[arg(long = "signer-weight", requires = "signer")]
4242
/// Signer weight is a number from 0-255 (inclusive). The signer is deleted if the weight is 0.
4343
pub signer_weight: Option<u8>,
@@ -107,11 +107,12 @@ impl TryFrom<&Cmd> for xdr::OperationBody {
107107
clear_flag(xdr::AccountFlags::ClawbackEnabledFlag);
108108
}
109109

110-
let signer = if let (Some(key), Some(signer_weight)) =
111-
(cmd.signer.clone(), cmd.signer_weight.as_ref())
110+
let signer = if let (Some(signer_account), Some(signer_weight)) =
111+
(cmd.signer.as_ref(), cmd.signer_weight.as_ref())
112112
{
113+
let signer_key = tx.resolve_signer_key(signer_account)?;
113114
Some(xdr::Signer {
114-
key,
115+
key: signer_key,
115116
weight: u32::from(*signer_weight),
116117
})
117118
} else {

0 commit comments

Comments
 (0)