The VeritasChain Protocol records what an algorithmic trading system decided and executed, in an append-only, hash-chained, externally anchored log. Our receipts record what a computation did, in a deterministic, browser-verifiable artifact chain. This page reads the two formats against the same questions: what does a record bind, how is completeness proven, who can verify it without trusting the producer, and where does each format stop. It was written for a live correspondence with a practitioner on the VCP side, and for anyone comparing record formats for audit or regulatory work.
Everything about VCP here is read from their published specification v1.2, marked Production Ready, dated 6 July 2026, retrieved 15 October 2026 at commit b23acb266f88 of github.com/veritaschain/vcp-spec. Everything about our side is live on this site today. No connector, bridge, or implementation exists between the two formats, and nothing on this page claims otherwise. Part three pins both sides to exact revisions and classifies every field of one artifact per side into three classes: hash-preimage, metadata, and externally trusted.
VCP separates integrity into three named layers. Our receipts bind one canonical hash per run and hang verification off determinism. The table in step 3 puts the two side by side row by row.
VCP is published by the VeritasChain Standards Organization in Tokyo as the financial-domain profile of their Verifiable AI Provenance framework. Version 1.2 reached GA on 6 July 2026. A producer records its trading events in an append-only log; the spec's own scope line says the log verifies integrity and attribution of recorded events and does not certify the correctness or safety of the underlying AI or trading decisions. That boundary is written by VSO themselves, and it rhymes with the boundary our own artifacts declare.
Anchoring is where VCP is strictest: every tier must anchor externally, on a clock budget that tightens from Silver's 24 hours to Platinum's 10 minutes. Acceptable targets include Bitcoin, OpenTimestamps, and RFC 3161 timestamp authorities. The spec sets expectations per tier plainly: Silver, in VSO's own words on their site, provides transparency rather than regulatory-grade evidence.
Fetch VCP-Specification-v1_2_en.md from github.com/veritaschain/vcp-spec and summarize the three integrity layers, one sentence per layer, quoting the REQUIRED components exactly.
An OpenChainGraph receipt binds one computation. Its execution hash is a SHA-256 over the canonical JSON of exactly the declared inputs and the output payload, produced through the shared hash library; the kernel that computed the output is pinned by its own digest. Workflows chain receipts by carrying each parent hash forward, and the public ledger stores the artifacts content-addressed so the hash is the address.
The full anatomy, including a synthetic run you can reproduce from its published witness, is the subject of our companion page Four hashes and a witness. The short version for this crosswalk: our format proves a computation by reconstruction rather than by attestation, keeps private figures out of the record as salted commitments, and publishes receipts to a ledger any browser can verify without a server.
Open the record-provenance walkthrough on this site and report the four hashes of its specimen run, then recompute the step 1 hash from the published witness.
Nine concerns cover what an audit-grade record format has to decide. The left column is VCP v1.2 with the section that decides it; the right column is the OpenChainGraph receipt as it ships today. Where the two agree, the row says so; where one of them does less, the row says that instead.
| Concern | VCP v1.2 (GA 2026-07-06) | OpenChainGraph receipt |
|---|---|---|
| per-event integrity | EventHash: SHA-256 over the canonical event (Layer 1, §6) | execution_hash: SHA-256 over JCS-canonical {policy_parameters, output_payload} (SPEC §4) |
| chain linkage | PrevHash optional since v1.1; Merkle batching preferred | parent_hashes required on chained workflows; composite hash anchors a whole run |
| completeness | Merkle tree + root + audit path per anchored batch (Layer 2, §6) | determinism: identical inputs rebuild identical hashes anywhere; completeness by reconstruction |
| producer signature | Ed25519 REQUIRED at every tier (PQC algorithms experimental) | signature envelope ships empty on standard runs; §27.12 countersigning covers two-party runs |
| external anchoring | REQUIRED, all tiers: 10 min (Platinum) to 24 h (Silver), targets incl. Bitcoin, OpenTimestamps, RFC 3161 | not attached to standard runs; Sigsum lineage checkpoint published (leaf 72845 at writing) and an anchor endpoint serves other workflow families |
| actor linking | VCP-XREF dual logging: trader-side and broker-side streams cross-referenced (§5.6) | work-mandate binding records which policy governed a run; countersigned receipts for the two-party case |
| erasure | ERASURE event + crypto-shredding: destroy the DEK, accept the §17a-4 reproducibility tension (Annex §3) | §25 salted commitments: private figures never enter the record at all, so there is nothing to shred |
| verification surface | supervision-node PoC, Explorer GUI live, Explorer API planned with no date | browser verification, public content-addressed ledger, live MCP endpoint, hash-swept receipts |
| declared boundary | “does not certify the correctness or safety of the underlying AI or trading decisions” (their site) | “proves the computation over the declared inputs, never the real-world inputs themselves” (each artifact's rationale) |
Both formats state their limits in their own voice, and the two limits are the same limit: a record binds the computation it witnessed, and the truth of the declarations feeding it lives somewhere else. A reader comparing the two formats for procurement or audit work can carry that single sentence across every row above.
Read section 6 of the VCP v1.2 specification and section 4 of the OpenChainGraph SPEC, then write the completeness row of this crosswalk in your own words with both citations.
Three differences survive the table because they are philosophy rather than mechanism. After them: the primitives both formats already share, and the connectors that do not exist yet, described without pretending otherwise.
Most of the table is mechanism, where either format could adopt the other's answer. Three rows are philosophy, and those are the ones a standards discussion should settle first.
The erasure row deserves one extra sentence. VCP's annex is candid that destroying the decryption key satisfies an erasure obligation only in some jurisdictions, and that it sits badly with reproducibility-style retention rules such as SEC Rule 17a-4. Our format's answer, holding private figures outside the record from the first byte, sidesteps that tension and pays for it elsewhere: a commitment without the witness is a claim nobody can bind to real figures. Which answer fits depends on what the auditor is allowed to ask for.
Read Annex 3 of the VCP v1.2 specification and OCG Standard section 25, then state which GDPR pressure each answers and what each gives up.
Everything above is a reading of two published specifications. It is not an integration, and neither side claims one. A code search across all 27 public repositories in the veritaschain GitHub organisation returns zero hits for Model Context Protocol, zero for OpenChainGraph, and zero for AINumbers, measured on 15 October 2026. VSO's own correction wave states that zero external implementations of VAP exist. Our estate contains no VCP bytes either. A reader should trust this page as a mapping on paper, and as nothing more.
The three sketches are one-sentence descriptions of work that would be small on both sides, listed because a reader comparing formats always asks what a bridge would take. None of them is announced, planned, or in progress by either organisation, and this page deliberately does not date them into existence.
Search GitHub code in the veritaschain organisation for Model Context Protocol, for OpenChainGraph, and for AINumbers, and report all three counts with the date you ran them.
Every claim about VCP on this page is checkable against two pinned sources: their specification file at commit b23acb266f88 in the vcp-spec repository, and their public site as it read on 15 October 2026. Every claim about our side is checkable against the live estate: the specimen run, its witness, the ledger, and the verifier are all public. A mapping page earns trust the same way a receipt does, by naming exactly what it read.
Three events would make this page stale, and each is easy to spot: a VCP v1.3 or a VAP draft beyond Draft 3 changes the left column; a deployed Explorer API changes the verification row; a connector repository appearing in either organisation changes the boundary row from step 6. The page is a dated observation, written to stay true as a record of what the two formats said on 15 October 2026.
Check for a VCP v1.3, a VAP draft newer than 3, and a live Explorer API deployment, then say whether this crosswalk is still current as of today.
A mapping becomes checkable when both sides are pinned to exact revisions and every field is placed in one of three classes: inside the hash preimage, recorded metadata outside it, or a claim that needs an external trust source. This part does that for one artifact per side, then proposes the first joint test.
Nothing below works against a moving target, so both sides are pinned to exact revisions before any field is classified. The OCG side pins its specification, its specimen run, and the kernel digests that produced it. The VCP side pins the v1.2 specification file by commit, the framework draft it profiles, and the SCITT profile Internet-Draft the correspondence keeps circling.
The three-check line at the bottom is the rule the rest of this part follows. C1 asks whether a recorded hash matches its recorded preimage. C2 asks whether re-running the pinned producer reproduces it. C3 asks whether the declared inputs match the world, and both formats decline to answer that in writing. Every field in steps 9 and 10 sits in exactly one of three classes: preimage (C1 reads it), metadata (C1 ignores it), or external trust (no check on this page covers it).
Fetch both pinned revisions and confirm they resolve: the OCG envelope schema on PostOakLabs/ainumbers at main, and VCP-Specification-v1_2_en.md at commit b23acb266f88 on veritaschain/vcp-spec. Report both commit dates.
The two formats hash different bytes. VCP concatenates the canonicalized header and payload and hashes the string, with the algorithm selectable per deployment. OCG hashes a single canonicalized two-member object, with SHA-256 fixed. Both cite RFC 8785 for canonicalization, so the difference is structural, not accidental: the same two JSON fragments produce different hashes under the two rules, and neither hash verifies the other's bytes.
| OCG field (specimen artifact) | Class | Note |
|---|---|---|
| policy_parameters (normalized) | PREIMAGE | null members removed; all decision inputs fold in here |
| policy_parameters.member_figures_commitment | PREIMAGE | the commitment is bound; plaintext figures and salt exist nowhere in the artifact |
| output_payload | PREIMAGE | the complete stage-by-stage output |
| generated_at | METADATA | producer clock; truth depends on that clock, stated unverified |
| chain { parent_hashes, depth } | METADATA | linkage; in composites the child receipts also sit inside output_payload, so linkage is hash-bound there |
| tool_id / tool_version / mandate_type / @context / buildType / compute_mode | METADATA | identity and transport |
| compliance_flags | METADATA | verdict vocabulary, hash-excluded by design |
| audit_signature (+ §18 compute_proof when present) | METADATA | empty envelope on the specimen; proofs, when attached, are hash-excluded by design |
| kernel source ↔ kernel_digest | EXTERNAL TRUST | digest re-hashable against the public repo; C2 replay eliminates the trust |
| operator execution (server runs) | EXTERNAL TRUST | eliminated by idempotent re-run or zero-egress browser execution |
| ledger.ainumbers.co | EXTERNAL TRUST | availability only; integrity is local recompute-and-match |
| §27.12 countersigner keys (two-party runs) | EXTERNAL TRUST | absent on the specimen (envelope empty) |
| §25 witness holder | EXTERNAL TRUST | only the witness-holder can bind commitment to real figures |
| VCP field (one event) | Class | Note |
|---|---|---|
| Header (EventID, EventType, Timestamp, ProducerID, SchemaVersion) | PREIMAGE | canonicalized and concatenated into the EventHash |
| Payload (domain content) | PREIMAGE | canonicalized and concatenated |
| PrevHash (when chain mode is used) | PREIMAGE | optional since v1.1; "0"*64 sentinel otherwise |
| Merkle root + audit path (Layer 2) | METADATA per event | covers a batch of EventHashes; inclusion proven at anchor time |
| Ed25519 signature over the root (Layer 3) | EXTERNAL TRUST | producer key authenticity; REQUIRED, signs the batch not the event |
| dual-format timestamp (Layer 3) | EXTERNAL TRUST | tier clock: PTPv2, NTP, or best-effort |
| anchor receipt (Layer 3) | EXTERNAL TRUST | Bitcoin / OpenTimestamps / RFC 3161 authority, per tier SLA |
| SCITT alignment fields (opt-in) | EXTERNAL TRUST | COSE Receipts toward a transparency service |
| VCP-XREF block | PREIMAGE (as declared) | cross-reference and reconciliation status live in the hashed structure |
Read the two tables together and the asymmetry is structural. VCP puts the clock, the producer identity, and the anchor inside its trust perimeter by design, because a trading record must say when and who under regulatory scrutiny. OCG puts the computation inside its preimage and leaves time, identity, and anchoring as declared metadata, because a computation receipt must stay reproducible without any of them. A field is never trusted in one format because its twin is trusted in the other.
Take a toy JSON header and payload, compute the VCP-style hash (concatenate the two RFC 8785 canonical parts and SHA-256 the string) and the OCG-style hash (RFC 8785 of the two-member object), and report both digests.
The two vocabularies overlap enough to invite false equivalences: both formats speak of event hashes, Merkle trees, signatures, anchors, timestamps, and commitments. Each row below takes one shared word and states why the two guarantees behind it differ. This is the table to read before treating any single field as interchangeable.
| Shared word | Why the guarantees differ |
|---|---|
| EventHash ↔ execution_hash | VCP concatenates two canonicalized parts with a selectable algorithm and includes the header; OCG hashes one two-member JCS object with SHA-256 fixed and excludes identity fields. Same family, different preimages. |
| Merkle completeness | VCP proves batch inclusion at anchor time via RFC 6962 trees. OCG proves exact computation by deterministic reconstruction over chained receipts. Neither mechanism covers the other's blind spot. |
| signature | VCP: the producer signs every Merkle root, REQUIRED. OCG: the envelope ships empty on standard runs; §27.12 countersigning is scoped to two-party runs. |
| anchor | VCP: external authority on a tier clock, REQUIRED. OCG: no authority attached to standard runs; the Sigsum lineage checkpoint is published beside the estate, not per run. |
| timestamp | VCP: dual-format with tier-synced clock SLAs down to PTPv2. OCG: a single operator-asserted field outside the preimage. |
| commitment | VCP ERASURE: destroy the key over stored plaintext. OCG §25: salted hash over figures that were never stored. Opposite answers to the same GDPR pressure. |
The practical rule the correspondence settled on: read the two tables together only at the concern level, never at the field-name level. A shared word is an invitation to compare the underlying guarantees, and the comparison usually ends in a deliberate difference rather than a gap.
Take the completeness row and state what a VCP Merkle audit path proves that OCG recompute does not, and what OCG recompute proves that a Merkle audit path does not.
The correspondence settled on a concrete opening move: one artifact each, three-class tables filled from each side's own pinned text, and the replay check executed rather than assumed. Five steps, all doable on paper and in a terminal, none requiring the other side's permission.
Steps 1 and 2 are complete on our side: the tables in step 9 are that classification, filled from the pinned texts and reproducible from this page. Steps 3 through 5 are joint by nature. If the test surfaces a row where the two formats genuinely can be bridged, that row becomes the first connector worth building, and the three sketches in step 6 stop being sketches.
Recompute the OCG specimen's step 1 execution hash from the published witness and the pinned kernel, and report it beside the recorded cd1503d3… value.