espresso_types/v0/impls/
solver.rs1use committable::{Commitment, Committable};
2use hotshot::types::SignatureKey;
3
4use super::v0_99::{RollupRegistrationBody, RollupUpdatebody};
5use crate::v0::utils::{Update, Update::Set};
6
7impl Committable for RollupRegistrationBody {
8 fn tag() -> String {
9 "ROLLUP_REGISTRATION".to_string()
10 }
11
12 fn commit(&self) -> Commitment<Self> {
13 let mut comm = committable::RawCommitmentBuilder::new(&Self::tag())
14 .u64_field("namespace_id", u64::from(self.namespace_id));
15
16 if let Some(url) = &self.reserve_url {
17 comm = comm
18 .u64_field("reserve_url", 1)
19 .var_size_bytes(url.as_str().as_ref())
20 } else {
21 comm = comm.u64_field("reserve_url", 0)
22 };
23
24 comm = comm
25 .fixed_size_field("reserve_price", &self.reserve_price.to_fixed_bytes())
26 .fixed_size_field("active", &[u8::from(self.active)])
27 .constant_str("signature_keys");
28
29 for key in self.signature_keys.iter() {
30 comm = comm.var_size_bytes(&key.to_bytes());
31 }
32
33 comm = comm
34 .var_size_field("signature_key", &self.signature_key.to_bytes())
35 .var_size_field("text", self.text.as_bytes());
36
37 comm.finalize()
38 }
39}
40
41impl Committable for RollupUpdatebody {
42 fn tag() -> String {
43 "ROLLUP_UPDATE".to_string()
44 }
45
46 fn commit(&self) -> Commitment<Self> {
47 let mut comm = committable::RawCommitmentBuilder::new(&Self::tag())
48 .u64_field("namespace_id", u64::from(self.namespace_id));
49
50 match &self.reserve_url {
51 Set(Some(url)) => {
52 comm = comm
53 .u64_field("reserve_url", 2)
54 .var_size_bytes(url.as_str().as_ref())
55 },
56 Set(None) => comm = comm.u64_field("reserve_url", 1),
57 Update::Skip => comm = comm.u64_field("reserve_url", 0),
58 }
59
60 if let Set(rp) = self.reserve_price {
61 comm = comm
62 .u64_field("reserve_price", 1)
63 .fixed_size_bytes(&rp.to_fixed_bytes());
64 } else {
65 comm = comm.u64_field("reserve_price", 0);
66 }
67
68 if let Set(active) = self.active {
69 comm = comm
70 .u64_field("active", 1)
71 .fixed_size_bytes(&[u8::from(active)]);
72 } else {
73 comm = comm.u64_field("active", 0);
74 }
75
76 if let Set(keys) = &self.signature_keys {
77 comm = comm.u64_field("signature_keys", 1);
78 for key in keys {
79 comm = comm.var_size_bytes(&key.to_bytes());
80 }
81 } else {
82 comm = comm.u64_field("signature_keys", 0);
83 }
84
85 comm = comm.var_size_field("signature_key", &self.signature_key.to_bytes());
86
87 if let Set(text) = &self.text {
88 comm = comm.u64_field("text", 1).var_size_bytes(text.as_bytes());
89 } else {
90 comm = comm.u64_field("text", 0);
91 }
92
93 comm.finalize()
94 }
95}