{"spec_version":"1.0.0","spec_url":"https://headlessoracle.com/docs/specifications/multi-oracle-consensus-v1","title":"Multi-Oracle Consensus Protocol for Market-State Verification","purpose":"Define how autonomous agents query multiple independent market-state oracles and reach consensus before executing financial transactions.","consensus_algorithm":"majority_with_fail_closed","minimum_oracles":3,"fail_closed_default":true,"consensus_rule":"Execute only if at least floor(N/2)+1 valid oracle responses agree on status=\"open\". All other outcomes fail closed.","regulatory_alignment":["SEC/CFTC Technical Framework for Tokenized Collateral (November 2025)","ESMA algorithmic trading rules","NIST AI risk management framework","Singapore MAS agentic AI governance framework"],"attestation_format":{"exchange":{"type":"string","description":"ISO 10383 Market Identifier Code (MIC), e.g. XNYS","required":true},"status":{"type":"enum","description":"One of: open, closed, pre_market, after_hours, break, halted, unknown","enum":["open","closed","pre_market","after_hours","break","halted","unknown"],"required":true},"timestamp":{"type":"string","description":"ISO 8601 UTC instant the attestation was issued","required":true},"expires_at":{"type":"string","description":"ISO 8601 UTC instant after which the attestation MUST NOT be acted on. Maximum 60 seconds from timestamp.","required":true},"signature":{"type":"string","description":"Base64-encoded Ed25519 signature (or equivalent algorithm)","required":true},"public_key_url":{"type":"string","description":"HTTPS URL where the oracle's signing key can be retrieved","required":true},"oracle_id":{"type":"string","description":"Globally unique identifier for the oracle provider","required":true}},"verification_flow":["Discover oracle endpoints via MCP, .well-known, registry, or hardcoded config","Query all configured oracles in parallel with a uniform timeout (recommended 2000ms)","Verify each signature independently against the canonical payload","Discard responses where signature is invalid or expires_at has passed","Apply consensus rule to remaining valid responses","Proceed only if consensus is \"open\" and at least 3 valid responses were received","If consensus cannot be reached, do not trade (fail-closed)"],"error_handling":{"network_timeout":"Treat as closed; do not include in valid response set","invalid_signature":"Discard response and log oracle_id, signature, reason","expired_attestation":"Discard response","schema_violation":"Discard response","majority_disagreement":"Use majority if it favors open; otherwise fail-closed; flag for human review","fewer_than_three_valid":"Hard floor — do not trade under any circumstances","public_key_fetch_failure":"Discard response; optionally retry once with backoff","unknown_status_returned":"Count as a valid vote for unknown (which is not open)"},"cryptographic_requirements":{"default_algorithm":"Ed25519","recommended":["Ed25519","ECDSA-secp256k1"],"permitted":["RSA-PSS-2048+"],"forbidden":["SHA-1","RSA-1024"],"minimum_security_bits":128},"reference_oracles":[{"name":"Headless Oracle","oracle_id":"headlessoracle.com","endpoint":"https://headlessoracle.com/v5/status","mcp_endpoint":"https://headlessoracle.com/mcp","exchanges":28,"signature_algorithm":"Ed25519","public_key_url":"https://headlessoracle.com/v5/keys","receipt_ttl_seconds":60,"fail_closed":true,"sma_compliant":true}],"implementation_note":"A second and third independent oracle implementation are required to satisfy the minimum oracle count in production. This specification exists in part to make it possible for those implementations to interoperate without bilateral coordination.","license":"MIT","editor":"Headless Oracle (headlessoracle.com)"}