diff --git a/src/descriptor/checksum.rs b/src/descriptor/checksum.rs index 4613db3fd..5e72ddcb9 100644 --- a/src/descriptor/checksum.rs +++ b/src/descriptor/checksum.rs @@ -73,6 +73,7 @@ pub(super) fn verify_checksum(s: &str) -> Result<&str, Error> { } /// An engine to compute a checksum from a string +#[derive(Hash)] pub struct Engine { c: u64, cls: u64, diff --git a/src/descriptor/tr.rs b/src/descriptor/tr.rs index c9f0cc6e8..61f8c0a81 100644 --- a/src/descriptor/tr.rs +++ b/src/descriptor/tr.rs @@ -391,7 +391,7 @@ impl Tr { /// D E /// would yield (2, A), (2, B), (2,C), (3, D), (3, E). /// -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Hash)] pub struct TapTreeIter<'a, Pk: MiniscriptKey> { stack: Vec<(u8, &'a TapTree)>, } diff --git a/src/miniscript/analyzable.rs b/src/miniscript/analyzable.rs index 8b1929a65..7898fa2c8 100644 --- a/src/miniscript/analyzable.rs +++ b/src/miniscript/analyzable.rs @@ -25,7 +25,7 @@ use crate::{Miniscript, MiniscriptKey, ScriptContext, Terminal}; /// guarantees are not satisfied. /// 4. It has repeated public keys /// 5. raw pkh fragments without the pk. This could be obtained when parsing miniscript from script -#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Default)] +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Default, Hash)] pub struct ExtParams { /// Allow parsing of non-safe miniscripts pub top_unsafe: bool, diff --git a/src/miniscript/decode.rs b/src/miniscript/decode.rs index c5b3a8ee0..e4d1c749a 100644 --- a/src/miniscript/decode.rs +++ b/src/miniscript/decode.rs @@ -213,7 +213,7 @@ macro_rules! match_token { } ///Vec representing terminals stack while decoding. -#[derive(Debug)] +#[derive(Debug, Hash)] struct TerminalStack(Vec>); impl TerminalStack { diff --git a/src/miniscript/iter.rs b/src/miniscript/iter.rs index f64b350ec..297c92da5 100644 --- a/src/miniscript/iter.rs +++ b/src/miniscript/iter.rs @@ -109,6 +109,7 @@ impl Miniscript { /// Iterator for traversing all [Miniscript] miniscript AST references starting from some specific /// node which constructs the iterator via [Miniscript::iter] method. +#[derive(Hash)] pub struct Iter<'a, Pk: MiniscriptKey, Ctx: ScriptContext> { next: Option<&'a Miniscript>, // Here we store vec of path elements, where each element is a tuple, consisting of: