Add timelocks to policy satisfaction results

Also for signature the logic has been refactored to handle appropriately nested cases.
This commit is contained in:
Riccardo Casatta
2021-04-02 16:39:18 +02:00
parent 45983d2166
commit 8f422a1bf9
4 changed files with 285 additions and 118 deletions

View File

@@ -53,6 +53,7 @@ use utils::{check_nlocktime, check_nsequence_rbf, After, Older, SecpCtx, DUST_LI
use crate::blockchain::{Blockchain, Progress};
use crate::database::{BatchDatabase, BatchOperations, DatabaseUtils};
use crate::descriptor::derived::AsDerived;
use crate::descriptor::policy::BuildSatisfaction;
use crate::descriptor::{
get_checksum, into_wallet_descriptor_checked, DerivedDescriptor, DerivedDescriptorMeta,
DescriptorMeta, DescriptorScripts, ExtendedDescriptor, ExtractPolicy, IntoWalletDescriptor,
@@ -372,14 +373,14 @@ where
) -> Result<(PSBT, TransactionDetails), Error> {
let external_policy = self
.descriptor
.extract_policy(&self.signers, &self.secp)?
.extract_policy(&self.signers, BuildSatisfaction::None, &self.secp)?
.unwrap();
let internal_policy = self
.change_descriptor
.as_ref()
.map(|desc| {
Ok::<_, Error>(
desc.extract_policy(&self.change_signers, &self.secp)?
desc.extract_policy(&self.change_signers, BuildSatisfaction::None, &self.secp)?
.unwrap(),
)
})
@@ -876,13 +877,17 @@ where
/// Return the spending policies for the wallet's descriptor
pub fn policies(&self, keychain: KeychainKind) -> Result<Option<Policy>, Error> {
match (keychain, self.change_descriptor.as_ref()) {
(KeychainKind::External, _) => {
Ok(self.descriptor.extract_policy(&self.signers, &self.secp)?)
}
(KeychainKind::External, _) => Ok(self.descriptor.extract_policy(
&self.signers,
BuildSatisfaction::None,
&self.secp,
)?),
(KeychainKind::Internal, None) => Ok(None),
(KeychainKind::Internal, Some(desc)) => {
Ok(desc.extract_policy(&self.change_signers, &self.secp)?)
}
(KeychainKind::Internal, Some(desc)) => Ok(desc.extract_policy(
&self.change_signers,
BuildSatisfaction::None,
&self.secp,
)?),
}
}