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

  1. Verify the path exists and is readable, preferring absolute paths: ls -l /path/to/committee.json
  2. Validate the JSON itself: jq . committee.json, then compare its fields against CommitteeConfig (validators with public keys, voting weights, network addresses)
  3. Regenerate the committee config from a known-good template for your Linera version
  4. 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

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


AI-assisted analysis of linera-io/linera-protocol@6c226ddcb3 (2026-08-22). Data as JSON: /api/errors/f843c146b0187609. Report an issue: GitHub.