essential_hash/
address_impl.rs

1use crate::Address;
2use essential_types::{
3    contract::Contract,
4    predicate::{Predicate, Program},
5    solution::{Solution, SolutionSet},
6    ContentAddress,
7};
8
9impl Address for Predicate {
10    fn content_address(&self) -> ContentAddress {
11        let Ok(bytes) = self.encode() else {
12            // Invalid predicates can't be hashed.
13            return ContentAddress([0; 32]);
14        };
15        let bytes: Vec<_> = bytes.collect();
16        ContentAddress(crate::hash_bytes(&bytes))
17    }
18}
19
20impl Address for Program {
21    fn content_address(&self) -> ContentAddress {
22        ContentAddress(crate::hash_bytes(&self.0))
23    }
24}
25
26impl Address for Contract {
27    fn content_address(&self) -> ContentAddress {
28        crate::contract_addr::from_contract(self)
29    }
30}
31
32impl Address for Solution {
33    fn content_address(&self) -> ContentAddress {
34        ContentAddress(crate::hash(self))
35    }
36}
37
38impl Address for SolutionSet {
39    fn content_address(&self) -> ContentAddress {
40        crate::solution_set_addr::from_set(self)
41    }
42}