Impl (Add|Sub)(Assign) for ValueCommitment
This commit is contained in:
parent
3820eddef7
commit
d4da79af86
|
|
@ -137,6 +137,21 @@ impl NoteCommitment {
|
|||
#[derive(Clone, Copy, Deserialize, PartialEq, Serialize)]
|
||||
pub struct ValueCommitment(#[serde(with = "serde_helpers::AffinePoint")] pub jubjub::AffinePoint);
|
||||
|
||||
impl std::ops::Add<ValueCommitment> for ValueCommitment {
|
||||
type Output = Self;
|
||||
|
||||
fn add(self, rhs: ValueCommitment) -> Self::Output {
|
||||
let value = self.0.to_extended() + rhs.0.to_extended();
|
||||
ValueCommitment(value.into())
|
||||
}
|
||||
}
|
||||
|
||||
impl std::ops::AddAssign<ValueCommitment> for ValueCommitment {
|
||||
fn add_assign(&mut self, rhs: ValueCommitment) {
|
||||
*self = *self + rhs
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Debug for ValueCommitment {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
f.debug_struct("ValueCommitment")
|
||||
|
|
@ -164,6 +179,32 @@ impl From<ValueCommitment> for [u8; 32] {
|
|||
}
|
||||
}
|
||||
|
||||
impl std::ops::Sub<ValueCommitment> for ValueCommitment {
|
||||
type Output = Self;
|
||||
|
||||
fn sub(self, rhs: ValueCommitment) -> Self::Output {
|
||||
ValueCommitment((self.0.to_extended() - rhs.0.to_extended()).into())
|
||||
}
|
||||
}
|
||||
|
||||
impl std::ops::SubAssign<ValueCommitment> for ValueCommitment {
|
||||
fn sub_assign(&mut self, rhs: ValueCommitment) {
|
||||
*self = *self - rhs;
|
||||
}
|
||||
}
|
||||
|
||||
impl std::iter::Sum for ValueCommitment {
|
||||
fn sum<I>(iter: I) -> Self
|
||||
where
|
||||
I: Iterator<Item = ValueCommitment>,
|
||||
{
|
||||
iter.fold(
|
||||
ValueCommitment(jubjub::AffinePoint::identity()),
|
||||
std::ops::Add::add,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/// LEBS2OSP256(repr_J(cv))
|
||||
///
|
||||
/// https://zips.z.cash/protocol/protocol.pdf#spendencoding
|
||||
|
|
|
|||
Loading…
Reference in New Issue