Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import (

var (
ErrNoMatchingChainSelector = errors.New("no matching chain selector found")
ErrSequenceNumberTooLow = errors.New("sequence number too low")
)

// secureMintReport represents the inner report structure, mimics the Report type in the SM plugin repo
Expand Down Expand Up @@ -114,12 +113,7 @@ func (a *SecureMintAggregator) Aggregate(lggr logger.Logger, previousOutcome *ty
// extractAndValidateReports extracts OCRTriggerEvent from observations and validates them
func (a *SecureMintAggregator) extractAndValidateReports(lggr logger.Logger, observations map[ocrcommon.OracleID][]values.Value, previousOutcome *types.AggregationOutcome) ([]*secureMintReport, error) {
var validReports []*secureMintReport
var sequenceNumberTooLow bool
var foundMatchingChainSelector bool
previousSeqNr := uint64(0)
if previousOutcome != nil {
previousSeqNr = previousOutcome.LastSeenAt
}

for nodeID, nodeObservations := range observations {
lggr = logger.With(lggr, "nodeID", nodeID)
Expand Down Expand Up @@ -153,13 +147,6 @@ func (a *SecureMintAggregator) extractAndValidateReports(lggr logger.Logger, obs
// We found a matching chain selector
foundMatchingChainSelector = true

// Validate sequence number
if triggerEvent.SeqNr <= previousSeqNr {
lggr.Warnw("sequence number too low", "seqNr", triggerEvent.SeqNr, "previousSeqNr", previousSeqNr)
sequenceNumberTooLow = true
continue
}

// Deserialize the inner secureMintReport
var innerReport secureMintReport
if err := json.Unmarshal(reportWithInfo.Report, &innerReport); err != nil {
Expand All @@ -177,10 +164,6 @@ func (a *SecureMintAggregator) extractAndValidateReports(lggr logger.Logger, obs
return nil, nil
}

if sequenceNumberTooLow {
return nil, fmt.Errorf("%w: all reports had sequence numbers <= %d", ErrSequenceNumberTooLow, previousSeqNr)
}

return validReports, nil
}

Expand Down Expand Up @@ -223,12 +206,15 @@ func (a *SecureMintAggregator) createOutcome(lggr logger.Logger, report *secureM
// Store the sequence number in metadata for next round
metadata := []byte{byte(report.SeqNr)} // Simple metadata for now

return &types.AggregationOutcome{
aggOutcome := &types.AggregationOutcome{
EncodableOutcome: reportsProto.GetMapValue(),
Metadata: metadata,
LastSeenAt: report.SeqNr,
ShouldReport: true, // Always report since we found and verified the target report
}, nil
}

lggr.Debugw("SecureMint AggregationOutcome created", "aggOutcome", aggOutcome)
return aggOutcome, nil
}

// parseSecureMintConfig parses the user-facing, type-less, SecureMint aggregator config into the internal typed config.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,28 +87,6 @@ func TestSecureMintAggregator_Aggregate(t *testing.T) {
expectError: false,
expectedShouldReport: false,
},
{
name: "sequence number too low",
config: configWithChainSelector(t, "16015286601757825753"),
previousOutcome: &types.AggregationOutcome{
LastSeenAt: 10, // Previous sequence number
},
observations: createSecureMintObservations(t, []ocrTriggerEventData{
{
chainSelector: ethSepoliaChainSelector,
seqNr: 9, // Lower than previous
report: &secureMintReport{
ConfigDigest: ocr2types.ConfigDigest{0: 1, 31: 2},
SeqNr: 9,
Block: 1000,
Mintable: big.NewInt(99),
},
},
}),
f: 1,
expectError: true,
errorContains: "sequence number too low",
},
{
name: "no observations",
config: configWithChainSelector(t, "16015286601757825753"),
Expand All @@ -117,28 +95,6 @@ func TestSecureMintAggregator_Aggregate(t *testing.T) {
expectError: true,
errorContains: "no observations",
},
{
name: "sequence number equal to previous (should be ignored)",
config: configWithChainSelector(t, "16015286601757825753"),
previousOutcome: &types.AggregationOutcome{
LastSeenAt: 10, // Previous sequence number
},
observations: createSecureMintObservations(t, []ocrTriggerEventData{
{
chainSelector: ethSepoliaChainSelector,
seqNr: 10, // Equal to previous
report: &secureMintReport{
ConfigDigest: ocr2types.ConfigDigest{0: 1, 31: 2},
SeqNr: 10,
Block: 1000,
Mintable: big.NewInt(99),
},
},
}),
f: 1,
expectError: true,
errorContains: "sequence number too low",
},
}

for _, tc := range tests {
Expand Down
Loading