linera-io/linera-protocol · error
Unable to read committee config file
Error message
Unable to read committee config file
What it means
The create-genesis-config command reads the committee configuration with util::read_json(committee_config_path) and .expect("Unable to read committee config file") panics if the file cannot be read or parsed. util::read_json both opens the path and deserializes JSON, so a missing file, wrong path, permission error, invalid JSON, or wrong schema all abort the process.
Source
Thrown at linera-service/src/cli/main.rs:2344
maximum_block_size,
maximum_blob_size,
maximum_published_blobs,
maximum_bytecode_size,
maximum_block_proposal_size,
maximum_bytes_read_per_block,
maximum_bytes_written_per_block,
maximum_oracle_response_bytes,
maximum_http_response_bytes,
http_request_timeout_ms,
http_request_allow_list,
free_application_ids,
flags,
testing_prng_seed,
network_name,
} => {
let start_time = Instant::now();
let committee_config: CommitteeConfig = util::read_json(committee_config_path)
.expect("Unable to read committee config file");
let existing_policy = policy_config.into_policy();
let policy = linera_execution::ResourceControlPolicy {
wasm_fuel_unit: wasm_fuel_unit_price.unwrap_or(existing_policy.wasm_fuel_unit),
evm_fuel_unit: evm_fuel_unit_price.unwrap_or(existing_policy.evm_fuel_unit),
read_operation: read_operation_price.unwrap_or(existing_policy.read_operation),
write_operation: write_operation_price.unwrap_or(existing_policy.write_operation),
byte_runtime: byte_runtime_price.unwrap_or(existing_policy.byte_runtime),
byte_read: byte_read_price.unwrap_or(existing_policy.byte_read),
byte_written: byte_written_price.unwrap_or(existing_policy.byte_written),
blob_read: blob_read_price.unwrap_or(existing_policy.blob_read),
blob_published: blob_published_price.unwrap_or(existing_policy.blob_published),
blob_byte_read: blob_byte_read_price.unwrap_or(existing_policy.blob_byte_read),
blob_byte_published: blob_byte_published_price
.unwrap_or(existing_policy.blob_byte_published),
operation: operation_price.unwrap_or(existing_policy.operation),
operation_byte: operation_byte_price.unwrap_or(existing_policy.operation_byte),
message: message_price.unwrap_or(existing_policy.message),
message_byte: message_byte_price.unwrap_or(existing_policy.message_byte),View on GitHub (pinned to 6c226ddcb3)
Solutions
- Verify the path exists and is readable, preferring absolute paths: ls -l /path/to/committee.json
- Validate the JSON itself: jq . committee.json, then compare its fields against CommitteeConfig (validators with public keys, voting weights, network addresses)
- Regenerate the committee config from a known-good template for your Linera version
- Run the CLI from the directory the relative path was designed for, or convert the path to absolute
Example fix
# before linera create-genesis-config committee.json --committee ... # path wrong/typo # after jq . /etc/linera/committee.json # confirms valid JSON + schema linera create-genesis-config /etc/linera/committee.json ...
Defensive patterns
Strategy: validation
Validate before calling
# Pre-flight the committee config before genesis creation.
CONF=/etc/linera/committee.json
test -r "$CONF" || { echo "committee config missing/unreadable: $CONF" >&2; exit 1; }
jq -e '.validators | length > 0' "$CONF" >/dev/null || { echo 'committee config schema invalid' >&2; exit 1; } Prevention
- Use absolute config paths in all genesis scripts and systemd units
- jq-validate configs after every hand edit or template render
- Version-control committee configs and diff against the previous known-good one after Linera upgrades
When it happens
Trigger: Running create-genesis-config with a --committee-config-path that does not exist, contains malformed JSON, or holds valid JSON that does not deserialize into CommitteeConfig (e.g. missing validators, wrong key names, weights not numbers).
Common situations: Typo'd relative path run from a different working directory; JSON produced by a jq template with trailing commas or comments; schema drift after upgrading Linera (CommitteeConfig gained/renamed fields); permissions on shared validator setups.
Related errors
- Start timestamp before 1970
- Fail to read server config
- please specify one of `--faucet` or `--genesis`.
- expected whitespace after 'query' keyword
- expected an operation name after 'query', e.g. 'query MyQuer
AI-assisted analysis of linera-io/linera-protocol@6c226ddcb3 (2026-08-22).
Data as JSON: /api/errors/f843c146b0187609.
Report an issue: GitHub.