github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/app/node_mode.go (about)

     1  package app
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"sort"
     7  	"strings"
     8  
     9  	tmtypes "github.com/fibonacci-chain/fbc/libs/tendermint/types"
    10  	"github.com/spf13/viper"
    11  
    12  	"github.com/fibonacci-chain/fbc/app/config"
    13  	appconfig "github.com/fibonacci-chain/fbc/app/config"
    14  	"github.com/fibonacci-chain/fbc/app/rpc/backend"
    15  	"github.com/fibonacci-chain/fbc/app/types"
    16  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/flags"
    17  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/server"
    18  	store "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/iavl"
    19  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/innertx"
    20  	"github.com/fibonacci-chain/fbc/libs/iavl"
    21  	abcitypes "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types"
    22  	"github.com/fibonacci-chain/fbc/libs/tendermint/libs/log"
    23  	"github.com/fibonacci-chain/fbc/libs/tendermint/mempool"
    24  	evmtypes "github.com/fibonacci-chain/fbc/x/evm/types"
    25  	"github.com/fibonacci-chain/fbc/x/evm/watcher"
    26  )
    27  
    28  func setNodeConfig(ctx *server.Context) error {
    29  	nodeMode := viper.GetString(types.FlagNodeMode)
    30  
    31  	ctx.Logger.Info("Starting node", "mode", nodeMode)
    32  
    33  	switch types.NodeMode(nodeMode) {
    34  	case types.RpcNode:
    35  		setRpcConfig(ctx)
    36  	case types.ValidatorNode:
    37  		setValidatorConfig(ctx)
    38  	case types.ArchiveNode:
    39  		setArchiveConfig(ctx)
    40  	case types.InnertxNode:
    41  		if !innertx.IsAvailable {
    42  			return errors.New("innertx is not available for innertx node")
    43  		}
    44  		setRpcConfig(ctx)
    45  	default:
    46  		if len(nodeMode) > 0 {
    47  			ctx.Logger.Error(
    48  				fmt.Sprintf("Wrong value (%s) is set for %s, the correct value should be one of %s, %s, and %s",
    49  					nodeMode, types.FlagNodeMode, types.RpcNode, types.ValidatorNode, types.ArchiveNode))
    50  		}
    51  	}
    52  	return nil
    53  }
    54  
    55  func setRpcConfig(ctx *server.Context) {
    56  	viper.SetDefault(abcitypes.FlagDisableABCIQueryMutex, true)
    57  	viper.SetDefault(evmtypes.FlagEnableBloomFilter, true)
    58  	viper.SetDefault(watcher.FlagFastQueryLru, 10000)
    59  	viper.SetDefault(watcher.FlagFastQuery, true)
    60  	viper.SetDefault(backend.FlagApiBackendBlockLruCache, 30000)
    61  	viper.SetDefault(backend.FlagApiBackendTxLruCache, 100000)
    62  	viper.SetDefault(iavl.FlagIavlEnableAsyncCommit, true)
    63  	viper.SetDefault(flags.FlagMaxOpenConnections, 20000)
    64  	viper.SetDefault(mempool.FlagEnablePendingPool, true)
    65  	viper.SetDefault(server.FlagCORS, "*")
    66  	ctx.Logger.Info(fmt.Sprintf(
    67  		"Set --%s=%v\n--%s=%v\n--%s=%v\n--%s=%v\n--%s=%v\n--%s=%v\n--%s=%v\n--%s=%v by rpc node mode",
    68  		abcitypes.FlagDisableABCIQueryMutex, true, evmtypes.FlagEnableBloomFilter, true, watcher.FlagFastQueryLru, 10000,
    69  		watcher.FlagFastQuery, true, iavl.FlagIavlEnableAsyncCommit, true,
    70  		flags.FlagMaxOpenConnections, 20000, mempool.FlagEnablePendingPool, true,
    71  		server.FlagCORS, "*"))
    72  }
    73  
    74  func setValidatorConfig(ctx *server.Context) {
    75  	viper.SetDefault(abcitypes.FlagDisableABCIQueryMutex, true)
    76  	viper.SetDefault(appconfig.FlagDynamicGpMode, tmtypes.MinimalGpMode)
    77  	viper.SetDefault(iavl.FlagIavlEnableAsyncCommit, true)
    78  	viper.SetDefault(store.FlagIavlCacheSize, 10000000)
    79  	viper.SetDefault(server.FlagPruning, "everything")
    80  	viper.SetDefault(evmtypes.FlagEnableBloomFilter, false)
    81  	viper.SetDefault(watcher.FlagFastQuery, false)
    82  	viper.SetDefault(appconfig.FlagMaxGasUsedPerBlock, 120000000)
    83  	viper.SetDefault(mempool.FlagEnablePendingPool, false)
    84  	viper.SetDefault(config.FlagEnablePGU, true)
    85  
    86  	ctx.Logger.Info(fmt.Sprintf("Set --%s=%v\n--%s=%v\n--%s=%v\n--%s=%v\n--%s=%v\n--%s=%v\n--%s=%v\n--%s=%v\n--%s=%v by validator node mode",
    87  		abcitypes.FlagDisableABCIQueryMutex, true, appconfig.FlagDynamicGpMode, tmtypes.MinimalGpMode, iavl.FlagIavlEnableAsyncCommit, true,
    88  		store.FlagIavlCacheSize, 10000000, server.FlagPruning, "everything",
    89  		evmtypes.FlagEnableBloomFilter, false, watcher.FlagFastQuery, false, appconfig.FlagMaxGasUsedPerBlock, 120000000,
    90  		mempool.FlagEnablePendingPool, false))
    91  }
    92  
    93  func setArchiveConfig(ctx *server.Context) {
    94  	viper.SetDefault(server.FlagPruning, "nothing")
    95  	viper.SetDefault(abcitypes.FlagDisableABCIQueryMutex, true)
    96  	viper.SetDefault(evmtypes.FlagEnableBloomFilter, true)
    97  	viper.SetDefault(iavl.FlagIavlEnableAsyncCommit, true)
    98  	viper.SetDefault(flags.FlagMaxOpenConnections, 20000)
    99  	viper.SetDefault(server.FlagCORS, "*")
   100  	ctx.Logger.Info(fmt.Sprintf(
   101  		"Set --%s=%v\n--%s=%v\n--%s=%v\n--%s=%v\n--%s=%v\n--%s=%v by archive node mode",
   102  		server.FlagPruning, "nothing", abcitypes.FlagDisableABCIQueryMutex, true, evmtypes.FlagEnableBloomFilter, true,
   103  		iavl.FlagIavlEnableAsyncCommit, true, flags.FlagMaxOpenConnections, 20000,
   104  		server.FlagCORS, "*"))
   105  }
   106  
   107  func logStartingFlags(logger log.Logger) {
   108  	msg := "All flags:\n"
   109  
   110  	var maxLen int
   111  	kvMap := make(map[string]interface{})
   112  	var keys []string
   113  	for _, key := range viper.AllKeys() {
   114  		if strings.Index(key, "infura.") == 0 {
   115  			continue
   116  		}
   117  
   118  		keys = append(keys, key)
   119  		kvMap[key] = viper.Get(key)
   120  		if len(key) > maxLen {
   121  			maxLen = len(key)
   122  		}
   123  	}
   124  
   125  	sort.Strings(keys)
   126  	for _, k := range keys {
   127  		msg += fmt.Sprintf("	%-45s= %v\n", k, kvMap[k])
   128  	}
   129  
   130  	logger.Info(msg)
   131  }