Skip to main content

spacetimedb_lib/
view_args.rs

1use 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}