Skip to main content

Bundle

Struct Bundle 

Source
pub struct Bundle<T: Authorization, V> { /* private fields */ }
Expand description

A bundle of actions to be applied to the ledger.

Implementations§

Source§

impl<S: InProgressSignatures, V> Bundle<InProgress<Unproven, S>, V>

Source

pub fn create_proof( self, pk: &ProvingKey, rng: impl RngCore, ) -> Result<Bundle<InProgress<Proof, S>, V>, BuildError>

Available on crate feature circuit only.

Creates the proof for this bundle.

Source§

impl<P: Debug, V> Bundle<InProgress<P, Unauthorized>, V>

Source

pub fn prepare<R: RngCore + CryptoRng>( self, rng: R, sighash: [u8; 32], ) -> Bundle<InProgress<P, PartiallyAuthorized>, V>

Loads the sighash into this bundle, preparing it for signing.

This API ensures that all signatures are created over the same sighash.

Source§

impl<V> Bundle<InProgress<Proof, Unauthorized>, V>

Source

pub fn apply_signatures<R: RngCore + CryptoRng>( self, rng: R, sighash: [u8; 32], signing_keys: &[SpendAuthorizingKey], ) -> Result<Bundle<Authorized, V>, BuildError>

Applies signatures to this bundle, in order to authorize it.

This is a helper method that wraps Bundle::prepare, Bundle::sign, and Bundle::finalize.

Source§

impl<P: Debug, V> Bundle<InProgress<P, PartiallyAuthorized>, V>

Source

pub fn sign<R: RngCore + CryptoRng>( self, rng: R, ask: &SpendAuthorizingKey, ) -> Self

Signs this bundle with the given SpendAuthorizingKey.

This will apply signatures for all notes controlled by this spending key.

Source

pub fn append_signatures( self, signatures: &[Signature<SpendAuth>], ) -> Result<Self, BuildError>

Appends externally computed Signatures.

Each signature will be applied to the one input for which it is valid. An error will be returned if the signature is not valid for any inputs, or if it is valid for more than one input.

Source§

impl<V> Bundle<InProgress<Proof, PartiallyAuthorized>, V>

Source

pub fn finalize(self) -> Result<Bundle<Authorized, V>, BuildError>

Finalizes this bundle, enabling it to be included in a transaction.

Returns an error if any signatures are missing.

Source§

impl<T: Authorization, V> Bundle<T, V>

Source

pub fn from_parts( actions: NonEmpty<Action<T::SpendAuth>>, flags: Flags, value_balance: V, anchor: Anchor, authorization: T, ) -> Self

Constructs a Bundle from its constituent parts.

Source

pub fn actions(&self) -> &NonEmpty<Action<T::SpendAuth>>

Returns the list of actions that make up this bundle.

Source

pub fn flags(&self) -> &Flags

Returns the Orchard-specific transaction-level flags for this bundle.

Source

pub fn value_balance(&self) -> &V

Returns the net value moved into or out of the Orchard shielded pool.

This is the sum of Orchard spends minus the sum Orchard outputs.

Source

pub fn anchor(&self) -> &Anchor

Returns the root of the Orchard commitment tree that this bundle commits to.

Source

pub fn authorization(&self) -> &T

Returns the authorization for this bundle.

In the case of a Bundle<Authorized>, this is the proof and binding signature.

Source

pub fn try_map_value_balance<V0, E, F: FnOnce(V) -> Result<V0, E>>( self, f: F, ) -> Result<Bundle<T, V0>, E>

Construct a new bundle by applying a transformation that might fail to the value balance.

Source

pub fn map_authorization<R, U: Authorization>( self, context: &mut R, spend_auth: impl FnMut(&mut R, &T, T::SpendAuth) -> U::SpendAuth, step: impl FnOnce(&mut R, T) -> U, ) -> Bundle<U, V>

Transitions this bundle from one authorization state to another.

Source

pub fn try_map_authorization<R, U: Authorization, E>( self, context: &mut R, spend_auth: impl FnMut(&mut R, &T, T::SpendAuth) -> Result<U::SpendAuth, E>, step: impl FnOnce(&mut R, T) -> Result<U, E>, ) -> Result<Bundle<U, V>, E>

