1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
use crate::core::committed::Committed;
use crate::ser::{self, Readable, Reader, Writeable, Writer};
use util::secp::pedersen::Commitment;
use util::secp_static;
#[derive(Debug, Clone)]
pub struct BlockSums {
pub utxo_sum: Commitment,
pub kernel_sum: Commitment,
}
impl Writeable for BlockSums {
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), ser::Error> {
writer.write_fixed_bytes(&self.utxo_sum)?;
writer.write_fixed_bytes(&self.kernel_sum)?;
Ok(())
}
}
impl Readable for BlockSums {
fn read(reader: &mut dyn Reader) -> Result<BlockSums, ser::Error> {
Ok(BlockSums {
utxo_sum: Commitment::read(reader)?,
kernel_sum: Commitment::read(reader)?,
})
}
}
impl Default for BlockSums {
fn default() -> BlockSums {
let zero_commit = secp_static::commit_to_zero_value();
BlockSums {
utxo_sum: zero_commit,
kernel_sum: zero_commit,
}
}
}
impl<'a> Committed for (BlockSums, &'a dyn Committed) {
fn inputs_committed(&self) -> Vec<Commitment> {
self.1.inputs_committed()
}
fn outputs_committed(&self) -> Vec<Commitment> {
let mut outputs = vec![self.0.utxo_sum];
outputs.extend(&self.1.outputs_committed());
outputs
}
fn kernels_committed(&self) -> Vec<Commitment> {
let mut kernels = vec![self.0.kernel_sum];
kernels.extend(&self.1.kernels_committed());
kernels
}
}