Skip to content

Commit

Permalink
check rejected or non-monotonically liked outputs in issuePayload (io…
Browse files Browse the repository at this point in the history
…taledger#1151)

* check rejected or non-monotonically outputs

* Fix imports

Co-authored-by: capossele <[email protected]>
  • Loading branch information
acha-bill and capossele authored Mar 29, 2021
1 parent b72204b commit 04581b3
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
8 changes: 6 additions & 2 deletions packages/tangle/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,9 @@ package tangle

import "errors"

// ErrNotSynced is triggered when somebody tries to issue a Payload before the Tangle is fully synced.
var ErrNotSynced = errors.New("tangle not synced")
var (
// ErrNotSynced is triggered when somebody tries to issue a Payload before the Tangle is fully synced.
ErrNotSynced = errors.New("tangle not synced")
// ErrInvalidInputs is returned when one or more inputs are rejected or non-monotonically liked.
ErrInvalidInputs = errors.New("one or more inputs are rejected or non-monotonically liked")
)
21 changes: 21 additions & 0 deletions packages/tangle/tangle.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package tangle

import (
"strings"
"sync"

"github.com/iotaledger/hive.go/autopeering/peer"
Expand All @@ -12,6 +13,7 @@ import (
"github.com/mr-tron/base58"
"golang.org/x/xerrors"

"github.com/iotaledger/goshimmer/packages/ledgerstate"
"github.com/iotaledger/goshimmer/packages/markers"
"github.com/iotaledger/goshimmer/packages/tangle/payload"
)
Expand Down Expand Up @@ -114,6 +116,25 @@ func (t *Tangle) IssuePayload(payload payload.Payload) (message *Message, err er
return
}

if payload.Type() == ledgerstate.TransactionType {
var invalidInputs []string
transaction := payload.(*ledgerstate.Transaction)
for _, input := range transaction.Essence().Inputs() {
if input.Type() == ledgerstate.UTXOInputType {
t.LedgerState.OutputMetadata(input.(*ledgerstate.UTXOInput).ReferencedOutputID()).Consume(func(outputMetadata *ledgerstate.OutputMetadata) {
t.LedgerState.BranchDAG.Branch(outputMetadata.BranchID()).Consume(func(branch ledgerstate.Branch) {
if branch.InclusionState() == ledgerstate.Rejected || !branch.MonotonicallyLiked() {
invalidInputs = append(invalidInputs, input.Base58())
}
})
})
}
}
if len(invalidInputs) > 0 {
return nil, xerrors.Errorf("invalid inputs: %s: %w", strings.Join(invalidInputs, ","), ErrInvalidInputs)
}
}

return t.MessageFactory.IssuePayload(payload)
}

Expand Down

0 comments on commit 04581b3

Please sign in to comment.