essential_hash/
address_impl.rs1use 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 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}