Struct bdk_chain::bitcoin::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_capacity(size: usize) -> TaprootBuilder
pub fn with_capacity(size: usize) -> TaprootBuilder
Creates a new instance of TaprootBuilder
with a capacity hint for size
elements.
The size here should be maximum depth of the tree.
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, ScriptBuf)
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: ScriptBuf,
ver: LeafVersion
) -> Result<TaprootBuilder, TaprootBuilderError>
pub fn add_leaf_with_ver( self, depth: u8, script: ScriptBuf, 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: ScriptBuf
) -> Result<TaprootBuilder, TaprootBuilderError>
pub fn add_leaf( self, depth: u8, script: ScriptBuf ) -> 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.
pub fn try_into_node_info(self) -> Result<NodeInfo, IncompleteBuilderError>
pub fn try_into_node_info(self) -> Result<NodeInfo, IncompleteBuilderError>
Converts the builder into a NodeInfo
if the builder is a full tree with possibly
hidden nodes
§Errors:
IncompleteBuilderError::NotFinalized
if the builder is not finalized. The builder
can be restored by calling IncompleteBuilderError::into_builder
pub fn try_into_taptree(self) -> Result<TapTree, IncompleteBuilderError>
pub fn try_into_taptree(self) -> Result<TapTree, IncompleteBuilderError>
Converts the builder into a TapTree
if the builder is a full tree and
does not contain any hidden nodes
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 Hash for TaprootBuilder
impl Hash for TaprootBuilder
§impl Ord for TaprootBuilder
impl Ord for TaprootBuilder
§impl PartialEq for TaprootBuilder
impl PartialEq for TaprootBuilder
§fn eq(&self, other: &TaprootBuilder) -> bool
fn eq(&self, other: &TaprootBuilder) -> bool
self
and other
values to be equal, and is used
by ==
.§impl PartialOrd for TaprootBuilder
impl PartialOrd for TaprootBuilder
§fn partial_cmp(&self, other: &TaprootBuilder) -> Option<Ordering>
fn partial_cmp(&self, other: &TaprootBuilder) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more§impl TryFrom<TaprootBuilder> for NodeInfo
impl TryFrom<TaprootBuilder> for NodeInfo
§type Error = IncompleteBuilderError
type Error = IncompleteBuilderError
§fn try_from(
builder: TaprootBuilder
) -> Result<NodeInfo, <NodeInfo as TryFrom<TaprootBuilder>>::Error>
fn try_from( builder: TaprootBuilder ) -> Result<NodeInfo, <NodeInfo as TryFrom<TaprootBuilder>>::Error>
§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 IncompleteBuilderError
error with the content of incomplete builder
instance.