@@ -71,6 +71,8 @@ type ProofReceiverLogic struct {
7171 validateFailureProverTaskStatusNotOk prometheus.Counter
7272 validateFailureProverTaskTimeout prometheus.Counter
7373 validateFailureProverTaskHaveVerifier prometheus.Counter
74+ proofTime * prometheus.GaugeVec
75+ evm_cycle_per_gas prometheus.Gauge
7476
7577 ChunkTask provertask.ProverTask
7678 BundleTask provertask.ProverTask
@@ -79,6 +81,7 @@ type ProofReceiverLogic struct {
7981
8082// NewSubmitProofReceiverLogic create a proof receiver logic
8183func NewSubmitProofReceiverLogic (cfg * config.ProverManager , chainCfg * params.ChainConfig , db * gorm.DB , vf * verifier.Verifier , reg prometheus.Registerer ) * ProofReceiverLogic {
84+
8285 return & ProofReceiverLogic {
8386 chunkOrm : orm .NewChunk (db ),
8487 batchOrm : orm .NewBatch (db ),
@@ -133,6 +136,14 @@ func NewSubmitProofReceiverLogic(cfg *config.ProverManager, chainCfg *params.Cha
133136 Name : "coordinator_validate_failure_submit_have_been_verifier" ,
134137 Help : "Total number of submit proof validate failure proof have been verifier." ,
135138 }),
139+ evm_cycle_per_gas : promauto .With (reg ).NewGauge (prometheus.GaugeOpts {
140+ Name : "evm_circuit_cycle_per_gas" ,
141+ Help : "VM cycles cost for a gas unit cost in evm execution" ,
142+ }),
143+ proofTime : promauto .With (reg ).NewGaugeVec (prometheus.GaugeOpts {
144+ Name : "prover_proving_time" ,
145+ Help : "Time of prover cost for a proof" ,
146+ }, []string {"type" , "phase" }),
136147 }
137148}
138149
@@ -204,12 +215,31 @@ func (m *ProofReceiverLogic) HandleZkProof(ctx *gin.Context, proofParameter coor
204215 return unmarshalErr
205216 }
206217 success , verifyErr = m .verifier .VerifyChunkProof (chunkProof , hardForkName )
218+ if stat := chunkProof .VmProof .Stat ; stat != nil {
219+ if g , _ := m .proofTime .GetMetricWithLabelValues ("chunk" , "exec" ); g != nil {
220+ g .Set (float64 (stat .ExecutionTimeMills ) / 1000 )
221+ }
222+ if g , _ := m .proofTime .GetMetricWithLabelValues ("chunk" , "proving" ); g != nil {
223+ g .Set (float64 (stat .ProvingTimeMills ) / 1000 )
224+ }
225+ cycle_per_gas := float64 (stat .TotalCycle ) / float64 (chunkProof .MetaData .TotalGasUsed )
226+ m .evm_cycle_per_gas .Set (cycle_per_gas )
227+ }
228+
207229 case message .ProofTypeBatch :
208230 batchProof := & message.OpenVMBatchProof {}
209231 if unmarshalErr := json .Unmarshal ([]byte (proofParameter .Proof ), & batchProof ); unmarshalErr != nil {
210232 return unmarshalErr
211233 }
212234 success , verifyErr = m .verifier .VerifyBatchProof (batchProof , hardForkName )
235+ if stat := batchProof .VmProof .Stat ; stat != nil {
236+ if g , _ := m .proofTime .GetMetricWithLabelValues ("batch" , "exec" ); g != nil {
237+ g .Set (float64 (stat .ExecutionTimeMills ) / 1000 )
238+ }
239+ if g , _ := m .proofTime .GetMetricWithLabelValues ("batch" , "proving" ); g != nil {
240+ g .Set (float64 (stat .ProvingTimeMills ) / 1000 )
241+ }
242+ }
213243 case message .ProofTypeBundle :
214244 bundleProof := & message.OpenVMBundleProof {}
215245 if unmarshalErr := json .Unmarshal ([]byte (proofParameter .Proof ), & bundleProof ); unmarshalErr != nil {
0 commit comments