← Back to ZeroVaultID

TALON test transactions on Canton MainNet: four on September 17 and 18, 2026, and one on October 14, 2026 whose clearance object was signed with keys held in AWS KMS. In each, a signed clearance object and its zero-knowledge proof were checked offline before the test transaction was submitted.

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.

October 14, 2026: a TALON clearance signed with keys held in AWS KMS

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.

1. The four runs

RunPresentation clockProofSigned windowShard read-backOutcome as recorded
1September 17, 2026, 04:58:25 UTCNot recorded. The record has no proof-result field and its own text says no proof was verified. See section 3.1.2.00 hoursfirst-match active-contract query, withdrawn (section 4)all true, 11 gates
2September 17, 2026, 05:26:55 UTCVerified on both legs, 12 public inputs2.00 hoursfirst-match active-contract query, withdrawn (section 4)all true, 11 gates
3September 17, 2026, 21:44:14 UTCVerified on both legs, 12 public inputs6.00 hoursfirst-match active-contract query, withdrawn (section 4)all true, 11 gates
4September 18, 2026, 02:15:08 UTCVerified on both legs, 12 public inputs12.00 hoursthe test transaction's own treeall 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.

What was tested, and nothing more

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.

2. The September 18, 2026 run

NetworkCanton MainNet global synchronizer, as ZeroVaultID identifies it. See section 7.12.
Epocha label declared by ZeroVaultID. See section 7.9.
Outcome as recorded12 gates recorded, all true
Negative controlsNone.

The object, and the verifier that judged it

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.

Signaturehybrid, two slots, all must pass: a classical signature and a post-quantum signature
Gate lines recorded, per leg46
ProofVerified 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.

The test transaction

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 read-back from the transaction's own tree

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).

The 12 gates, each a statement about this run only

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.

The signed window, and the clock

Window opensSeptember 18, 2026, 01:39:19 UTC
Window closesSeptember 18, 2026, 13:39:19 UTC
Issued atSeptember 18, 2026, 01:29:19 UTC
Window duration43200 seconds, 12.00 hours
Duration ceiling, held by the verifier43200 seconds, 12 hours
Presentation clock, supplied by ZeroVaultIDSeptember 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.

Recipient binding

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.

3. The three earlier runs, September 17, 2026

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.

3.1 Run 1, September 17, 2026, 04:58:25 UTC

ProofNot recorded. The record has no proof-result field and its own text says no proof was verified.
Signed windowSeptember 17, 2026, 04:22:03 UTC to September 17, 2026, 06:22:03 UTC, 2.00 hours
Presentation clock, supplied by ZeroVaultIDSeptember 17, 2026, 04:58:25 UTC, 2182 seconds after the window opened
Outcome as recordedall true, 11 gates. Two are withdrawn (section 4). One gate compared two constants and could not be false, so it carries no information.
Negative controlsNone.

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.

3.2 Run 2, September 17, 2026, 05:26:55 UTC

ProofVerified on both legs, 12 public inputs
Signed windowSeptember 17, 2026, 05:15:38 UTC to September 17, 2026, 07:15:38 UTC, 2.00 hours
Presentation clock, supplied by ZeroVaultIDSeptember 17, 2026, 05:26:55 UTC, 677 seconds after the window opened
Outcome as recordedall true, 11 gates. Two are withdrawn (section 4). One gate compared two constants and could not be false, so it carries no information.
Negative controlsNone.

Its claim text states that the proof was verified and that the circuit is not claimed sound.

3.3 Run 3, September 17, 2026, 21:44:14 UTC

ProofVerified on both legs, 12 public inputs
Signed windowSeptember 17, 2026, 21:30:59 UTC to September 18, 2026, 03:30:59 UTC, 6.00 hours
Presentation clock, supplied by ZeroVaultIDSeptember 17, 2026, 21:44:14 UTC, 795 seconds after the window opened
Outcome as recordedall true, 11 gates. Two are withdrawn (section 4). One gate compared two constants and could not be false, so it carries no information.
Negative controlsNone.

This object's window opened on September 17, 2026 and closed on September 18, 2026.

4. The withdrawn read-back result, in plain words

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.

5. The zero-knowledge proof

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.

5.1 What the proof result does not establish

6. The run records, and where checking stops

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.

What cannot be checked from outside ZeroVaultID

7. What these runs do not establish

These are real limits on the claim. Most of them the runs record about themselves, in their caveat fields.

7.1 No negative controls ran

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.

7.2 Spend-once is asserted by the issuer, not proved

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.

7.3 The ledger shard is one each run created

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.

7.4 Rail Open Checks 1 and 2 are checked off the ledger

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.

7.5 The ledger does not compare who verified the object

This is an open defect on this path, found by review and not by test: the ledger never compares who verified the object.

7.6 Every identity is a specimen fixture

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.

7.7 In the September runs, every key is a development key

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.

7.8 The clock is ZeroVaultID's

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.

7.9 The epoch is declared by ZeroVaultID

The epoch is a label ZeroVaultID set, compared against a registry ZeroVaultID created. Both sides of that comparison are ZeroVaultID's.

7.10 The object is not tied to a particular test transaction

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.

7.11 Untested behavior of the verifier

Whether the verifier opens network connections, since it began verifying proofs, has not been tested.

7.12 MainNet is ZeroVaultID's identification of the network

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.

7.13 No value moved, and four runs are four runs

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.

8. Related

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.