From 44073020267415cef2663c6637e4aae939ec56c7 Mon Sep 17 00:00:00 2001 From: Nicolas80 <nicolas.pmail@protonmail.com> Date: Sun, 23 Mar 2025 08:45:05 +0100 Subject: [PATCH] * Adding `-c` crypto scheme parameter (with default ed25519) in different places ** as global parameter (taken into account if `-S` parameter is given ** as extra parameter for identity.rs commands LinkAccount & ChangeOwnerKey *** Also added a simple display of "target" address and crypto-scheme when performing those commands --- src/commands/identity.rs | 26 ++++++++++++++++++++++---- src/data.rs | 6 +++++- src/keys.rs | 9 +++++++++ src/main.rs | 9 ++++++--- 4 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/commands/identity.rs b/src/commands/identity.rs index 6a64121..5048f45 100644 --- a/src/commands/identity.rs +++ b/src/commands/identity.rs @@ -64,24 +64,30 @@ pub enum Subcommand { MemberCount, /// Link an account to the identity LinkAccount { - /// Secret key format (seed, substrate) + /// Secret key format of account to link (seed, substrate) #[clap(short = 'S', long, default_value = SecretFormat::Substrate)] secret_format: SecretFormat, /// Secret of account to link /// most likely different from the one owning the identity #[clap(short, long)] secret: Option<String>, + /// Crypto scheme of account to link (sr25519, ed25519) + #[clap(short = 'c', long, required = false, default_value = CryptoScheme::Ed25519)] + crypto_scheme: CryptoScheme, }, /// Migrate identity to another account /// Change Owner Key ChangeOwnerKey { - /// Secret key format (seed, substrate) + /// Secret key format of account to link (seed, substrate) #[clap(short = 'S', long, default_value = SecretFormat::Substrate)] secret_format: SecretFormat, /// Secret of account to link /// most likely different from the one owning the identity #[clap(short, long)] secret: Option<String>, + /// Crypto scheme of account to link (sr25519, ed25519) + #[clap(short = 'c', long, required = false, default_value = CryptoScheme::Ed25519)] + crypto_scheme: CryptoScheme, }, } @@ -153,8 +159,14 @@ pub async fn handle_command(data: Data, command: Subcommand) -> Result<(), GcliE Subcommand::LinkAccount { secret_format, secret, + crypto_scheme, } => { - let keypair = get_keypair(secret_format, secret.as_deref(), None)?; + let keypair = get_keypair(secret_format, secret.as_deref(), Some(crypto_scheme))?; + println!( + "target address:'{}' (using crypto-scheme:{})", + keypair.address(), + <&'static str>::from(crypto_scheme) + ); let address = keypair.address(); data = data.fetch_idty_index().await?; // idty index required for payload link_account(&data, address, keypair).await?; @@ -162,8 +174,14 @@ pub async fn handle_command(data: Data, command: Subcommand) -> Result<(), GcliE Subcommand::ChangeOwnerKey { secret_format, secret, + crypto_scheme, } => { - let keypair = get_keypair(secret_format, secret.as_deref(), None)?; + let keypair = get_keypair(secret_format, secret.as_deref(), Some(crypto_scheme))?; + println!( + "target address:'{}' (using crypto-scheme:{})", + keypair.address(), + <&'static str>::from(crypto_scheme) + ); let address = keypair.address(); data = data.fetch_idty_index().await?; // idty index required for payload change_owner_key(&data, address, keypair).await?; diff --git a/src/data.rs b/src/data.rs index 40f9918..c9aa7c9 100644 --- a/src/data.rs +++ b/src/data.rs @@ -207,7 +207,11 @@ impl Data { } // secret format and value if let Some(secret_format) = self.args.secret_format { - let keypair = get_keypair(secret_format, self.args.secret.as_deref(), None)?; + let keypair = get_keypair( + secret_format, + self.args.secret.as_deref(), + Some(self.args.crypto_scheme), + )?; self.cfg.address = Some(keypair.address()); self.keypair = Some(keypair); } diff --git a/src/keys.rs b/src/keys.rs index 5ca4191..415b50f 100644 --- a/src/keys.rs +++ b/src/keys.rs @@ -62,6 +62,15 @@ pub enum CryptoScheme { Sr25519, } +/// Setting a default to Ed25519 +/// +/// required when used in Args struct inside main.rs; even though we still have to give a clap "default_value" +impl Default for CryptoScheme { + fn default() -> Self { + CryptoScheme::Ed25519 + } +} + impl FromStr for CryptoScheme { type Err = std::io::Error; diff --git a/src/main.rs b/src/main.rs index 116552d..26a87da 100644 --- a/src/main.rs +++ b/src/main.rs @@ -46,13 +46,16 @@ pub struct Args { /// Do not use indexer #[clap(long)] no_indexer: bool, + /// Secret key format (seed, substrate, g1v1) + #[clap(short = 'S', long)] + secret_format: Option<SecretFormat>, /// Secret key or BIP39 mnemonic (only used when secret format is compatible) /// (eventually followed by derivation path) #[clap(short, long)] secret: Option<String>, - /// Secret key format (seed, substrate, g1v1) - #[clap(short = 'S', long)] - secret_format: Option<SecretFormat>, + /// Crypto scheme to use (sr25519, ed25519) + #[clap(short = 'c', long, required = false, default_value = CryptoScheme::Ed25519)] + crypto_scheme: CryptoScheme, /// SS58 Address #[clap(short, conflicts_with = "name")] address: Option<AccountId>, -- GitLab