diff --git a/dapps/valuetransfers/packages/tangle/errors.go b/dapps/valuetransfers/packages/tangle/errors.go index 935661ea0a2d659f9d37c6edad5ed3260af28983..124ee4c6663fdac70830372b902ec366e1a3c0be 100644 --- a/dapps/valuetransfers/packages/tangle/errors.go +++ b/dapps/valuetransfers/packages/tangle/errors.go @@ -14,4 +14,9 @@ var ( // ErrDoubleSpendForbidden represents an error that is triggered when a user tries to issue a double spend. ErrDoubleSpendForbidden = errors.New("it is not allowed to issue a double spend") + + // ErrTransactionDoesNotSpendAllFunds is returned if a transaction does not spend all of its inputs. + ErrTransactionDoesNotSpendAllFunds = errors.New("transaction does not spend all funds from inputs") + // ErrInvalidTransactionSignature is returned if the signature of a transaction is invalid. + ErrInvalidTransactionSignature = errors.New("missing or invalid transaction signature") ) diff --git a/dapps/valuetransfers/packages/tangle/factory.go b/dapps/valuetransfers/packages/tangle/factory.go index 106ee55a5b4ff1108e84e18d896dac6f2321e96b..1b82b69f28a86fa4c53961f1d5c760a31cde1c80 100644 --- a/dapps/valuetransfers/packages/tangle/factory.go +++ b/dapps/valuetransfers/packages/tangle/factory.go @@ -30,6 +30,12 @@ func NewValueObjectFactory(tangle *Tangle, tipManager *tipmanager.TipManager) *V func (v *ValueObjectFactory) IssueTransaction(tx *transaction.Transaction) (valueObject *payload.Payload, err error) { parent1, parent2 := v.tipManager.Tips() + // validate the transaction signature + if !tx.SignaturesValid() { + err = ErrInvalidTransactionSignature + return + } + // check if the tx that is supposed to be issued is a double spend tx.Inputs().ForEach(func(outputId transaction.OutputID) bool { v.tangle.TransactionOutput(outputId).Consume(func(output *Output) { diff --git a/dapps/valuetransfers/packages/tangle/tangle.go b/dapps/valuetransfers/packages/tangle/tangle.go index 877d9fd07fbe2ab0ce64090a473ed3342fd9799e..8a2a93861bfad300986a8a632addbea7ce724614 100644 --- a/dapps/valuetransfers/packages/tangle/tangle.go +++ b/dapps/valuetransfers/packages/tangle/tangle.go @@ -21,13 +21,6 @@ import ( "github.com/iotaledger/goshimmer/packages/binary/storageprefix" ) -var ( - // ErrTransactionDoesNotSpendAllFunds is returned if a transaction does not spend all of its inputs. - ErrTransactionDoesNotSpendAllFunds = errors.New("transaction does not spend all funds from inputs") - // ErrInvalidTransactionSignature is returned if the signature of a transaction is invalid. - ErrInvalidTransactionSignature = errors.New("invalid transaction signatures") -) - // Tangle represents the value tangle that consists out of value payloads. // It is an independent ontology, that lives inside the tangle. type Tangle struct {