use crate::script::csv_sig_script;
use bitcoin::key::Secp256k1;
use bitcoin::secp256k1::All;
use bitcoin::taproot::LeafVersion;
use bitcoin::taproot::TaprootBuilder;
use bitcoin::taproot::TaprootSpendInfo;
use bitcoin::ScriptBuf;
use bitcoin::XOnlyPublicKey;
pub struct TreeTxOutputScript {
script: ScriptBuf,
}
impl TreeTxOutputScript {
pub fn new(vtxo_tree_expiry: bitcoin::Sequence, server: XOnlyPublicKey) -> Self {
let script = csv_sig_script(vtxo_tree_expiry, server);
Self { script }
}
pub fn sweep_spend_leaf(
&self,
secp: &Secp256k1<All>,
aggregate_pk: XOnlyPublicKey,
) -> TaprootSpendInfo {
TaprootBuilder::new()
.add_leaf_with_ver(0, self.script.clone(), LeafVersion::TapScript)
.expect("valid sweep leaf")
.finalize(secp, aggregate_pk)
.expect("can be finalized")
}
}