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 }