These are ZeroVaultID's own test records, with no customers, no securities and no assets behind them. The September 18, 2026 run is the headline record: it is the first whose ledger read-back comes from its own transaction. The three runs of September 17, 2026 are published with it, each with its own limits, including a read-back result that was withdrawn for all three. Every value on this page is read from the run records; the October 14, 2026 entry is also read from its mint record and ZeroVaultID's internal disclosures. All dates and times are UTC. Canton MainNet, test transactions
Read this before quoting anything from this page.
On October 14, 2026, a TALON clearance object signed with keys held in AWS KMS, including a post-quantum ML-DSA-87 key at NIST security level 5 (FIPS 204), settled in a test transaction on Canton MainNet.
ZeroVaultID's offline verifier accepted the object and the zero-knowledge proof it carries before the test transaction was submitted, and every check the run recorded passed.
The run record is available on request by email to peter@zerovaultid.com.
What the October 14, 2026 run does not show.
| Run | Presentation clock | Proof | Signed window | Shard read-back | Outcome as recorded |
|---|---|---|---|---|---|
| 1 | September 17, 2026, 04:58:25 UTC | Not recorded. The record has no proof-result field and its own text says no proof was verified. See section 3.1. | 2.00 hours | first-match active-contract query, withdrawn (section 4) | all true, 11 gates |
| 2 | September 17, 2026, 05:26:55 UTC | Verified on both legs, 12 public inputs | 2.00 hours | first-match active-contract query, withdrawn (section 4) | all true, 11 gates |
| 3 | September 17, 2026, 21:44:14 UTC | Verified on both legs, 12 public inputs | 6.00 hours | first-match active-contract query, withdrawn (section 4) | all true, 11 gates |
| 4 | September 18, 2026, 02:15:08 UTC | Verified on both legs, 12 public inputs | 12.00 hours | the test transaction's own tree | all true, 12 gates |
Each run minted one clearance object covering two legs, an open and a close, and presented it to ZeroVaultID's offline verifier once per leg. Only when the verifier accepted on both legs did the driver submit the test transaction. Every run allocated 7 fresh test parties.
The claim under test is narrow. A clearance object carries its own validity window and its own named recipient inside the bytes its issuer signed, and is presented to a deployment that holds the trusted key out of band. The deployment's verifier either accepts the object against its own configuration, at its own clock, or refuses, and the test transaction is not submitted. From these four runs on, the verifier also checks the zero-knowledge proof the object carries.
Section 7 is the more important half of this page.
| Network | Canton MainNet global synchronizer, as ZeroVaultID identifies it. See section 7.12. |
| Epoch | a label declared by ZeroVaultID. See section 7.9. |
| Outcome as recorded | 12 gates recorded, all true |
| Negative controls | None. |
One object served both legs. The verifier ran twice over the same bytes, once for the open leg and once for the close leg, and the record carries the same object digest and the same payload commitment for both.
| Signature | hybrid, two slots, all must pass: a classical signature and a post-quantum signature |
| Gate lines recorded, per leg | 46 |
| Proof | Verified on both legs, 12 public inputs |
The same verifier was used in all four runs. It differs from the verifier the September 14, 2026 run recorded: that earlier verifier checked that the object's verification key id equaled its own pinned value and ran no proof.
Both legs were recorded in one ledger transaction, which created two anchors and resumed two heads.
The anchor labels this transaction realized are run-tagged labels, not digests. Nothing on the ledger recomputes them, so no digest construction should be inferred from the way they are spelled. The run records this itself.
The terminal successor is a contract this run created. The read-back now establishes that the consumed list the gate reports on belongs to this transaction. It does not establish that the two keys were unspent beforehand (section 7.3).
| What it asserted, in this run |
|---|
| This transaction created exactly two anchor contracts. |
| The open leg's bound anchor label equals the open anchor label this transaction realized. |
| The close leg's bound anchor label equals the close anchor label this transaction realized. |
| This transaction resumed two heads. |
| The settlement choice is read from an exercised event in this transaction's own tree. The earlier version of this gate was a comparison of two constants that could not be false. |
| Exactly one accumulator shard contract was created by this transaction and not archived by it. It fails closed on zero and on more than one. |
| That terminal shard's consumed list holds this run's two spend-once keys, each exactly once. The shard is one this run created, so this is not evidence that those keys were unspent beforehand (section 7.3). |
| The two rail nullifiers consumed in this transaction carry this run's tag inside their values. |
| Both legs carry the same payload commitment, so one object served both legs. |
| The two legs' spend-once keys differ from each other. |
| The epoch registry this transaction read was observed active before submission and was not created by this run. ZeroVaultID created that registry earlier (section 7.9). |
| The verifier-key registry this transaction read was observed active before submission and was not created by this run. |
| Window opens | September 18, 2026, 01:39:19 UTC |
| Window closes | September 18, 2026, 13:39:19 UTC |
| Issued at | September 18, 2026, 01:29:19 UTC |
| Window duration | 43200 seconds, 12.00 hours |
| Duration ceiling, held by the verifier | 43200 seconds, 12 hours |
| Presentation clock, supplied by ZeroVaultID | September 18, 2026, 02:15:08 UTC |
This window equals the ceiling. The verifier refuses a window longer than twelve hours, so an equal one passes, and the margin here is zero. The clock sits 2149 seconds after the window opened, 41051 seconds before it closed, and 2749 seconds after the object's issue time. The clock was supplied by ZeroVaultID to a verifier ZeroVaultID ran, so this run exercised one path, the one where everything fits. Section 7.8 is the limit on all of it.
The object names its recipient inside the signed bytes. The deployment configured the same value for itself, and the verifier compared the two after checking the signature. This closes the case where an object minted for another recipient is presented here. It does not establish that the party presenting the object is the party named, and it authenticates neither.
These three runs used the same verifier, the same specimen identities and the same signing key as the September 18, 2026 run. Each differs in its window, its driver revision, and what its record says. In all three, two read-back gates are withdrawn, and the reason is in section 4.
| Proof | Not recorded. The record has no proof-result field and its own text says no proof was verified. |
| Signed window | September 17, 2026, 04:22:03 UTC to September 17, 2026, 06:22:03 UTC, 2.00 hours |
| Presentation clock, supplied by ZeroVaultID | September 17, 2026, 04:58:25 UTC, 2182 seconds after the window opened |
| Outcome as recorded | all true, 11 gates. Two are withdrawn (section 4). One gate compared two constants and could not be false, so it carries no information. |
| Negative controls | None. |
This record says no proof was verified, and that sentence is wrong. ZeroVaultID issued a correction on September 17, 2026. The correction rests on the verifier's source, which is not published on this site, so a reader cannot check it from this page.
| Proof | Verified on both legs, 12 public inputs |
| Signed window | September 17, 2026, 05:15:38 UTC to September 17, 2026, 07:15:38 UTC, 2.00 hours |
| Presentation clock, supplied by ZeroVaultID | September 17, 2026, 05:26:55 UTC, 677 seconds after the window opened |
| Outcome as recorded | all true, 11 gates. Two are withdrawn (section 4). One gate compared two constants and could not be false, so it carries no information. |
| Negative controls | None. |
Its claim text states that the proof was verified and that the circuit is not claimed sound.
| Proof | Verified on both legs, 12 public inputs |
| Signed window | September 17, 2026, 21:30:59 UTC to September 18, 2026, 03:30:59 UTC, 6.00 hours |
| Presentation clock, supplied by ZeroVaultID | September 17, 2026, 21:44:14 UTC, 795 seconds after the window opened |
| Outcome as recorded | all true, 11 gates. Two are withdrawn (section 4). One gate compared two constants and could not be false, so it carries no information. |
| Negative controls | None. |
This object's window opened on September 17, 2026 and closed on September 18, 2026.
What was wrong. After each test transaction, ZeroVaultID's software read the spend-once accumulator shard back from the ledger with an active-contract query and took the first contract with the expected shard number. A read-only census of ZeroVaultID's ledger on September 17, 2026 found five active contracts with that shard number and byte-identical consumed lists. The spend-once keys are specimen values inside the signed object, so they are the same in every run, and the other fields are the same too. No filter could have told the five apart.
Which runs. Five run records name the same contract, which none of them created. They are runs 1, 2 and 3 on this page, and the runs of September 4, 2026 and September 14, 2026. In those five records, two gates are not supported as claims about the run, and ZeroVaultID withdrew them on September 18, 2026. The records themselves are unchanged, so both gates still read true inside them.
What still stands. Every other gate and every off-ledger fact: the object digests, the verifier digests, the proof result, the window and recipient checks, the registry read-backs and the update ids. Each earlier run's run-tagged rail nullifiers were present on the ledger in the September 17, 2026 census, so those test transactions did consume on the ledger. That is weaker than the withdrawn gates appeared to claim, and the census is ZeroVaultID's own query, not something a reader can repeat.
What changed on September 18, 2026. The active-contract query was removed. The read-back now comes from the test transaction's own tree, asserts exactly one terminal successor, and fails closed on zero or more than one. A tree read that does not complete records the tree-derived gates as null, so the run reports not green. The gates were renamed because their mechanism changed.
The September 18, 2026 run's terminal successor is not the contract the five earlier records name. Do not read runs 1 to 3 as having been checked the way the September 18 run was. They were not. The fix changed which shard the gate reads; it did not change the limit in section 7.3.
One caution for a reader comparing records across pages: the two-leg test of September 4, 2026 still records a gate under its old name and with its old meaning, a comparison of two constants. The same gate name in two records does not mean the same check.
ZeroVaultID records this finding internally as a disclosure. The record for the September 14, 2026 run carries the same correction on its own page.
Runs 2, 3 and 4 record the proof as verified on both legs. Run 1 used the same verifier with a proof file, but its record does not carry the result, and section 3.1 says what ZeroVaultID's statement that it verified rests on. These were the first TALON runs on MainNet in which the verifier checked a proof; the September 4 and September 14, 2026 runs did not.
The run records are available on request by email to peter@zerovaultid.com.
Each September run record is a curated copy. It removes the same classes the September 14, 2026 record removed: the internal network address of ZeroVaultID's participant, absolute file paths on the machine that ran the test, and the settlement reference base. The reference base is a fixture value from the worked example the object was minted from, and it is the one removed field that sits inside the object's signed bytes. No check consumes it (section 7.10). No other value was changed. The digest and size of each uncurated original are recorded inside the file. The uncurated originals are not published.
These are real limits on the claim. Most of them the runs record about themselves, in their caveat fields.
Not one altered object or command was submitted in any of the four runs. Every statement here about what the verifier or the ledger refuses describes the code, not anything these runs observed. Nothing here shows that a bad object would have been caught.
The offline verifier holds no record of spent objects and performed no uniqueness check. A repeat presentation to the same recipient is caught only by that recipient's own state, and a presentation to two verifiers that share no state is caught by nothing.
Each run creates the three accumulator shards it then uses, each with an empty consumed list. So the ledger's check offers no protection against replay from another run: a key spent by an earlier run is not in this run's list. Single-use protection is per storage partition, not across a whole period. The September 18, 2026 gate reads the right shard; it is still a shard that run wrote, and it is not evidence the keys were unspent beforehand. Creating a shard needs two authorizations, the operator and the epoch's cosigner, and ZeroVaultID holds both, so it could create a duplicate.
Check 1, an inclusion proof, and Check 2, an aggregate signature, are verified by ZeroVaultID's software before submission, and their results are passed to the ledger as yes-or-no values. The ledger verifies neither. No ledger template stores the source root, so Check 1 verifies a real path against a root whose authenticity is assumed. All three Check 2 signing keys are held by ZeroVaultID, so the check shows possession of three keys, not three institutions.
This is an open defect on this path, found by review and not by test: the ledger never compares who verified the object.
The issuer and the recipient are not real institutions. The spend-once keys are specimen values carried unchanged in every run, which is why five records could not be told apart (section 4). Every party was created by ZeroVaultID in one namespace on one participant, and the submitting party is ZeroVaultID. This supports no claim about privacy between participants and no claim that any institution took part.
One signing key id, identical in all four runs, covers both algorithm slots. Its seed is a fixed, documented value with no entropy and is not a secret, so anyone who has it could produce a valid signature. A valid signature therefore shows internal consistency, not authorship. Nothing here was signed by a key in production custody.
The window checks compare the object's signed window with a clock ZeroVaultID supplied. Nothing makes that clock truthful, and a false clock defeats the checks for an object not yet valid or already expired. The verifier prints the clock and the ceiling on its gate line, so the assumption is written down, not defended.
The epoch is a label ZeroVaultID set, compared against a registry ZeroVaultID created. Both sides of that comparison are ZeroVaultID's.
The object carries a settlement reference base inside its signed bytes. The verifier parses it and confirms the signature covers it, then compares it against nothing. Nothing checks that an object was minted for this test transaction rather than another of the same shape at the same recipient. Recipient binding does not close this.
Whether the verifier opens network connections, since it began verifying proofs, has not been tested.
The records carry a network identifier different from the DevNet one in ZeroVaultID's earlier runs, and a party namespace ZeroVaultID's own records document as its MainNet namespace. The records do not name the network, and the identification rests on ZeroVaultID's records, not on anything a reader can check from these files alone.
What these runs show is a ledger state change gated on an offline check of a signed object. No value moved and no balance changed. Each is a single test transaction on one participant, with no concurrency or load test.
The earlier TALON record, with its own correction: the TALON test transaction on Canton MainNet of September 14, 2026. That run checked the validity window but verified no proof.
ZeroVaultID's other MainNet record, with its own limits and seven refused variants: a compliance-gated two-leg test transaction on Canton MainNet, September 4, 2026.
The earlier public DevNet runs: the Canton DevNet two-leg runs of July 2026.
The compliance attestation line this work builds on: a zero-knowledge compliance attestation on Canton DevNet.