nautechsystems/nautilus_trader · error
Verified action requires the configured provider identities
Error message
Verified action requires the configured provider identities
What it means
A validation guard requiring the batch to carry the configured redundancy topology: exactly 3 provider_ids, exactly 3 operator_ids, and at least 3 failure_domain_ids. The library enforces this shape so recorded verified-action evidence proves quorum across the expected provider/operator/failure-domain sets.
Source
Thrown at crates/adapters/blockchain/src/cache/database.rs:6052
assignment.nonce
);
transaction
.commit()
.await
.map_err(|e| anyhow::anyhow!("Failed to commit verified nonce assignment: {e}"))?;
Ok(())
}
/// Appends one verified decision batch before an action on an existing active intent.
pub(crate) async fn record_execution_verification_batch(
&self,
batch: &ExecutionVerificationBatch<'_>,
) -> anyhow::Result<()> {
anyhow::ensure!(
!batch.decision_class.trim().is_empty() && !batch.decisions.is_empty(),
"Verified action requires a decision class and evidence"
);
anyhow::ensure!(
batch.provider_ids.len() == 3
&& batch.operator_ids.len() == 3
&& batch.failure_domain_ids.len() >= 3,
"Verified action requires the configured provider identities"
);
let chain_id = i32::try_from(batch.chain_id)
.context("Verification chain ID exceeds PostgreSQL INTEGER")?;
let nonce =
i64::try_from(batch.nonce).context("Execution nonce exceeds PostgreSQL BIGINT")?;
let mut transaction = self
.pool
.begin()
.await
.map_err(|e| anyhow::anyhow!("Failed to start verified action evidence: {e}"))?;
let (manifest_version, manifest_digest, revision) =
sqlx::query_as::<_, (String, String, i64)>(
"
SELECT manifest_version, manifest_digest, revisionView on GitHub (pinned to 18893faf8b)
Solutions
- Collect responses from exactly 3 configured providers and 3 operators before building the batch.
- Attach failure-domain ids to every response so at least 3 distinct domains are present.
- If the topology intentionally changed, update the batch construction to match the new configured counts.
Example fix
// before: submit with whatever came back let batch = build_batch(responses); record_execution_verification_batch(&db, &batch).await?; // after: gate on the required counts anyhow::ensure!(responses.providers.len() == 3 && responses.operators.len() == 3 && distinct_failure_domains(&responses) >= 3, "insufficient quorum responses"); let batch = build_batch(responses); record_execution_verification_batch(&db, &batch).await?;
Defensive patterns
Strategy: validation
Validate before calling
// Rust
fn has_quorum_ids(batch: &ExecutionVerificationBatch) -> bool {
batch.provider_ids.len() == 3
&& batch.operator_ids.len() == 3
&& batch.failure_domain_ids.len() >= 3
} Type guard
fn identities_complete(batch: &ExecutionVerificationBatch) -> bool { has_quorum_ids(batch) } Prevention
- Derive expected provider/operator counts from configuration, not hardcoding.
- Fail collection early when a provider/operator response is missing.
- Attach failure-domain metadata to every response at source.
When it happens
Trigger: Calling record_execution_verification_batch where provider_ids.len() != 3, operator_ids.len() != 3, or failure_domain_ids.len() < 3.
Common situations: Configuration changed the expected number of providers/operators but the batch assembler still collects the old count; a provider was offline so only 2 responses were gathered; failure-domain metadata not attached to some decisions.
Understand the failure class
Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.
Related errors
- Connect verification evidence is incomplete
- Verified nonce assignment requires exactly three provider an
- snapshot interval must be positive
- Invalid interval_ns: {interval_ns} (must be non-zero)
- Connection rate keys require a connection rate limiter
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/d8adbe05495d88a1.
Report an issue: GitHub.