From 79f86c879e4834246ff6203f58c2e44ae72d3d96 Mon Sep 17 00:00:00 2001
From: Mengran Lan <lanmengran@qq.com>
Date: Thu, 18 Jul 2024 18:19:15 +0800
Subject: [PATCH] fix(coordinator): fix issue devnet's coordinator can not set
 genesis's curieBlock to 0

---
 .../logic/provertask/batch_prover_task.go     | 11 ++++----
 .../logic/provertask/chunk_prover_task.go     | 25 +++++++++++++------
 2 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/coordinator/internal/logic/provertask/batch_prover_task.go b/coordinator/internal/logic/provertask/batch_prover_task.go
index 79cc4f8aea..c43ce721c6 100644
--- a/coordinator/internal/logic/provertask/batch_prover_task.go
+++ b/coordinator/internal/logic/provertask/batch_prover_task.go
@@ -3,6 +3,7 @@ package provertask
 import (
 	"context"
 	"encoding/json"
+	"errors"
 	"fmt"
 	"math"
 	"time"
@@ -190,7 +191,7 @@ func (bp *BatchProverTask) doAssignTaskWithinChunkRange(ctx *gin.Context, taskCt
 func (bp *BatchProverTask) getChunkRangeByName(ctx *gin.Context, hardForkName string) (*chunkIndexRange, error) {
 	hardForkNumber, err := bp.getHardForkNumberByName(hardForkName)
 	if err != nil {
-		log.Error("batch assign failure because of the hard fork name don't exist", "fork name", hardForkName)
+		// log.Error("batch assign failure because of the hard fork name don't exist", "fork name", hardForkName)
 		return nil, err
 	}
 
@@ -246,10 +247,7 @@ func (bp *BatchProverTask) assignWithTwoCircuits(ctx *gin.Context, taskCtx *prov
 	for i := 0; i < 2; i++ {
 		hardForkNames[i] = bp.reverseVkMap[getTaskParameter.VKs[i]]
 		chunkRanges[i], err = bp.getChunkRangeByName(ctx, hardForkNames[i])
-		if err != nil {
-			return nil, err
-		}
-		if chunkRanges[i] != nil {
+		if err == nil && chunkRanges[i] != nil {
 			if chunkRange == nil {
 				chunkRange = chunkRanges[i]
 			} else {
@@ -258,7 +256,8 @@ func (bp *BatchProverTask) assignWithTwoCircuits(ctx *gin.Context, taskCtx *prov
 		}
 	}
 	if chunkRange == nil {
-		return nil, nil
+		log.Error("chunkRange empty")
+		return nil, errors.New("chunkRange empty")
 	}
 	var hardForkName string
 	getHardForkName := func(batch *orm.Batch) (string, error) {
diff --git a/coordinator/internal/logic/provertask/chunk_prover_task.go b/coordinator/internal/logic/provertask/chunk_prover_task.go
index c15a047a9d..02937d9bf8 100644
--- a/coordinator/internal/logic/provertask/chunk_prover_task.go
+++ b/coordinator/internal/logic/provertask/chunk_prover_task.go
@@ -3,6 +3,7 @@ package provertask
 import (
 	"context"
 	"encoding/json"
+	"errors"
 	"fmt"
 	"time"
 
@@ -181,21 +182,31 @@ func (cp *ChunkProverTask) assignWithTwoCircuits(ctx *gin.Context, taskCtx *prov
 		blockRanges   [2]*blockRange
 		err           error
 	)
+	var blockRange *blockRange
 	for i := 0; i < 2; i++ {
 		hardForkNames[i] = cp.reverseVkMap[getTaskParameter.VKs[i]]
 		blockRanges[i], err = cp.getBlockRangeByName(hardForkNames[i])
-		if err != nil {
-			return nil, err
+		if err == nil && blockRanges[i] != nil {
+			if blockRange == nil {
+				blockRange = blockRanges[i]
+			} else {
+				var err2 error
+				blockRange, err2 = blockRange.merge(*blockRanges[i])
+				if err2 != nil {
+					return nil, err2
+				}
+			}
 		}
 	}
-	blockRange, err := blockRanges[0].merge(*blockRanges[1])
-	if err != nil {
-		return nil, err
+	if blockRange == nil {
+		log.Error("blockRange empty")
+		return nil, errors.New("blockRange empty")
 	}
+
 	var hardForkName string
 	getHardForkName := func(chunk *orm.Chunk) (string, error) {
 		for i := 0; i < 2; i++ {
-			if blockRanges[i].contains(chunk.StartBlockNumber, chunk.EndBlockNumber) {
+			if blockRanges[i] != nil && blockRanges[i].contains(chunk.StartBlockNumber, chunk.EndBlockNumber) {
 				hardForkName = hardForkNames[i]
 				break
 			}
@@ -235,7 +246,7 @@ func (r *blockRange) contains(start, end uint64) bool {
 func (cp *ChunkProverTask) getBlockRangeByName(hardForkName string) (*blockRange, error) {
 	hardForkNumber, err := cp.getHardForkNumberByName(hardForkName)
 	if err != nil {
-		log.Error("chunk assign failure because of the hard fork name don't exist", "fork name", hardForkName)
+		// log.Error("chunk assign failure because of the hard fork name don't exist", "fork name", hardForkName)
 		return nil, err
 	}