mirror of
https://github.com/aljazceru/ark.git
synced 2026-02-05 19:44:44 +01:00
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:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user