Skip to main content

Vtxo

Struct Vtxo 

Source
pub struct Vtxo<G = Full, P = VtxoPolicy> { /* private fields */ }
Expand description

Represents a VTXO in the Ark.

The correctness of the return values of methods on this type is conditional on the VTXO being valid. For invalid VTXOs, the methods should never panic, but can return incorrect values. It is advised to always validate a VTXO upon receipt using Vtxo::validate.

Be mindful of calling Clone on a Vtxo, as they can be of non-negligible size. It is advised to use references where possible or use an std::rc::Rc or std::sync::Arc if needed.

Implementations of PartialEq, Eq, PartialOrd, Ord and Hash are proxied to the implementation on Vtxo::id.

Implementations§

Source§

impl<G, P: Policy> Vtxo<G, P>

Source

pub fn id(&self) -> VtxoId

Get the identifier for this Vtxo.

This is the same as Vtxo::point but encoded as a byte array.

Source

pub fn point(&self) -> OutPoint

The outpoint from which to build forfeit or arkoor txs.

This can be an on-chain utxo or an off-chain vtxo.

Source

pub fn amount(&self) -> Amount

The amount of the Vtxo.

Source

pub fn chain_anchor(&self) -> OutPoint

The UTXO that should be confirmed for this Vtxo to be valid.

It is the very root of the VTXO.

Source

pub fn policy(&self) -> &P

The output policy of this VTXO.

Source

pub fn policy_type(&self) -> VtxoPolicyKind

The output policy type of this VTXO.

Source

pub fn expiry_height(&self) -> BlockHeight

The expiry height of the Vtxo.

Source

pub fn server_pubkey(&self) -> PublicKey

The server pubkey used in arkoor transitions.

Source

pub fn exit_delta(&self) -> BlockDelta

The relative timelock block delta used for exits.

Source

pub fn output_taproot(&self) -> TaprootSpendInfo

The taproot spend info for the output of this Vtxo.

Source

pub fn output_script_pubkey(&self) -> ScriptBuf

The scriptPubkey of the output of this Vtxo.

Source

pub fn txout(&self) -> TxOut

The transaction output (eventual UTXO) of this Vtxo.

Source

pub fn to_bare(&self) -> Vtxo<Bare, P>

Convert to a bare VTXO, Vtxo

Source

pub fn into_bare(self) -> Vtxo<Bare, P>

Convert into a bare VTXO, Vtxo

Source§

impl<P: Policy> Vtxo<Bare, P>

Source

pub fn new( point: OutPoint, policy: P, amount: Amount, expiry_height: BlockHeight, server_pubkey: PublicKey, exit_delta: BlockDelta, anchor_point: OutPoint, ) -> Self

Construct a bare VTXO from its individual fields.

Source§

impl<P: Policy> Vtxo<Full, P>

Source

pub fn exit_depth(&self) -> u16

Returns the total exit depth (including OOR depth) of the vtxo.

Source

pub fn past_arkoor_pubkeys(&self) -> Vec<Vec<PublicKey>>

Iterate over all oor transitions in this VTXO

The outer Vec cointains one element for each transition. The inner Vec contains all pubkeys within that transition.

This does not include the current arkoor pubkey, for that use Vtxo::arkoor_pubkey.

Source

pub fn has_all_witnesses(&self) -> bool

Whether all transaction witnesses are present

It is possible to represent unsigned or otherwise unfinished VTXOs, for which this method will return false.

Source

pub fn is_standard(&self) -> bool

Check if this VTXO is standard for relay purposes

A VTXO is standard if:

  • Its own output is standard
  • all sibling outputs in the exit path are standard
  • each part of the exit path should have a P2A output
Source

pub fn unlock_hash(&self) -> Option<UnlockHash>

Returns the “hArk” unlock hash if this is a hArk leaf VTXO

Source

pub fn provide_unlock_signature(&mut self, signature: Signature) -> bool

Provide the leaf signature for an unfinalized hArk VTXO

Returns true if this VTXO was an unfinalized hArk VTXO.

Source

pub fn provide_unlock_preimage(&mut self, preimage: UnlockPreimage) -> bool

Provide the unlock preimage for an unfinalized hArk VTXO

Returns true if this VTXO was an unfinalized hArk VTXO and the preimage matched.

Source

pub fn transactions(&self) -> VtxoTxIter<'_, P>

Iterator that constructs all the exit txs for this Vtxo.

Source

pub fn validate( &self, chain_anchor_tx: &Transaction, ) -> Result<(), VtxoValidationError>

Fully validate this VTXO and its entire transaction chain.

The chain_anchor_tx must be the tx with txid matching Vtxo::chain_anchor.

Source

pub fn validate_unsigned( &self, chain_anchor_tx: &Transaction, ) -> Result<(), VtxoValidationError>

Validate VTXO structure without checking signatures.

Source§

impl<G> Vtxo<G, VtxoPolicy>

Source

pub fn user_pubkey(&self) -> PublicKey

Returns the user pubkey associated with this Vtxo.

Source

pub fn arkoor_pubkey(&self) -> Option<PublicKey>

The public key used to cosign arkoor txs spending this Vtxo. This will return None if VtxoPolicy::is_arkoor_compatible returns false for this VTXO’s policy.

Source§

impl<G> Vtxo<G, ServerVtxoPolicy>

Source

pub fn try_into_user_vtxo(self) -> Result<Vtxo<G, VtxoPolicy>, ServerVtxo<G>>

Try to convert into a user Vtxo

Returns the original value on failure.

Trait Implementations§

Source§

impl<G, P: Policy> AsRef<Vtxo<G, P>> for Vtxo<G, P>

Source§

