Struct Witness
pub struct Witness { /* private fields */ }
Expand description
The Witness is the data used to unlock bitcoin since the segwit upgrade.
Can be logically seen as an array of bytestrings, i.e. Vec<Vec<u8>>
, and it is serialized on the wire
in that format. You can convert between this type and Vec<Vec<u8>>
by using Witness::from_slice
and Witness::to_vec
.
For serialization and deserialization performance it is stored internally as a single Vec
,
saving some allocations.
Implementations§
§impl Witness
impl Witness
pub fn from_vec(vec: Vec<Vec<u8>>) -> Witness
👎Deprecated since 0.30.0: use Witness::from_slice()
instead
pub fn from_vec(vec: Vec<Vec<u8>>) -> Witness
Witness::from_slice()
insteadCreates Witness
object from an array of byte-arrays
pub fn from_slice<T>(slice: &[T]) -> Witness
pub fn from_slice<T>(slice: &[T]) -> Witness
Creates a Witness
object from a slice of bytes slices where each slice is a witness item.
pub fn to_vec(&self) -> Vec<Vec<u8>>
pub fn to_vec(&self) -> Vec<Vec<u8>>
Convenience method to create an array of byte-arrays from this witness.
pub fn serialized_len(&self) -> usize
pub fn serialized_len(&self) -> usize
Returns the bytes required when this Witness is consensus encoded.
pub fn clear(&mut self)
pub fn clear(&mut self)
Clear the witness.
pub fn push<T>(&mut self, new_element: T)
pub fn push<T>(&mut self, new_element: T)
Push a new element on the witness, requires an allocation.
pub fn push_bitcoin_signature(
&mut self,
signature: &SerializedSignature,
hash_type: EcdsaSighashType,
)
pub fn push_bitcoin_signature( &mut self, signature: &SerializedSignature, hash_type: EcdsaSighashType, )
Pushes a DER-encoded ECDSA signature with a signature hash type as a new element on the witness, requires an allocation.
pub fn second_to_last(&self) -> Option<&[u8]>
pub fn second_to_last(&self) -> Option<&[u8]>
Returns the second-to-last element in the witness, if any.
pub fn tapscript(&self) -> Option<&Script>
pub fn tapscript(&self) -> Option<&Script>
Get Tapscript following BIP341 rules regarding accounting for an annex.
This does not guarantee that this represents a P2TR Witness
. It
merely gets the second to last or third to last element depending on
the first byte of the last element being equal to 0x50. See
Script::is_v1_p2tr to
check whether this is actually a Taproot witness.
Trait Implementations§
§impl<'de> Deserialize<'de> for Witness
impl<'de> Deserialize<'de> for Witness
§fn deserialize<D>(
deserializer: D,
) -> Result<Witness, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>(
deserializer: D,
) -> Result<Witness, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
§impl<'a> IntoIterator for &'a Witness
impl<'a> IntoIterator for &'a Witness
§impl Ord for Witness
impl Ord for Witness
§impl PartialOrd for Witness
impl PartialOrd for Witness
§impl Serialize for Witness
impl Serialize for Witness
§fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
§impl Writeable for Witness
impl Writeable for Witness
impl Eq for Witness
impl StructuralPartialEq for Witness
Auto Trait Implementations§
impl Freeze for Witness
impl RefUnwindSafe for Witness
impl Send for Witness
impl Sync for Witness
impl Unpin for Witness
impl UnwindSafe for Witness
Blanket Implementations§
§impl<T> AnySync for T
impl<T> AnySync for T
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
§impl<T> Downcast for Twhere
T: AsAny + ?Sized,
impl<T> Downcast for Twhere
T: AsAny + ?Sized,
§fn downcast_ref<T>(&self) -> Option<&T>where
T: AsAny,
fn downcast_ref<T>(&self) -> Option<&T>where
T: AsAny,
Any
.§fn downcast_mut<T>(&mut self) -> Option<&mut T>where
T: AsAny,
fn downcast_mut<T>(&mut self) -> Option<&mut T>where
T: AsAny,
Any
.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request