From 7ccd1e9539a4ec7bc7790be41bdb48294aa70136 Mon Sep 17 00:00:00 2001 From: Oleg Babin Date: Thu, 30 Jan 2025 00:16:47 +0400 Subject: [PATCH] wip --- nil/internal/collate/scheduler.go | 39 ----------------------- nil/internal/collate/syncer.go | 19 +++++++++-- nil/internal/execution/block_generator.go | 13 ++++---- nil/services/nilservice/service.go | 14 ++++---- 4 files changed, 31 insertions(+), 54 deletions(-) diff --git a/nil/internal/collate/scheduler.go b/nil/internal/collate/scheduler.go index 3cc246de..e81cd960 100644 --- a/nil/internal/collate/scheduler.go +++ b/nil/internal/collate/scheduler.go @@ -2,7 +2,6 @@ package collate import ( "context" - "errors" "fmt" "time" @@ -41,7 +40,6 @@ type Params struct { ZeroState string ZeroStateConfig *execution.ZeroStateConfig - MainKeysOutPath string Topology ShardTopology } @@ -109,43 +107,6 @@ func (s *Scheduler) Run(ctx context.Context, syncer *Syncer, consensus Consensus } } -func (s *Scheduler) generateZeroState(ctx context.Context) error { - ctx, cancel := context.WithTimeout(ctx, s.params.Timeout) - defer cancel() - - roTx, err := s.txFabric.CreateRoTx(ctx) - if err != nil { - return err - } - defer roTx.Rollback() - - if _, err := db.ReadLastBlockHash(roTx, s.params.ShardId); !errors.Is(err, db.ErrKeyNotFound) { - // error or nil if last block found - return err - } - - if len(s.params.MainKeysOutPath) != 0 && s.params.ShardId == types.BaseShardId { - if err := execution.DumpMainKeys(s.params.MainKeysOutPath); err != nil { - return err - } - } - - s.logger.Info().Msg("Generating zero-state...") - - gen, err := execution.NewBlockGenerator(ctx, s.params.BlockGeneratorParams, s.txFabric) - if err != nil { - return err - } - defer gen.Rollback() - - block, err := gen.GenerateZeroState(s.params.ZeroState, s.params.ZeroStateConfig) - if err != nil { - return err - } - - return PublishBlock(ctx, s.networkManager, s.params.ShardId, &types.BlockWithExtractedData{Block: block}) -} - func (s *Scheduler) BuildProposal(ctx context.Context) (*execution.Proposal, error) { collator := newCollator(s.params, s.params.Topology, s.pool, s.logger) proposal, err := collator.GenerateProposal(ctx, s.txFabric) diff --git a/nil/internal/collate/syncer.go b/nil/internal/collate/syncer.go index e16ad6a8..0a61345f 100644 --- a/nil/internal/collate/syncer.go +++ b/nil/internal/collate/syncer.go @@ -363,20 +363,35 @@ func (s *Syncer) saveDirectly(ctx context.Context, blocks []*types.BlockWithExtr } func (s *Syncer) generateZerostate(ctx context.Context) error { + ctx, cancel := context.WithTimeout(ctx, s.config.Timeout) + defer cancel() + if empty, err := s.shardIsEmpty(ctx); err != nil { return err } else if !empty { return nil } + if len(s.config.BlockGeneratorParams.MainKeysOutPath) != 0 && s.config.ShardId == types.BaseShardId { + if err := execution.DumpMainKeys(s.config.BlockGeneratorParams.MainKeysOutPath); err != nil { + return err + } + } + + s.logger.Info().Msg("Generating zero-state...") + gen, err := execution.NewBlockGenerator(ctx, s.config.BlockGeneratorParams, s.db) if err != nil { return err } defer gen.Rollback() - _, err = gen.GenerateZeroState(s.config.ZeroState, s.config.ZeroStateConfig) - return err + block, err := gen.GenerateZeroState(s.config.ZeroState, s.config.ZeroStateConfig) + if err != nil { + return err + } + + return PublishBlock(ctx, s.networkManager, s.config.ShardId, &types.BlockWithExtractedData{Block: block}) } func validateRepliedBlock( diff --git a/nil/internal/execution/block_generator.go b/nil/internal/execution/block_generator.go index d89ceb06..7b6492be 100644 --- a/nil/internal/execution/block_generator.go +++ b/nil/internal/execution/block_generator.go @@ -16,12 +16,13 @@ import ( ) type BlockGeneratorParams struct { - ShardId types.ShardId - NShards uint32 - TraceEVM bool - Timer common.Timer - GasBasePrice types.Value - GasPriceScale float64 + ShardId types.ShardId + NShards uint32 + TraceEVM bool + Timer common.Timer + GasBasePrice types.Value + GasPriceScale float64 + MainKeysOutPath string } type Proposal struct { diff --git a/nil/services/nilservice/service.go b/nil/services/nilservice/service.go index cc4be8c7..69f26d4b 100644 --- a/nil/services/nilservice/service.go +++ b/nil/services/nilservice/service.go @@ -557,18 +557,18 @@ func createShards( func createActiveCollator(shard types.ShardId, cfg *Config, collatorTickPeriod time.Duration, database db.DB, networkManager *network.Manager, txnPool txnpool.Pool) (*collate.Scheduler, error) { collatorCfg := collate.Params{ BlockGeneratorParams: execution.BlockGeneratorParams{ - ShardId: shard, - NShards: cfg.NShards, - TraceEVM: cfg.TraceEVM, - Timer: common.NewTimer(), - GasBasePrice: types.NewValueFromUint64(cfg.GasBasePrice), - GasPriceScale: cfg.GasPriceScale, + ShardId: shard, + NShards: cfg.NShards, + TraceEVM: cfg.TraceEVM, + Timer: common.NewTimer(), + GasBasePrice: types.NewValueFromUint64(cfg.GasBasePrice), + GasPriceScale: cfg.GasPriceScale, + MainKeysOutPath: cfg.MainKeysOutPath, }, CollatorTickPeriod: collatorTickPeriod, Timeout: collatorTickPeriod, ZeroState: execution.DefaultZeroStateConfig, ZeroStateConfig: cfg.ZeroState, - MainKeysOutPath: cfg.MainKeysOutPath, Topology: collate.GetShardTopologyById(cfg.Topology), } if len(cfg.ZeroStateYaml) != 0 {