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 p2wpkh(signature: &Signature, pubkey: &PublicKey) -> Witness
pub fn p2wpkh(signature: &Signature, pubkey: &PublicKey) -> Witness
Creates a witness required to spend a P2WPKH output.
The witness will be made up of the DER encoded signature + sighash_type followed by the serialized public key. Also useful for spending a P2SH-P2WPKH output.
It is expected that pubkey
is related to the secret key used to create signature
.
pub fn p2tr_key_spend(signature: &Signature) -> Witness
pub fn p2tr_key_spend(signature: &Signature) -> Witness
Creates a witness required to do a key path spend of a P2TR output.
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 size(&self) -> usize
pub fn size(&self) -> usize
Returns the number of bytes this witness contributes to a transactions total size.
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_ecdsa_signature(&mut self, signature: &Signature)
pub fn push_ecdsa_signature(&mut self, signature: &Signature)
Pushes, as a new element on the witness, an ECDSA signature.
Pushes the DER encoded signature + sighash_type, 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 third_to_last(&self) -> Option<&[u8]>
pub fn third_to_last(&self) -> Option<&[u8]>
Returns the third-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_p2tr to
check whether this is actually a Taproot witness.
pub fn taproot_control_block(&self) -> Option<&[u8]>
pub fn taproot_control_block(&self) -> Option<&[u8]>
Get the taproot control block following BIP341 rules.
This does not guarantee that this represents a P2TR Witness
. It
merely gets the last or second to last element depending on the first
byte of the last element being equal to 0x50. See
Script::is_p2tr to
check whether this is actually a Taproot witness.
pub fn taproot_annex(&self) -> Option<&[u8]>
pub fn taproot_annex(&self) -> Option<&[u8]>
Get the taproot annex following BIP341 rules.
This does not guarantee that this represents a P2TR Witness
. See
Script::is_p2tr to
check whether this is actually a Taproot witness.
pub fn witness_script(&self) -> Option<&Script>
pub fn witness_script(&self) -> Option<&Script>
Get the p2wsh witness script following BIP141 rules.
This does not guarantee that this represents a P2WS Witness
. See
Script::is_p2wsh to
check whether this is actually a P2WSH witness.