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<R: Reader>(reader: &mut R) -> 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
}
}