Struct OrchardWitness

Source
pub struct OrchardWitness(/* private fields */);
Expand description

A cryptographic witness proving that a Orchard note commitment exists in the note commitment tree.

OrchardWitness is a specialized form of incremental Merkle tree witness for the Orchard protocol. It proves that a specific note commitment is included in the global Orchard note commitment tree, which is necessary when spending a note.

§Zcash Concept Relation

In Zcash’s Orchard protocol:

  • Note Commitment Tree: A Merkle tree containing all Orchard note commitments
  • Merkle Path: The path from a leaf (note commitment) to the root of the tree
  • Witness: The authentication path proving a leaf exists in the tree
  • Anchors: Root hashes of the note commitment tree at specific blockchain heights

When spending a Orchard note, a zero-knowledge proof must demonstrate that the note’s commitment exists in the tree at a specific anchor (root hash), without revealing which specific commitment is being spent. The witness provides the necessary path information to create this proof.

§Data Preservation

During wallet migration, complete witness data must be preserved for all unspent notes. This includes:

  • The authentication path (sequence of hashes forming the Merkle path)
  • The position of the note commitment in the tree
  • The tree depth used (32 for Orchard)

Without this witness data, unspent notes cannot be spent as it would be impossible to prove their inclusion in the note commitment tree.

Trait Implementations§

Source§

impl Clone for OrchardWitness

Source§

fn clone(&self) -> OrchardWitness

Returns a copy 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 Debug for OrchardWitness

Source§

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

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

impl From<OrchardWitness> for Envelope

Source§

fn from(value: OrchardWitness) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for OrchardWitness

Source§

fn eq(&self, other: &OrchardWitness) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl TryFrom<Envelope> for OrchardWitness

Source§

type Error = Error

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

fn try_from(envelope: Envelope) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl Eq for OrchardWitness

Source§

impl StructuralPartialEq for OrchardWitness

Auto Trait Implementations§

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, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> EnvelopeEncodable for T
where T: Into<Envelope> + Clone,

Source§

fn into_envelope(self) -> Envelope

Converts the value into an envelope by using its Into<Envelope> implementation.

Source§

fn to_envelope(&self) -> Envelope
where Self: Clone,

Converts a reference to this value into a Gordian Envelope. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Same for T

Source§

type Output = T

Should always be Self
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, 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.
§

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

§

fn vzip(self) -> V

§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> MaybeSendSync for T