spacetimedb_lib/
view_args.rs1use crate::{Hash, Identity};
2use spacetimedb_sats::{bsatn::ToBsatn, AlgebraicValue, ProductValue};
3
4pub const VIEW_ARGS_HASH_DOMAIN: &[u8] = b"spacetimedb::view::args::v1\0";
5
6pub fn hash_view_args(args_bsatn: &[u8]) -> Hash {
7 let mut hasher = blake3::Hasher::new();
8 hasher.update(VIEW_ARGS_HASH_DOMAIN);
9 hasher.update(args_bsatn);
10 Hash::from_byte_array(*hasher.finalize().as_bytes())
11}
12
13pub fn hash_empty_view_args() -> Hash {
14 let args_bsatn = ProductValue::default()
15 .to_bsatn_vec()
16 .expect("empty view args should serialize");
17 hash_view_args(&args_bsatn)
18}
19
20pub fn hash_sender_view_args(sender: Identity) -> Hash {
21 let args_bsatn = ProductValue::from_iter([sender.into()])
22 .to_bsatn_vec()
23 .expect("sender view args should serialize");
24 hash_view_args(&args_bsatn)
25}
26
27pub fn empty_view_arg_hash_value() -> AlgebraicValue {
28 AlgebraicValue::U256(hash_empty_view_args().to_u256().into())
29}
30
31pub fn sender_view_arg_hash_value(sender: Identity) -> AlgebraicValue {
32 AlgebraicValue::U256(hash_sender_view_args(sender).to_u256().into())
33}