Skip to content

State Backend

The state backend is Containment Chamber’s bookkeeping store. It is separate from validator key storage and anti-slashing storage, even when all three use DynamoDB.

Most operators do not need this page during normal setup. It is useful when debugging initialization, unseal, auth propagation, or multi-replica behavior.

DataWhy it exists
Master-key metadataKMS-wrapped Shamir shares and integrity data used during unseal
Operator quorum configOperator names, threshold, and rotation staging
Operator credentialsEncrypted per-operator shares for passphrase or YubiKey unseal
Auth policies and tokensRuntime access-control data
TEE auto-unseal blobNitro Enclave auto-unseal state

It does not store validator private keys. Those live in the configured key source. It does not store slashing-protection records. Those live in the anti-slashing backend.

The state backend is required for the DynamoDB key source because the master key has to be reconstructed across restarts. Filesystem-only deployments do not need it.

signer_state:
backend: dynamodb
table: containment-state
refresh_interval_seconds: 1
unseal_timeout_minutes: 30

Use a distinct DynamoDB table for signer state. Do not reuse the validator-key table or the anti-slashing table.

Every replica polls the state backend on signer_state.refresh_interval_seconds. That polling lets a fresh process observe:

  • An initialization completed by another replica.
  • KMS or TEE auto-unseal state.
  • Auth policy and token changes.
  • Quorum rotation progress.

Set the refresh interval low enough for operational changes to propagate at an acceptable speed. Avoid setting it to 0 in production unless you intentionally want to disable cross-replica refresh behavior.

SymptomCheck
Signer starts as uninitialized unexpectedlyThe signer may be pointed at the wrong state table.
Auth edits do not propagateCheck refresh_interval_seconds and DynamoDB read permissions.
Unseal never reaches thresholdConfirm every operator credential row exists and belongs to the expected state table.
TEE auto-unseal never worksConfirm the TEE auto-unseal blob exists and that Nitro measurements still match.