diff --git a/cmd/geth/main.go b/cmd/geth/main.go index d6c39a33096ed86da1f753dd16045c3d311f6652..bb539e9c750557a8f31482b19ef401b50b9501ff 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -55,6 +55,7 @@ var ( app = flags.NewApp(gitCommit, gitDate, fmt.Sprintf("the %s command line interface", repositoryIdentifier)) // flags that configure the node nodeFlags = []cli.Flag{ + utils.BorLogsFlag, utils.IdentityFlag, utils.UnlockedAccountFlag, utils.PasswordFileFlag, diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 08f1720ade74a62846d6709606fb618b305ad3bb..9e4c34254cc6f8c1d039881994c87b0a3a70c568 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -373,6 +373,10 @@ var ( Value: ethconfig.Defaults.TxPool.Lifetime, } // Performance tuning settings + BorLogsFlag = cli.BoolFlag{ + Name: "bor.logs", + Usage: "Enable bor logs retrieval", + } CacheFlag = cli.IntFlag{ Name: "cache", Usage: "Megabytes of memory allocated to internal caching (default = 4096 mainnet full node, 128 light mode)", @@ -1482,7 +1486,11 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { setWhitelist(ctx, cfg) setLes(ctx, cfg) - // Cap the cache allowance and tune the garbage collector + if ctx.GlobalIsSet(BorLogsFlag.Name) { + cfg.BorLogs = ctx.GlobalBool(BorLogsFlag.Name) + } + + // Cap the cache allowance and tune the garbage collector mem, err := gopsutil.VirtualMemory() if err == nil { if 32<<(^uintptr(0)>>63) == 32 && mem.Total > 2*1024*1024*1024 { diff --git a/eth/backend.go b/eth/backend.go index 85fadbf74121e7cd8db6b2720bc87328c5ece48d..d8ecda58a8a763415531c9a4b9ff17d27a83a105 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -310,7 +310,7 @@ func (s *Ethereum) APIs() []rpc.API { // BOR change starts // set genesis to public filter api - publicFilterAPI := filters.NewPublicFilterAPI(s.APIBackend, false, 5*time.Minute) + publicFilterAPI := filters.NewPublicFilterAPI(s.APIBackend, false, 5*time.Minute, s.config.BorLogs) // avoiding constructor changed by introducing new method to set genesis publicFilterAPI.SetChainConfig(s.blockchain.Config()) // BOR change ends diff --git a/eth/ethconfig/config.go b/eth/ethconfig/config.go index 82a6648b5bdac570388b2b8ae2ce27ffb12d996b..a17f28c14fdf12ca2a56ba7208d58e6ef5c2f79a 100644 --- a/eth/ethconfig/config.go +++ b/eth/ethconfig/config.go @@ -209,6 +209,9 @@ type Config struct { // Berlin block override (TODO: remove after the fork) OverrideBerlin *big.Int `toml:",omitempty"` + + // Bor logs flag + BorLogs bool } // CreateConsensusEngine creates a consensus engine for the given chain configuration. diff --git a/eth/filters/api.go b/eth/filters/api.go index d88d387f2f016e23b29104b3229721e535eb0da5..63e7f98e5520b2d22afa49e5160a2a18ff9f7063 100644 --- a/eth/filters/api.go +++ b/eth/filters/api.go @@ -57,18 +57,20 @@ type PublicFilterAPI struct { filtersMu sync.Mutex filters map[rpc.ID]*filter timeout time.Duration + borLogs bool chainConfig *params.ChainConfig } // NewPublicFilterAPI returns a new PublicFilterAPI instance. -func NewPublicFilterAPI(backend Backend, lightMode bool, timeout time.Duration) *PublicFilterAPI { +func NewPublicFilterAPI(backend Backend, lightMode bool, timeout time.Duration, borLogs bool) *PublicFilterAPI { api := &PublicFilterAPI{ backend: backend, chainDb: backend.ChainDb(), events: NewEventSystem(backend, lightMode), filters: make(map[rpc.ID]*filter), timeout: timeout, + borLogs: borLogs, } go api.timeoutLoop(timeout) @@ -347,7 +349,9 @@ func (api *PublicFilterAPI) GetLogs(ctx context.Context, crit FilterCriteria) ([ // Block filter requested, construct a single-shot filter filter = NewBlockFilter(api.backend, *crit.BlockHash, crit.Addresses, crit.Topics) // Block bor filter - borLogsFilter = NewBorBlockLogsFilter(api.backend, sprint, *crit.BlockHash, crit.Addresses, crit.Topics) + if api.borLogs { + borLogsFilter = NewBorBlockLogsFilter(api.backend, sprint, *crit.BlockHash, crit.Addresses, crit.Topics) + } } else { // Convert the RPC block numbers into internal representations begin := rpc.LatestBlockNumber.Int64() @@ -361,7 +365,9 @@ func (api *PublicFilterAPI) GetLogs(ctx context.Context, crit FilterCriteria) ([ // Construct the range filter filter = NewRangeFilter(api.backend, begin, end, crit.Addresses, crit.Topics) // Block bor filter - borLogsFilter = NewBorBlockLogsRangeFilter(api.backend, sprint, begin, end, crit.Addresses, crit.Topics) + if api.borLogs { + borLogsFilter = NewBorBlockLogsRangeFilter(api.backend, sprint, begin, end, crit.Addresses, crit.Topics) + } } // Run the filter and return all the logs @@ -369,14 +375,19 @@ func (api *PublicFilterAPI) GetLogs(ctx context.Context, crit FilterCriteria) ([ if err != nil { return nil, err } - // Run the filter and return all the logs - borBlockLogs, err := borLogsFilter.Logs(ctx) - if err != nil { - return nil, err + + if borLogsFilter != nil { + // Run the filter and return all the logs + borBlockLogs, err := borLogsFilter.Logs(ctx) + if err != nil { + return nil, err + } + + return returnLogs(types.MergeBorLogs(logs, borBlockLogs)), err } // merge bor block logs and receipt logs and return it - return returnLogs(types.MergeBorLogs(logs, borBlockLogs)), err + return returnLogs(logs), err } // UninstallFilter removes the filter with the given filter id. diff --git a/les/client.go b/les/client.go index bdb6c8cbd7171adc3a8c767f57b12952c0caa8cb..6fa8e3597e38206cc2b0d4096007378fe4933b52 100644 --- a/les/client.go +++ b/les/client.go @@ -301,7 +301,7 @@ func (s *LightEthereum) APIs() []rpc.API { }, { Namespace: "eth", Version: "1.0", - Service: filters.NewPublicFilterAPI(s.ApiBackend, true, 5*time.Minute), + Service: filters.NewPublicFilterAPI(s.ApiBackend, true, 5*time.Minute, false), Public: true, }, { Namespace: "net",