From f4a382dc108953ac063ecbe454168bd98fea1487 Mon Sep 17 00:00:00 2001 From: Acha Bill <57879913+acha-bill@users.noreply.github.com> Date: Thu, 9 Jul 2020 15:18:27 +0100 Subject: [PATCH] validate tx signature before issueing tx (#630) * validate tx signature before issueing tx * Fix typo Co-authored-by: Angelo Capossele <angelocapossele@gmail.com> * refactor Co-authored-by: Angelo Capossele <angelocapossele@gmail.com> Co-authored-by: Angelo Capossele <angelocapossele@gmail.com> --- dapps/valuetransfers/packages/tangle/errors.go | 5 +++++ dapps/valuetransfers/packages/tangle/factory.go | 6 ++++++ dapps/valuetransfers/packages/tangle/tangle.go | 7 ------- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/dapps/valuetransfers/packages/tangle/errors.go b/dapps/valuetransfers/packages/tangle/errors.go index 935661ea..124ee4c6 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 106ee55a..1b82b69f 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 877d9fd0..8a2a9386 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 { -- GitLab