fn as_ref(&self) -> &Vtxo<G, P>

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<G: Clone, P: Clone> Clone for Vtxo<G, P>

Source§

fn clone(&self) -> Vtxo<G, P>

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<G: Debug, P: Debug> Debug for Vtxo<G, P>

Source§

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

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

impl From<RawVtxo> for Vtxo<Full, ServerVtxoPolicy>

Source§

fn from(r: RawVtxo) -> Self

Converts to this type from the input type.
Source§

impl From<Vtxo<Full, ServerVtxoPolicy>> for RawVtxo

Source§

fn from(v: Vtxo<Full, ServerVtxoPolicy>) -> Self

Converts to this type from the input type.
Source§

impl<G> From<Vtxo<G>> for ServerVtxo<G>

Source§

fn from(vtxo: Vtxo<G>) -> ServerVtxo<G>

Converts to this type from the input type.
Source§

impl<G, P: Policy> Hash for Vtxo<G, P>

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<G, P: Policy> Ord for Vtxo<G, P>

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl<G, P: Policy> PartialEq for Vtxo<G, P>

Source§

fn eq(&self, other: &Self) -> 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<G, P: Policy> PartialOrd for Vtxo<G, P>

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

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

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

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

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

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

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

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

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl<G: VtxoVersionedEncoding, P: Policy + ProtocolEncoding> ProtocolEncoding for Vtxo<G, P>

Source§

fn encode<W: Write + ?Sized>(&self, w: &mut W) -> Result<(), Error>

Encode the object into the writer.
Source§

fn decode<R: Read + ?Sized>(r: &mut R) -> Result<Self, ProtocolDecodingError>

Decode the object from the writer.
Source§

fn serialize(&self) -> Vec<u8>

Serialize the object into a byte vector.
Source§

fn deserialize(byte_slice: &[u8]) -> Result<Self, ProtocolDecodingError>

Deserialize object from the given byte slice.
Source§

fn serialize_hex(&self) -> String

Serialize the object to a lowercase hex string.
Source§

fn deserialize_hex(hex_str: &str) -> Result<Self, ProtocolDecodingError>

Deserialize object from hex slice.
Source§

impl<'a, P: Policy> VtxoRef<P> for &'a Vtxo<Bare, P>

Source§

fn vtxo_id(&self) -> VtxoId

The VtxoId of the VTXO
Source§

fn as_bare_vtxo(&self) -> Option<Cow<'_, Vtxo<Bare, P>>>

If the bare Vtxo can be provided, provides it by reference
Source§

fn into_full_vtxo(self) -> Option<Vtxo<Full, P>>

If the bare Vtxo can be provided, provides it by value, either directly or via cloning
Source§

fn as_full_vtxo(&self) -> Option<&Vtxo<Full, P>>

If the bare Vtxo can be provided, provides it by reference
Source§

impl<'a, P: Policy> VtxoRef<P> for &'a Vtxo<Full, P>

Source§

fn vtxo_id(&self) -> VtxoId

The VtxoId of the VTXO
Source§

fn as_bare_vtxo(&self) -> Option<Cow<'_, Vtxo<Bare, P>>>

If the bare Vtxo can be provided, provides it by reference
Source§

fn as_full_vtxo(&self) -> Option<&Vtxo<Full, P>>

If the bare Vtxo can be provided, provides it by reference
Source§

fn into_full_vtxo(self) -> Option<Vtxo<Full, P>>

If the bare Vtxo can be provided, provides it by value, either directly or via cloning
Source§

impl<P: Policy> VtxoRef<P> for Vtxo<Bare, P>

Source§

fn vtxo_id(&self) -> VtxoId

The VtxoId of the VTXO
Source§

fn as_bare_vtxo(&self) -> Option<Cow<'_, Vtxo<Bare, P>>>

If the bare Vtxo can be provided, provides it by reference
Source§

fn into_full_vtxo(self) -> Option<Vtxo<Full, P>>

If the bare Vtxo can be provided, provides it by value, either directly or via cloning
Source§

fn as_full_vtxo(&self) -> Option<&Vtxo<Full, P>>

If the bare Vtxo can be provided, provides it by reference
Source§

impl<P: Policy> VtxoRef<P> for Vtxo<Full, P>

Source§

fn vtxo_id(&self) -> VtxoId

The VtxoId of the VTXO
Source§

fn as_bare_vtxo(&self) -> Option<Cow<'_, Vtxo<Bare, P>>>

If the bare Vtxo can be provided, provides it by reference
Source§

fn as_full_vtxo(&self) -> Option<&Vtxo<Full, P>>

If the bare Vtxo can be provided, provides it by reference
Source§

fn into_full_vtxo(self) -> Option<Vtxo<Full, P>>

If the bare Vtxo can be provided, provides it by value, either directly or via cloning
Source§

impl<G, P: Policy> Eq for Vtxo<G, P>

Auto Trait Implementations§

§

impl<G, P> Freeze for Vtxo<G, P>
where P: Freeze, G: Freeze,

§

impl<G, P> RefUnwindSafe for Vtxo<G, P>

§

impl<G, P> Send for Vtxo<G, P>
where P: Send, G: Send,

§

impl<G, P> Sync for Vtxo<G, P>
where P: Sync, G: Sync,

§

impl<G, P> Unpin for Vtxo<G, P>
where P: Unpin, G: Unpin,

§

impl<G, P> UnsafeUnpin for Vtxo<G, P>
where P: UnsafeUnpin, G: UnsafeUnpin,

§

impl<G, P> UnwindSafe for Vtxo<G, P>
where P: UnwindSafe, G: UnwindSafe,

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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. 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> 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.
Source§

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

Source§

fn vzip(self) -> V