Skip to content
This repository was archived by the owner on Sep 9, 2025. It is now read-only.

Commit 63822ea

Browse files
Fix multi assertion confirmation tx sending (#752)
Co-authored-by: Raul Jordan <raul@prysmaticlabs.com>
1 parent 038753f commit 63822ea

File tree

4 files changed

+33
-3
lines changed

4 files changed

+33
-3
lines changed

assertions/manager.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ type Manager struct {
9494
autoDeposit bool
9595
autoAllowanceApproval bool
9696
maxGetLogBlocks uint64
97+
confirming *threadsafe.LruSet[protocol.AssertionHash]
98+
confirmQueueMutex sync.Mutex
9799
}
98100

99101
type assertionChainData struct {
@@ -248,6 +250,8 @@ func NewManager(
248250
autoDeposit: true,
249251
autoAllowanceApproval: true,
250252
maxGetLogBlocks: 1000,
253+
confirming: threadsafe.NewLruSet[protocol.AssertionHash](maxAssertions),
254+
confirmQueueMutex: sync.Mutex{},
251255
}
252256
for _, o := range opts {
253257
o(m)

assertions/poster.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,8 @@ func (m *Manager) PostAssertionBasedOnParent(
196196
"postedExecutionState", fmt.Sprintf("%+v", newState),
197197
"assertionHash", assertion.Id(),
198198
)
199-
m.observedCanonicalAssertions <- assertion.Id()
199+
200+
m.sendToConfirmationQueue(assertion.Id(), "PostAssertionBasedOnParent")
200201
return option.Some(assertion), nil
201202
}
202203

assertions/sync.go

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ func (m *Manager) findCanonicalAssertionBranch(
308308
cursor = assertion.AssertionHash
309309
m.assertionChainData.latestAgreedAssertion = cursor
310310
m.assertionChainData.canonicalAssertions[cursor] = assertion
311-
m.observedCanonicalAssertions <- cursor
311+
m.sendToConfirmationQueue(cursor, "findCanonicalAssertionBranch")
312312
}
313313
}
314314
}
@@ -365,7 +365,7 @@ func (m *Manager) respondToAnyInvalidAssertions(
365365
m.assertionChainData.canonicalAssertions[postedAssertionHash] = postedRival
366366
m.submittedAssertions.Insert(postedAssertionHash)
367367
m.submittedRivalsCount++
368-
m.observedCanonicalAssertions <- postedAssertionHash
368+
m.sendToConfirmationQueue(postedAssertionHash, "respondToAnyInvalidAssertions")
369369
}
370370
}
371371
}
@@ -559,3 +559,26 @@ func (m *Manager) saveAssertionToDB(ctx context.Context, creationInfo *protocol.
559559
Status: status.String(),
560560
})
561561
}
562+
563+
// Send assertion to confirmation queue
564+
func (m *Manager) sendToConfirmationQueue(assertionHash protocol.AssertionHash, addedBy string) {
565+
m.confirmQueueMutex.Lock()
566+
defer m.confirmQueueMutex.Unlock()
567+
568+
// Check if assertion is already in confirmation queue
569+
if m.confirming.Has(assertionHash) {
570+
log.Debug("Assertion already in confirmation queue", "assertionHash", assertionHash, "addedBy", addedBy)
571+
return // Already in confirmation queue, skip
572+
}
573+
log.Info("Sending assertion to confirmation queue", "assertionHash", assertionHash, "addedBy", addedBy)
574+
// Mark as confirming
575+
m.confirming.Insert(assertionHash)
576+
577+
// Send to confirmation queue
578+
select {
579+
case m.observedCanonicalAssertions <- assertionHash:
580+
default:
581+
m.confirming.Delete(assertionHash)
582+
log.Warn("Failed to send assertion to confirmation queue: channel full", "assertionHash", assertionHash, "addedBy", addedBy)
583+
}
584+
}

assertions/sync_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ func Test_findCanonicalAssertionBranch(t *testing.T) {
136136
execProvider: provider,
137137
chain: setup.Chains[0],
138138
observedCanonicalAssertions: make(chan protocol.AssertionHash),
139+
confirming: threadsafe.NewLruSet[protocol.AssertionHash](1000),
139140
assertionChainData: &assertionChainData{
140141
latestAgreedAssertion: numToAssertionHash(1),
141142
canonicalAssertions: make(map[protocol.AssertionHash]*protocol.AssertionCreatedInfo),
@@ -267,6 +268,7 @@ func Test_respondToAnyInvalidAssertions(t *testing.T) {
267268
manager := &Manager{
268269
observedCanonicalAssertions: make(chan protocol.AssertionHash),
269270
submittedAssertions: threadsafe.NewLruSet(1000, threadsafe.LruSetWithMetric[protocol.AssertionHash]("submittedAssertions")),
271+
confirming: threadsafe.NewLruSet[protocol.AssertionHash](1000),
270272
assertionChainData: &assertionChainData{
271273
latestAgreedAssertion: numToAssertionHash(1),
272274
canonicalAssertions: make(map[protocol.AssertionHash]*protocol.AssertionCreatedInfo),

0 commit comments

Comments
 (0)