Validation Desk
Inbound CBDC verification pipeline. QR and barcode parsing, Ed25519 signature verification, registry lookup, duplicate detection, and compliance actions including approve, reject, freeze, and flag.
System Overview
The Validation Desk is where received CBDC notes are authenticated before they can be accepted, redeemed, or transferred. A commercial bank or settlement agent submits a scanned QR code or barcode payload to the ingest endpoint. The system parses the note, verifies the issuing central bank's Ed25519 signature, checks the registry for authenticity, and screens for duplicates.
The operator then takes a compliance action: approve, reject, or freeze. Each action is immutably logged. The validation API is part of the /api/v2/validation namespace.
Ingest Queue
- Submitted note payloads
- QR / barcode source
- Submission timestamp
- Submitting institution
Verification Results
- Signature check result
- Registry match
- Duplicate status
- Note metadata
Compliance Actions
- Approve
- Reject
- Freeze
- Flag for review
- Audit log export
Data Model
Validation Ingest Record
| Field | Type | Description |
|---|---|---|
| serial | string | CBDC note serial number (unique identifier) |
| raw_payload | string | Raw QR or barcode string submitted via POST /validation/ingest |
| parsed_data | jsonb | Decoded note metadata: denomination, issuer, corridor, issued_at |
| signature_valid | boolean | Result of Ed25519 signature verification |
| registry_match | boolean | Whether serial exists in the issued notes registry |
| duplicate_detected | boolean | Whether serial has been presented before |
| status | enum | pending | approved | rejected | frozen | flagged |
| action_by | string | Operator who took the compliance action |
| action_at | timestamp | When compliance action was taken |
Validation Pipeline
Ingest
POST /api/v2/validation/ingest — raw QR/barcode payload submitted. System extracts serial number and note metadata.
Parse QR
POST /api/v2/validation/parse_qr — structured extraction of denomination, issuer country, corridor code, issued_at timestamp.
Signature verification
POST /api/v2/validation/verify_signature — Ed25519 signature checked against the issuing central bank's registered public key from IssuerKey table.
Registry lookup
GET /api/v2/validation/registry_lookup/:serial — confirms the serial was issued by a known central bank and is in ISSUED or ACTIVE state.
Duplicate check
GET /api/v2/validation/duplicate_check/:serial — verifies the serial has not been presented before. Duplicate = potential fraud.
Compliance action
Operator reviews results and takes action: approve (clear for settlement), reject (return to submitter), freeze (hold pending investigation), or flag (escalate to supervisor).
Duplicate Detection Logic
Compliance Actions
| Action | API Endpoint | Effect | Available when |
|---|---|---|---|
| Approve | POST /validation/approve | Note cleared for settlement. Status → approved. | signature_valid AND registry_match AND NOT duplicate |
| Reject | POST /validation/reject | Note returned to submitter. Status → rejected. | Any state |
| Freeze | POST /validation/freeze | Note held pending investigation. Status → frozen. Alert raised. | Any state — mandatory for duplicates |
| Flag | POST /validation/flag | Note flagged for supervisor review. Duplicate flag record created. | Any state |
API Reference
| Method | Path | Description |
|---|---|---|
| POST | /api/v2/validation/ingest | Submit raw CBDC note payload for validation |
| POST | /api/v2/validation/parse_qr | Parse QR/barcode string into structured note metadata |
| GET | /api/v2/validation/inbox | List pending validation items |
| POST | /api/v2/validation/verify_signature | Verify Ed25519 signature against issuer's public key |
| GET | /api/v2/validation/registry_lookup/:serial | Check serial in issued notes registry |
| GET | /api/v2/validation/duplicate_check/:serial | Check if serial has been previously presented |
| POST | /api/v2/validation/approve | Approve note for settlement |
| POST | /api/v2/validation/reject | Reject note |
| POST | /api/v2/validation/freeze | Freeze note pending investigation |
| POST | /api/v2/validation/flag | Flag note for supervisor review |
| GET | /api/v2/validation/logs/:serial | Full audit log for a specific serial number |
| GET | /api/v2/validation/logs/:serial/export | Export audit log as CSV |