Spend

Struct Spend 

Source
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

Source

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

Source

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:

  • value
  • rcv
Source

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:

  • recipient
  • value
  • rseed
  • witness

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).

Source

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

Source

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.

Source

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

Source

pub fn cv(&self) -> &ValueCommitment

A commitment to the value consumed by this spend.

Source

pub fn nullifier(&self) -> &Nullifier

The nullifier of the note being spent.

Source

pub fn rk(&self) -> &VerificationKey<SpendAuth>

The randomized verification key for the note being spent.

Source

pub fn zkproof(&self) -> &Option<GrothProofBytes>

The Spend proof.

This is set by the Prover.

Source

pub fn spend_auth_sig(&self) -> &Option<Signature<SpendAuth>>

The spend authorization signature.

This is set by the Signer.

Source

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.
Source

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.

Source

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.
Source

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.

Source

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.
Source

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.
Source

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 validate rk.
  • Afterzkproof / spend_auth_sig has been set, this can be redacted.
Source

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.

Source

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_ask values.
Source

pub fn proprietary(&self) -> &BTreeMap<String, Vec<u8>>

Proprietary fields related to the note being spent.

Trait Implementations§

Source§

impl Debug for Spend

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .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
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .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
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more