abstract_std/objects/
salt.rs1use super::AccountId;
2
3use cosmwasm_std::Binary;
4
5pub const ABSTRACT_SALT: &[u8] = b"abstract";
6pub 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}