Commit 3d99b857 authored by refcell.eth's avatar refcell.eth Committed by GitHub

feat(op-challenger): Adds some simple large preimage challenge metrics (#9281)

parent 6de6b5fc
......@@ -16,6 +16,5 @@ func Main(ctx context.Context, logger log.Logger, cfg *config.Config) (cliapp.Li
if err := cfg.Check(); err != nil {
return nil, err
}
srv, err := game.NewService(ctx, clock.SystemClock, logger, cfg)
return srv, err
return game.NewService(ctx, clock.SystemClock, logger, cfg)
}
......@@ -20,6 +20,11 @@ type Oracle interface {
ChallengeTx(ident keccakTypes.LargePreimageIdent, challenge keccakTypes.Challenge) (txmgr.TxCandidate, error)
}
type ChallengeMetrics interface {
RecordPreimageChallenged()
RecordPreimageChallengeFailed()
}
type Verifier interface {
CreateChallenge(ctx context.Context, blockHash common.Hash, oracle fetcher.Oracle, preimage keccakTypes.LargePreimageMetaData) (keccakTypes.Challenge, error)
}
......@@ -30,13 +35,15 @@ type Sender interface {
type PreimageChallenger struct {
log log.Logger
metrics ChallengeMetrics
verifier Verifier
sender Sender
}
func NewPreimageChallenger(logger log.Logger, verifier Verifier, sender Sender) *PreimageChallenger {
func NewPreimageChallenger(logger log.Logger, metrics ChallengeMetrics, verifier Verifier, sender Sender) *PreimageChallenger {
return &PreimageChallenger{
log: logger,
metrics: metrics,
verifier: verifier,
sender: sender,
}
......@@ -76,8 +83,10 @@ func (c *PreimageChallenger) Challenge(ctx context.Context, blockHash common.Has
if len(txs) > 0 {
_, err := c.sender.SendAndWait("challenge preimages", txs...)
if err != nil {
c.metrics.RecordPreimageChallengeFailed()
return fmt.Errorf("failed to send challenge txs: %w", err)
}
c.metrics.RecordPreimageChallenged()
}
return nil
}
......@@ -113,10 +113,16 @@ func setupChallengerTest(logger log.Logger) (*stubVerifier, *stubSender, *stubCh
}
sender := &stubSender{}
oracle := &stubChallengerOracle{}
challenger := NewPreimageChallenger(logger, verifier, sender)
metrics := &mockChallengeMetrics{}
challenger := NewPreimageChallenger(logger, metrics, verifier, sender)
return verifier, sender, oracle, challenger
}
type mockChallengeMetrics struct{}
func (m *mockChallengeMetrics) RecordPreimageChallenged() {}
func (m *mockChallengeMetrics) RecordPreimageChallengeFailed() {}
type stubVerifier struct {
challenges map[keccakTypes.LargePreimageIdent]keccakTypes.Challenge
err error
......
......@@ -247,7 +247,7 @@ func (s *Service) initScheduler(cfg *config.Config) error {
func (s *Service) initLargePreimages() error {
fetcher := fetcher.NewPreimageFetcher(s.logger, s.l1Client)
verifier := keccak.NewPreimageVerifier(s.logger, fetcher)
challenger := keccak.NewPreimageChallenger(s.logger, verifier, s.txSender)
challenger := keccak.NewPreimageChallenger(s.logger, s.metrics, verifier, s.txSender)
s.preimages = keccak.NewLargePreimageScheduler(s.logger, s.registry.Oracles(), challenger)
return nil
}
......
......@@ -34,6 +34,9 @@ type Metricer interface {
RecordGameMove()
RecordCannonExecutionTime(t float64)
RecordPreimageChallenged()
RecordPreimageChallengeFailed()
RecordBondClaimFailed()
RecordBondClaimed(amount uint64)
......@@ -68,6 +71,9 @@ type Metrics struct {
bondClaimFailures prometheus.Counter
bondsClaimed prometheus.Counter
preimageChallenged prometheus.Counter
preimageChallengeFailed prometheus.Counter
highestActedL1Block prometheus.Gauge
moves prometheus.Counter
......@@ -145,6 +151,16 @@ func NewMetrics() *Metrics {
Name: "bonds",
Help: "Number of bonds claimed by the challenge agent",
}),
preimageChallenged: factory.NewCounter(prometheus.CounterOpts{
Namespace: Namespace,
Name: "preimage_challenged",
Help: "Number of preimages challenged by the challenger",
}),
preimageChallengeFailed: factory.NewCounter(prometheus.CounterOpts{
Namespace: Namespace,
Name: "preimage_challenge_failed",
Help: "Number of preimage challenges that failed",
}),
trackedGames: *factory.NewGaugeVec(prometheus.GaugeOpts{
Namespace: Namespace,
Name: "tracked_games",
......@@ -201,6 +217,14 @@ func (m *Metrics) RecordGameStep() {
m.steps.Add(1)
}
func (m *Metrics) RecordPreimageChallenged() {
m.preimageChallenged.Add(1)
}
func (m *Metrics) RecordPreimageChallengeFailed() {
m.preimageChallengeFailed.Add(1)
}
func (m *Metrics) RecordBondClaimFailed() {
m.bondClaimFailures.Add(1)
}
......
......@@ -28,6 +28,9 @@ func (*NoopMetricsImpl) RecordGameStep() {}
func (*NoopMetricsImpl) RecordActedL1Block(_ uint64) {}
func (*NoopMetricsImpl) RecordPreimageChallenged() {}
func (*NoopMetricsImpl) RecordPreimageChallengeFailed() {}
func (*NoopMetricsImpl) RecordBondClaimFailed() {}
func (*NoopMetricsImpl) RecordBondClaimed(uint64) {}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment