@@ -229,6 +229,11 @@ var (
229
229
Name : "snapshot" ,
230
230
Usage : `Enables snapshot-database mode -- experimental work in progress feature` ,
231
231
}
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
+ }
232
237
LightKDFFlag = cli.BoolFlag {
233
238
Name : "lightkdf" ,
234
239
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) {
1469
1474
CheckExclusive (ctx , DeveloperFlag , LegacyTestnetFlag , RopstenFlag , RinkebyFlag , GoerliFlag )
1470
1475
CheckExclusive (ctx , LegacyLightServFlag , LightServeFlag , SyncModeFlag , "light" )
1471
1476
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 )
1473
1482
var ks * keystore.KeyStore
1474
1483
if keystores := stack .AccountManager ().Backends (keystore .KeyStoreType ); len (keystores ) > 0 {
1475
1484
ks = keystores [0 ].(* keystore.KeyStore )
@@ -1505,6 +1514,9 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) {
1505
1514
if ctx .GlobalIsSet (CacheNoPrefetchFlag .Name ) {
1506
1515
cfg .NoPrefetch = ctx .GlobalBool (CacheNoPrefetchFlag .Name )
1507
1516
}
1517
+ if ctx .GlobalIsSet (TxLookupLimitFlag .Name ) {
1518
+ cfg .TxLookupLimit = ctx .GlobalUint64 (TxLookupLimitFlag .Name )
1519
+ }
1508
1520
if ctx .GlobalIsSet (CacheFlag .Name ) || ctx .GlobalIsSet (CacheTrieFlag .Name ) {
1509
1521
cfg .TrieCleanCache = ctx .GlobalInt (CacheFlag .Name ) * ctx .GlobalInt (CacheTrieFlag .Name ) / 100
1510
1522
}
@@ -1746,7 +1758,7 @@ func MakeGenesis(ctx *cli.Context) *core.Genesis {
1746
1758
}
1747
1759
1748
1760
// 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 ) {
1750
1762
var err error
1751
1763
chainDb = MakeChainDatabase (ctx , stack )
1752
1764
config , _ , err := core .SetupGenesisBlock (chainDb , MakeGenesis (ctx ))
@@ -1792,7 +1804,12 @@ func MakeChain(ctx *cli.Context, stack *node.Node) (chain *core.BlockChain, chai
1792
1804
cache .TrieDirtyLimit = ctx .GlobalInt (CacheFlag .Name ) * ctx .GlobalInt (CacheGCFlag .Name ) / 100
1793
1805
}
1794
1806
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 )
1796
1813
if err != nil {
1797
1814
Fatalf ("Can't create BlockChain: %v" , err )
1798
1815
}
0 commit comments