Skip to content

Commit

Permalink
partially-processed-blocks (#754)
Browse files Browse the repository at this point in the history
* partially-processed-blocks

* remove useless delete
  • Loading branch information
kstoykov authored Jul 10, 2024
1 parent fdcbea6 commit 05af01e
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 19 deletions.
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

0 comments on commit 05af01e

Please sign in to comment.