@@ -1036,10 +1036,10 @@ pub enum KeySubCommand {
1036
1036
Derive {
1037
1037
/// Extended private key to derive from
1038
1038
#[ structopt( name = "XPRV" , short = "x" , long = "xprv" ) ]
1039
- xprv : String ,
1039
+ xprv : ExtendedPrivKey ,
1040
1040
/// Path to use to derive extended public key from extended private key
1041
1041
#[ structopt( name = "PATH" , short = "p" , long = "path" ) ]
1042
- path : String ,
1042
+ path : DerivationPath ,
1043
1043
} ,
1044
1044
}
1045
1045
@@ -1084,14 +1084,12 @@ pub fn handle_key_subcommand(
1084
1084
Ok ( json ! ( { "xprv" : xprv. to_string( ) , "fingerprint" : fingerprint. to_string( ) } ) )
1085
1085
}
1086
1086
KeySubCommand :: Derive { xprv, path } => {
1087
- let xprv = ExtendedPrivKey :: from_str ( xprv. as_str ( ) ) ?;
1088
1087
if xprv. network != network {
1089
1088
return Err ( Error :: Key ( InvalidNetwork ) ) ;
1090
1089
}
1091
- let deriv_path: DerivationPath = DerivationPath :: from_str ( path. as_str ( ) ) ?;
1092
- let derived_xprv = & xprv. derive_priv ( & secp, & deriv_path) ?;
1090
+ let derived_xprv = & xprv. derive_priv ( & secp, & path) ?;
1093
1091
1094
- let origin: KeySource = ( xprv. fingerprint ( & secp) , deriv_path ) ;
1092
+ let origin: KeySource = ( xprv. fingerprint ( & secp) , path ) ;
1095
1093
1096
1094
let derived_xprv_desc_key: DescriptorKey < Segwitv0 > =
1097
1095
derived_xprv. into_descriptor_key ( Some ( origin) , DerivationPath :: default ( ) ) ?;
@@ -1152,6 +1150,7 @@ mod test {
1152
1150
use crate :: ProxyOpts ;
1153
1151
use crate :: { handle_key_subcommand, CliSubCommand , KeySubCommand , WalletSubCommand } ;
1154
1152
1153
+ use bdk:: bitcoin:: util:: bip32:: { DerivationPath , ExtendedPrivKey } ;
1155
1154
use bdk:: bitcoin:: { Address , Network , OutPoint } ;
1156
1155
use bdk:: miniscript:: bitcoin:: network:: constants:: Network :: Testnet ;
1157
1156
use std:: str:: FromStr ;
@@ -1626,9 +1625,8 @@ mod test {
1626
1625
fn test_key_derive ( ) {
1627
1626
let network = Testnet ;
1628
1627
let key_generate_cmd = KeySubCommand :: Derive {
1629
- xprv : "tprv8ZgxMBicQKsPfQjJy8ge2cvBfDjLxJSkvNLVQiw7BQ5gTjKadG2rrcQB5zjcdaaUTz5EDNJaS77q4DzjqjogQBfMsaXFFNP3UqoBnwt2kyT"
1630
- . to_string ( ) ,
1631
- path : "m/84'/1'/0'/0" . to_string ( ) ,
1628
+ xprv : ExtendedPrivKey :: from_str ( "tprv8ZgxMBicQKsPfQjJy8ge2cvBfDjLxJSkvNLVQiw7BQ5gTjKadG2rrcQB5zjcdaaUTz5EDNJaS77q4DzjqjogQBfMsaXFFNP3UqoBnwt2kyT" ) . unwrap ( ) ,
1629
+ path : DerivationPath :: from_str ( "m/84'/1'/0'/0" ) . unwrap ( ) ,
1632
1630
} ;
1633
1631
1634
1632
let result = handle_key_subcommand ( network, key_generate_cmd) . unwrap ( ) ;
0 commit comments