Files
ark/common/connectors.go
Pietralberto Mazza fb64bd35d8 Support connectors validation client-side & Minor fixes (#126)
* Validate connectors client-side when sending offchain

* Minor fixes

* validate connector input in forfeit txs

---------

Co-authored-by: Louis <louis@vulpem.com>
2024-03-05 13:04:32 +01:00

50 lines
1.3 KiB
Go

package common
import (
"fmt"
"github.com/vulpemventures/go-elements/elementsutil"
"github.com/vulpemventures/go-elements/psetv2"
)
func ValidateConnectors(poolTx string, connectors []string) error {
ptx, err := psetv2.NewPsetFromBase64(poolTx)
if err != nil {
return fmt.Errorf("invalid pool tx: %s", err)
}
utx, err := ptx.UnsignedTx()
if err != nil {
return fmt.Errorf("invalid pool tx: %s", err)
}
prevConnectorTxid := utx.TxHash().String()
prevConnectorVout := uint32(1)
for i, tx := range connectors {
ctx, err := psetv2.NewPsetFromBase64(tx)
if err != nil {
return fmt.Errorf("invalid connector tx #%d: %s", i, err)
}
utx, err := ctx.UnsignedTx()
if err != nil {
return fmt.Errorf("invalid connector tx #%d: %s", i, err)
}
if ctx.Global.InputCount != 1 {
return fmt.Errorf(
"invalid connector tx #%d: got %d inputs, expected 1",
i, ctx.Global.InputCount,
)
}
inTxid := elementsutil.TxIDFromBytes(ctx.Inputs[0].PreviousTxid)
inVout := ctx.Inputs[0].PreviousTxIndex
if inTxid != prevConnectorTxid || inVout != prevConnectorVout {
return fmt.Errorf(
"invalid connector tx #%d: got prevout %s:%d, expected %s:%d",
i, inTxid, inVout, prevConnectorTxid, prevConnectorVout,
)
}
prevConnectorTxid = utx.TxHash().String()
prevConnectorVout = 0
}
return nil
}