Linea prover configuration reference
Some configuration keys are operational or environment-specific and are included for completeness. Their presence does not indicate that changing them is recommended or supported for every deployment. Verify their applicability against the relevant release and deployment guidance.
Defaults are values defined in the prover Go source (config_default.go). They are not recommended production settings and may be overridden by deployment configuration. Sample config-*.toml files are never used as the source of defaults.
This reference lists Linea prover TOML configuration keys, grouped by section. Descriptions come from Go doc comments on the config structs; defaults are shown in the Default column.
Generated from LFDT-Lineth/lineth-monorepo@555fa72.
Options may differ in other Linea prover releases.
Top-level
| Config key | Description | Default | Type | Allowed / required |
|---|---|---|---|---|
assets_dir | AssetsDir stores the root of the directory where the assets are stored (setup) or accessed (prover). | — | string | |
environment | Environment is informational only — it indicates which environment (e.g. devnet, sepolia, mainnet) the config file targets. It is not used for setup paths or any runtime logic; all environments share the same setup and are differentiated only by layer2 public inputs. | — | string | |
log_level | LogLevel sets the log level for the logger. | — | uint8 | required; gte=0; lte=6 |
version | if we supply as is to coordinator in responses, coordinator should parse semver | — | string | required; semver |
Controller
| Config key | Description | Default | Type | Allowed / required |
|---|---|---|---|---|
controller.defer_to_other_large_codes | List of exit codes for which the job will put back the job to be reexecuted in large mode. | [137] | []int | |
controller.enable_aggregation | EnableAggregation controls whether aggregation jobs are picked up. | true | bool | |
controller.enable_data_availability | EnableDataAvailability controls whether data-availability jobs are picked up. | true | bool | |
controller.enable_execution | EnableExecution controls whether execution jobs are picked up. | true | bool | |
controller.enable_invalidity | EnableInvalidity controls whether invalidity jobs are picked up. | true | bool | |
controller.prometheus.enabled | Enabled toggles the Prometheus metrics endpoint on or off. | — | bool | |
controller.prometheus.port | Port for the metrics endpoint; defaults to 9090 (Prometheus library default, not set by the prover). | — | int | |
controller.prometheus.route | The default implementation default to /metrics. The route should be prefixed with a "/". If it is not, the underlying implementation will assign it. | — | string | |
controller.retry_delays | The delays at which we retry when we find no files in the queue. If this is set to [0, 1, 2, 3, 4, 5]. It will retry after 0 sec the first time it cannot find a file in the queue, 1 sec the second time and so on. Once it reaches the final value it keeps it as a final retry delay. | [0, 1, 2, 3, 5, 8, 13, 21, 44, 85] | []int | |
controller.retry_locally_with_large_codes | List of exit codes for which the job will retry in large mode | [77, 333, 2] | []int | |
controller.spot_instance_reclaim_time_seconds | The number of seconds infra (AWS) waits before reclaiming a spot instance | 120 | int | |
controller.termination_grace_period_seconds | The number of seconds the controller should wait before killing a worker after receiving a SIGTERM | 2700 | int | |
controller.worker_cmd_large_tmpl | WorkerCmdLarge is the template string for spawning a large-mode worker process. | prover prove --config \{\{.ConfFile\}\} --in \{\{.InFile\}\} --out \{\{.OutFile\}\} --large | string | |
controller.worker_cmd_tmpl | WorkerCmd is the template string for spawning a standard worker process. | prover prove --config \{\{.ConfFile\}\} --in \{\{.InFile\}\} --out \{\{.OutFile\}\} | string |
Execution
| Config key | Description | Default | Type | Allowed / required |
|---|---|---|---|---|
execution.can_run_full_large | CanRunFullLarge indicates whether the prover is running on a large machine (and can run full large traces). | — | bool | |
execution.conflated_traces_dir | ConflatedTracesDir stores the directory where the conflation traces are stored. | /shared/traces/conflated | string | required |
execution.ignore_compatibility_check | IgnoreCompatiblityCheck indicates whether to ignore constaints version checking between trace files and zkevm.bin constraint files. Specifically, this check ensures that the zkevm.bin file used within the prover was generated from the same commit of linea-constraints as the generated lt trace file. Set this to true to disable compatibility checks (default: false). | false | bool | |
execution.keep_traces_until_block | KeepTraceUntil is an optional parameter (default to 0) that indicates a maximum block height under which the prover will not delete the execution traces from EFS. The block height that is compared to this value is the "end" block of the request range. | — | int | |
execution.limitless_with_debug | LimitlessWithDebug is only looked at when the limitless prover is activated. When set to true, the limitless prover will only run in debug mode and not produce any proof. This is useful to investigate bugs in the limitless prover. The field is optional and defaults to false. | — | bool | |
execution.prover_mode | ProverMode stores the kind of prover to use. | — | string | required; dev|partial|full|proofless|bench|check-only|limitless |
execution.requests_root_dir | RequestsRootDir is the root directory for incoming job requests and completed results. | /shared/prover-execution | string | required |
execution.serialization | Serialization enables loading the inner circuit (wizard IOP) from a serialized file on disk via memory-mapping, instead of compiling it at proving time. The file is produced during setup by protocol/serde. | false | bool |
Data availability
| Config key | Description | Default | Type | Allowed / required |
|---|---|---|---|---|
data_availability.dict_nb_bytes | DictNbBytes is the number of bytes in the prover dictionary. | 65536 | int | gt=0 |
data_availability.dict_paths | DictPaths points to dictionaries used for decompressing executions data stored in the DA layer. | — | []string | |
data_availability.max_nb_batches | MaxNbBatches is the maximum number of execution batches allowed in a single DA proof. | 100 | int | required; gt=0 |
data_availability.max_uncompressed_nb_bytes | MaxUncompressedNbBytes is the maximum number of bytes in the uncompressed blob payload. | — | int | required; gt=0 |
data_availability.prover_mode | ProverMode stores the kind of prover to use. | — | string | required; dev|full |
data_availability.requests_root_dir | RequestsRootDir is the root directory for incoming job requests and completed results. | /shared/prover-compression | string | required |
Invalidity
| Config key | Description | Default | Type | Allowed / required |
|---|---|---|---|---|
invalidity.can_run_full_large | CanRunFullLarge indicates whether the prover can run with large trace limits. | — | bool | |
invalidity.limitless_with_debug | LimitlessWithDebug is only looked at when the limitless invalidity prover is activated. When set to true, the limitless invalidity prover will only run in debug mode and not produce any proof. This is useful to investigate bugs in the limitless invalidity prover. The field is optional and defaults to false. | — | bool | |
invalidity.max_rlp_byte_size | MaxRlpByteSize specifies the maximum size of the RLP-encoded data, in bytes (this is the payload size without signature) | — | int | gte=0 |
invalidity.prover_mode | ProverMode stores the kind of prover to use. | — | string | required; dev|partial|full|limitless |
invalidity.requests_root_dir | RequestsRootDir is the root directory for incoming job requests and completed results. | /shared/prover-invalidity | string | required |
Aggregation
| Config key | Description | Default | Type | Allowed / required |
|---|---|---|---|---|
aggregation.is_allowed_circuit_id | IsAllowedCircuitID is a bitmask encoding which circuit IDs are allowed. Bit i (LSb to MSb) indicates whether circuit ID i is allowed. This should be computed based on the environment (testnet vs mainnet). Use circuits.GlobalCircuitIDMapping to set the appropriate bits. | — | uint64 | required |
aggregation.num_proofs | NumProofs is the list of supported aggregation batch sizes (circuit variants), e.g. [10, 20, 50, 100]. | — | []int | required; gt=0 |
aggregation.prover_mode | ProverMode stores the kind of prover to use. | — | string | required; dev|full |
aggregation.requests_root_dir | RequestsRootDir is the root directory for incoming job requests and completed results. | /shared/prover-aggregation | string | required |
aggregation.verifier_id | VerifierID is assigned to the proof and used by L1 contracts to select the Solidity Plonk verifier contract. | — | int | gte=0 |
Public input interconnection
| Config key | Description | Default | Type | Allowed / required |
|---|---|---|---|---|
public_input_interconnection.execution_max_nb_msg | ExecutionMaxNbMsg is the max number of L2-to-L1 messages per execution proof. | — | int | gte=0 |
public_input_interconnection.l2_msg_max_nb_merkle | L2MsgMaxNbMerkle is the max number of L2-to-L1 Merkle trees per aggregation; auto-computed when zero. | — | int | gte=0 |
public_input_interconnection.l2_msg_merkle_depth | L2MsgMerkleDepth is the depth of each L2-to-L1 message Merkle tree. | — | int | gte=0 |
public_input_interconnection.max_nb_circuits | MaxNbCircuits is an optional combined cap across all proof types; zero disables the check. | — | int | gte=0 |
public_input_interconnection.max_nb_data_availability | MaxNbDataAvailability is the max number of DA proofs per aggregation. | — | int | gte=0 |
public_input_interconnection.max_nb_execution | MaxNbExecution is the max number of execution proofs per aggregation. | — | int | gte=0 |
public_input_interconnection.max_nb_invalidity | MaxNbInvalidity is the max number of invalidity proofs per aggregation. | — | int | gte=0 |
Debug
| Config key | Description | Default | Type | Allowed / required |
|---|---|---|---|---|
debug.performance_monitor.active | Active enables granular per-step or per-round CPU profiling of the prover. | false | bool | |
debug.performance_monitor.profile | Profile selects the profiling scope: "prover-steps", "prover-rounds", or "all". | prover-rounds | string | prover-steps|prover-rounds|all |
debug.performance_monitor.profile_dir | ProfileDir is the directory where performance profile files are written. | /shared/prover-execution/profiling | string | |
debug.performance_monitor.sample_duration | SampleDuration is the sampling interval used when collecting performance profiles. | 1s | time.Duration | |
debug.profiling | Profiling indicates whether we want to generate profiles using the [runtime/pprof] pkg. Profiles the entire execution proof request-response lifecycle | false | bool | |
debug.tracing | Tracing indicates whether we want to generate traces using the [runtime/trace] pkg. Traces can later be read using the `go tool trace` command. | false | bool |
Layer2
| Config key | Description | Default | Type | Allowed / required |
|---|---|---|---|---|
layer2.base_fee | No validator tag: presence is enforced in newConfigFromFile via viper.IsSet. `required` would reject 0, which is valid on gasless chains where every block has baseFeePerGas=0. | — | uint | |
layer2.chain_id | ChainID stores the ID of the Linea L2 network to consider. | — | uint | required |
layer2.coin_base | CoinBaseStr stores the coinbase address of Linea as a string. | — | string | required; eth_addr |
layer2.message_service_contract | MsgSvcContractStr stores the unique ID of the Service Contract (SC), that is, it's address, as a string. The Service Contract (SC) is a smart contract that the L2 network uses to send messages (i.e., transactions) to the L1 (mainnet). Use this field when you need the ETH address as a string. | — | string | required; eth_addr |
Traces limits
The traces_limits section configures per-arithmetization-module row budgets used during execution proving.
It is a list of module entries under traces_limits.modules, each with:
module(string, required) — module name prefix; the empty string is the default fallbacklimit(int, required, power of 2) — limit used in normal modelimit_large(int, required, power of 2) — limit used when large mode is activeis_not_scalable(bool, optional) — when true, limitless scaling must not multiply this entry
Lookup uses longest-prefix matching after sorting entries in reverse alphabetical order.
Large mode (for example via --large) selects limit_large instead of limit.
When a scaling factor is applied and is_not_scalable is false, the selected limit is multiplied.
Concrete module tables are environment-specific; see the prover sample config-*.toml files for examples.
Those samples are not portable defaults and are not reproduced here.