ElementsProject / elements-miniscript

Creative Commons Zero v1.0 Universal
11 stars 14 forks source link

Cannot use single "view" blinding key with a descriptor with xpubs #56

Closed LeoComandini closed 11 months ago

LeoComandini commented 11 months ago

Using an xprv as a "view" descriptor blinding key does not provide any benefit wrt to using a single "view" key. The "view" key is tweaked with the script pubkey so it's not reused. And using an xprv derived from the wallet seed is not compatible with HWWs, since they don't export private keys. So it makes sense to use 32 byte private key as "view" descriptor blinding key.

However this seems not to be supported by the current implementation.

use elements_miniscript::descriptor::checksum::desc_checksum;
use elements_miniscript::{ConfidentialDescriptor, DefiniteDescriptorKey, DescriptorPublicKey, Error};
let descriptor_blinding_key = "9c8e4f05c7711a98c838be228bcb84924d4570ca53f35fa1c793e58841d47023";

let xpub = "tpubDD7tXK8KeQ3YY83yWq755fHY2JW8Ha8Q765tknUM5rSvjPcGWfUppDFMpQ1ScziKfW3ZNtZvAD7M3u7bSs7HofjTD3KP3YxPK7X6hwV8Rk2";
let desc = format!("ct({},elwpkh({}))", descriptor_blinding_key, xpub);
let desc = format!("{}#{}", desc, desc_checksum(&desc).unwrap());

let expected_err = Error::Unexpected("Error while parsing xkey.".into());
let err = ConfidentialDescriptor::<DefiniteDescriptorKey>::from_str(&desc).unwrap_err();
assert_eq!(err, expected_err);
let err = ConfidentialDescriptor::<DescriptorPublicKey>::from_str(&desc).unwrap_err();
assert_eq!(err, expected_err);
LeoComandini commented 11 months ago

view key must be wif as per bip380, closing