diff --git a/common/version/version.go b/common/version/version.go index da057737e..ea02cd7f3 100644 --- a/common/version/version.go +++ b/common/version/version.go @@ -6,7 +6,7 @@ import ( "strings" ) -var tag = "v4.1.87" +var tag = "v4.1.88" var commit = func() string { if info, ok := debug.ReadBuildInfo(); ok { diff --git a/coordinator/internal/controller/cron/collect_proof.go b/coordinator/internal/controller/cron/collect_proof.go index a38c61bfa..3833c65c5 100644 --- a/coordinator/internal/controller/cron/collect_proof.go +++ b/coordinator/internal/controller/cron/collect_proof.go @@ -149,7 +149,7 @@ func (c *Collector) check(assignedProverTasks []orm.ProverTask, timeout promethe // here not update the block batch proving status failed, because the collector loop will check // the attempt times. if reach the times, the collector will set the block batch proving status. for _, assignedProverTask := range assignedProverTasks { - if c.proverTaskOrm.TaskTimeoutMoreThanOnce(c.ctx, assignedProverTask.TaskID) { + if c.proverTaskOrm.TaskTimeoutMoreThanOnce(c.ctx, message.ProofType(assignedProverTask.TaskType), assignedProverTask.TaskID) { log.Warn("Task timeout more than once", "taskType", message.ProofType(assignedProverTask.TaskType).String(), "hash", assignedProverTask.TaskID) } diff --git a/coordinator/internal/logic/submitproof/proof_receiver.go b/coordinator/internal/logic/submitproof/proof_receiver.go index 0ab2000d1..867258792 100644 --- a/coordinator/internal/logic/submitproof/proof_receiver.go +++ b/coordinator/internal/logic/submitproof/proof_receiver.go @@ -133,7 +133,7 @@ func (m *ProofReceiverLogic) HandleZkProof(ctx *gin.Context, proofMsg *message.P return fmt.Errorf("get ProverVersion from context failed") } - proverTask, err := m.proverTaskOrm.GetProverTaskByTaskIDAndProver(ctx, proofMsg.ID, pk, pv) + proverTask, err := m.proverTaskOrm.GetProverTaskByTaskIDAndProver(ctx, proofMsg.Type, proofMsg.ID, pk, pv) if proverTask == nil || err != nil { log.Error("get none prover task for the proof", "key", pk, "taskID", proofMsg.ID, "error", err) return ErrValidatorFailureProverTaskEmpty @@ -381,7 +381,7 @@ func (m *ProofReceiverLogic) processProverErr(ctx context.Context, taskID, pk st log.Error("update prover task proving status failure", "taskID", taskID, "proverPublicKey", pk, "taskType", taskType, "error", updateErr) } - proverTasks, err := m.proverTaskOrm.GetValidOrAssignedTaskOfOtherProvers(ctx, taskID, pk, taskType) + proverTasks, err := m.proverTaskOrm.GetValidOrAssignedTaskOfOtherProvers(ctx, taskType, taskID, pk) if err != nil { log.Warn("checkIsAssignedToOtherProver failure", "taskID", taskID, "proverPublicKey", pk, "taskType", taskType, "error", err) return diff --git a/coordinator/internal/orm/orm_test.go b/coordinator/internal/orm/orm_test.go index 2b1158510..9abac05f5 100644 --- a/coordinator/internal/orm/orm_test.go +++ b/coordinator/internal/orm/orm_test.go @@ -12,6 +12,7 @@ import ( "scroll-tech/common/database" "scroll-tech/common/docker" "scroll-tech/common/types" + "scroll-tech/common/types/message" "scroll-tech/common/utils" "scroll-tech/database/migrate" @@ -67,6 +68,7 @@ func TestProverTaskOrm(t *testing.T) { reward.SetString("18446744073709551616", 10) // 1 << 64, uint64 maximum 1<<64 -1 proverTask := ProverTask{ + TaskType: int16(message.ProofTypeChunk), TaskID: "test-hash", ProverName: "prover-0", ProverPublicKey: "0", @@ -77,7 +79,7 @@ func TestProverTaskOrm(t *testing.T) { err = proverTaskOrm.SetProverTask(context.Background(), &proverTask) assert.NoError(t, err) - proverTasks, err := proverTaskOrm.GetProverTasksByHashes(context.Background(), []string{"test-hash"}) + proverTasks, err := proverTaskOrm.GetProverTasksByHashes(context.Background(), message.ProofTypeChunk, []string{"test-hash"}) assert.NoError(t, err) assert.Equal(t, 1, len(proverTasks)) assert.Equal(t, proverTask.ProverName, proverTasks[0].ProverName) @@ -91,7 +93,7 @@ func TestProverTaskOrm(t *testing.T) { proverTask.AssignedAt = utils.NowUTC() err = proverTaskOrm.SetProverTask(context.Background(), &proverTask) assert.NoError(t, err) - proverTasks, err = proverTaskOrm.GetProverTasksByHashes(context.Background(), []string{"test-hash"}) + proverTasks, err = proverTaskOrm.GetProverTasksByHashes(context.Background(), message.ProofTypeChunk, []string{"test-hash"}) assert.NoError(t, err) assert.Equal(t, 1, len(proverTasks)) assert.Equal(t, proverTask.ProvingStatus, proverTasks[0].ProvingStatus) @@ -106,6 +108,7 @@ func TestProverTaskOrmUint256(t *testing.T) { rewardUint256 := big.NewInt(0) rewardUint256.SetString("115792089237316195423570985008687907853269984665640564039457584007913129639935", 10) proverTask := ProverTask{ + TaskType: int16(message.ProofTypeChunk), TaskID: "test-hash", ProverName: "prover-0", ProverPublicKey: "0", @@ -116,7 +119,7 @@ func TestProverTaskOrmUint256(t *testing.T) { err = proverTaskOrm.SetProverTask(context.Background(), &proverTask) assert.NoError(t, err) - proverTasksUint256, err := proverTaskOrm.GetProverTasksByHashes(context.Background(), []string{"test-hash"}) + proverTasksUint256, err := proverTaskOrm.GetProverTasksByHashes(context.Background(), message.ProofTypeChunk, []string{"test-hash"}) assert.NoError(t, err) assert.Equal(t, 1, len(proverTasksUint256)) resultRewardUint256 := proverTasksUint256[0].Reward.BigInt() diff --git a/coordinator/internal/orm/prover_task.go b/coordinator/internal/orm/prover_task.go index e09dbfa04..43d515171 100644 --- a/coordinator/internal/orm/prover_task.go +++ b/coordinator/internal/orm/prover_task.go @@ -96,13 +96,14 @@ func (o *ProverTask) GetProverTasks(ctx context.Context, fields map[string]inter // GetProverTasksByHashes retrieves the ProverTask records associated with the specified hashes. // The returned prover task objects are sorted in ascending order by their ids. -func (o *ProverTask) GetProverTasksByHashes(ctx context.Context, hashes []string) ([]*ProverTask, error) { +func (o *ProverTask) GetProverTasksByHashes(ctx context.Context, taskType message.ProofType, hashes []string) ([]*ProverTask, error) { if len(hashes) == 0 { return nil, nil } db := o.db.WithContext(ctx) db = db.Model(&ProverTask{}) + db = db.Where("task_type", int(taskType)) db = db.Where("task_id IN ?", hashes) db = db.Order("id asc") @@ -114,9 +115,10 @@ func (o *ProverTask) GetProverTasksByHashes(ctx context.Context, hashes []string } // GetProverTaskByTaskIDAndProver get prover task taskID and public key -func (o *ProverTask) GetProverTaskByTaskIDAndProver(ctx context.Context, taskID, proverPublicKey, proverVersion string) (*ProverTask, error) { +func (o *ProverTask) GetProverTaskByTaskIDAndProver(ctx context.Context, taskType message.ProofType, taskID, proverPublicKey, proverVersion string) (*ProverTask, error) { db := o.db.WithContext(ctx) db = db.Model(&ProverTask{}) + db = db.Where("task_type", int(taskType)) db = db.Where("task_id", taskID) db = db.Where("prover_public_key", proverPublicKey) db = db.Where("prover_version", proverVersion) @@ -130,11 +132,11 @@ func (o *ProverTask) GetProverTaskByTaskIDAndProver(ctx context.Context, taskID, } // GetValidOrAssignedTaskOfOtherProvers get the chunk/batch task assigned other provers -func (o *ProverTask) GetValidOrAssignedTaskOfOtherProvers(ctx context.Context, taskID, proverPublicKey string, taskType message.ProofType) ([]ProverTask, error) { +func (o *ProverTask) GetValidOrAssignedTaskOfOtherProvers(ctx context.Context, taskType message.ProofType, taskID, proverPublicKey string) ([]ProverTask, error) { db := o.db.WithContext(ctx) db = db.Model(&ProverTask{}) - db = db.Where("task_id", taskID) db = db.Where("task_type", int(taskType)) + db = db.Where("task_id", taskID) db = db.Where("prover_public_key != ?", proverPublicKey) db = db.Where("proving_status in (?)", []int{int(types.ProverAssigned), int(types.ProverProofValid)}) @@ -146,10 +148,11 @@ func (o *ProverTask) GetValidOrAssignedTaskOfOtherProvers(ctx context.Context, t } // GetProvingStatusByTaskID retrieves the proving status of a prover task -func (o *ProverTask) GetProvingStatusByTaskID(ctx context.Context, taskID string) (types.ProverProveStatus, error) { +func (o *ProverTask) GetProvingStatusByTaskID(ctx context.Context, taskType message.ProofType, taskID string) (types.ProverProveStatus, error) { db := o.db.WithContext(ctx) db = db.Model(&ProverTask{}) db = db.Select("proving_status") + db = db.Where("task_type", int(taskType)) db = db.Where("task_id = ?", taskID) var proverTask ProverTask @@ -177,9 +180,10 @@ func (o *ProverTask) GetTimeoutAssignedProverTasks(ctx context.Context, limit in } // TaskTimeoutMoreThanOnce get the timeout twice task. a temp design -func (o *ProverTask) TaskTimeoutMoreThanOnce(ctx context.Context, taskID string) bool { +func (o *ProverTask) TaskTimeoutMoreThanOnce(ctx context.Context, taskType message.ProofType, taskID string) bool { db := o.db.WithContext(ctx) db = db.Model(&ProverTask{}) + db = db.Where("task_type", int(taskType)) db = db.Where("task_id", taskID) db = db.Where("proving_status", int(types.ProverProofInvalid)) diff --git a/coordinator/test/api_test.go b/coordinator/test/api_test.go index 1fc54c2fc..8b133f297 100644 --- a/coordinator/test/api_test.go +++ b/coordinator/test/api_test.go @@ -386,9 +386,9 @@ func testProofGeneratedFailed(t *testing.T) { return } - chunkProverTaskProvingStatus, err = proverTaskOrm.GetProvingStatusByTaskID(context.Background(), dbChunk.Hash) + chunkProverTaskProvingStatus, err = proverTaskOrm.GetProvingStatusByTaskID(context.Background(), message.ProofTypeChunk, dbChunk.Hash) assert.NoError(t, err) - batchProverTaskProvingStatus, err = proverTaskOrm.GetProvingStatusByTaskID(context.Background(), batch.Hash) + batchProverTaskProvingStatus, err = proverTaskOrm.GetProvingStatusByTaskID(context.Background(), message.ProofTypeBatch, batch.Hash) assert.NoError(t, err) if chunkProverTaskProvingStatus == types.ProverProofInvalid && batchProverTaskProvingStatus == types.ProverProofInvalid { return