# This is a TOML config file. # For more information, see https://github.com/toml-lang/toml ############################################################################### ### Base Configuration ### ############################################################################### # The minimum gas prices a validator is willing to accept for processing a # transaction. A transaction's fees must meet the minimum of any denomination # specified in this config (e.g. 0.25token1;0.0001token2). minimum-gas-prices = "0uhpx" # MinRetainBlocks defines the minimum block height offset from the current block # for pruning Tendermint blocks. Set to 0 to disable pruning. This only affects # Tendermint block pruning, not application state (see "pruning-*" configs). min-retain-blocks = 100000 # ConcurrencyWorkers defines how many workers to run for concurrent transaction execution. # Default is dynamically set to 2x CPU cores, capped at 128, with a minimum of 10. concurrency-workers = 4 # occ-enabled defines whether OCC is enabled or not for transaction execution occ-enabled = true # HaltHeight contains a non-zero block height at which a node will gracefully # halt and shutdown that can be used to assist upgrades and testing. # # Note: Commitment of state will be attempted on the corresponding block. halt-height = 0 # HaltTime contains a non-zero minimum block time (in Unix seconds) at which # a node will gracefully halt and shutdown that can be used to assist upgrades # and testing. # # Note: Commitment of state will be attempted on the corresponding block. halt-time = 0 # InterBlockCache enables inter-block caching. inter-block-cache = true # IndexEvents defines the set of events in the form {eventType}.{attributeKey}, # which informs Tendermint what to index. If empty, all events will be indexed. # # Example: # ["message.sender", "message.recipient"] index-events = [] # CompactionInterval sets (in seconds) the interval between forced levelDB # compaction. A value of 0 means no forced levelDB. # Default is 0. compaction-interval = 0 ############################################################################### ### State Sync Configuration ### ############################################################################### # State sync snapshots allow other nodes to rapidly join the network without replaying historical # blocks, instead downloading and applying a snapshot of the application state at a given height. [state-sync] # snapshot-interval specifies the block interval at which local state sync snapshots are # taken (0 to disable). Must be a multiple of pruning-keep-every. snapshot-interval = 0 # snapshot-keep-recent specifies the number of recent snapshots to keep and serve (0 to keep all). snapshot-keep-recent = 2 # snapshot-directory sets the directory for where state sync snapshots are persisted. # default is empty which will then store under the app home directory same as before. snapshot-directory = "" ############################################################################### ### State Commit Configuration ### ############################################################################### [state-commit] # Enable defines if the SeiDB state-commit should be enabled. sc-enable = true # Defines the SC store directory, if not explicitly set, default to application home directory sc-directory = "" # Max concurrent historical proof queries (RPC /store path) sc-historical-proof-max-inflight = 1 # Historical proof query rate limit in req/sec (<=0 disables rate limiting) sc-historical-proof-rate-limit = 1 # Historical proof query burst size sc-historical-proof-burst = 1 # AsyncCommitBuffer defines the size of asynchronous commit queue, this greatly improve block catching-up # performance, setting to 0 means synchronous commit. sc-async-commit-buffer = 100 # KeepRecent defines how many state-commit snapshots (besides the latest one) to keep # defaults to 0 to only keep one current snapshot sc-keep-recent = 0 # SnapshotInterval defines the block interval the snapshot is taken, default to 10000 blocks. sc-snapshot-interval = 10000 # SnapshotMinTimeInterval defines the minimum time interval (in seconds) between snapshots. # This prevents excessive snapshot creation during catch-up and ensures snapshots don't overlap # (current snapshot creation takes 3+ hours). Default to 3600 seconds (1 hour). # Note: If you set a small sc-snapshot-interval (e.g., < 5000), you may want to reduce this value # to allow more frequent snapshots during normal operation. sc-snapshot-min-time-interval = 3600 # SnapshotPrefetchThreshold defines the page cache residency threshold (0.0-1.0) to trigger snapshot prefetch. # Prefetch sequentially reads nodes/leaves files into page cache for faster cold-start replay. # Only active trees (evm/bank/acc/wasm) are prefetched, skipping sparse kv files to save memory. # Skips prefetch if more than threshold of pages already resident (e.g., 0.8 = 80%). # Defaults to 0.8 sc-snapshot-prefetch-threshold = 0.8 # Maximum snapshot write rate in MB/s (global across all trees). 0 = unlimited. Default 100. sc-snapshot-write-rate-mbps = 100 # WriteMode defines the write routing mode for EVM data in the SC layer. # Valid values: memiavl_only, migrate_evm, evm_migrated, migrate_all_but_bank, # all_migrated_but_bank, migrate_bank, flatkv_only, test_only_dual_write sc-write-mode = "memiavl_only" # KeysToMigratePerBlock controls how many EVM keys the in-flight migration # (sc-write-mode = migrate_evm / migrate_bank / migrate_all_but_bank) drains # from memiavl into flatkv per block. Default 1024 is appropriate for # production drains; lower it (e.g. 256) to spread the migration across more # blocks for test runs that need to observe the resume / hybrid-read path. # Must be > 0; ignored entirely when not in a migration mode. sc-keys-to-migrate-per-block = 1024 ############################################################################### ### FlatKV (EVM) Configuration ### ############################################################################### [state-commit.flatkv] # Fsync controls whether PebbleDB writes (data DBs + metadataDB) use fsync. # WAL always uses NoSync (matching memiavl); crash recovery relies on # WAL catchup, which is idempotent. Default: false. fsync = false # AsyncWriteBuffer defines the size of the async write buffer for data DBs. # Set <= 0 for synchronous writes. async-write-buffer = 100 # SnapshotInterval defines how often (in blocks) a PebbleDB checkpoint is taken. # 0 disables auto-snapshots. Default: 10000. snapshot-interval = 10000 # SnapshotKeepRecent defines how many old snapshots to keep besides the latest one. # 0 = keep only the current snapshot. Default: 2. snapshot-keep-recent = 2 ############################################################################### ### State Store Configuration ### ############################################################################### [state-store] # Enable defines whether the state-store should be enabled for storing historical data. # Supporting historical queries or exporting state snapshot requires setting this to true # This config only take effect when SeiDB is enabled (sc-enable = true) ss-enable = true # Defines the directory to store the state store db files # If not explicitly set, default to application home directory ss-db-directory = "" # DBBackend defines the backend database used for state-store. # Supported backends: pebbledb, rocksdb # defaults to pebbledb (recommended) ss-backend = "pebbledb" # AsyncWriteBuffer defines the async queue length for commits to be applied to State Store # Set <= 0 for synchronous writes, which means commits also need to wait for data to be persisted in State Store. # defaults to 100 for asynchronous writes ss-async-write-buffer = 100 # KeepRecent defines the number of versions to keep in state store # Setting it to 0 means keep everything # Default to keep the last 100,000 blocks ss-keep-recent = 100000 # PruneInterval defines the minimum interval in seconds + some random delay to trigger SS pruning. # It is recommended to trigger pruning less frequently with a large interval. # default to 600 seconds ss-prune-interval = 600 # ImportNumWorkers defines the concurrency for state sync import # defaults to 1 ss-import-num-workers = 1 # EVMDBDirectory defines the directory for the optional EVM state-store DB(s). # If unset, defaults to /data/evm_ss when EVM SS is enabled. evm-ss-db-directory = "" # EVMSplit controls whether EVM data is routed to a dedicated SS backend. # When false (default), EVM data lives in the Cosmos SS backend alongside # everything else. When true, EVM data is routed exclusively to the EVM SS # backend; non-EVM data stays in Cosmos SS. No fallback between backends. evm-ss-split = false # SeparateEVMSubDBs controls whether EVM data is split across per-type DBs. # When false, all EVM data stays in one DB using the current unified layout. # When true, data is routed to separate DBs while preserving the same evm key prefix format. evm-ss-separate-dbs = false ############################################################################### ### Receipt Store Configuration ### ############################################################################### [receipt-store] # Backend defines the receipt store backend. # Supported backends: pebble (aka pebbledb) # defaults to pebbledb rs-backend = "pebbledb" # Defines the receipt store directory. If unset, defaults to /data/ledger/receipt/{backend} db-directory = "" # AsyncWriteBuffer defines the async queue length for commits to be applied to receipt store. # Applies only when rs-backend = "pebbledb". # Set <= 0 for synchronous writes. # defaults to 100 async-write-buffer = 100 # PruneIntervalSeconds defines the interval in seconds to trigger pruning. # Receipt retention is controlled by the global min-retain-blocks flag. # defaults to 600 seconds prune-interval-seconds = 600 ############################################################################### ### EVM Configuration ### ############################################################################### [evm] # controls whether an HTTP EVM server is enabled http_enabled = true http_port = 8545 # controls whether a websocket server is enabled ws_enabled = true ws_port = 8546 # ReadTimeout is the maximum duration for reading the entire # request, including the body. # Because ReadTimeout does not let Handlers make per-request # decisions on each request body's acceptable deadline or # upload rate, most users will prefer to use # ReadHeaderTimeout. It is valid to use them both. read_timeout = "30s" # ReadHeaderTimeout is the amount of time allowed to read # request headers. The connection's read deadline is reset # after reading the headers and the Handler can decide what # is considered too slow for the body. If ReadHeaderTimeout # is zero, the value of ReadTimeout is used. If both are # zero, there is no timeout. read_header_timeout = "30s" # WriteTimeout is the maximum duration before timing out # writes of the response. It is reset whenever a new # request's header is read. Like ReadTimeout, it does not # let Handlers make decisions on a per-request basis. write_timeout = "30s" # IdleTimeout is the maximum amount of time to wait for the # next request when keep-alives are enabled. If IdleTimeout # is zero, the value of ReadTimeout is used. If both are # zero, ReadHeaderTimeout is used. idle_timeout = "2m0s" # Maximum gas limit for simulation simulation_gas_limit = 10000000 # Timeout for EVM call in simulation simulation_evm_timeout = "1m0s" # list of CORS allowed origins, separated by comma cors_origins = "*" # list of WS origins, separated by comma ws_origins = "*" # timeout for filters filter_timeout = "2m0s" # checkTx timeout for sig verify checktx_timeout = "5s" # controls whether to have txns go through one by one slow = false # Deny list defines list of methods that EVM RPC should fail fast, e.g ["debug_traceBlockByNumber"] deny_list = [] # Legacy sei_* / sei2_* JSON-RPC (EVM HTTP only - not Cosmos REST on 1317). # # DEPRECATION: The sei_* and sei2_* JSON-RPC surfaces are deprecated and scheduled for removal. Do not # build new integrations on them; use eth_* / debug_* and documented replacements. HTTP 200; # gate errors use standard JSON-RPC error encoding (see evmrpc/AGENTS.md). Successful allowlisted # responses are unchanged; nodes may set HTTP header Sei-Legacy-RPC-Deprecation (see AGENTS.md). # # Only methods listed in enabled_legacy_sei_apis are allowed. Init defaults enable the three # address/Cosmos helpers; uncomment optional lines below to enable more legacy methods (include # sei2_* block methods at the end of the list if you need them). enabled_legacy_sei_apis = [ "sei_getSeiAddress", "sei_getEVMAddress", "sei_getCosmosTx", # Optional legacy methods - uncomment to enable (same deprecation applies): # "sei_associate", # "sei_getBlockByHash", # "sei_getBlockByHashExcludeTraceFail", # "sei_getBlockByNumber", # "sei_getBlockByNumberExcludeTraceFail", # "sei_getBlockReceipts", # "sei_getBlockTransactionCountByHash", # "sei_getBlockTransactionCountByNumber", # "sei_getEvmTx", # "sei_getFilterChanges", # "sei_getFilterLogs", # "sei_getLogs", # "sei_getTransactionByBlockHashAndIndex", # "sei_getTransactionByBlockNumberAndIndex", # "sei_getTransactionByHash", # "sei_getTransactionCount", # "sei_getTransactionErrorByHash", # "sei_getTransactionReceipt", # "sei_getTransactionReceiptExcludeTraceFail", # "sei_getVMError", # "sei_newBlockFilter", # "sei_newFilter", # "sei_sign", # "sei_traceBlockByHashExcludeTraceFail", # "sei_traceBlockByNumberExcludeTraceFail", # "sei_uninstallFilter", # # Optional sei2_* block namespace (bank transfers in blocks; HTTP only): # "sei2_getBlockByHash", # "sei2_getBlockByHashExcludeTraceFail", # "sei2_getBlockByNumber", # "sei2_getBlockByNumberExcludeTraceFail", # "sei2_getBlockReceipts", # "sei2_getBlockTransactionCountByHash", # "sei2_getBlockTransactionCountByNumber", ] # max number of logs returned if block range is open-ended max_log_no_block = 10000 # max number of blocks to query logs for max_blocks_for_log = 2000 # max number of concurrent NewHead subscriptions max_subscriptions_new_head = 10000 # MaxConcurrentTraceCalls defines the maximum number of concurrent debug_trace calls. # Set to 0 for unlimited. max_concurrent_trace_calls = 10 # Max number of blocks allowed to look back for tracing # Set to -1 for unlimited lookback, which is useful for archive nodes. max_trace_lookback_blocks = 10000 # Timeout for each trace call trace_timeout = "30s" # Enable the parallelized default debug_traceBlock* path. enable_parallelized_block_trace = false # WorkerPoolSize defines the number of workers in the worker pool. # Default: min(64, CPU cores × 2). Capped at 64 to prevent excessive goroutines on high-core machines. # Set to 0 to use the default. worker_pool_size = 64 # WorkerQueueSize defines the size of the task queue in the worker pool. # Default: 1000 tasks. Set to 0 to use the default. worker_queue_size = 1000 # TraceBakeEnabled, when true, runs a background worker that re-executes # each committed block with the configured tracers and stores the result # to /data/trace_db. debug_traceTransaction with a bakeable # tracer config (callTracer / prestateTracer / flatCallTracer) returns # from cache on hit. Recommended for RPC nodes only; default false. trace_bake_enabled = false # Number of re-execution worker goroutines (default 1). trace_bake_workers = 1 # Bounded in-flight height queue. Drops on full so consensus never blocks. trace_bake_queue_size = 4096 # Which tracers to bake per block; only standard named tracers are eligible. trace_bake_tracers = ["callTracer"] # Rolling cache window: prune blocks older than (latest - this). # 0 disables pruning (cache grows forever). trace_bake_window_blocks = 0 # TraceBakeUseSnapshot, when true, uses in-memory memiavl snapshots as the # state backend for trace baking when the store backend supports snapshots. # Watch these metrics when enabling on a high-throughput node: # - memiavl_mem_node_total_size / memiavl_num_of_mem_node: rise if held # snapshots are pinning too many COW nodes; lower the window or drop the # memiavl snapshot interval. # - trace baker dropped/baked counters: dropped > 0 or baked lagging chain # tip means the baker is falling behind. trace_bake_use_snapshot = false # Number of recent memiavl snapshots to retain for trace baking. trace_bake_snapshot_window = 64 # ip_rate_limit_rps is the per-IP sustained request rate in requests/second. # Set to 0 to disable per-IP rate limiting (all requests pass through). ip_rate_limit_rps = 200 # ip_rate_limit_burst is the maximum per-IP burst above the sustained rate. ip_rate_limit_burst = 400 ############################################################################### ### Giga Executor Configuration ### ############################################################################### [giga_executor] # enabled controls whether to use the Giga executor for improved EVM throughput. # Default: true enabled = false # occ_enabled controls whether to use OCC (Optimistic Concurrency Control) with the Giga executor. # When true, transactions are executed in parallel with conflict detection and retry. # Default: true occ_enabled = true ############################################################################### ### Admin Configuration (Auto-managed) ### ############################################################################### [admin_server] # Enable the admin gRPC server for runtime log level control. admin_enabled = false # Listen address for the admin gRPC server. Must be a loopback address. admin_address = "127.0.0.1:9095" ############################################################################### ### Telemetry Configuration (Auto-managed) ### ############################################################################### [telemetry] # Prefixed with keys to separate services. service-name = "" # Enabled enables the application telemetry functionality. When enabled, # an in-memory sink is also enabled by default. Operators may also enabled # other sinks such as Prometheus. enabled = true # Enable prefixing gauge values with hostname. enable-hostname = false # Enable adding hostname to labels. enable-hostname-label = false # Enable adding service to labels. enable-service-label = false # PrometheusRetentionTime, when positive, enables a Prometheus metrics sink. prometheus-retention-time = 7200 # When both 'api.enable' and 'telemetry.enabled' are true, this node will expose # application metrics (custom Cosmos SDK metrics) on the API server endpoint along with the # Tendermint metrics (port 26660) which are always enabled. # GlobalLabels defines a global set of name/value label tuples applied to all # metrics emitted using the wrapper functions defined in telemetry package. # # Example: # [["chain_id", "cosmoshub-1"]] global-labels = [] ############################################################################### ### API Configuration (Auto-managed) ### ############################################################################### [api] # Enable defines if the API server should be enabled. enable = true # Swagger defines if swagger documentation should automatically be registered. swagger = true # Address defines the API server to listen on. address = "tcp://0.0.0.0:1317" # MaxOpenConnections defines the number of maximum open connections. max-open-connections = 1000 # RPCReadTimeout defines the Tendermint RPC read timeout (in seconds). rpc-read-timeout = 10 # RPCWriteTimeout defines the Tendermint RPC write timeout (in seconds). rpc-write-timeout = 0 # RPCMaxBodyBytes defines the Tendermint maximum response body (in bytes). rpc-max-body-bytes = 1000000 # EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk). enabled-unsafe-cors = false ############################################################################### ### Rosetta Configuration (Auto-managed) ### ############################################################################### [rosetta] # Enable defines if the Rosetta API server should be enabled. enable = false # Address defines the Rosetta API server to listen on. address = ":8080" # Network defines the name of the blockchain that will be returned by Rosetta. blockchain = "app" # Network defines the name of the network that will be returned by Rosetta. network = "network" # Retries defines the number of retries when connecting to the node before failing. retries = 3 # Offline defines if Rosetta server should run in offline mode. offline = false ############################################################################### ### gRPC Configuration (Auto-managed) ### ############################################################################### [grpc] # Enable defines if the gRPC server should be enabled. enable = true # Address defines the gRPC server address to bind to. address = "0.0.0.0:9090" ############################################################################### ### gRPC Web Configuration (Auto-managed) ### ############################################################################### [grpc-web] # GRPCWebEnable defines if the gRPC-web should be enabled. # NOTE: gRPC must also be enabled, otherwise, this configuration is a no-op. enable = true # Address defines the gRPC-web server address to bind to. address = "0.0.0.0:9091" # EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk). enable-unsafe-cors = false ############################################################################### ### Genesis Configuration (Auto-managed) ### ############################################################################### # Genesis config allows configuring whether to stream from an genesis json file in streamed form [genesis] # stream-import specifies whether to the stream the import from the genesis json file. The genesis # file must be in stream form and exported in a streaming fashion. stream-import = false # genesis-stream-file specifies the path of the genesis json file to stream from. genesis-stream-file = "" ############################################################################### ### WASM Configuration (Auto-managed) ### ############################################################################### [wasm] # This is the maximum sdk gas (wasm and storage) that we allow for any x/wasm "smart" queries query_gas_limit = 300000 # This is the number of wasm vm instances we keep cached in memory for speed-up # Warning: this is currently unstable and may lead to crashes, best to keep for 0 unless testing locally lru_size = 0 ############################################################################### ### ETH Replay Configuration (Auto-managed) ### ############################################################################### [eth_replay] eth_replay_enabled = false eth_rpc = "http://44.234.105.54:18545" eth_data_dir = "/root/.ethereum/chaindata" eth_replay_contract_state_checks = false ############################################################################### ### ETH Block Test Configuration (Auto-managed) ### ############################################################################### [eth_blocktest] eth_blocktest_enabled = false eth_blocktest_test_data_path = "~/testdata/" ############################################################################### ### EVM Query Configuration (Auto-managed) ### ############################################################################### [evm_query] evm_query_gas_limit = 300000 ############################################################################### ### Light Invariance Configuration (Auto-managed) ### ############################################################################### [light_invariance] supply_enabled = true