whisky_common/tx_tester/
extra_signatories.rs

1use super::TxTester;
2
3impl TxTester {
4    /// ## Testing methods for required signers
5    ///
6    /// Checks if a specific key is signed in the transaction.
7    pub fn key_signed(&mut self, key_hash: &str) -> &mut Self {
8        let is_key_signed = self.key_signed_logic(key_hash);
9        if !is_key_signed {
10            self.add_trace(
11                "key_signed",
12                &format!("tx does not have key {} signed", key_hash),
13            )
14        };
15        self
16    }
17
18    /// ## Testing methods for required signers
19    ///
20    /// Checks if any one of the specified keys is signed in the transaction.
21    pub fn one_of_keys_signed(&mut self, key_hashes: &[String]) -> &mut Self {
22        let is_one_of_keys_signed = key_hashes
23            .iter()
24            .any(|key_hash| self.key_signed_logic(key_hash));
25        if !is_one_of_keys_signed {
26            self.add_trace(
27                "one_of_keys_signed",
28                &format!(
29                    "tx does not have any of the keys signed:
30                        {}",
31                    key_hashes.join(", ")
32                ),
33            );
34        }
35        self
36    }
37
38    /// ## Testing methods for required signers
39    ///
40    /// Checks if all specified keys are signed in the transaction.
41    pub fn all_keys_signed(&mut self, key_hashes: &[String]) -> &mut Self {
42        let mut missing_keys: Vec<String> = vec![];
43        let is_all_keys_signed = key_hashes.iter().all(|key_hash| {
44            let is_key_signed = self.key_signed_logic(key_hash);
45            if !is_key_signed {
46                missing_keys.push(key_hash.clone());
47            }
48            is_key_signed
49        });
50
51        if !is_all_keys_signed {
52            self.add_trace(
53                "all_keys_signed",
54                &format!(
55                    "tx does not have all keys signed: {}",
56                    missing_keys.join(", ")
57                ),
58            );
59        }
60        self
61    }
62
63    fn key_signed_logic(&mut self, key_hash: &str) -> bool {
64        self.tx_body
65            .required_signatures
66            .iter()
67            .any(|signatory| signatory == key_hash)
68    }
69}