Transitions this bundle from one authorization state to another.

Source

pub fn decrypt_outputs_with_keys( &self, keys: &[IncomingViewingKey], ) -> Vec<(usize, IncomingViewingKey, Note, Address, [u8; 512])>

Performs trial decryption of each action in the bundle with each of the specified incoming viewing keys, and returns a vector of each decrypted note plaintext contents along with the index of the action from which it was derived.

Source

pub fn decrypt_output_with_key( &self, action_idx: usize, key: &IncomingViewingKey, ) -> Option<(Note, Address, [u8; 512])>

Performs trial decryption of the action at action_idx in the bundle with the specified incoming viewing key, and returns the decrypted note plaintext contents if successful.

Source

pub fn recover_outputs_with_ovks( &self, keys: &[OutgoingViewingKey], ) -> Vec<(usize, OutgoingViewingKey, Note, Address, [u8; 512])>

Performs trial decryption of each action in the bundle with each of the specified outgoing viewing keys, and returns a vector of each decrypted note plaintext contents along with the index of the action from which it was derived.

Source

pub fn recover_output_with_ovk( &self, action_idx: usize, key: &OutgoingViewingKey, ) -> Option<(Note, Address, [u8; 512])>

Attempts to decrypt the action at the specified index with the specified outgoing viewing key, and returns the decrypted note plaintext contents if successful.

Source§

impl<T: Authorization, V: Copy + Into<i64>> Bundle<T, V>

Source

pub fn commitment(&self) -> BundleCommitment

Computes a commitment to the effects of this bundle, suitable for inclusion within a transaction ID.

Source

pub fn binding_validating_key(&self) -> VerificationKey<Binding>

Returns the transaction binding validating key for this bundle.

This can be used to validate the Authorized::binding_signature returned from Bundle::authorization.

Source§

impl<V> Bundle<Authorized, V>

Source

pub fn authorizing_commitment(&self) -> BundleAuthorizingCommitment

Computes a commitment to the authorizing data within for this bundle.

This together with Bundle::commitment bind the entire bundle.

Source

pub fn verify_proof(&self, vk: &VerifyingKey) -> Result<(), Error>

Available on crate feature circuit only.

Verifies the proof for this bundle.

Source§

impl<V> Bundle<Unbound, V>

Source

pub fn apply_binding_signature<R: RngCore + CryptoRng>( self, sighash: [u8; 32], rng: R, ) -> Option<Bundle<Authorized, V>>

Verifies the given sighash with every spend_auth_sig, and then binds the bundle.

Returns None if the given sighash does not validate against every spend_auth_sig.

Trait Implementations§

Source§

impl<T: Clone + Authorization, V: Clone> Clone for Bundle<T, V>
where T::SpendAuth: Clone,

Source§

fn clone(&self) -> Bundle<T, V>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Authorization, V: Debug> Debug for Bundle<T, V>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<V: DynamicUsage> DynamicUsage for Bundle<Authorized, V>

Available on crate feature std only.
Source§

fn dynamic_usage(&self) -> usize

Returns a best estimate of the amount of heap-allocated memory used by this type. Read more
Source§

fn dynamic_usage_bounds(&self) -> (usize, Option<usize>)

Returns the lower and upper bounds on the amount of heap-allocated memory used by this type. Read more

Auto Trait Implementations§

§

impl<T, V> Freeze for Bundle<T, V>
where V: Freeze, T: Freeze, <T as Authorization>::SpendAuth: Freeze,

§

impl<T, V> RefUnwindSafe for Bundle<T, V>

§

impl<T, V> Send for Bundle<T, V>
where V: Send, T: Send, <T as Authorization>::SpendAuth: Send,

§

impl<T, V> Sync for Bundle<T, V>
where V: Sync, T: Sync, <T as Authorization>::SpendAuth: Sync,

§

impl<T, V> Unpin for Bundle<T, V>
where V: Unpin, T: Unpin, <T as Authorization>::SpendAuth: Unpin,

§

impl<T, V> UnsafeUnpin for Bundle<T, V>

§

impl<T, V> UnwindSafe for Bundle<T, V>

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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