Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

partially-processed-blocks #754

Merged
merged 2 commits into from
Jul 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions zk/hermez_db/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ const SMT_DEPTHS = "smt_depths" // block
const L1_INFO_LEAVES = "l1_info_leaves" // l1 info tree index -> l1 info tree leaf
const L1_INFO_ROOTS = "l1_info_roots" // root hash -> l1 info tree index
const INVALID_BATCHES = "invalid_batches" // batch number -> true
const BATCH_FULLY_PROCESSED = "batch_fully_processed" // batch number -> true
const BATCH_PARTIALLY_PROCESSED = "batch_partially_processed" // batch number -> true
const LOCAL_EXIT_ROOTS = "local_exit_roots" // l2 block number -> local exit root
const ROllUP_TYPES_FORKS = "rollup_types_forks" // rollup type id -> fork id
const FORK_HISTORY = "fork_history" // index -> fork id + last verified batch
Expand Down Expand Up @@ -104,7 +104,7 @@ func CreateHermezBuckets(tx kv.RwTx) error {
L1_INFO_LEAVES,
L1_INFO_ROOTS,
INVALID_BATCHES,
BATCH_FULLY_PROCESSED,
BATCH_PARTIALLY_PROCESSED,
LOCAL_EXIT_ROOTS,
ROllUP_TYPES_FORKS,
FORK_HISTORY,
Expand Down Expand Up @@ -1503,12 +1503,16 @@ func (db *HermezDbReader) GetInvalidBatch(batchNo uint64) (bool, error) {
return len(v) > 0, nil
}

func (db *HermezDb) WriteIsBatchFullyProcessed(batchNo uint64) error {
return db.tx.Put(BATCH_FULLY_PROCESSED, Uint64ToBytes(batchNo), []byte{1})
func (db *HermezDb) WriteIsBatchPartiallyProcessed(batchNo uint64) error {
return db.tx.Put(BATCH_PARTIALLY_PROCESSED, Uint64ToBytes(batchNo), []byte{1})
}

func (db *HermezDbReader) GetIsBatchFullyProcessed(batchNo uint64) (bool, error) {
v, err := db.tx.GetOne(BATCH_FULLY_PROCESSED, Uint64ToBytes(batchNo))
func (db *HermezDb) DeleteIsBatchPartiallyProcessed(batchNo uint64) error {
return db.tx.Delete(BATCH_PARTIALLY_PROCESSED, Uint64ToBytes(batchNo))
}

func (db *HermezDbReader) GetIsBatchPartiallyProcessed(batchNo uint64) (bool, error) {
v, err := db.tx.GetOne(BATCH_PARTIALLY_PROCESSED, Uint64ToBytes(batchNo))
if err != nil {
return false, err
}
Expand Down
23 changes: 12 additions & 11 deletions zk/stages/stage_sequence_execute.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ func SpawnSequencingStage(
return err
}

isLastBatchFinished, err := sdb.hermezDb.GetIsBatchFullyProcessed(lastBatch)
isLastBatchPariallyProcessed, err := sdb.hermezDb.GetIsBatchPartiallyProcessed(lastBatch)
if err != nil {
return err
}
Expand All @@ -73,7 +73,7 @@ func SpawnSequencingStage(
}

getHeader := func(hash common.Hash, number uint64) *types.Header { return rawdb.ReadHeader(sdb.tx, hash, number) }
hasExecutorForThisBatch := isLastBatchFinished && cfg.zk.HasExecutors()
hasExecutorForThisBatch := !isLastBatchPariallyProcessed && cfg.zk.HasExecutors()
datastreamServer := server.NewDataStreamServer(cfg.stream, cfg.chainConfig.ChainID.Uint64())

// injected batch
Expand All @@ -100,10 +100,6 @@ func SpawnSequencingStage(
return err
}

if err = sdb.hermezDb.WriteIsBatchFullyProcessed(injectedBatchBatchNumber); err != nil {
return err
}

if freshTx {
if err = tx.Commit(); err != nil {
return err
Expand Down Expand Up @@ -138,12 +134,12 @@ func SpawnSequencingStage(

thisBatch := lastBatch
// if last batch finished - start a new one
if isLastBatchFinished {
if !isLastBatchPariallyProcessed {
thisBatch++
}

var intermediateUsedCounters *vm.Counters
if !isLastBatchFinished {
if isLastBatchPariallyProcessed {
intermediateCountersMap, found, err := sdb.hermezDb.GetBatchCounters(lastBatch)
if err != nil {
return err
Expand Down Expand Up @@ -229,7 +225,7 @@ func SpawnSequencingStage(
if err = sdb.hermezDb.WriteBatchCounters(thisBatch, map[string]int{}); err != nil {
return err
}
if err = sdb.hermezDb.WriteIsBatchFullyProcessed(thisBatch); err != nil {
if err = sdb.hermezDb.DeleteIsBatchPartiallyProcessed(thisBatch); err != nil {
return err
}
if err = stages.SaveStageProgress(tx, stages.HighestSeenBatchNumber, thisBatch); err != nil {
Expand All @@ -247,7 +243,7 @@ func SpawnSequencingStage(
}
}

if isLastBatchFinished {
if !isLastBatchPariallyProcessed {
log.Info(fmt.Sprintf("[%s] Starting batch %d...", logPrefix, thisBatch))
} else {
log.Info(fmt.Sprintf("[%s] Continuing unfinished batch %d from block %d", logPrefix, thisBatch, executionAt))
Expand Down Expand Up @@ -558,6 +554,11 @@ func SpawnSequencingStage(
return err
}

err = sdb.hermezDb.WriteIsBatchPartiallyProcessed(thisBatch)
if err != nil {
return err
}

if err = datastreamServer.WriteBlockToStream(logPrefix, tx, sdb.hermezDb, thisBatch, lastBatch, thisBlockNumber); err != nil {
return err
}
Expand Down Expand Up @@ -592,7 +593,7 @@ func SpawnSequencingStage(
return err
}

if err = sdb.hermezDb.WriteIsBatchFullyProcessed(thisBatch); err != nil {
if err = sdb.hermezDb.DeleteIsBatchPartiallyProcessed(thisBatch); err != nil {
return err
}

Expand Down
4 changes: 2 additions & 2 deletions zk/stages/stage_sequencer_executor_verify.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ func SpawnSequencerExecutorVerifyStage(
return err
}

isBatchFinished, err := hermezDb.GetIsBatchFullyProcessed(latestBatch)
isBatchPartial, err := hermezDb.GetIsBatchPartiallyProcessed(latestBatch)
if err != nil {
return err
}
Expand All @@ -104,7 +104,7 @@ func SpawnSequencerExecutorVerifyStage(
// if batch was stopped intermediate and is not finished - we need to finish it first
// this shouldn't occur since exec stage is before that and should finish the batch
// but just in case something unexpected happens
if !isBatchFinished {
if isBatchPartial {
log.Error(fmt.Sprintf("[%s] batch %d is not fully processed in stage_execute", logPrefix, latestBatch))
canVerify = false
}
Expand Down
Loading