@@ -308,6 +308,12 @@ var (
308308 Usage : "Enable heuristic state prefetch during block import" ,
309309 Category : flags .PerfCategory ,
310310 }
311+ CachePreimagesFlag = & cli.BoolFlag {
312+ Name : "cache-preimages" ,
313+ Usage : "Enable recording the SHA3/keccak preimages of trie keys (default: true)" ,
314+ Value : true ,
315+ Category : flags .PerfCategory ,
316+ }
311317 CacheLogSizeFlag = & cli.IntFlag {
312318 Name : "cache-blocklogs" ,
313319 Aliases : []string {"cache.blocklogs" },
@@ -1513,7 +1519,12 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) {
15131519 }
15141520 cfg .NoPruning = ctx .String (GCModeFlag .Name ) == "archive"
15151521 cfg .NoPrefetch = ! ctx .Bool (CachePrefetchFlag .Name )
1516-
1522+ // Read the value from the flag no matter if it's set or not.
1523+ cfg .Preimages = ctx .Bool (CachePreimagesFlag .Name )
1524+ if cfg .NoPruning && ! cfg .Preimages {
1525+ cfg .Preimages = true
1526+ log .Info ("Enabling recording of key preimages since archive mode is used" )
1527+ }
15171528 if ctx .IsSet (CacheFlag .Name ) || ctx .IsSet (CacheTrieFlag .Name ) {
15181529 cfg .TrieCleanCache = ctx .Int (CacheFlag .Name ) * ctx .Int (CacheTrieFlag .Name ) / 100
15191530 }
@@ -1780,6 +1791,11 @@ func MakeChain(ctx *cli.Context, stack *node.Node, readonly bool) (chain *core.B
17801791 TrieDirtyLimit : ethconfig .Defaults .TrieDirtyCache ,
17811792 TrieDirtyDisabled : ctx .String (GCModeFlag .Name ) == "archive" ,
17821793 TrieTimeLimit : ethconfig .Defaults .TrieTimeout ,
1794+ Preimages : ctx .Bool (CachePreimagesFlag .Name ),
1795+ }
1796+ if cache .TrieDirtyDisabled && ! cache .Preimages {
1797+ cache .Preimages = true
1798+ log .Info ("Enabling recording of key preimages since archive mode is used" )
17831799 }
17841800 if ctx .IsSet (CacheFlag .Name ) || ctx .IsSet (CacheTrieFlag .Name ) {
17851801 cache .TrieCleanLimit = ctx .Int (CacheFlag .Name ) * ctx .Int (CacheTrieFlag .Name ) / 100
0 commit comments