nautechsystems/nautilus_trader · error
Persisted transaction row chain ID {} does not match configu
Error message
Persisted transaction row chain ID {} does not match configured chain ID {} What it means
Reconciliation guard: a persisted transaction row's chain ID differs from the adapter's configured chain, meaning the database holds rows from a different network deployment; reconciliation aborts to prevent cross-chain recovery.
Source
Thrown at crates/adapters/blockchain/src/execution/client.rs:1201
)
})?;
let policy = PayloadPolicy {
chain_id: self.chain.chain_id,
signer: self.wallet_address,
gas_limit: self.config.gas_limit,
max_fee_per_gas: self.config.max_fee_per_gas_wei,
};
let mut authenticated_payloads = HashMap::new();
let mut current_payload = None;
for hash in &hashes {
anyhow::ensure!(
hash.intent_id == intent.id,
"Persisted transaction row references intent {}, expected {}",
hash.intent_id,
intent.id
);
anyhow::ensure!(
hash.chain_id == self.chain.chain_id,
"Persisted transaction row chain ID {} does not match configured chain ID {}",
hash.chain_id,
self.chain.chain_id
);
if !hash.payload_expected {
anyhow::ensure!(
hash.raw_transaction.is_none() && hash.sealed_transaction.is_none(),
"Replacement transaction {} unexpectedly retains signed bytes",
hash.transaction_hash
);
continue;
}
let raw_transaction = open_execution_payload(
self.payload_keys
.as_deref()
.expect("payload keys checked above"),View on GitHub (pinned to 18893faf8b)
Solutions
- Correct the configured chain_id to match the chain the transactions were signed for
- Use a database belonging to the configured chain, or clear stale rows for the other chain
- Re-sign the intent on the current chain after discarding the foreign-chain rows
Defensive patterns
Strategy: validation
Validate before calling
let hashes = database.get_execution_transaction_hashes(intent.id).await?;
if hashes.iter().any(|h| h.chain_id != configured_chain.chain_id) {
// point config at the right chain or clear foreign rows
} Prevention
- Keep separate databases per chain/environment
- Verify chain_id in config before connecting with an existing database
- Never copy execution DBs between networks
When it happens
Trigger: connect() -> reconcile_unresolved_execution(): hash.chain_id != self.chain.chain_id while validating rows from get_execution_transaction_hashes.
Common situations: Pointing the client at a different network (mainnet vs testnet) or wrong chain_id in config while reusing an existing execution database; DB copied between environments.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- Verification chain anchor ID does not match the configured c
- Verified chain ID does not match the transaction chain
- Persisted transaction row chain ID {} does not match configu
- Chain ID mismatch at connect: expected {expected_chain_id},
- Execution schema version {} is newer than supported version
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/bdca48189bd0ff3f.
Report an issue: GitHub.