abstract_std/objects/
salt.rs

1use super::AccountId;
2
3use cosmwasm_std::Binary;
4
5pub const ABSTRACT_SALT: &[u8] = b"abstract";
6/// Generate salt helper
7pub fn generate_instantiate_salt(account_id: &AccountId) -> Binary {
8    let account_id_hash = <sha2::Sha256 as sha2::Digest>::digest(account_id.to_string());
9    let mut hash = account_id_hash.to_vec();
10    hash.extend(ABSTRACT_SALT);
11    Binary::new(hash)
12}
13
14#[cfg(test)]
15mod test {
16    #![allow(clippy::needless_borrows_for_generic_args)]
17    use super::*;
18    use crate::objects::{account::AccountTrace, TruncatedChainId};
19
20    #[coverage_helper::test]
21    fn generate_module_salt_local() {
22        let salt = generate_instantiate_salt(&AccountId::local(5));
23        assert!(!salt.is_empty());
24        assert!(salt.len() <= 64);
25    }
26
27    #[coverage_helper::test]
28    fn generate_module_salt_trace() {
29        let salt = generate_instantiate_salt(
30            &AccountId::new(
31                5,
32                AccountTrace::Remote(vec![
33                    TruncatedChainId::from_chain_id("foo-1"),
34                    TruncatedChainId::from_chain_id("bar-42"),
35                    TruncatedChainId::from_chain_id("baz-4"),
36                    TruncatedChainId::from_chain_id("qux-24"),
37                    TruncatedChainId::from_chain_id("quux-99"),
38                    TruncatedChainId::from_chain_id("corge-5"),
39                ]),
40            )
41            .unwrap(),
42        );
43        assert!(!salt.is_empty());
44        assert!(salt.len() <= 64);
45    }
46}