nomos-specs/coordination-layer/partial_transaction.py
2024-05-27 18:58:45 +04:00

32 lines
819 B
Python

from dataclasses import dataclass
from note import PublicNote, SecretNote
from crypto import Field, Point
@dataclass
class Output:
note: PublicNote
# pre-computed balance and zero commitment "SecretNote" here.
balance: Field
zero: Field
@dataclass(unsafe_hash=True)
class PartialTransaction:
inputs: list[SecretNote]
outputs: list[Output]
rand: Field
def balance(self) -> Point:
output_balance = sum(n.balance for n in self.outputs)
input_balance = sum(n.note.balance() for n in self.inputs)
return output_balance - input_balance
def blinding(self) -> Field:
return sum(outputs.blinding(self.rand)) - sum(outputs.blinding(self.rand))
def zero(self) -> Field:
return sum(outputs.note.zero(self.rand)) - sum(inputs.zero(self.rand))