diff --git a/metrics/metrics.go b/metrics/metrics.go index b3633f737..7583afa4b 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -40,10 +40,13 @@ var ( ProverSentProofCounter = metrics.NewRegisteredCounter("prover/proof/all/sent", nil) ProverSentValidProofCounter = metrics.NewRegisteredCounter("prover/proof/valid/sent", nil) ProverSentInvalidProofCounter = metrics.NewRegisteredCounter("prover/proof/invalid/sent", nil) + ProverProofsAssigned = metrics.NewRegisteredCounter("prover/proof/assigned", nil) + ProverSlashedCounter = metrics.NewRegisteredCounter("prover/slashed", nil) + ProverSlashedAmount = metrics.NewRegisteredCounter("prover/slashed/amount", nil) ProverReceivedProposedBlockGauge = metrics.NewRegisteredGauge("prover/proposed/received", nil) ProverReceivedProvenBlockGauge = metrics.NewRegisteredGauge("prover/proven/received", nil) + ProverProofRewardGauge = metrics.NewRegisteredGauge("prover/proofReward", nil) ProverAllProofRewardGauge = metrics.NewRegisteredGauge("prover/allProofReward", nil) - ProverNormalProofRewardGauge = metrics.NewRegisteredGauge("prover/normalProofReward", nil) ) // Serve starts the metrics server on the given address, will be closed when the given diff --git a/proposer/proposer.go b/proposer/proposer.go index 89f47ab2b..f75bf9c42 100644 --- a/proposer/proposer.go +++ b/proposer/proposer.go @@ -184,6 +184,9 @@ func (p *Proposer) ProposeOp(ctx context.Context) error { } log.Info("Comparing proposer TKO balance to block fee", "proposer", p.l1ProposerAddress.Hex()) + if err := p.CheckTaikoTokenBalance(); err != nil { + return fmt.Errorf("failed to check token balance: %w", err) + } // Wait until L2 execution engine is synced at first. if err := p.rpc.WaitTillL2ExecutionEngineSynced(ctx); err != nil { diff --git a/prover/prover.go b/prover/prover.go index b971f4d11..5d3647413 100644 --- a/prover/prover.go +++ b/prover/prover.go @@ -297,6 +297,8 @@ func (p *Prover) eventLoop() { case e := <-p.proverSlashedCh: if e.Addr.Hex() == p.proverAddress.Hex() { log.Info("Prover slashed", "address", e.Addr.Hex(), "amount", e.Amount) + metrics.ProverSlashedCounter.Inc(1) + metrics.ProverSlashedAmount.Inc(int64(e.Amount)) } case <-forceProvingTicker.C: reqProving() @@ -559,6 +561,8 @@ func (p *Prover) onBlockProposed( "prover", block.AssignedProver.Hex(), "proofWindowExpired", proofWindowExpired, ) + + metrics.ProverProofsAssigned.Inc(1) } ctx, cancelCtx := context.WithCancel(ctx) @@ -627,10 +631,15 @@ func (p *Prover) submitProofOp(ctx context.Context, proofWithHeader *proofProduc func (p *Prover) onBlockVerified(ctx context.Context, event *bindings.TaikoL1ClientBlockVerified) error { metrics.ProverLatestVerifiedIDGauge.Update(event.BlockId.Int64()) + var reward int64 if event.ProofReward > math.MaxInt64 { - metrics.ProverAllProofRewardGauge.Update(math.MaxInt64) + reward = math.MaxInt64 } else { - metrics.ProverAllProofRewardGauge.Update(int64(event.ProofReward)) + reward = int64(event.ProofReward) + } + metrics.ProverAllProofRewardGauge.Update(reward) + if event.Prover == p.proverAddress { + metrics.ProverProofRewardGauge.Update(reward) } p.latestVerifiedL1Height = event.Raw.BlockNumber