@@ -1037,7 +1037,7 @@ impl DefiniteDescriptorKey {
10371037 ///
10381038 /// Returns `None` if the key contains a wildcard
10391039 fn new ( key : DescriptorPublicKey ) -> Option < Self > {
1040- if key. has_wildcard ( ) {
1040+ if key. has_wildcard ( ) || key . is_multipath ( ) {
10411041 None
10421042 } else {
10431043 Some ( Self ( key) )
@@ -1071,7 +1071,7 @@ impl FromStr for DefiniteDescriptorKey {
10711071 fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
10721072 let inner = DescriptorPublicKey :: from_str ( s) ?;
10731073 DefiniteDescriptorKey :: new ( inner) . ok_or ( DescriptorKeyParseError (
1074- "cannot parse key with a wilcard as a DerivedDescriptorKey" ,
1074+ "cannot parse multi-path keys or keys with a wilcard as a DerivedDescriptorKey" ,
10751075 ) )
10761076 }
10771077}
@@ -1150,6 +1150,7 @@ mod test {
11501150 MiniscriptKey , Wildcard ,
11511151 } ;
11521152 use crate :: prelude:: * ;
1153+ use crate :: DefiniteDescriptorKey ;
11531154
11541155 #[ test]
11551156 fn parse_descriptor_key_errors ( ) {
@@ -1497,4 +1498,23 @@ mod test {
14971498 let public_key = DescriptorPublicKey :: from_str ( desc) . unwrap ( ) ;
14981499 assert_tokens ( & public_key, & [ Token :: String ( desc) ] ) ;
14991500 }
1501+
1502+ #[ test]
1503+ fn definite_keys ( ) {
1504+ // basic xpub
1505+ let desc = "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8"
1506+ . parse :: < DescriptorPublicKey > ( )
1507+ . unwrap ( ) ;
1508+ assert ! ( DefiniteDescriptorKey :: new( desc) . is_some( ) ) ;
1509+ // xpub with wildcard
1510+ let desc = "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8/*"
1511+ . parse :: < DescriptorPublicKey > ( )
1512+ . unwrap ( ) ;
1513+ assert ! ( DefiniteDescriptorKey :: new( desc) . is_none( ) ) ;
1514+ // multipath xpub
1515+ let desc = "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8/<0;1>"
1516+ . parse :: < DescriptorPublicKey > ( )
1517+ . unwrap ( ) ;
1518+ assert ! ( DefiniteDescriptorKey :: new( desc) . is_none( ) ) ;
1519+ }
15001520}
0 commit comments