espresso_types/v0/impls/
solver.rs

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