Struct breez_sdk_core::bitcoin::util::taproot::TaprootBuilder
pub struct TaprootBuilder { /* private fields */ }
Expand description
Builder for building taproot iteratively. Users can specify tap leaf or omitted/hidden branches in a depth-first search (DFS) walk order to construct this tree.
See Wikipedia for more details on DFS.
Implementations§
§impl TaprootBuilder
impl TaprootBuilder
pub fn new() -> TaprootBuilder
pub fn new() -> TaprootBuilder
Creates a new instance of TaprootBuilder
.
pub fn with_huffman_tree<I>(
script_weights: I,
) -> Result<TaprootBuilder, TaprootBuilderError>
pub fn with_huffman_tree<I>( script_weights: I, ) -> Result<TaprootBuilder, TaprootBuilderError>
Creates a new TaprootSpendInfo
from a list of scripts (with default script version) and
weights of satisfaction for that script.
The weights represent the probability of each branch being taken. If probabilities/weights
for each condition are known, constructing the tree as a Huffman Tree is the optimal way to
minimize average case satisfaction cost. This function takes as input an iterator of
tuple(u32, &Script)
where u32
represents the satisfaction weights of the branch. For
example, [(3, S1), (2, S2), (5, S3)] would construct a TapTree
that has optimal
satisfaction weight when probability for S1 is 30%, S2 is 20% and S3 is 50%.
§Errors:
- When the optimal Huffman Tree has a depth more than 128.
- If the provided list of script weights is empty.
§Edge Cases:
If the script weight calculations overflow, a sub-optimal tree may be generated. This should not happen unless you are dealing with billions of branches with weights close to 2^32.
pub fn add_leaf_with_ver(
self,
depth: u8,
script: Script,
ver: LeafVersion,
) -> Result<TaprootBuilder, TaprootBuilderError>
pub fn add_leaf_with_ver( self, depth: u8, script: Script, ver: LeafVersion, ) -> Result<TaprootBuilder, TaprootBuilderError>
Adds a leaf script at depth
to the builder with script version ver
. Errors if the leaves
are not provided in DFS walk order. The depth of the root node is 0.
pub fn add_leaf(
self,
depth: u8,
script: Script,
) -> Result<TaprootBuilder, TaprootBuilderError>
pub fn add_leaf( self, depth: u8, script: Script, ) -> Result<TaprootBuilder, TaprootBuilderError>
Adds a leaf script at depth
to the builder with default script version. Errors if the
leaves are not provided in DFS walk order. The depth of the root node is 0.
See TaprootBuilder::add_leaf_with_ver
for adding a leaf with specific version.
Adds a hidden/omitted node at depth
to the builder. Errors if the leaves are not provided
in DFS walk order. The depth of the root node is 0.
pub fn is_finalizable(&self) -> bool
pub fn is_finalizable(&self) -> bool
Checks if the builder has finalized building a tree.
Checks if the builder has hidden nodes.
pub fn finalize<C>(
self,
secp: &Secp256k1<C>,
internal_key: XOnlyPublicKey,
) -> Result<TaprootSpendInfo, TaprootBuilder>where
C: Verification,
pub fn finalize<C>(
self,
secp: &Secp256k1<C>,
internal_key: XOnlyPublicKey,
) -> Result<TaprootSpendInfo, TaprootBuilder>where
C: Verification,
Creates a TaprootSpendInfo
with the given internal key.
Returns the unmodified builder as Err if the builder is not finalizable.
See also TaprootBuilder::is_finalizable
Trait Implementations§
§impl Clone for TaprootBuilder
impl Clone for TaprootBuilder
§fn clone(&self) -> TaprootBuilder
fn clone(&self) -> TaprootBuilder
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl Debug for TaprootBuilder
impl Debug for TaprootBuilder
§impl Default for TaprootBuilder
impl Default for TaprootBuilder
§fn default() -> TaprootBuilder
fn default() -> TaprootBuilder
§impl<'de> Deserialize<'de> for TaprootBuilder
impl<'de> Deserialize<'de> for TaprootBuilder
§fn deserialize<__D>(
__deserializer: __D,
) -> Result<TaprootBuilder, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<TaprootBuilder, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
§impl From<TapTree> for TaprootBuilder
impl From<TapTree> for TaprootBuilder
§fn from(tree: TapTree) -> TaprootBuilder
fn from(tree: TapTree) -> TaprootBuilder
§impl Hash for TaprootBuilder
impl Hash for TaprootBuilder
§impl Ord for TaprootBuilder
impl Ord for TaprootBuilder
§impl PartialEq for TaprootBuilder
impl PartialEq for TaprootBuilder
§impl PartialOrd for TaprootBuilder
impl PartialOrd for TaprootBuilder
§impl Serialize for TaprootBuilder
impl Serialize for TaprootBuilder
§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 TryFrom<TaprootBuilder> for TapTree
impl TryFrom<TaprootBuilder> for TapTree
§fn try_from(
builder: TaprootBuilder,
) -> Result<TapTree, <TapTree as TryFrom<TaprootBuilder>>::Error>
fn try_from( builder: TaprootBuilder, ) -> Result<TapTree, <TapTree as TryFrom<TaprootBuilder>>::Error>
Constructs TapTree
from a TaprootBuilder
if it is complete binary tree.
§Returns
A TapTree
iff the builder
is complete, otherwise return IncompleteTapTree
error with the content of incomplete builder
instance.
§type Error = IncompleteTapTree
type Error = IncompleteTapTree
impl Eq for TaprootBuilder
impl StructuralPartialEq for TaprootBuilder
Auto Trait Implementations§
impl Freeze for TaprootBuilder
impl RefUnwindSafe for TaprootBuilder
impl Send for TaprootBuilder
impl Sync for TaprootBuilder
impl Unpin for TaprootBuilder
impl UnwindSafe for TaprootBuilder
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,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§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<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> 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