@@ -229,6 +229,11 @@ var (
229229 Name : "snapshot" ,
230230 Usage : `Enables snapshot-database mode -- experimental work in progress feature` ,
231231 }
232+ TxLookupLimitFlag = cli.Int64Flag {
233+ Name : "txlookuplimit" ,
234+ Usage : "Number of recent blocks to maintain transactions index by-hash for (default = index all blocks)" ,
235+ Value : 0 ,
236+ }
232237 LightKDFFlag = cli.BoolFlag {
233238 Name : "lightkdf" ,
234239 Usage : "Reduce key-derivation RAM & CPU usage at some expense of KDF strength" ,
@@ -1469,7 +1474,11 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) {
14691474 CheckExclusive (ctx , DeveloperFlag , LegacyTestnetFlag , RopstenFlag , RinkebyFlag , GoerliFlag )
14701475 CheckExclusive (ctx , LegacyLightServFlag , LightServeFlag , SyncModeFlag , "light" )
14711476 CheckExclusive (ctx , DeveloperFlag , ExternalSignerFlag ) // Can't use both ephemeral unlocked and external signer
1472-
1477+ CheckExclusive (ctx , GCModeFlag , "archive" , TxLookupLimitFlag )
1478+ // todo(rjl493456442) make it available for les server
1479+ // Ancient tx indices pruning is not available for les server now
1480+ // since light client relies on the server for transaction status query.
1481+ CheckExclusive (ctx , LegacyLightServFlag , LightServeFlag , TxLookupLimitFlag )
14731482 var ks * keystore.KeyStore
14741483 if keystores := stack .AccountManager ().Backends (keystore .KeyStoreType ); len (keystores ) > 0 {
14751484 ks = keystores [0 ].(* keystore.KeyStore )
@@ -1505,6 +1514,9 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) {
15051514 if ctx .GlobalIsSet (CacheNoPrefetchFlag .Name ) {
15061515 cfg .NoPrefetch = ctx .GlobalBool (CacheNoPrefetchFlag .Name )
15071516 }
1517+ if ctx .GlobalIsSet (TxLookupLimitFlag .Name ) {
1518+ cfg .TxLookupLimit = ctx .GlobalUint64 (TxLookupLimitFlag .Name )
1519+ }
15081520 if ctx .GlobalIsSet (CacheFlag .Name ) || ctx .GlobalIsSet (CacheTrieFlag .Name ) {
15091521 cfg .TrieCleanCache = ctx .GlobalInt (CacheFlag .Name ) * ctx .GlobalInt (CacheTrieFlag .Name ) / 100
15101522 }
@@ -1746,7 +1758,7 @@ func MakeGenesis(ctx *cli.Context) *core.Genesis {
17461758}
17471759
17481760// MakeChain creates a chain manager from set command line flags.
1749- func MakeChain (ctx * cli.Context , stack * node.Node ) (chain * core.BlockChain , chainDb ethdb.Database ) {
1761+ func MakeChain (ctx * cli.Context , stack * node.Node , readOnly bool ) (chain * core.BlockChain , chainDb ethdb.Database ) {
17501762 var err error
17511763 chainDb = MakeChainDatabase (ctx , stack )
17521764 config , _ , err := core .SetupGenesisBlock (chainDb , MakeGenesis (ctx ))
@@ -1792,7 +1804,12 @@ func MakeChain(ctx *cli.Context, stack *node.Node) (chain *core.BlockChain, chai
17921804 cache .TrieDirtyLimit = ctx .GlobalInt (CacheFlag .Name ) * ctx .GlobalInt (CacheGCFlag .Name ) / 100
17931805 }
17941806 vmcfg := vm.Config {EnablePreimageRecording : ctx .GlobalBool (VMEnableDebugFlag .Name )}
1795- chain , err = core .NewBlockChain (chainDb , cache , config , engine , vmcfg , nil )
1807+ var limit * uint64
1808+ if ctx .GlobalIsSet (TxLookupLimitFlag .Name ) && ! readOnly {
1809+ l := ctx .GlobalUint64 (TxLookupLimitFlag .Name )
1810+ limit = & l
1811+ }
1812+ chain , err = core .NewBlockChain (chainDb , cache , config , engine , vmcfg , nil , limit )
17961813 if err != nil {
17971814 Fatalf ("Can't create BlockChain: %v" , err )
17981815 }
0 commit comments