pub struct Spend { /* private fields */ }Expand description
Information about a Sapling spend within a transaction.
This struct is for representing Sapling spends in a partially-created transaction. If
you have a fully-created transaction, use the regular SpendDescription struct.
Implementations§
Source§impl Spend
impl Spend
Sourcepub fn parse(
cv: [u8; 32],
nullifier: [u8; 32],
rk: [u8; 32],
zkproof: Option<GrothProofBytes>,
spend_auth_sig: Option<[u8; 64]>,
recipient: Option<[u8; 43]>,
value: Option<u64>,
rcm: Option<[u8; 32]>,
rseed: Option<[u8; 32]>,
rcv: Option<[u8; 32]>,
proof_generation_key: Option<([u8; 32], [u8; 32])>,
witness: Option<(u32, [[u8; 32]; 32])>,
alpha: Option<[u8; 32]>,
zip32_derivation: Option<Zip32Derivation>,
dummy_ask: Option<[u8; 32]>,
proprietary: BTreeMap<String, Vec<u8>>,
) -> Result<Self, ParseError>
pub fn parse( cv: [u8; 32], nullifier: [u8; 32], rk: [u8; 32], zkproof: Option<GrothProofBytes>, spend_auth_sig: Option<[u8; 64]>, recipient: Option<[u8; 43]>, value: Option<u64>, rcm: Option<[u8; 32]>, rseed: Option<[u8; 32]>, rcv: Option<[u8; 32]>, proof_generation_key: Option<([u8; 32], [u8; 32])>, witness: Option<(u32, [[u8; 32]; 32])>, alpha: Option<[u8; 32]>, zip32_derivation: Option<Zip32Derivation>, dummy_ask: Option<[u8; 32]>, proprietary: BTreeMap<String, Vec<u8>>, ) -> Result<Self, ParseError>
Parses a PCZT spend from its component parts.
Source§impl Spend
impl Spend
Sourcepub fn verify_cv(&self) -> Result<(), VerifyError>
pub fn verify_cv(&self) -> Result<(), VerifyError>
Verifies that the cv field is consistent with the note fields.
Requires that the following optional fields are set:
valuercv
Sourcepub fn verify_nullifier(
&self,
expected_fvk: Option<&FullViewingKey>,
) -> Result<(), VerifyError>
pub fn verify_nullifier( &self, expected_fvk: Option<&FullViewingKey>, ) -> Result<(), VerifyError>
Verifies that the nullifier field is consistent with the note fields.
Requires that the following optional fields are set:
recipientvaluerseedwitness
In addition, at least one of the proof_generation_key field or expected_fvk
must be provided.
The provided FullViewingKey is ignored if the spent note is a dummy note.
Otherwise, it will be checked against the proof_generation_key field (if both
are set).
Sourcepub fn verify_rk(
&self,
expected_fvk: Option<&FullViewingKey>,
) -> Result<(), VerifyError>
pub fn verify_rk( &self, expected_fvk: Option<&FullViewingKey>, ) -> Result<(), VerifyError>
Verifies that the rk field is consistent with the given FVK.
Requires that the following optional fields are set:
alpha
The provided FullViewingKey is ignored if the spent note is a dummy note
(which can only be determined if the value field is set). Otherwise, it will be
checked against the proof_generation_key field (if set).
Source§impl Spend
impl Spend
Sourcepub fn sign<R: RngCore + CryptoRng>(
&mut self,
sighash: [u8; 32],
ask: &SpendAuthorizingKey,
rng: R,
) -> Result<(), SignerError>
pub fn sign<R: RngCore + CryptoRng>( &mut self, sighash: [u8; 32], ask: &SpendAuthorizingKey, rng: R, ) -> Result<(), SignerError>
Signs the Sapling spend with the given spend authorizing key.
It is the caller’s responsibility to perform any semantic validity checks on the PCZT (for example, comfirming that the change amounts are correct) before calling this method.
Sourcepub fn apply_signature(
&mut self,
sighash: [u8; 32],
signature: Signature<SpendAuth>,
) -> Result<(), SignerError>
pub fn apply_signature( &mut self, sighash: [u8; 32], signature: Signature<SpendAuth>, ) -> Result<(), SignerError>
Applies the given signature to the Sapling spend, if valid.
It is the caller’s responsibility to perform any semantic validity checks on the PCZT (for example, comfirming that the change amounts are correct) before calling this method.
Source§impl Spend
impl Spend
Sourcepub fn cv(&self) -> &ValueCommitment
pub fn cv(&self) -> &ValueCommitment
A commitment to the value consumed by this spend.
Sourcepub fn rk(&self) -> &VerificationKey<SpendAuth>
pub fn rk(&self) -> &VerificationKey<SpendAuth>
The randomized verification key for the note being spent.
Sourcepub fn zkproof(&self) -> &Option<GrothProofBytes>
pub fn zkproof(&self) -> &Option<GrothProofBytes>
The Spend proof.
This is set by the Prover.
Sourcepub fn spend_auth_sig(&self) -> &Option<Signature<SpendAuth>>
pub fn spend_auth_sig(&self) -> &Option<Signature<SpendAuth>>
The spend authorization signature.
This is set by the Signer.
Sourcepub fn recipient(&self) -> &Option<PaymentAddress>
pub fn recipient(&self) -> &Option<PaymentAddress>
The address that received the note being spent.
- This is set by the Constructor (or Updater?).
- This is required by the Prover.
Sourcepub fn value(&self) -> &Option<NoteValue>
pub fn value(&self) -> &Option<NoteValue>
The value of the input being spent.
This may be used by Signers to verify that the value matches cv, and to confirm
the values and change involved in the transaction.
This exposes the input value to all participants. For Signers who don’t need this information, or after signatures have been applied, this can be redacted.
Sourcepub fn rseed(&self) -> &Option<Rseed>
pub fn rseed(&self) -> &Option<Rseed>
The seed randomness for the note being spent.
- This is set by the Constructor.
- This is required by the Prover.
Sourcepub fn rcv(&self) -> &Option<ValueCommitTrapdoor>
pub fn rcv(&self) -> &Option<ValueCommitTrapdoor>
The value commitment randomness.
- This is set by the Constructor.
- The IO Finalizer compresses it into the
bsk. - This is required by the Prover.
- This may be used by Signers to verify that the value correctly matches
cv.
This opens cv for all participants. For Signers who don’t need this information,
or after proofs / signatures have been applied, this can be redacted.
Sourcepub fn proof_generation_key(&self) -> &Option<ProofGenerationKey>
pub fn proof_generation_key(&self) -> &Option<ProofGenerationKey>
The proof generation key (ak, nsk) corresponding to the recipient that received
the note being spent.
- This is set by the Updater.
- This is required by the Prover.
Sourcepub fn witness(&self) -> &Option<MerklePath>
pub fn witness(&self) -> &Option<MerklePath>
A witness from the note to the bundle’s anchor.
- This is set by the Updater.
- This is required by the Prover.
Sourcepub fn alpha(&self) -> &Option<Scalar>
pub fn alpha(&self) -> &Option<Scalar>
The spend authorization randomizer.
- This is chosen by the Constructor.
- This is required by the Signer for creating
spend_auth_sig, and may be used to validaterk. - After
zkproof/spend_auth_sighas been set, this can be redacted.
Sourcepub fn zip32_derivation(&self) -> &Option<Zip32Derivation>
pub fn zip32_derivation(&self) -> &Option<Zip32Derivation>
The ZIP 32 derivation path at which the spending key can be found for the note being spent.
Sourcepub fn dummy_ask(&self) -> &Option<SpendAuthorizingKey>
pub fn dummy_ask(&self) -> &Option<SpendAuthorizingKey>
The spend authorizing key for this spent note, if it is a dummy note.
- This is chosen by the Constructor.
- This is required by the IO Finalizer, and is cleared by it once used.
- Signers MUST reject PCZTs that contain
dummy_askvalues.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Spend
impl RefUnwindSafe for Spend
impl Send for Spend
impl Sync for Spend
impl Unpin for Spend
impl UnwindSafe for Spend
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.