Fix checking lifetime in client (#93)

* handle vtxo lifetime in noah send command, ask for comfirmation

* remove confirm question in noah send
This commit is contained in:
Louis Singer
2024-02-09 16:50:10 +01:00
committed by GitHub
parent 6a71ff86ea
commit 53bd542167
2 changed files with 46 additions and 26 deletions

View File

@@ -400,18 +400,23 @@ func handleRoundStream(
return "", err
}
_, seconds, err := findSweepClosure(congestionTree)
if err != nil {
return "", err
}
// validate the congestion tree
if err := tree.ValidateCongestionTree(
congestionTree,
poolPartialTx,
aspPublicKey,
1209344, // ~ 2 weeks
int64(seconds),
); err != nil {
return "", err
}
// validate the receivers
sweepLeaf, err := tree.SweepScript(aspPublicKey, 1209344)
sweepLeaf, err := tree.SweepScript(aspPublicKey, seconds)
if err != nil {
return "", err
}
@@ -621,3 +626,37 @@ func decodeReceiverAddress(addr string) (
return true, outputScript, nil, nil
}
func findSweepClosure(
congestionTree tree.CongestionTree,
) (sweepClosure *taproot.TapElementsLeaf, seconds uint, err error) {
root, err := congestionTree.Root()
if err != nil {
return
}
// find the sweep closure
tx, err := psetv2.NewPsetFromBase64(root.Tx)
if err != nil {
return
}
for _, tapLeaf := range tx.Inputs[0].TapLeafScript {
isSweep, _, lifetime, err := tree.DecodeSweepScript(tapLeaf.Script)
if err != nil {
continue
}
if isSweep {
seconds = lifetime
sweepClosure = &tapLeaf.TapElementsLeaf
break
}
}
if sweepClosure == nil {
return nil, 0, fmt.Errorf("sweep closure not found")
}
return
}

View File

@@ -28,35 +28,16 @@ type redeemBranch struct {
}
func newRedeemBranch(ctx *cli.Context, congestionTree tree.CongestionTree, vtxo vtxo) (RedeemBranch, error) {
sweepClosure, _, err := findSweepClosure(congestionTree)
if err != nil {
return nil, err
}
nodes, err := congestionTree.Branch(vtxo.txid)
if err != nil {
return nil, err
}
// find the sweep closure
tx, err := psetv2.NewPsetFromBase64(nodes[0].Tx)
if err != nil {
return nil, err
}
var sweepClosure *taproot.TapElementsLeaf
for _, tapLeaf := range tx.Inputs[0].TapLeafScript {
isSweep, _, _, err := tree.DecodeSweepScript(tapLeaf.Script)
if err != nil {
continue
}
if isSweep {
sweepClosure = &tapLeaf.TapElementsLeaf
break
}
}
if sweepClosure == nil {
return nil, fmt.Errorf("sweep closure not found")
}
branch := make([]*psetv2.Pset, 0, len(nodes))
for _, node := range nodes {
pset, err := psetv2.NewPsetFromBase64(node.Tx)