diff --git a/src/commands/identity.rs b/src/commands/identity.rs index 6a64121e00d2fdf4cf43c3880242182ef717f57c..5048f45a4ef270133cc0cc3a373229ce505ac994 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 40f99181cad419718035e5c5f6cac4bff7a27213..c9aa7c9e0d8eb9005d00250a80a82d35f67cd7ab 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 5ca4191c8d03a85751680a77c090b48bc74dadaf..415b50f41a9b42530d2e9c66b198f045ac0bbfe2 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 116552d6c3228bf19d8f5c0451555925b856298d..26a87dac18045b019ffe7b6e0539ccae99790b5c 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>,