2022-12-16 09:48:38 +00:00
// Copyright 2021 Evmos Foundation
// This file is part of Evmos' Ethermint library.
//
// The Ethermint library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The Ethermint library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the Ethermint library. If not, see https://github.com/evmos/ethermint/blob/main/LICENSE
2021-08-16 09:45:10 +00:00
package flags
2021-07-28 09:47:29 +00:00
import (
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/crypto/keyring"
"github.com/spf13/cobra"
"github.com/spf13/viper"
2022-10-12 09:02:09 +00:00
tmcli "github.com/tendermint/tendermint/libs/cli"
2021-07-28 09:47:29 +00:00
)
2022-10-10 10:38:33 +00:00
// Tendermint/cosmos-sdk full-node start flags
2021-08-16 09:45:10 +00:00
const (
WithTendermint = "with-tendermint"
Address = "address"
Transport = "transport"
TraceStore = "trace-store"
CPUProfile = "cpu-profile"
2022-10-10 10:38:33 +00:00
// The type of database for application and snapshots databases
AppDBBackend = "app-db-backend"
2021-08-16 09:45:10 +00:00
)
// GRPC-related flags.
const (
2022-10-19 09:47:34 +00:00
GRPCOnly = "grpc-only"
2021-08-16 09:45:10 +00:00
GRPCEnable = "grpc.enable"
GRPCAddress = "grpc.address"
GRPCWebEnable = "grpc-web.enable"
GRPCWebAddress = "grpc-web.address"
)
2022-03-15 19:59:31 +00:00
// Cosmos API flags
2022-01-17 18:08:02 +00:00
const (
2022-03-15 19:59:31 +00:00
RPCEnable = "api.enable"
EnabledUnsafeCors = "api.enabled-unsafe-cors"
2022-01-17 18:08:02 +00:00
)
2021-08-16 09:45:10 +00:00
// JSON-RPC flags
const (
2022-10-10 10:38:33 +00:00
JSONRPCEnable = "json-rpc.enable"
JSONRPCAPI = "json-rpc.api"
JSONRPCAddress = "json-rpc.address"
JSONWsAddress = "json-rpc.ws-address"
JSONRPCGasCap = "json-rpc.gas-cap"
JSONRPCEVMTimeout = "json-rpc.evm-timeout"
JSONRPCTxFeeCap = "json-rpc.txfee-cap"
JSONRPCFilterCap = "json-rpc.filter-cap"
JSONRPCLogsCap = "json-rpc.logs-cap"
JSONRPCBlockRangeCap = "json-rpc.block-range-cap"
JSONRPCHTTPTimeout = "json-rpc.http-timeout"
JSONRPCHTTPIdleTimeout = "json-rpc.http-idle-timeout"
JSONRPCAllowUnprotectedTxs = "json-rpc.allow-unprotected-txs"
JSONRPCMaxOpenConnections = "json-rpc.max-open-connections"
JSONRPCEnableIndexer = "json-rpc.enable-indexer"
2022-10-14 22:50:01 +00:00
// JSONRPCEnableMetrics enables EVM RPC metrics server.
// Set to `metrics` which is hardcoded flag from go-ethereum.
// https://github.com/ethereum/go-ethereum/blob/master/metrics/metrics.go#L35-L55
JSONRPCEnableMetrics = "metrics"
2021-08-16 09:45:10 +00:00
)
// EVM flags
const (
2022-03-21 09:01:21 +00:00
EVMTracer = "evm.tracer"
EVMMaxTxGasWanted = "evm.max-tx-gas-wanted"
2021-08-16 09:45:10 +00:00
)
2021-09-28 11:33:54 +00:00
// TLS flags
const (
TLSCertPath = "tls.certificate-path"
TLSKeyPath = "tls.key-path"
)
2021-07-28 09:47:29 +00:00
// AddTxFlags adds common flags for commands to post tx
2021-11-25 15:12:57 +00:00
func AddTxFlags ( cmd * cobra . Command ) ( * cobra . Command , error ) {
2021-07-28 09:47:29 +00:00
cmd . PersistentFlags ( ) . String ( flags . FlagChainID , "testnet" , "Specify Chain ID for sending Tx" )
cmd . PersistentFlags ( ) . String ( flags . FlagFrom , "" , "Name or address of private key with which to sign" )
cmd . PersistentFlags ( ) . String ( flags . FlagFees , "" , "Fees to pay along with transaction; eg: 10aphoton" )
cmd . PersistentFlags ( ) . String ( flags . FlagGasPrices , "" , "Gas prices to determine the transaction fee (e.g. 10aphoton)" )
2023-01-05 05:09:34 +00:00
cmd . PersistentFlags ( ) . String ( flags . FlagGas , "300000" , "gas limit to set per-transaction; set to auto to calculate sufficient gas automatically. Note: auto option doesn't always report accurate results. Set a valid coin value to adjust the result. Can be used instead of fees. (default 300000)" ) //nolint:lll
cmd . PersistentFlags ( ) . String ( flags . FlagNode , "tcp://localhost:26657" , "<host>:<port> to tendermint rpc interface for this chain" ) //nolint:lll
cmd . PersistentFlags ( ) . Float64 ( flags . FlagGasAdjustment , flags . DefaultGasAdjustment , "adjustment factor to be multiplied against the estimate returned by the tx simulation; if the gas limit is set manually this flag is ignored " ) //nolint:lll
2021-07-28 09:47:29 +00:00
cmd . PersistentFlags ( ) . StringP ( flags . FlagBroadcastMode , "b" , flags . BroadcastSync , "Transaction broadcasting mode (sync|async|block)" )
2021-09-13 10:36:21 +00:00
cmd . PersistentFlags ( ) . String ( flags . FlagKeyringBackend , keyring . BackendOS , "Select keyring's backend" )
2022-10-12 09:02:09 +00:00
cmd . PersistentFlags ( ) . BoolP ( flags . FlagSkipConfirmation , "y" , false , "Skip tx broadcasting prompt confirmation" )
cmd . Flags ( ) . StringP ( tmcli . OutputFlag , "o" , "text" , "Output format (text|json)" )
2021-07-28 09:47:29 +00:00
// --gas can accept integers and "simulate"
// cmd.PersistentFlags().Var(&flags.GasFlagVar, "gas", fmt.Sprintf(
// "gas limit to set per-transaction; set to %q to calculate required gas automatically (default %d)",
// flags.GasFlagAuto, flags.DefaultGasLimit,
// ))
// viper.BindPFlag(flags.FlagTrustNode, cmd.Flags().Lookup(flags.FlagTrustNode))
2021-11-25 15:12:57 +00:00
if err := viper . BindPFlag ( flags . FlagNode , cmd . PersistentFlags ( ) . Lookup ( flags . FlagNode ) ) ; err != nil {
return nil , err
}
if err := viper . BindPFlag ( flags . FlagKeyringBackend , cmd . PersistentFlags ( ) . Lookup ( flags . FlagKeyringBackend ) ) ; err != nil {
return nil , err
}
return cmd , nil
2021-07-28 09:47:29 +00:00
}
2022-10-12 07:34:44 +00:00
// AddGQLFlags adds gql flags for
func AddGQLFlags ( cmd * cobra . Command ) * cobra . Command {
// Add flags for GQL server.
cmd . PersistentFlags ( ) . Bool ( "gql-server" , false , "Start GQL server." )
cmd . PersistentFlags ( ) . Bool ( "gql-playground" , false , "Enable GQL playground." )
cmd . PersistentFlags ( ) . String ( "gql-playground-api-base" , "" , "GQL API base path to use in GQL playground." )
cmd . PersistentFlags ( ) . String ( "gql-port" , "9473" , "Port to use for the GQL server." )
cmd . PersistentFlags ( ) . String ( "log-file" , "" , "File to tail for GQL 'getLogs' API." )
return cmd
}