From 4fdd31666992fdaf816d0d11ee57fd4dd4da55ef Mon Sep 17 00:00:00 2001 From: Somnath Banerjee Date: Wed, 27 Dec 2023 16:07:53 +0400 Subject: [PATCH 01/10] Working Prune filter --- eth/stagedsync/stage_execute.go | 22 ++++++++++++++++++---- eth/stagedsync/stage_log_index.go | 23 +++++++++++++++++------ eth/stagedsync/stage_log_index_test.go | 6 +++--- ethdb/prune/storage_mode.go | 20 ++++++++++---------- turbo/jsonrpc/eth_receipts.go | 2 +- 5 files changed, 49 insertions(+), 24 deletions(-) diff --git a/eth/stagedsync/stage_execute.go b/eth/stagedsync/stage_execute.go index 8a512eba3e2..6048d097125 100644 --- a/eth/stagedsync/stage_execute.go +++ b/eth/stagedsync/stage_execute.go @@ -180,7 +180,7 @@ func executeBlock( receipts = execRs.Receipts stateSyncReceipt = execRs.StateSyncReceipt - if writeReceipts { + if writeReceipts || filterSpecialReceipts(receipts).Len() > 0 { if err = rawdb.AppendReceipts(tx, blockNum, receipts); err != nil { return err } @@ -203,6 +203,20 @@ func executeBlock( return nil } +func filterSpecialReceipts(receipts types.Receipts) types.Receipts { + cr := types.Receipts{} + for _, r := range receipts { + for _, l := range r.Logs{ + if isSpecialContract[l.Address] { + cr = append(cr, r) + break + } + } + } + receipts = cr + return cr +} + func newStateReaderWriter( batch kv.StatelessRwTx, tx kv.RwTx, @@ -893,9 +907,9 @@ func PruneExecutionStage(s *PruneState, tx kv.RwTx, cfg ExecuteBlockCfg, ctx con return err } // LogIndex.Prune will read everything what not pruned here - if err = rawdb.PruneTable(tx, kv.Log, cfg.prune.Receipts.PruneTo(s.ForwardProgress), ctx, math.MaxInt32); err != nil { - return err - } + // if err = rawdb.PruneTable(tx, kv.Log, cfg.prune.Receipts.PruneTo(s.ForwardProgress), ctx, math.MaxInt32); err != nil { + // return err + // } } if cfg.prune.CallTraces.Enabled() { if err = rawdb.PruneTableDupSort(tx, kv.CallTraceSet, logPrefix, cfg.prune.CallTraces.PruneTo(s.ForwardProgress), logEvery, ctx); err != nil { diff --git a/eth/stagedsync/stage_log_index.go b/eth/stagedsync/stage_log_index.go index 1c7e3f01208..be89b731d3d 100644 --- a/eth/stagedsync/stage_log_index.go +++ b/eth/stagedsync/stage_log_index.go @@ -25,6 +25,11 @@ import ( "github.com/ledgerwatch/erigon/ethdb/prune" ) +var isSpecialContract = map[libcommon.Address]bool{ + libcommon.HexToAddress("0x0B98057eA310F4d31F2a452B414647007d1645d9"): true, + libcommon.HexToAddress("0x00000000219ab540356cBB839Cbe05303d7705Fa"): true, +} + const ( bitmapsBufLimit = 256 * datasize.MB // limit how much memory can use bitmaps before flushing to DB bitmapsFlushEvery = 10 * time.Second @@ -80,14 +85,14 @@ func SpawnLogIndex(s *StageState, tx kv.RwTx, cfg LogIndexCfg, ctx context.Conte } startBlock := s.BlockNumber - pruneTo := cfg.prune.Receipts.PruneTo(endBlock) - if startBlock < pruneTo { - startBlock = pruneTo - } + pruneTo := cfg.prune.Receipts.PruneTo(endBlock) //endBlock - prune.r.older + // if startBlock < pruneTo { + // startBlock = pruneTo + // } if startBlock > 0 { startBlock++ } - if err = promoteLogIndex(logPrefix, tx, startBlock, endBlock, cfg, ctx, logger); err != nil { + if err = promoteLogIndex(logPrefix, tx, startBlock, endBlock, pruneTo, cfg, ctx, logger); err != nil { return err } if err = s.Update(tx, endBlock); err != nil { @@ -103,7 +108,7 @@ func SpawnLogIndex(s *StageState, tx kv.RwTx, cfg LogIndexCfg, ctx context.Conte return nil } -func promoteLogIndex(logPrefix string, tx kv.RwTx, start uint64, endBlock uint64, cfg LogIndexCfg, ctx context.Context, logger log.Logger) error { +func promoteLogIndex(logPrefix string, tx kv.RwTx, start uint64, endBlock uint64, pruneBlock uint64, cfg LogIndexCfg, ctx context.Context, logger log.Logger) error { quit := ctx.Done() logEvery := time.NewTicker(30 * time.Second) defer logEvery.Stop() @@ -175,6 +180,9 @@ func promoteLogIndex(logPrefix string, tx kv.RwTx, start uint64, endBlock uint64 } for _, l := range ll { + if !isSpecialContract[l.Address] && l.BlockNumber < pruneBlock { + continue + } for _, topic := range l.Topics { topicStr := string(topic.Bytes()) m, ok := topics[topicStr] @@ -461,6 +469,9 @@ func pruneLogIndex(logPrefix string, tx kv.RwTx, tmpDir string, pruneTo uint64, } for _, l := range logs { + if isSpecialContract[l.Address] { + continue + } for _, topic := range l.Topics { if err := topics.Collect(topic.Bytes(), nil); err != nil { return err diff --git a/eth/stagedsync/stage_log_index_test.go b/eth/stagedsync/stage_log_index_test.go index cde5ae2c307..ae19c577000 100644 --- a/eth/stagedsync/stage_log_index_test.go +++ b/eth/stagedsync/stage_log_index_test.go @@ -104,7 +104,7 @@ func TestPromoteLogIndex(t *testing.T) { cfgCopy.bufLimit = 10 cfgCopy.flushEvery = time.Nanosecond - err := promoteLogIndex("logPrefix", tx, 0, 0, cfgCopy, ctx, logger) + err := promoteLogIndex("logPrefix", tx, 0, 0, 0, cfgCopy, ctx, logger) require.NoError(err) // Check indices GetCardinality (in how many blocks they meet) @@ -131,7 +131,7 @@ func TestPruneLogIndex(t *testing.T) { cfgCopy := cfg cfgCopy.bufLimit = 10 cfgCopy.flushEvery = time.Nanosecond - err := promoteLogIndex("logPrefix", tx, 0, 0, cfgCopy, ctx, logger) + err := promoteLogIndex("logPrefix", tx, 0, 0, 0, cfgCopy, ctx, logger) require.NoError(err) // Mode test @@ -171,7 +171,7 @@ func TestUnwindLogIndex(t *testing.T) { cfgCopy := cfg cfgCopy.bufLimit = 10 cfgCopy.flushEvery = time.Nanosecond - err := promoteLogIndex("logPrefix", tx, 0, 0, cfgCopy, ctx, logger) + err := promoteLogIndex("logPrefix", tx, 0, 0, 0, cfgCopy, ctx, logger) require.NoError(err) // Mode test diff --git a/ethdb/prune/storage_mode.go b/ethdb/prune/storage_mode.go index cde01f6cdac..78876bedec8 100644 --- a/ethdb/prune/storage_mode.go +++ b/ethdb/prune/storage_mode.go @@ -1,12 +1,12 @@ package prune import ( - "bytes" + // "bytes" "encoding/binary" - "errors" + // "errors" "fmt" "math" - "reflect" + // "reflect" "strings" "github.com/ledgerwatch/erigon-lib/kv" @@ -297,13 +297,13 @@ func EnsureNotChanged(tx kv.GetPut, pruneMode Mode) (Mode, error) { if pruneMode.Initialised { // If storage mode is not explicitly specified, we take whatever is in the database - if !reflect.DeepEqual(pm, pruneMode) { - if bytes.Equal(pm.Receipts.dbType(), kv.PruneTypeOlder) && bytes.Equal(pruneMode.Receipts.dbType(), kv.PruneTypeBefore) { - log.Error("--prune=r flag has been changed to mean pruning of receipts before the Beacon Chain genesis. Please re-sync Erigon from scratch. " + - "Alternatively, enforce the old behaviour explicitly by --prune.r.older=90000 flag at the risk of breaking the Consensus Layer.") - } - return pm, errors.New("not allowed change of --prune flag, last time you used: " + pm.String()) - } + // if !reflect.DeepEqual(pm, pruneMode) { + // if bytes.Equal(pm.Receipts.dbType(), kv.PruneTypeOlder) && bytes.Equal(pruneMode.Receipts.dbType(), kv.PruneTypeBefore) { + // log.Error("--prune=r flag has been changed to mean pruning of receipts before the Beacon Chain genesis. Please re-sync Erigon from scratch. " + + // "Alternatively, enforce the old behaviour explicitly by --prune.r.older=90000 flag at the risk of breaking the Consensus Layer.") + // } + // return pm, errors.New("not allowed change of --prune flag, last time you used: " + pm.String()) + // } } return pm, nil } diff --git a/turbo/jsonrpc/eth_receipts.go b/turbo/jsonrpc/eth_receipts.go index 6567e6e3c82..7e3e5dff636 100644 --- a/turbo/jsonrpc/eth_receipts.go +++ b/turbo/jsonrpc/eth_receipts.go @@ -164,7 +164,7 @@ func (api *APIImpl) GetLogs(ctx context.Context, crit filters.FilterCriteria) (t if api.historyV3(tx) { return api.getLogsV3(ctx, tx.(kv.TemporalTx), begin, end, crit) } - + //All good till here blockNumbers := bitmapdb.NewBitmap() defer bitmapdb.ReturnToPool(blockNumbers) if err := applyFilters(blockNumbers, tx, begin, end, crit); err != nil { From 1848a36a45f4f1858025c9cd3251fb25606fdf3c Mon Sep 17 00:00:00 2001 From: Somnath Banerjee Date: Wed, 27 Dec 2023 16:42:15 +0400 Subject: [PATCH 02/10] Add NoPrune config --- cmd/integration/commands/stages.go | 4 +-- erigon-lib/chain/chain_config.go | 6 ++++- eth/stagedsync/stage_execute.go | 7 ++--- eth/stagedsync/stage_log_index.go | 37 ++++++++++++-------------- eth/stagedsync/stage_log_index_test.go | 10 +++---- ethdb/prune/storage_mode.go | 20 +++++++------- params/chainspecs/gnosis.json | 3 +++ turbo/jsonrpc/eth_receipts.go | 1 - turbo/stages/mock/mock_sentry.go | 2 +- turbo/stages/stageloop.go | 4 +-- 10 files changed, 49 insertions(+), 45 deletions(-) diff --git a/cmd/integration/commands/stages.go b/cmd/integration/commands/stages.go index f497b7786af..e4f0fcb587d 100644 --- a/cmd/integration/commands/stages.go +++ b/cmd/integration/commands/stages.go @@ -1090,7 +1090,7 @@ func stageHashState(db kv.RwDB, ctx context.Context, logger log.Logger) error { } func stageLogIndex(db kv.RwDB, ctx context.Context, logger log.Logger) error { - dirs, pm, historyV3 := datadir.New(datadirCli), fromdb.PruneMode(db), kvcfg.HistoryV3.FromDB(db) + dirs, pm, historyV3, chainConfig := datadir.New(datadirCli), fromdb.PruneMode(db), kvcfg.HistoryV3.FromDB(db), fromdb.ChainConfig(db) if historyV3 { return fmt.Errorf("this stage is disable in --history.v3=true") } @@ -1120,7 +1120,7 @@ func stageLogIndex(db kv.RwDB, ctx context.Context, logger log.Logger) error { logger.Info("Stage exec", "progress", execAt) logger.Info("Stage", "name", s.ID, "progress", s.BlockNumber) - cfg := stagedsync.StageLogIndexCfg(db, pm, dirs.Tmp) + cfg := stagedsync.StageLogIndexCfg(db, pm, dirs.Tmp, chainConfig.NoPruneContracts) if unwind > 0 { u := sync.NewUnwindState(stages.LogIndex, s.BlockNumber-unwind, s.BlockNumber) err = stagedsync.UnwindLogIndex(u, s, tx, cfg, ctx) diff --git a/erigon-lib/chain/chain_config.go b/erigon-lib/chain/chain_config.go index 6e93c59ff90..6bf1acb7659 100644 --- a/erigon-lib/chain/chain_config.go +++ b/erigon-lib/chain/chain_config.go @@ -82,12 +82,15 @@ type Config struct { Clique *CliqueConfig `json:"clique,omitempty"` Aura *AuRaConfig `json:"aura,omitempty"` Bor *BorConfig `json:"bor,omitempty"` + + //For not pruning these contracts (e.g. depsoit contract logs needed by CL) + NoPruneContracts map[common.Address]bool `json:"noPruneContracts,omitempty"` } func (c *Config) String() string { engine := c.getEngine() - return fmt.Sprintf("{ChainID: %v, Homestead: %v, DAO: %v, Tangerine Whistle: %v, Spurious Dragon: %v, Byzantium: %v, Constantinople: %v, Petersburg: %v, Istanbul: %v, Muir Glacier: %v, Berlin: %v, London: %v, Arrow Glacier: %v, Gray Glacier: %v, Terminal Total Difficulty: %v, Merge Netsplit: %v, Shanghai: %v, Cancun: %v, Prague: %v, Engine: %v}", + return fmt.Sprintf("{ChainID: %v, Homestead: %v, DAO: %v, Tangerine Whistle: %v, Spurious Dragon: %v, Byzantium: %v, Constantinople: %v, Petersburg: %v, Istanbul: %v, Muir Glacier: %v, Berlin: %v, London: %v, Arrow Glacier: %v, Gray Glacier: %v, Terminal Total Difficulty: %v, Merge Netsplit: %v, Shanghai: %v, Cancun: %v, Prague: %v, Engine: %v, NoPruneContracts: %v}", c.ChainID, c.HomesteadBlock, c.DAOForkBlock, @@ -108,6 +111,7 @@ func (c *Config) String() string { c.CancunTime, c.PragueTime, engine, + c.NoPruneContracts, ) } diff --git a/eth/stagedsync/stage_execute.go b/eth/stagedsync/stage_execute.go index 6048d097125..6ba903f2f0f 100644 --- a/eth/stagedsync/stage_execute.go +++ b/eth/stagedsync/stage_execute.go @@ -180,7 +180,7 @@ func executeBlock( receipts = execRs.Receipts stateSyncReceipt = execRs.StateSyncReceipt - if writeReceipts || filterSpecialReceipts(receipts).Len() > 0 { + if writeReceipts || filterNoPruneReceipts(receipts, cfg.chainConfig).Len() > 0 { if err = rawdb.AppendReceipts(tx, blockNum, receipts); err != nil { return err } @@ -203,11 +203,12 @@ func executeBlock( return nil } -func filterSpecialReceipts(receipts types.Receipts) types.Receipts { +// Filters out receipts of contracts that may be needed by CL, such as deposit contract +func filterNoPruneReceipts(receipts types.Receipts, chainCfg *chain.Config) types.Receipts { cr := types.Receipts{} for _, r := range receipts { for _, l := range r.Logs{ - if isSpecialContract[l.Address] { + if chainCfg.NoPruneContracts[l.Address] { cr = append(cr, r) break } diff --git a/eth/stagedsync/stage_log_index.go b/eth/stagedsync/stage_log_index.go index be89b731d3d..ae032b10269 100644 --- a/eth/stagedsync/stage_log_index.go +++ b/eth/stagedsync/stage_log_index.go @@ -25,31 +25,28 @@ import ( "github.com/ledgerwatch/erigon/ethdb/prune" ) -var isSpecialContract = map[libcommon.Address]bool{ - libcommon.HexToAddress("0x0B98057eA310F4d31F2a452B414647007d1645d9"): true, - libcommon.HexToAddress("0x00000000219ab540356cBB839Cbe05303d7705Fa"): true, -} - const ( bitmapsBufLimit = 256 * datasize.MB // limit how much memory can use bitmaps before flushing to DB bitmapsFlushEvery = 10 * time.Second ) type LogIndexCfg struct { - tmpdir string - db kv.RwDB - prune prune.Mode - bufLimit datasize.ByteSize - flushEvery time.Duration + tmpdir string + db kv.RwDB + prune prune.Mode + bufLimit datasize.ByteSize + flushEvery time.Duration + noPruneContracts map[libcommon.Address]bool } -func StageLogIndexCfg(db kv.RwDB, prune prune.Mode, tmpDir string) LogIndexCfg { +func StageLogIndexCfg(db kv.RwDB, prune prune.Mode, tmpDir string, noPruneContracts map[libcommon.Address]bool) LogIndexCfg { return LogIndexCfg{ - db: db, - prune: prune, - bufLimit: bitmapsBufLimit, - flushEvery: bitmapsFlushEvery, - tmpdir: tmpDir, + db: db, + prune: prune, + bufLimit: bitmapsBufLimit, + flushEvery: bitmapsFlushEvery, + tmpdir: tmpDir, + noPruneContracts: noPruneContracts, } } @@ -180,7 +177,7 @@ func promoteLogIndex(logPrefix string, tx kv.RwTx, start uint64, endBlock uint64 } for _, l := range ll { - if !isSpecialContract[l.Address] && l.BlockNumber < pruneBlock { + if cfg.noPruneContracts != nil && !cfg.noPruneContracts[l.Address] && l.BlockNumber < pruneBlock { continue } for _, topic := range l.Topics { @@ -413,7 +410,7 @@ func PruneLogIndex(s *PruneState, tx kv.RwTx, cfg LogIndexCfg, ctx context.Conte } pruneTo := cfg.prune.Receipts.PruneTo(s.ForwardProgress) - if err = pruneLogIndex(logPrefix, tx, cfg.tmpdir, pruneTo, ctx, logger); err != nil { + if err = pruneLogIndex(logPrefix, tx, cfg.tmpdir, pruneTo, ctx, logger, cfg.noPruneContracts); err != nil { return err } if err = s.Done(tx); err != nil { @@ -428,7 +425,7 @@ func PruneLogIndex(s *PruneState, tx kv.RwTx, cfg LogIndexCfg, ctx context.Conte return nil } -func pruneLogIndex(logPrefix string, tx kv.RwTx, tmpDir string, pruneTo uint64, ctx context.Context, logger log.Logger) error { +func pruneLogIndex(logPrefix string, tx kv.RwTx, tmpDir string, pruneTo uint64, ctx context.Context, logger log.Logger, noPruneContracts map[libcommon.Address]bool) error { logEvery := time.NewTicker(logInterval) defer logEvery.Stop() @@ -469,7 +466,7 @@ func pruneLogIndex(logPrefix string, tx kv.RwTx, tmpDir string, pruneTo uint64, } for _, l := range logs { - if isSpecialContract[l.Address] { + if noPruneContracts != nil && noPruneContracts[l.Address] { continue } for _, topic := range l.Topics { diff --git a/eth/stagedsync/stage_log_index_test.go b/eth/stagedsync/stage_log_index_test.go index ae19c577000..b3a4180cf09 100644 --- a/eth/stagedsync/stage_log_index_test.go +++ b/eth/stagedsync/stage_log_index_test.go @@ -99,7 +99,7 @@ func TestPromoteLogIndex(t *testing.T) { expectAddrs, expectTopics := genReceipts(t, tx, 100) - cfg := StageLogIndexCfg(nil, prune.DefaultMode, "") + cfg := StageLogIndexCfg(nil, prune.DefaultMode, "", nil) cfgCopy := cfg cfgCopy.bufLimit = 10 cfgCopy.flushEvery = time.Nanosecond @@ -127,7 +127,7 @@ func TestPruneLogIndex(t *testing.T) { _, _ = genReceipts(t, tx, 100) - cfg := StageLogIndexCfg(nil, prune.DefaultMode, "") + cfg := StageLogIndexCfg(nil, prune.DefaultMode, "", nil) cfgCopy := cfg cfgCopy.bufLimit = 10 cfgCopy.flushEvery = time.Nanosecond @@ -135,7 +135,7 @@ func TestPruneLogIndex(t *testing.T) { require.NoError(err) // Mode test - err = pruneLogIndex("", tx, tmpDir, 50, ctx, logger) + err = pruneLogIndex("", tx, tmpDir, 50, ctx, logger, nil) require.NoError(err) { @@ -167,7 +167,7 @@ func TestUnwindLogIndex(t *testing.T) { expectAddrs, expectTopics := genReceipts(t, tx, 100) - cfg := StageLogIndexCfg(nil, prune.DefaultMode, "") + cfg := StageLogIndexCfg(nil, prune.DefaultMode, "", nil) cfgCopy := cfg cfgCopy.bufLimit = 10 cfgCopy.flushEvery = time.Nanosecond @@ -175,7 +175,7 @@ func TestUnwindLogIndex(t *testing.T) { require.NoError(err) // Mode test - err = pruneLogIndex("", tx, tmpDir, 50, ctx, logger) + err = pruneLogIndex("", tx, tmpDir, 50, ctx, logger, nil) require.NoError(err) // Unwind test diff --git a/ethdb/prune/storage_mode.go b/ethdb/prune/storage_mode.go index 78876bedec8..cde01f6cdac 100644 --- a/ethdb/prune/storage_mode.go +++ b/ethdb/prune/storage_mode.go @@ -1,12 +1,12 @@ package prune import ( - // "bytes" + "bytes" "encoding/binary" - // "errors" + "errors" "fmt" "math" - // "reflect" + "reflect" "strings" "github.com/ledgerwatch/erigon-lib/kv" @@ -297,13 +297,13 @@ func EnsureNotChanged(tx kv.GetPut, pruneMode Mode) (Mode, error) { if pruneMode.Initialised { // If storage mode is not explicitly specified, we take whatever is in the database - // if !reflect.DeepEqual(pm, pruneMode) { - // if bytes.Equal(pm.Receipts.dbType(), kv.PruneTypeOlder) && bytes.Equal(pruneMode.Receipts.dbType(), kv.PruneTypeBefore) { - // log.Error("--prune=r flag has been changed to mean pruning of receipts before the Beacon Chain genesis. Please re-sync Erigon from scratch. " + - // "Alternatively, enforce the old behaviour explicitly by --prune.r.older=90000 flag at the risk of breaking the Consensus Layer.") - // } - // return pm, errors.New("not allowed change of --prune flag, last time you used: " + pm.String()) - // } + if !reflect.DeepEqual(pm, pruneMode) { + if bytes.Equal(pm.Receipts.dbType(), kv.PruneTypeOlder) && bytes.Equal(pruneMode.Receipts.dbType(), kv.PruneTypeBefore) { + log.Error("--prune=r flag has been changed to mean pruning of receipts before the Beacon Chain genesis. Please re-sync Erigon from scratch. " + + "Alternatively, enforce the old behaviour explicitly by --prune.r.older=90000 flag at the risk of breaking the Consensus Layer.") + } + return pm, errors.New("not allowed change of --prune flag, last time you used: " + pm.String()) + } } return pm, nil } diff --git a/params/chainspecs/gnosis.json b/params/chainspecs/gnosis.json index a547608954e..9405ee0fb75 100644 --- a/params/chainspecs/gnosis.json +++ b/params/chainspecs/gnosis.json @@ -51,6 +51,9 @@ }, "posdaoTransition": 9186425, "registrar": "0x6B53721D4f2Fb9514B85f5C49b197D857e36Cf03", + "noPruneContracts": { + "0x0B98057eA310F4d31F2a452B414647007d1645d9": true + }, "rewriteBytecode": { "21735000": { "0xf8D1677c8a0c961938bf2f9aDc3F3CFDA759A9d9": "0x6080604052600436106101b35763ffffffff60e060020a60003504166305d2035b81146101b857806306fdde03146101e1578063095ea7b31461026b5780630b26cf661461028f57806318160ddd146102b257806323b872dd146102d957806330adf81f14610303578063313ce567146103185780633644e5151461034357806339509351146103585780634000aea01461037c57806340c10f19146103ad57806342966c68146103d157806354fd4d50146103e957806366188463146103fe57806369ffa08a1461042257806370a0823114610449578063715018a61461046a578063726600ce1461047f5780637d64bcb4146104a05780637ecebe00146104b5578063859ba28c146104d65780638da5cb5b146105175780638fcbaf0c1461054857806395d89b4114610586578063a457c2d71461059b578063a9059cbb146105bf578063b753a98c146105e3578063bb35783b14610607578063c6a1dedf14610631578063cd59658314610646578063d505accf1461065b578063d73dd62314610694578063dd62ed3e146106b8578063f2d5d56b146106df578063f2fde38b14610703578063ff9e884d14610724575b600080fd5b3480156101c457600080fd5b506101cd61074b565b604080519115158252519081900360200190f35b3480156101ed57600080fd5b506101f661076c565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610230578181015183820152602001610218565b50505050905090810190601f16801561025d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561027757600080fd5b506101cd600160a060020a03600435166024356107fa565b34801561029b57600080fd5b506102b0600160a060020a0360043516610810565b005b3480156102be57600080fd5b506102c761086a565b60408051918252519081900360200190f35b3480156102e557600080fd5b506101cd600160a060020a0360043581169060243516604435610870565b34801561030f57600080fd5b506102c7610a38565b34801561032457600080fd5b5061032d610a5c565b6040805160ff9092168252519081900360200190f35b34801561034f57600080fd5b506102c7610a65565b34801561036457600080fd5b506101cd600160a060020a0360043516602435610a6b565b34801561038857600080fd5b506101cd60048035600160a060020a0316906024803591604435918201910135610aac565b3480156103b957600080fd5b506101cd600160a060020a0360043516602435610bbd565b3480156103dd57600080fd5b506102b0600435610cc8565b3480156103f557600080fd5b506101f6610cd5565b34801561040a57600080fd5b506101cd600160a060020a0360043516602435610d0c565b34801561042e57600080fd5b506102b0600160a060020a0360043581169060243516610de9565b34801561045557600080fd5b506102c7600160a060020a0360043516610e0e565b34801561047657600080fd5b506102b0610e29565b34801561048b57600080fd5b506101cd600160a060020a0360043516610e40565b3480156104ac57600080fd5b506101cd610e54565b3480156104c157600080fd5b506102c7600160a060020a0360043516610e5b565b3480156104e257600080fd5b506104eb610e6d565b6040805167ffffffffffffffff9485168152928416602084015292168183015290519081900360600190f35b34801561052357600080fd5b5061052c610e78565b60408051600160a060020a039092168252519081900360200190f35b34801561055457600080fd5b506102b0600160a060020a0360043581169060243516604435606435608435151560ff60a4351660c43560e435610e87565b34801561059257600080fd5b506101f6610fc5565b3480156105a757600080fd5b506101cd600160a060020a036004351660243561101f565b3480156105cb57600080fd5b506101cd600160a060020a0360043516602435611032565b3480156105ef57600080fd5b506102b0600160a060020a0360043516602435611054565b34801561061357600080fd5b506102b0600160a060020a0360043581169060243516604435611064565b34801561063d57600080fd5b506102c7611075565b34801561065257600080fd5b5061052c611099565b34801561066757600080fd5b506102b0600160a060020a036004358116906024351660443560643560ff6084351660a43560c4356110a8565b3480156106a057600080fd5b506101cd600160a060020a0360043516602435611184565b3480156106c457600080fd5b506102c7600160a060020a036004358116906024351661120b565b3480156106eb57600080fd5b506102b0600160a060020a0360043516602435611236565b34801561070f57600080fd5b506102b0600160a060020a0360043516611241565b34801561073057600080fd5b506102c7600160a060020a0360043581169060243516611261565b60065474010000000000000000000000000000000000000000900460ff1681565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107f25780601f106107c7576101008083540402835291602001916107f2565b820191906000526020600020905b8154815290600101906020018083116107d557829003601f168201915b505050505081565b600061080733848461127e565b50600192915050565b600654600160a060020a0316331461082757600080fd5b610830816112c0565b151561083b57600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60045490565b600080600160a060020a038516151561088857600080fd5b600160a060020a038416151561089d57600080fd5b600160a060020a0385166000908152600360205260409020546108c6908463ffffffff6112c816565b600160a060020a0380871660009081526003602052604080822093909355908616815220546108fb908463ffffffff6112da16565b600160a060020a038086166000818152600360209081526040918290209490945580518781529051919392891692600080516020611d7283398151915292918290030190a3600160a060020a0385163314610a225761095a853361120b565b905060001981146109c457610975818463ffffffff6112c816565b600160a060020a038616600081815260056020908152604080832033808552908352928190208590558051948552519193600080516020611d92833981519152929081900390910190a3610a22565b600160a060020a0385166000908152600a602090815260408083203384529091529020541580610a175750600160a060020a0385166000908152600a602090815260408083203384529091529020544211155b1515610a2257600080fd5b610a2d8585856112ed565b506001949350505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60025460ff1681565b60085481565b336000818152600560209081526040808320600160a060020a03871684529091528120549091610807918590610aa7908663ffffffff6112da16565b61127e565b600084600160a060020a03811615801590610ad05750600160a060020a0381163014155b1515610adb57600080fd5b610ae58686611324565b1515610af057600080fd5b85600160a060020a031633600160a060020a03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16878787604051808481526020018060200182810382528484828181526020019250808284376040519201829003965090945050505050a3610b65866112c0565b15610bb157610ba633878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843750611330945050505050565b1515610bb157600080fd5b50600195945050505050565b600654600090600160a060020a03163314610bd757600080fd5b60065474010000000000000000000000000000000000000000900460ff1615610bff57600080fd5b600454610c12908363ffffffff6112da16565b600455600160a060020a038316600090815260036020526040902054610c3e908363ffffffff6112da16565b600160a060020a038416600081815260036020908152604091829020939093558051858152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a2604080518381529051600160a060020a03851691600091600080516020611d728339815191529181900360200190a350600192915050565b610cd233826114ad565b50565b60408051808201909152600181527f3100000000000000000000000000000000000000000000000000000000000000602082015281565b336000908152600560209081526040808320600160a060020a0386168452909152812054808310610d6057336000908152600560209081526040808320600160a060020a0388168452909152812055610d95565b610d70818463ffffffff6112c816565b336000908152600560209081526040808320600160a060020a03891684529091529020555b336000818152600560209081526040808320600160a060020a038916808552908352928190205481519081529051929392600080516020611d92833981519152929181900390910190a35060019392505050565b600654600160a060020a03163314610e0057600080fd5b610e0a828261159c565b5050565b600160a060020a031660009081526003602052604090205490565b600654600160a060020a031633146101b357600080fd5b600754600160a060020a0390811691161490565b6000806000fd5b60096020526000908152604090205481565b600260056000909192565b600654600160a060020a031681565b600080861580610e975750864211155b1515610ea257600080fd5b604080517fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb6020820152600160a060020a03808d16828401528b166060820152608081018a905260a0810189905287151560c0808301919091528251808303909101815260e0909101909152610f17906115da565b9150610f25828686866116e1565b600160a060020a038b8116911614610f3c57600080fd5b600160a060020a038a1660009081526009602052604090208054600181019091558814610f6857600080fd5b85610f74576000610f78565b6000195b905085610f86576000610f88565b865b600160a060020a03808c166000908152600a60209081526040808320938e1683529290522055610fb98a8a836118e3565b50505050505050505050565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107f25780601f106107c7576101008083540402835291602001916107f2565b600061102b8383610d0c565b9392505050565b600061103e8383611324565b151561104957600080fd5b6108073384846112ed565b61105f338383610870565b505050565b61106f838383610870565b50505050565b7fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb81565b600754600160a060020a031690565b600080428610156110b857600080fd5b600160a060020a03808a1660008181526009602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c99281019290925281830193909352928b166060840152608083018a905260a0830182905260c08084018a90528151808503909101815260e090930190529250611149906115da565b9050611157818686866116e1565b600160a060020a038a811691161461116e57600080fd5b61117989898961127e565b505050505050505050565b336000908152600560209081526040808320600160a060020a03861684529091528120546111b8908363ffffffff6112da16565b336000818152600560209081526040808320600160a060020a038916808552908352928190208590558051948552519193600080516020611d92833981519152929081900390910190a350600192915050565b600160a060020a03918216600090815260056020908152604080832093909416825291909152205490565b61105f823383610870565b600654600160a060020a0316331461125857600080fd5b610cd281611a3e565b600a60209081526000928352604080842090915290825290205481565b6112898383836118e3565b60001981141561105f57600160a060020a038084166000908152600a60209081526040808320938616835292905290812055505050565b6000903b1190565b6000828211156112d457fe5b50900390565b818101828110156112e757fe5b92915050565b6112f682610e40565b1561105f5760408051600081526020810190915261131990849084908490611330565b151561105f57600080fd5b600061102b8383611abc565b600083600160a060020a031663a4c0ed3660e060020a028685856040516024018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156113a8578181015183820152602001611390565b50505050905090810190601f1680156113d55780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909916989098178852518151919790965086955093509150819050838360005b8381101561146357818101518382015260200161144b565b50505050905090810190601f1680156114905780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af1979650505050505050565b600160a060020a0382166000908152600360205260409020548111156114d257600080fd5b600160a060020a0382166000908152600360205260409020546114fb908263ffffffff6112c816565b600160a060020a038316600090815260036020526040902055600454611527908263ffffffff6112c816565b600455604080518281529051600160a060020a038416917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a2604080518281529051600091600160a060020a03851691600080516020611d728339815191529181900360200190a35050565b80600160a060020a03811615156115b257600080fd5b600160a060020a03831615156115d0576115cb82611b8b565b61105f565b61105f8383611b97565b6000600854826040518082805190602001908083835b6020831061160f5780518252601f1990920191602091820191016115f0565b51815160209384036101000a6000190180199092169116179052604080519290940182900382207f190100000000000000000000000000000000000000000000000000000000000083830152602283019790975260428083019790975283518083039097018752606290910192839052855192945084935085019190508083835b602083106116af5780518252601f199092019160209182019101611690565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912095945050505050565b6000808460ff16601b14806116f957508460ff16601c145b1515611775576040805160e560020a62461bcd02815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611813576040805160e560020a62461bcd02815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60408051600080825260208083018085528a905260ff8916838501526060830188905260808301879052925160019360a0808501949193601f19840193928390039091019190865af115801561186d573d6000803e3d6000fd5b5050604051601f190151915050600160a060020a03811615156118da576040805160e560020a62461bcd02815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b600160a060020a0383161515611968576040805160e560020a62461bcd028152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03821615156119ee576040805160e560020a62461bcd02815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0380841660008181526005602090815260408083209487168084529482529182902085905581518581529151600080516020611d928339815191529281900390910190a3505050565b600160a060020a0381161515611a5357600080fd5b600654604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b33600090815260036020526040812054821115611ad857600080fd5b600160a060020a0383161515611aed57600080fd5b33600090815260036020526040902054611b0d908363ffffffff6112c816565b3360009081526003602052604080822092909255600160a060020a03851681522054611b3f908363ffffffff6112da16565b600160a060020a038416600081815260036020908152604091829020939093558051858152905191923392600080516020611d728339815191529281900390910190a350600192915050565b3031610e0a8282611c44565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290518391600091600160a060020a038416916370a0823191602480830192602092919082900301818787803b158015611bfc57600080fd5b505af1158015611c10573d6000803e3d6000fd5b505050506040513d6020811015611c2657600080fd5b5051905061106f600160a060020a038516848363ffffffff611cac16565b604051600160a060020a0383169082156108fc029083906000818181858888f193505050501515610e0a578082611c79611d41565b600160a060020a039091168152604051908190036020019082f080158015611ca5573d6000803e3d6000fd5b5050505050565b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b158015611d0f57600080fd5b505af1158015611d23573d6000803e3d6000fd5b505050503d1561105f5760206000803e600051151561105f57600080fd5b604051602180611d51833901905600608060405260405160208060218339810160405251600160a060020a038116ff00ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a165627a7a72305820b96bb0733a3e45fdddafa592f51114d0cf16cad047ad60b9b91ae91eb772c6940029" diff --git a/turbo/jsonrpc/eth_receipts.go b/turbo/jsonrpc/eth_receipts.go index 7e3e5dff636..4b1c4ddb3ca 100644 --- a/turbo/jsonrpc/eth_receipts.go +++ b/turbo/jsonrpc/eth_receipts.go @@ -164,7 +164,6 @@ func (api *APIImpl) GetLogs(ctx context.Context, crit filters.FilterCriteria) (t if api.historyV3(tx) { return api.getLogsV3(ctx, tx.(kv.TemporalTx), begin, end, crit) } - //All good till here blockNumbers := bitmapdb.NewBitmap() defer bitmapdb.ReturnToPool(blockNumbers) if err := applyFilters(blockNumbers, tx, begin, end, crit); err != nil { diff --git a/turbo/stages/mock/mock_sentry.go b/turbo/stages/mock/mock_sentry.go index fc92b99ec5c..66505bf0a2d 100644 --- a/turbo/stages/mock/mock_sentry.go +++ b/turbo/stages/mock/mock_sentry.go @@ -460,7 +460,7 @@ func MockWithEverything(tb testing.TB, gspec *types.Genesis, key *ecdsa.PrivateK stagedsync.StageHashStateCfg(mock.DB, mock.Dirs, cfg.HistoryV3), stagedsync.StageTrieCfg(mock.DB, checkStateRoot, true, false, dirs.Tmp, mock.BlockReader, mock.sentriesClient.Hd, cfg.HistoryV3, mock.agg), stagedsync.StageHistoryCfg(mock.DB, prune, dirs.Tmp), - stagedsync.StageLogIndexCfg(mock.DB, prune, dirs.Tmp), + stagedsync.StageLogIndexCfg(mock.DB, prune, dirs.Tmp, nil), stagedsync.StageCallTracesCfg(mock.DB, prune, 0, dirs.Tmp), stagedsync.StageTxLookupCfg(mock.DB, prune, dirs.Tmp, mock.ChainConfig.Bor, mock.BlockReader), stagedsync.StageFinishCfg(mock.DB, dirs.Tmp, forkValidator), diff --git a/turbo/stages/stageloop.go b/turbo/stages/stageloop.go index de8fee1d567..c8ef79ced7c 100644 --- a/turbo/stages/stageloop.go +++ b/turbo/stages/stageloop.go @@ -513,7 +513,7 @@ func NewDefaultStages(ctx context.Context, stagedsync.StageHashStateCfg(db, dirs, cfg.HistoryV3), stagedsync.StageTrieCfg(db, true, true, false, dirs.Tmp, blockReader, controlServer.Hd, cfg.HistoryV3, agg), stagedsync.StageHistoryCfg(db, cfg.Prune, dirs.Tmp), - stagedsync.StageLogIndexCfg(db, cfg.Prune, dirs.Tmp), + stagedsync.StageLogIndexCfg(db, cfg.Prune, dirs.Tmp, cfg.Genesis.Config.NoPruneContracts), stagedsync.StageCallTracesCfg(db, cfg.Prune, 0, dirs.Tmp), stagedsync.StageTxLookupCfg(db, cfg.Prune, dirs.Tmp, controlServer.ChainConfig.Bor, blockReader), stagedsync.StageFinishCfg(db, dirs.Tmp, forkValidator), @@ -568,7 +568,7 @@ func NewPipelineStages(ctx context.Context, stagedsync.StageHashStateCfg(db, dirs, cfg.HistoryV3), stagedsync.StageTrieCfg(db, checkStateRoot, true, false, dirs.Tmp, blockReader, controlServer.Hd, cfg.HistoryV3, agg), stagedsync.StageHistoryCfg(db, cfg.Prune, dirs.Tmp), - stagedsync.StageLogIndexCfg(db, cfg.Prune, dirs.Tmp), + stagedsync.StageLogIndexCfg(db, cfg.Prune, dirs.Tmp, cfg.Genesis.Config.NoPruneContracts), stagedsync.StageCallTracesCfg(db, cfg.Prune, 0, dirs.Tmp), stagedsync.StageTxLookupCfg(db, cfg.Prune, dirs.Tmp, controlServer.ChainConfig.Bor, blockReader), stagedsync.StageFinishCfg(db, dirs.Tmp, forkValidator), From 899b83c1b35b24e8dd02ea72c43987714d7b830d Mon Sep 17 00:00:00 2001 From: Somnath Banerjee Date: Wed, 3 Jan 2024 14:20:08 +0400 Subject: [PATCH 03/10] Add comment --- eth/stagedsync/stage_execute.go | 1 + 1 file changed, 1 insertion(+) diff --git a/eth/stagedsync/stage_execute.go b/eth/stagedsync/stage_execute.go index 6ba903f2f0f..1949e24f1d9 100644 --- a/eth/stagedsync/stage_execute.go +++ b/eth/stagedsync/stage_execute.go @@ -907,6 +907,7 @@ func PruneExecutionStage(s *PruneState, tx kv.RwTx, cfg ExecuteBlockCfg, ctx con if err = rawdb.PruneTable(tx, kv.BorReceipts, cfg.prune.Receipts.PruneTo(s.ForwardProgress), ctx, math.MaxUint32); err != nil { return err } + // EDIT: Don't prune yet, let LogIndex stage take care of it // LogIndex.Prune will read everything what not pruned here // if err = rawdb.PruneTable(tx, kv.Log, cfg.prune.Receipts.PruneTo(s.ForwardProgress), ctx, math.MaxInt32); err != nil { // return err From 88bfceecef995931069b0381cf5409b1e2f3221b Mon Sep 17 00:00:00 2001 From: Somnath Banerjee Date: Wed, 3 Jan 2024 14:35:14 +0400 Subject: [PATCH 04/10] Add missed parameter --- turbo/stages/stageloop.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/turbo/stages/stageloop.go b/turbo/stages/stageloop.go index eb6b2cb5b3b..e86b0b48368 100644 --- a/turbo/stages/stageloop.go +++ b/turbo/stages/stageloop.go @@ -604,7 +604,7 @@ func NewPipelineStages(ctx context.Context, stagedsync.StageHashStateCfg(db, dirs, cfg.HistoryV3), stagedsync.StageTrieCfg(db, checkStateRoot, true, false, dirs.Tmp, blockReader, controlServer.Hd, cfg.HistoryV3, agg), stagedsync.StageHistoryCfg(db, cfg.Prune, dirs.Tmp), - stagedsync.StageLogIndexCfg(db, cfg.Prune, dirs.Tmp), + stagedsync.StageLogIndexCfg(db, cfg.Prune, dirs.Tmp, cfg.Genesis.Config.NoPruneContracts), stagedsync.StageCallTracesCfg(db, cfg.Prune, 0, dirs.Tmp), stagedsync.StageTxLookupCfg(db, cfg.Prune, dirs.Tmp, controlServer.ChainConfig.Bor, blockReader), stagedsync.StageFinishCfg(db, dirs.Tmp, forkValidator), From 05e5d1cd8f20c42d5427d23371dd5a687587dce0 Mon Sep 17 00:00:00 2001 From: Somnath Banerjee Date: Wed, 3 Jan 2024 20:08:18 +0400 Subject: [PATCH 05/10] Review comments --- erigon-lib/chain/chain_config.go | 4 +++- eth/stagedsync/stage_execute.go | 2 +- eth/stagedsync/stage_log_index.go | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/erigon-lib/chain/chain_config.go b/erigon-lib/chain/chain_config.go index ab90f204a25..a392ee4ba9a 100644 --- a/erigon-lib/chain/chain_config.go +++ b/erigon-lib/chain/chain_config.go @@ -83,7 +83,9 @@ type Config struct { Aura *AuRaConfig `json:"aura,omitempty"` Bor *BorConfig `json:"bor,omitempty"` - //For not pruning these contracts (e.g. depsoit contract logs needed by CL) + // For not pruning the logs of these contracts + // For depsoit contract logs are needed by CL to validate/produce blocks. + // All logs should be available to a validating node through eth_getLogs NoPruneContracts map[common.Address]bool `json:"noPruneContracts,omitempty"` } diff --git a/eth/stagedsync/stage_execute.go b/eth/stagedsync/stage_execute.go index 1949e24f1d9..d0a57802843 100644 --- a/eth/stagedsync/stage_execute.go +++ b/eth/stagedsync/stage_execute.go @@ -207,7 +207,7 @@ func executeBlock( func filterNoPruneReceipts(receipts types.Receipts, chainCfg *chain.Config) types.Receipts { cr := types.Receipts{} for _, r := range receipts { - for _, l := range r.Logs{ + for _, l := range r.Logs { if chainCfg.NoPruneContracts[l.Address] { cr = append(cr, r) break diff --git a/eth/stagedsync/stage_log_index.go b/eth/stagedsync/stage_log_index.go index ae032b10269..2740e969529 100644 --- a/eth/stagedsync/stage_log_index.go +++ b/eth/stagedsync/stage_log_index.go @@ -82,7 +82,7 @@ func SpawnLogIndex(s *StageState, tx kv.RwTx, cfg LogIndexCfg, ctx context.Conte } startBlock := s.BlockNumber - pruneTo := cfg.prune.Receipts.PruneTo(endBlock) //endBlock - prune.r.older + pruneTo := cfg.prune.Receipts.PruneTo(endBlock) //endBlock - prune.r.older // if startBlock < pruneTo { // startBlock = pruneTo // } @@ -177,7 +177,7 @@ func promoteLogIndex(logPrefix string, tx kv.RwTx, start uint64, endBlock uint64 } for _, l := range ll { - if cfg.noPruneContracts != nil && !cfg.noPruneContracts[l.Address] && l.BlockNumber < pruneBlock { + if l.BlockNumber < pruneBlock && cfg.noPruneContracts != nil && !cfg.noPruneContracts[l.Address] { continue } for _, topic := range l.Topics { From 53e0e8f57b5d70b0e57cd2699999d02432eeb80d Mon Sep 17 00:00:00 2001 From: Somnath Banerjee Date: Fri, 23 Feb 2024 00:12:33 +0400 Subject: [PATCH 06/10] Refresh noPruneContracts --- params/chainspecs/chiado.json | 3 +++ params/chainspecs/gnosis.json | 6 +++--- params/chainspecs/mainnet.json | 5 ++++- params/chainspecs/sepolia.json | 5 ++++- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/params/chainspecs/chiado.json b/params/chainspecs/chiado.json index cc642d266f2..7ed187fc4d4 100644 --- a/params/chainspecs/chiado.json +++ b/params/chainspecs/chiado.json @@ -22,6 +22,9 @@ "maxBlobGasPerBlock": 262144, "targetBlobGasPerBlock": 131072, "blobGasPriceUpdateFraction": 1112826, + "noPruneContracts": { + "0xb97036A26259B7147018913bD58a774cf91acf25": true + }, "aura": { "stepDuration": 5, "blockReward": 0, diff --git a/params/chainspecs/gnosis.json b/params/chainspecs/gnosis.json index ab76845546a..8a4756514d5 100644 --- a/params/chainspecs/gnosis.json +++ b/params/chainspecs/gnosis.json @@ -22,6 +22,9 @@ "maxBlobGasPerBlock": 262144, "targetBlobGasPerBlock": 131072, "blobGasPriceUpdateFraction": 1112826, + "noPruneContracts": { + "0x0B98057eA310F4d31F2a452B414647007d1645d9": true + }, "aura": { "stepDuration": 5, "blockReward": 0, @@ -52,9 +55,6 @@ }, "posdaoTransition": 9186425, "registrar": "0x6B53721D4f2Fb9514B85f5C49b197D857e36Cf03", - "noPruneContracts": { - "0x0B98057eA310F4d31F2a452B414647007d1645d9": true - }, "rewriteBytecode": { "21735000": { "0xf8D1677c8a0c961938bf2f9aDc3F3CFDA759A9d9": "0x6080604052600436106101b35763ffffffff60e060020a60003504166305d2035b81146101b857806306fdde03146101e1578063095ea7b31461026b5780630b26cf661461028f57806318160ddd146102b257806323b872dd146102d957806330adf81f14610303578063313ce567146103185780633644e5151461034357806339509351146103585780634000aea01461037c57806340c10f19146103ad57806342966c68146103d157806354fd4d50146103e957806366188463146103fe57806369ffa08a1461042257806370a0823114610449578063715018a61461046a578063726600ce1461047f5780637d64bcb4146104a05780637ecebe00146104b5578063859ba28c146104d65780638da5cb5b146105175780638fcbaf0c1461054857806395d89b4114610586578063a457c2d71461059b578063a9059cbb146105bf578063b753a98c146105e3578063bb35783b14610607578063c6a1dedf14610631578063cd59658314610646578063d505accf1461065b578063d73dd62314610694578063dd62ed3e146106b8578063f2d5d56b146106df578063f2fde38b14610703578063ff9e884d14610724575b600080fd5b3480156101c457600080fd5b506101cd61074b565b604080519115158252519081900360200190f35b3480156101ed57600080fd5b506101f661076c565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610230578181015183820152602001610218565b50505050905090810190601f16801561025d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561027757600080fd5b506101cd600160a060020a03600435166024356107fa565b34801561029b57600080fd5b506102b0600160a060020a0360043516610810565b005b3480156102be57600080fd5b506102c761086a565b60408051918252519081900360200190f35b3480156102e557600080fd5b506101cd600160a060020a0360043581169060243516604435610870565b34801561030f57600080fd5b506102c7610a38565b34801561032457600080fd5b5061032d610a5c565b6040805160ff9092168252519081900360200190f35b34801561034f57600080fd5b506102c7610a65565b34801561036457600080fd5b506101cd600160a060020a0360043516602435610a6b565b34801561038857600080fd5b506101cd60048035600160a060020a0316906024803591604435918201910135610aac565b3480156103b957600080fd5b506101cd600160a060020a0360043516602435610bbd565b3480156103dd57600080fd5b506102b0600435610cc8565b3480156103f557600080fd5b506101f6610cd5565b34801561040a57600080fd5b506101cd600160a060020a0360043516602435610d0c565b34801561042e57600080fd5b506102b0600160a060020a0360043581169060243516610de9565b34801561045557600080fd5b506102c7600160a060020a0360043516610e0e565b34801561047657600080fd5b506102b0610e29565b34801561048b57600080fd5b506101cd600160a060020a0360043516610e40565b3480156104ac57600080fd5b506101cd610e54565b3480156104c157600080fd5b506102c7600160a060020a0360043516610e5b565b3480156104e257600080fd5b506104eb610e6d565b6040805167ffffffffffffffff9485168152928416602084015292168183015290519081900360600190f35b34801561052357600080fd5b5061052c610e78565b60408051600160a060020a039092168252519081900360200190f35b34801561055457600080fd5b506102b0600160a060020a0360043581169060243516604435606435608435151560ff60a4351660c43560e435610e87565b34801561059257600080fd5b506101f6610fc5565b3480156105a757600080fd5b506101cd600160a060020a036004351660243561101f565b3480156105cb57600080fd5b506101cd600160a060020a0360043516602435611032565b3480156105ef57600080fd5b506102b0600160a060020a0360043516602435611054565b34801561061357600080fd5b506102b0600160a060020a0360043581169060243516604435611064565b34801561063d57600080fd5b506102c7611075565b34801561065257600080fd5b5061052c611099565b34801561066757600080fd5b506102b0600160a060020a036004358116906024351660443560643560ff6084351660a43560c4356110a8565b3480156106a057600080fd5b506101cd600160a060020a0360043516602435611184565b3480156106c457600080fd5b506102c7600160a060020a036004358116906024351661120b565b3480156106eb57600080fd5b506102b0600160a060020a0360043516602435611236565b34801561070f57600080fd5b506102b0600160a060020a0360043516611241565b34801561073057600080fd5b506102c7600160a060020a0360043581169060243516611261565b60065474010000000000000000000000000000000000000000900460ff1681565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107f25780601f106107c7576101008083540402835291602001916107f2565b820191906000526020600020905b8154815290600101906020018083116107d557829003601f168201915b505050505081565b600061080733848461127e565b50600192915050565b600654600160a060020a0316331461082757600080fd5b610830816112c0565b151561083b57600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60045490565b600080600160a060020a038516151561088857600080fd5b600160a060020a038416151561089d57600080fd5b600160a060020a0385166000908152600360205260409020546108c6908463ffffffff6112c816565b600160a060020a0380871660009081526003602052604080822093909355908616815220546108fb908463ffffffff6112da16565b600160a060020a038086166000818152600360209081526040918290209490945580518781529051919392891692600080516020611d7283398151915292918290030190a3600160a060020a0385163314610a225761095a853361120b565b905060001981146109c457610975818463ffffffff6112c816565b600160a060020a038616600081815260056020908152604080832033808552908352928190208590558051948552519193600080516020611d92833981519152929081900390910190a3610a22565b600160a060020a0385166000908152600a602090815260408083203384529091529020541580610a175750600160a060020a0385166000908152600a602090815260408083203384529091529020544211155b1515610a2257600080fd5b610a2d8585856112ed565b506001949350505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60025460ff1681565b60085481565b336000818152600560209081526040808320600160a060020a03871684529091528120549091610807918590610aa7908663ffffffff6112da16565b61127e565b600084600160a060020a03811615801590610ad05750600160a060020a0381163014155b1515610adb57600080fd5b610ae58686611324565b1515610af057600080fd5b85600160a060020a031633600160a060020a03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16878787604051808481526020018060200182810382528484828181526020019250808284376040519201829003965090945050505050a3610b65866112c0565b15610bb157610ba633878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843750611330945050505050565b1515610bb157600080fd5b50600195945050505050565b600654600090600160a060020a03163314610bd757600080fd5b60065474010000000000000000000000000000000000000000900460ff1615610bff57600080fd5b600454610c12908363ffffffff6112da16565b600455600160a060020a038316600090815260036020526040902054610c3e908363ffffffff6112da16565b600160a060020a038416600081815260036020908152604091829020939093558051858152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a2604080518381529051600160a060020a03851691600091600080516020611d728339815191529181900360200190a350600192915050565b610cd233826114ad565b50565b60408051808201909152600181527f3100000000000000000000000000000000000000000000000000000000000000602082015281565b336000908152600560209081526040808320600160a060020a0386168452909152812054808310610d6057336000908152600560209081526040808320600160a060020a0388168452909152812055610d95565b610d70818463ffffffff6112c816565b336000908152600560209081526040808320600160a060020a03891684529091529020555b336000818152600560209081526040808320600160a060020a038916808552908352928190205481519081529051929392600080516020611d92833981519152929181900390910190a35060019392505050565b600654600160a060020a03163314610e0057600080fd5b610e0a828261159c565b5050565b600160a060020a031660009081526003602052604090205490565b600654600160a060020a031633146101b357600080fd5b600754600160a060020a0390811691161490565b6000806000fd5b60096020526000908152604090205481565b600260056000909192565b600654600160a060020a031681565b600080861580610e975750864211155b1515610ea257600080fd5b604080517fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb6020820152600160a060020a03808d16828401528b166060820152608081018a905260a0810189905287151560c0808301919091528251808303909101815260e0909101909152610f17906115da565b9150610f25828686866116e1565b600160a060020a038b8116911614610f3c57600080fd5b600160a060020a038a1660009081526009602052604090208054600181019091558814610f6857600080fd5b85610f74576000610f78565b6000195b905085610f86576000610f88565b865b600160a060020a03808c166000908152600a60209081526040808320938e1683529290522055610fb98a8a836118e3565b50505050505050505050565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107f25780601f106107c7576101008083540402835291602001916107f2565b600061102b8383610d0c565b9392505050565b600061103e8383611324565b151561104957600080fd5b6108073384846112ed565b61105f338383610870565b505050565b61106f838383610870565b50505050565b7fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb81565b600754600160a060020a031690565b600080428610156110b857600080fd5b600160a060020a03808a1660008181526009602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c99281019290925281830193909352928b166060840152608083018a905260a0830182905260c08084018a90528151808503909101815260e090930190529250611149906115da565b9050611157818686866116e1565b600160a060020a038a811691161461116e57600080fd5b61117989898961127e565b505050505050505050565b336000908152600560209081526040808320600160a060020a03861684529091528120546111b8908363ffffffff6112da16565b336000818152600560209081526040808320600160a060020a038916808552908352928190208590558051948552519193600080516020611d92833981519152929081900390910190a350600192915050565b600160a060020a03918216600090815260056020908152604080832093909416825291909152205490565b61105f823383610870565b600654600160a060020a0316331461125857600080fd5b610cd281611a3e565b600a60209081526000928352604080842090915290825290205481565b6112898383836118e3565b60001981141561105f57600160a060020a038084166000908152600a60209081526040808320938616835292905290812055505050565b6000903b1190565b6000828211156112d457fe5b50900390565b818101828110156112e757fe5b92915050565b6112f682610e40565b1561105f5760408051600081526020810190915261131990849084908490611330565b151561105f57600080fd5b600061102b8383611abc565b600083600160a060020a031663a4c0ed3660e060020a028685856040516024018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156113a8578181015183820152602001611390565b50505050905090810190601f1680156113d55780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909916989098178852518151919790965086955093509150819050838360005b8381101561146357818101518382015260200161144b565b50505050905090810190601f1680156114905780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af1979650505050505050565b600160a060020a0382166000908152600360205260409020548111156114d257600080fd5b600160a060020a0382166000908152600360205260409020546114fb908263ffffffff6112c816565b600160a060020a038316600090815260036020526040902055600454611527908263ffffffff6112c816565b600455604080518281529051600160a060020a038416917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a2604080518281529051600091600160a060020a03851691600080516020611d728339815191529181900360200190a35050565b80600160a060020a03811615156115b257600080fd5b600160a060020a03831615156115d0576115cb82611b8b565b61105f565b61105f8383611b97565b6000600854826040518082805190602001908083835b6020831061160f5780518252601f1990920191602091820191016115f0565b51815160209384036101000a6000190180199092169116179052604080519290940182900382207f190100000000000000000000000000000000000000000000000000000000000083830152602283019790975260428083019790975283518083039097018752606290910192839052855192945084935085019190508083835b602083106116af5780518252601f199092019160209182019101611690565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912095945050505050565b6000808460ff16601b14806116f957508460ff16601c145b1515611775576040805160e560020a62461bcd02815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611813576040805160e560020a62461bcd02815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60408051600080825260208083018085528a905260ff8916838501526060830188905260808301879052925160019360a0808501949193601f19840193928390039091019190865af115801561186d573d6000803e3d6000fd5b5050604051601f190151915050600160a060020a03811615156118da576040805160e560020a62461bcd02815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b600160a060020a0383161515611968576040805160e560020a62461bcd028152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03821615156119ee576040805160e560020a62461bcd02815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0380841660008181526005602090815260408083209487168084529482529182902085905581518581529151600080516020611d928339815191529281900390910190a3505050565b600160a060020a0381161515611a5357600080fd5b600654604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b33600090815260036020526040812054821115611ad857600080fd5b600160a060020a0383161515611aed57600080fd5b33600090815260036020526040902054611b0d908363ffffffff6112c816565b3360009081526003602052604080822092909255600160a060020a03851681522054611b3f908363ffffffff6112da16565b600160a060020a038416600081815260036020908152604091829020939093558051858152905191923392600080516020611d728339815191529281900390910190a350600192915050565b3031610e0a8282611c44565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290518391600091600160a060020a038416916370a0823191602480830192602092919082900301818787803b158015611bfc57600080fd5b505af1158015611c10573d6000803e3d6000fd5b505050506040513d6020811015611c2657600080fd5b5051905061106f600160a060020a038516848363ffffffff611cac16565b604051600160a060020a0383169082156108fc029083906000818181858888f193505050501515610e0a578082611c79611d41565b600160a060020a039091168152604051908190036020019082f080158015611ca5573d6000803e3d6000fd5b5050505050565b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b158015611d0f57600080fd5b505af1158015611d23573d6000803e3d6000fd5b505050503d1561105f5760206000803e600051151561105f57600080fd5b604051602180611d51833901905600608060405260405160208060218339810160405251600160a060020a038116ff00ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a165627a7a72305820b96bb0733a3e45fdddafa592f51114d0cf16cad047ad60b9b91ae91eb772c6940029" diff --git a/params/chainspecs/mainnet.json b/params/chainspecs/mainnet.json index a47bf7f418c..91ef377d35d 100644 --- a/params/chainspecs/mainnet.json +++ b/params/chainspecs/mainnet.json @@ -19,5 +19,8 @@ "terminalTotalDifficultyPassed": true, "shanghaiTime": 1681338455, "cancunTime": 1710338135, - "ethash": {} + "ethash": {}, + "noPruneContracts": { + "0x00000000219ab540356cBB839Cbe05303d7705Fa": true + } } diff --git a/params/chainspecs/sepolia.json b/params/chainspecs/sepolia.json index 9fe80a63fbe..c328e70b6e0 100644 --- a/params/chainspecs/sepolia.json +++ b/params/chainspecs/sepolia.json @@ -17,5 +17,8 @@ "mergeNetsplitBlock": 1735371, "shanghaiTime": 1677557088, "cancunTime": 1706655072, - "ethash": {} + "ethash": {}, + "noPruneContracts": { + "0x7f02C3E3c98b133055B8B348B2Ac625669Ed295D": true + } } From 7edc25af431f0fed2f7e43ada5b26595ac5d682d Mon Sep 17 00:00:00 2001 From: Somnath Banerjee Date: Mon, 26 Feb 2024 17:20:43 +0400 Subject: [PATCH 07/10] Pass by ref --- eth/stagedsync/stage_execute.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/eth/stagedsync/stage_execute.go b/eth/stagedsync/stage_execute.go index 0b49d4e391b..a38815a5f56 100644 --- a/eth/stagedsync/stage_execute.go +++ b/eth/stagedsync/stage_execute.go @@ -178,7 +178,8 @@ func executeBlock( receipts = execRs.Receipts stateSyncReceipt = execRs.StateSyncReceipt - if writeReceipts || filterNoPruneReceipts(receipts, cfg.chainConfig).Len() > 0 { + // If writeReceipts is false here, append the not to be pruned receipts anyways + if writeReceipts || gatherNoPruneReceipts(&receipts, cfg.chainConfig) { if err = rawdb.AppendReceipts(tx, blockNum, receipts); err != nil { return err } @@ -201,10 +202,11 @@ func executeBlock( return nil } -// Filters out receipts of contracts that may be needed by CL, such as deposit contract -func filterNoPruneReceipts(receipts types.Receipts, chainCfg *chain.Config) types.Receipts { +// Filters out and keeps receipts of contracts that may be needed by CL, such as deposit contrac, +// The list of contracts to filter is config-specified +func gatherNoPruneReceipts(receipts *types.Receipts, chainCfg *chain.Config) bool{ cr := types.Receipts{} - for _, r := range receipts { + for _, r := range *receipts { for _, l := range r.Logs { if chainCfg.NoPruneContracts[l.Address] { cr = append(cr, r) @@ -212,8 +214,11 @@ func filterNoPruneReceipts(receipts types.Receipts, chainCfg *chain.Config) type } } } - receipts = cr - return cr + receipts = &cr + if receipts.Len() > 0 { + return true + } + return false } func newStateReaderWriter( From eafe563d319c6d006c58e9b54bff358e33aa5c14 Mon Sep 17 00:00:00 2001 From: Somnath Banerjee Date: Mon, 26 Feb 2024 17:30:44 +0400 Subject: [PATCH 08/10] fmt --- eth/stagedsync/stage_execute.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eth/stagedsync/stage_execute.go b/eth/stagedsync/stage_execute.go index a38815a5f56..269f0566b27 100644 --- a/eth/stagedsync/stage_execute.go +++ b/eth/stagedsync/stage_execute.go @@ -204,7 +204,7 @@ func executeBlock( // Filters out and keeps receipts of contracts that may be needed by CL, such as deposit contrac, // The list of contracts to filter is config-specified -func gatherNoPruneReceipts(receipts *types.Receipts, chainCfg *chain.Config) bool{ +func gatherNoPruneReceipts(receipts *types.Receipts, chainCfg *chain.Config) bool { cr := types.Receipts{} for _, r := range *receipts { for _, l := range r.Logs { From d4220f1d910899345df771b35091aafd298a96a8 Mon Sep 17 00:00:00 2001 From: Somnath Banerjee Date: Mon, 26 Feb 2024 20:03:19 +0400 Subject: [PATCH 09/10] Remove pruneBlockDefault --- ethdb/prune/storage_mode.go | 36 ------------------------------------ 1 file changed, 36 deletions(-) diff --git a/ethdb/prune/storage_mode.go b/ethdb/prune/storage_mode.go index cde01f6cdac..4864f6e3367 100644 --- a/ethdb/prune/storage_mode.go +++ b/ethdb/prune/storage_mode.go @@ -23,14 +23,6 @@ var DefaultMode = Mode{ Experiments: Experiments{}, // all off } -var ( - mainnetDepositContractBlock uint64 = 11052984 - sepoliaDepositContractBlock uint64 = 1273020 - goerliDepositContractBlock uint64 = 4367322 - gnosisDepositContractBlock uint64 = 19475089 - chiadoDepositContractBlock uint64 = 155530 -) - type Experiments struct { } @@ -55,8 +47,6 @@ func FromCli(chainId uint64, flags string, exactHistory, exactReceipts, exactTxI } } - pruneBlockBefore := pruneBlockDefault(chainId) - if exactHistory > 0 { mode.History = Distance(exactHistory) } @@ -74,16 +64,7 @@ func FromCli(chainId uint64, flags string, exactHistory, exactReceipts, exactTxI mode.History = Before(beforeH) } if beforeR > 0 { - if pruneBlockBefore != 0 { - log.Warn("specifying prune.before.r might break CL compatibility") - if beforeR > pruneBlockBefore { - log.Warn("the specified prune.before.r block number is higher than the deposit contract contract block number", "highest block number", pruneBlockBefore) - } - } mode.Receipts = Before(beforeR) - } else if exactReceipts == 0 && mode.Receipts.Enabled() && pruneBlockBefore != 0 { - // Default --prune=r to pruning receipts before the Beacon Chain genesis - mode.Receipts = Before(pruneBlockBefore) } if beforeT > 0 { mode.TxIndex = Before(beforeT) @@ -103,23 +84,6 @@ func FromCli(chainId uint64, flags string, exactHistory, exactReceipts, exactTxI return mode, nil } -func pruneBlockDefault(chainId uint64) uint64 { - switch chainId { - case 1 /* mainnet */ : - return mainnetDepositContractBlock - case 11155111 /* sepolia */ : - return sepoliaDepositContractBlock - case 5 /* goerli */ : - return goerliDepositContractBlock - case 10200 /* chiado */ : - return chiadoDepositContractBlock - case 100 /* gnosis */ : - return gnosisDepositContractBlock - } - - return 0 -} - func Get(db kv.Getter) (Mode, error) { prune := DefaultMode prune.Initialised = true From 3c74d8d9d8a0b9da5826cfe484a18ba5ace30102 Mon Sep 17 00:00:00 2001 From: Somnath Banerjee Date: Mon, 26 Feb 2024 20:03:37 +0400 Subject: [PATCH 10/10] Add noPruneContracts for goerli and holesky --- params/chainspecs/goerli.json | 3 +++ params/chainspecs/holesky.json | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/params/chainspecs/goerli.json b/params/chainspecs/goerli.json index 4bf04baa184..b419c2c2ad2 100644 --- a/params/chainspecs/goerli.json +++ b/params/chainspecs/goerli.json @@ -18,5 +18,8 @@ "clique": { "period": 15, "epoch": 30000 + }, + "noPruneContracts": { + "0xff50ed3d0ec03aC01D4C79aAd74928BFF48a7b2b": true } } diff --git a/params/chainspecs/holesky.json b/params/chainspecs/holesky.json index e582e406008..de44186a888 100644 --- a/params/chainspecs/holesky.json +++ b/params/chainspecs/holesky.json @@ -14,5 +14,8 @@ "terminalTotalDifficulty": 0, "terminalTotalDifficultyPassed": true, "shanghaiTime": 1696000704, - "cancunTime": 1707305664 + "cancunTime": 1707305664, + "noPruneContracts": { + "0x4242424242424242424242424242424242424242": true + } } \ No newline at end of file