pub struct Anchor(/* private fields */);
Expand description
A root of either the Sapling or Orchard Zcash note commitment trees.
Anchor
is a cryptographic commitment that represents the root of a note commitment
tree at a specific block height. It is used in shielded transaction validation to
prove that a note being spent was part of the blockchain state without revealing which
specific note is being spent.
§Zcash Concept Relation
In Zcash’s shielded protocols (Sapling and Orchard), each spent note must reference an anchor to create a zero-knowledge proof showing:
- The note exists in the blockchain as of a particular state (the anchor)
- The spender has the authority to spend this note
- The note has not been previously spent
The anchors are critical for maintaining privacy while preventing double-spending.
§Data Preservation
Anchor
preserves the exact 256-bit root hash values from wallet data, which are
needed when reconstructing or validating shielded transactions during wallet migration.
§Examples
// Create an anchor from a u256 value
let anchor = Anchor::new([0u8; 32]);
Implementations§
Source§impl Anchor
impl Anchor
Sourcepub fn new(data: [u8; 32]) -> Self
pub fn new(data: [u8; 32]) -> Self
Creates a new instance from a fixed-size byte array.
This is the primary constructor when you have an exact-sized array available.
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the length of this blob in bytes.
This will always return $size
for this type.
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true
if this blob contains no bytes.
This will always return false
for this type (unless $size
is 0).
Sourcepub fn to_vec(&self) -> Vec<u8> ⓘ
pub fn to_vec(&self) -> Vec<u8> ⓘ
Converts this blob to a Vec<u8>
, creating a copy of the data.
Sourcepub fn from_slice(data: &[u8]) -> Result<Self, TryFromSliceError>
pub fn from_slice(data: &[u8]) -> Result<Self, TryFromSliceError>
Creates an instance from a slice of bytes.
§Errors
Returns an error if the slice’s length doesn’t match the expected size ($size).
Sourcepub fn from_vec(data: Vec<u8>) -> Result<Self, TryFromSliceError>
pub fn from_vec(data: Vec<u8>) -> Result<Self, TryFromSliceError>
Creates an instance from a Vec<u8>
.
§Errors
Returns an error if the vector’s length doesn’t match the expected size ($size).
Sourcepub fn from_hex(hex: &str) -> Result<Self, HexParseError>
pub fn from_hex(hex: &str) -> Result<Self, HexParseError>
Parses an instance from a hex string.
Sourcepub fn from_reversed_hex(hex: &str) -> Result<Self, HexParseError>
pub fn from_reversed_hex(hex: &str) -> Result<Self, HexParseError>
Parses an instance from a hex string in reversed byte order, such as is used for transaction identifiers and block hashes.
Trait Implementations§
impl Copy for Anchor
impl Eq for Anchor
Auto Trait Implementations§
impl Freeze for Anchor
impl RefUnwindSafe for Anchor
impl Send for Anchor
impl Sync for Anchor
impl Unpin for Anchor
impl UnwindSafe for Anchor
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> CBORDecodable for T
impl<T> CBORDecodable for T
Source§impl<T> CBOREncodable for T
impl<T> CBOREncodable for T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> EnvelopeEncodable for T
impl<T> EnvelopeEncodable for T
Source§fn into_envelope(self) -> Envelope
fn into_envelope(self) -> Envelope
Converts the value into an envelope by using its Into<Envelope>
implementation.
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> ToHex for T
impl<T> ToHex for T
Source§fn encode_hex<U>(&self) -> Uwhere
U: FromIterator<char>,
fn encode_hex<U>(&self) -> Uwhere
U: FromIterator<char>,
self
into the result. Lower case
letters are used (e.g. f9b4ca
)Source§fn encode_hex_upper<U>(&self) -> Uwhere
U: FromIterator<char>,
fn encode_hex_upper<U>(&self) -> Uwhere
U: FromIterator<char>,
self
into the result. Upper case
letters are used (e.g. F9B4CA
)