use crate::Word;
use crate::account::delta::AccountUpdateDetails;
use crate::block::AccountWitness;
use crate::utils::serde::{
ByteReader,
ByteWriter,
Deserializable,
DeserializationError,
Serializable,
};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AccountUpdateWitness {
initial_state_commitment: Word,
final_state_commitment: Word,
initial_state_proof: AccountWitness,
details: AccountUpdateDetails,
}
impl AccountUpdateWitness {
pub fn new(
initial_state_commitment: Word,
final_state_commitment: Word,
initial_state_proof: AccountWitness,
details: AccountUpdateDetails,
) -> Self {
Self {
initial_state_commitment,
final_state_commitment,
initial_state_proof,
details,
}
}
pub fn initial_state_commitment(&self) -> Word {
self.initial_state_commitment
}
pub fn final_state_commitment(&self) -> Word {
self.final_state_commitment
}
pub fn as_witness(&self) -> &AccountWitness {
&self.initial_state_proof
}
pub fn to_witness(&self) -> AccountWitness {
self.initial_state_proof.clone()
}
pub fn details(&self) -> &AccountUpdateDetails {
&self.details
}
pub fn initial_state_proof_mut(&mut self) -> &mut AccountWitness {
&mut self.initial_state_proof
}
pub fn into_parts(self) -> (Word, Word, AccountWitness, AccountUpdateDetails) {
(
self.initial_state_commitment,
self.final_state_commitment,
self.initial_state_proof,
self.details,
)
}
}
impl Serializable for AccountUpdateWitness {
fn write_into<W: ByteWriter>(&self, target: &mut W) {
target.write(self.initial_state_commitment);
target.write(self.final_state_commitment);
target.write(&self.initial_state_proof);
target.write(&self.details);
}
}
impl Deserializable for AccountUpdateWitness {
fn read_from<R: ByteReader>(source: &mut R) -> Result<Self, DeserializationError> {
let initial_state_commitment = source.read()?;
let final_state_commitment = source.read()?;
let initial_state_proof = source.read()?;
let details = source.read()?;
Ok(AccountUpdateWitness {
initial_state_commitment,
final_state_commitment,
initial_state_proof,
details,
})
}
}