feat(prover): make l2gethClient optional for batch_prover (#724)

Co-authored-by: colinlyguo <colinlyguo@scroll.io>
Co-authored-by: colin <102356659+colinlyguo@users.noreply.github.com>
Co-authored-by: Péter Garamvölgyi <peter@scroll.io>
This commit is contained in:
HAOYUatHZ
2023-08-06 10:26:27 +08:00
committed by GitHub
parent fb1c800532
commit 3b80978b7d
6 changed files with 33 additions and 22 deletions

View File

@@ -5,7 +5,7 @@ import (
"runtime/debug"
)
var tag = "v4.1.5"
var tag = "v4.1.6"
var commit = func() string {
if info, ok := debug.ReadBuildInfo(); ok {

View File

@@ -343,8 +343,11 @@ func (o *Chunk) UpdateBatchHashInRange(ctx context.Context, startIndex uint64, e
// UpdateUnassignedChunkReturning update the unassigned batch which end_block_number <= height and return the update record
func (o *Chunk) UpdateUnassignedChunkReturning(ctx context.Context, height, limit int) ([]*Chunk, error) {
if height <= 0 {
return nil, errors.New("Chunk.UpdateUnassignedBatchReturning error: height must be larger than zero")
}
if limit < 0 {
return nil, errors.New("limit must not be smaller than zero")
return nil, errors.New("Chunk.UpdateUnassignedBatchReturning error: limit must not be smaller than zero")
}
if limit == 0 {
return nil, nil

View File

@@ -2,7 +2,7 @@ package types
// GetTaskParameter for ProverTasks request parameter
type GetTaskParameter struct {
ProverHeight int `form:"prover_height" json:"prover_height" binding:"required"`
ProverHeight int `form:"prover_height" json:"prover_height"`
TaskType int `form:"task_type" json:"task_type"`
}

View File

@@ -36,8 +36,8 @@ type LoginResponse struct {
// GetTaskRequest defines the request structure for GetTask API
type GetTaskRequest struct {
ProverHeight uint64 `json:"prover_height"`
TaskType message.ProofType `json:"task_type"`
ProverHeight uint64 `json:"prover_height,omitempty"`
}
// GetTaskResponse defines the response structure for GetTask API

View File

@@ -19,7 +19,7 @@ type Config struct {
Core *ProverCoreConfig `json:"core"`
DBPath string `json:"db_path"`
Coordinator *CoordinatorConfig `json:"coordinator"`
L2Geth *L2GethConfig `json:"l2geth"`
L2Geth *L2GethConfig `json:"l2geth,omitempty"` // only for chunk_prover
}
// ProverCoreConfig load zk prover config.

View File

@@ -36,8 +36,8 @@ type Prover struct {
ctx context.Context
cfg *config.Config
coordinatorClient *client.CoordinatorClient
l2GethClient *ethclient.Client
stack *store.Stack
l2GethClient *ethclient.Client // only applicable for a chunk_prover
proverCore *core.ProverCore
isClosed int64
@@ -60,10 +60,16 @@ func NewProver(ctx context.Context, cfg *config.Config) (*Prover, error) {
return nil, err
}
// Collect geth node.
l2GethClient, err := ethclient.DialContext(ctx, cfg.L2Geth.Endpoint)
if err != nil {
return nil, err
var l2GethClient *ethclient.Client
if cfg.Core.ProofType == message.ProofTypeChunk {
if cfg.L2Geth == nil || cfg.L2Geth.Endpoint == "" {
return nil, errors.New("Missing l2geth config for chunk prover")
}
// Connect l2geth node. Only applicable for a chunk_prover.
l2GethClient, err = ethclient.DialContext(ctx, cfg.L2Geth.Endpoint)
if err != nil {
return nil, err
}
}
// Create prover_core instance
@@ -175,20 +181,22 @@ func (r *Prover) proveAndSubmit() error {
// fetchTaskFromCoordinator fetches a new task from the server
func (r *Prover) fetchTaskFromCoordinator() (*store.ProvingTask, error) {
// get the latest confirmed block number
latestBlockNumber, err := putils.GetLatestConfirmedBlockNumber(r.ctx, r.l2GethClient, r.cfg.L2Geth.Confirmations)
if err != nil {
return nil, fmt.Errorf("failed to fetch latest confirmed block number: %v", err)
}
if latestBlockNumber == 0 {
return nil, fmt.Errorf("omit to prove task of the genesis block, latestBlockNumber: %v", latestBlockNumber)
}
// prepare the request
req := &client.GetTaskRequest{
ProverHeight: latestBlockNumber,
TaskType: r.Type(),
TaskType: r.Type(),
}
if req.TaskType == message.ProofTypeChunk {
// get the latest confirmed block number
latestBlockNumber, err := putils.GetLatestConfirmedBlockNumber(r.ctx, r.l2GethClient, r.cfg.L2Geth.Confirmations)
if err != nil {
return nil, fmt.Errorf("failed to fetch latest confirmed block number: %v", err)
}
if latestBlockNumber == 0 {
return nil, fmt.Errorf("omit to prove task of the genesis block, latestBlockNumber: %v", latestBlockNumber)
}
req.ProverHeight = latestBlockNumber
}
// send the request