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