pub struct Transaction { /* private fields */ }
Expand description
A Zcash transaction that can combine transparent and multiple shielded protocol components.
Transaction
represents a complete Zcash transaction, which can include components from
transparent Bitcoin-style inputs/outputs as well as from any of the three Zcash shielded
protocols: Sprout, Sapling, and Orchard. The transaction structure preserves both blockchain
data (block height, timestamp) and the detailed components needed to represent the
transaction in a wallet format.
§Zcash Concept Relation
In Zcash:
- Unified Transaction Format: Transactions can seamlessly combine transparent and different shielded protocols in a single operation
- Multi-Protocol Support: Zcash has evolved through multiple shielded protocols,
and transactions can include components from any of them:
- Transparent (Bitcoin-style public inputs/outputs)
- Sprout (original shielded protocol using JoinSplits)
- Sapling (improved shielded protocol with separate spends/outputs)
- Orchard (latest shielded protocol using unified actions)
- Transaction Lifecycle: Transactions go through stages (Pending, Confirmed, Failed, Abandoned) that represent their status on the blockchain
§Data Preservation
During wallet migration, the following transaction data must be preserved:
- Identity: The unique transaction ID (txid)
- Blockchain Context: Block height, timestamp, block hash when available
- Status Information: Whether the transaction is pending, confirmed, failed, or abandoned
- Raw Transaction: Optional full binary transaction data
- Protocol-Specific Components:
- Transparent inputs and outputs
- Sapling spends and outputs
- Orchard actions
- Sprout JoinSplits
§Examples
// Create a new transaction with a transaction ID (in practice, a real ID)
let txid = TxId::from_bytes([0u8; 32]);
let mut tx = Transaction::new(txid);
// Set transaction metadata
tx.set_mined_height(BlockHeight::from(1000000));
Implementations§
Source§impl Transaction
impl Transaction
pub fn new(txid: TxId) -> Self
pub fn txid(&self) -> TxId
pub fn set_txid(&mut self, txid: TxId)
pub fn raw(&self) -> Option<&Data>
pub fn set_raw(&mut self, raw: Data)
pub fn target_height(&self) -> Option<&BlockHeight>
pub fn set_target_height(&mut self, height: BlockHeight)
pub fn mined_height(&self) -> Option<&BlockHeight>
pub fn set_mined_height(&mut self, height: BlockHeight)
pub fn block_position(&self) -> Option<&TxBlockPosition>
pub fn set_block_position(&mut self, block_position: Option<TxBlockPosition>)
Trait Implementations§
Source§impl Attachable for Transaction
impl Attachable for Transaction
Source§fn attachments(&self) -> &Attachments
fn attachments(&self) -> &Attachments
Returns a reference to the attachments container.
Source§fn attachments_mut(&mut self) -> &mut Attachments
fn attachments_mut(&mut self) -> &mut Attachments
Returns a mutable reference to the attachments container.
Source§fn add_attachment(
&mut self,
payload: impl EnvelopeEncodable,
vendor: &str,
conforms_to: Option<&str>,
)
fn add_attachment( &mut self, payload: impl EnvelopeEncodable, vendor: &str, conforms_to: Option<&str>, )
Adds a new attachment with the specified payload and metadata. Read more
Source§fn get_attachment(&self, digest: &Digest) -> Option<&Envelope>
fn get_attachment(&self, digest: &Digest) -> Option<&Envelope>
Retrieves an attachment by its digest. Read more
Source§fn remove_attachment(&mut self, digest: &Digest) -> Option<Envelope>
fn remove_attachment(&mut self, digest: &Digest) -> Option<Envelope>
Removes an attachment by its digest. Read more
Source§fn clear_attachments(&mut self)
fn clear_attachments(&mut self)
Removes all attachments from the object.
Source§fn has_attachments(&self) -> bool
fn has_attachments(&self) -> bool
Returns whether the object has any attachments. Read more
Source§impl Clone for Transaction
impl Clone for Transaction
Source§fn clone(&self) -> Transaction
fn clone(&self) -> Transaction
Returns a copy of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl Debug for Transaction
impl Debug for Transaction
Source§impl From<Transaction> for Envelope
impl From<Transaction> for Envelope
Source§fn from(value: Transaction) -> Self
fn from(value: Transaction) -> Self
Converts to this type from the input type.
Source§impl PartialEq for Transaction
impl PartialEq for Transaction
Source§impl TryFrom<Envelope> for Transaction
impl TryFrom<Envelope> for Transaction
impl StructuralPartialEq for Transaction
Auto Trait Implementations§
impl Freeze for Transaction
impl RefUnwindSafe for Transaction
impl !Send for Transaction
impl !Sync for Transaction
impl Unpin for Transaction
impl UnwindSafe for Transaction
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
Mutably borrows from an owned value. Read more
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>
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 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>
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