Conversation
a2a4531 to
457aa4a
Compare
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #4341 +/- ##
==========================================
- Coverage 56.67% 56.35% -0.33%
==========================================
Files 237 242 +5
Lines 31681 32162 +481
==========================================
+ Hits 17956 18125 +169
- Misses 11438 11703 +265
- Partials 2287 2334 +47 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
5be4c8f to
c03b378
Compare
| // filterPubkeysByStatus fetches the current registration groups for each pubkey from the remote | ||
| // API and returns only those that need signing, each paired with the timestamp and gas limit to | ||
| // use for signing. Validators with a quorum-complete registration for the requested fee recipient | ||
| // are skipped. In-progress (non-quorum) registrations with a mismatched fee recipient cause an error. | ||
| // For validators with a matching in-progress registration, the existing timestamp and gas limit are | ||
| // adopted so all operators sign the identical message. For unknown validators, now() and the | ||
| // gas limit from the config override or cluster lock are used. | ||
| func filterPubkeysByStatus( |
There was a problem hiding this comment.
Generally I like this logic here. The only downside I find is that it may break if >=2 nodes start it at more or less the same time. Which can be the case to be fair, in clusters with single operator. Any idea how we can prevent that from breaking?
There was a problem hiding this comment.
This was observed during my stress test. I think the right flow should be single operator submitting the first partial, then others can submit in parallel. Otherwise we need to introduce the --timeout flag, that takes precedence over now() when specified?
There was a problem hiding this comment.
What I have in mind is mainly for the single operator clusters. It's not unlikely they will execute the N commands for the N charon nodes almost immediately one after the other.
I think optional --timeout flag is good approach here.
There was a problem hiding this comment.
Added optional --timestamp flag (by mistake we were says --timeout, but it is timestamp).
cmd/feerecipientfetch.go
Outdated
| log.Info(ctx, "Validators with partial builder registrations", z.Int("count", len(cats.Incomplete))) | ||
|
|
||
| for _, pubkey := range cats.Incomplete { | ||
| log.Info(ctx, " Incomplete", z.Str("pubkey", pubkey), z.Int("partial_signatures", maxPartialSigs[pubkey])) |
There was a problem hiding this comment.
AFAICT this maxPartialSigs[pubkey] equals the amount of par sigs received, right? I think it would be useful to have also which indices have submitted them. This way operators know which peer hasn't submitted yet and act upon it.
I think we can fetch that by matching the Pubkey to the fields in the lock distributed_validators.public_shares. This is an ordered list of the partial pubkeys of each operator.
There was a problem hiding this comment.
made it rendering as "submitted_indices": "[1 2]"
|
|
Feature idea: |



This PR introduces new CLI commands:
charon feerecipient sign|fetch. Thefetchcommand eventually writes the overrides file, but it is NOT used yet in charon runtime (another PR will address this).Testing
category: feature
ticket: #4293