Security
System integrity and verification architecture for ACI Risk Indicators
No AI-generated narrative. No black-box scoring. Every published ACI Risk Indicator is deterministic, versioned, and independently verifiable.
Bitcoin anchoring
Each Risk Indicator is hashed using SHA-256 from a canonical JSON representation of its inputs and outputs at publication time.
The hash is anchored to the Bitcoin blockchain via OpenTimestamps, recording:
- Block height
- Block hash
- Merkle proof linking the hash to that block
The /verify/{scoreId} endpoint enables independent verification of any published Risk Indicator against the on-chain record. Verification does not require trust in ACI.
Governance and approval
CRO approval gate
- Every Risk Indicator requires explicit CRO approval before publication
- All approvals are recorded in an append-only audit log
- Records include timestamp, reviewer identity, and methodology version
- Rejected outputs are logged with reason and not published
No automated process can bypass this control.
Evidence integrity
Each Risk Indicator decomposes into criterion-level scores under ACI Framework v1.0. Each criterion is supported by evidence artifacts — provider, criterion, source reference, observation date, and recorded value. The evidence chain is versioned, exportable, and tied to the active methodology version.
Data sources
Market data
- Deribit DVOL API — implied volatility surface for BTC and ETH options. Commercial use subject to written confirmation per ACI Data Sourcing and Licensing Policy.
- CoinGecko — spot prices and historical price series for digital assets.
On-chain data
- Bitcoin block headers — for OpenTimestamps anchor verification.
- Provider attestations — proof-of-reserves and protocol audit posts.
Provider disclosures
- Audited financial statements
- Regulatory filings and compliance registrations
- Provider-issued public disclosures
Data refresh and fallback
Source refresh cadence is defined in the platform's source registry. When a source is unavailable, the most recent stored value is used and a staleness flag is applied to all affected Risk Indicators.