Why store it on Palliora
A decrypted transaction is sensitive, and a revoker needs to be able to prove later what it saw. Three things are hard to get from a database that one party runs:- It must last. The record has to stay available for as long as the transaction matters.
- It must not change. Anyone who reads it later has to know it is the report that was written.
- Access must be controlled, and not by one party. No single operator should be able to read or hand out the report.
What Palliora provides
These are Palliora’s own Guardians. They are not Decom guardians. A Decom guardian holds a share of the key that de-anonymizes a shielded transaction. A Palliora Guardian holds a share of the key that protects a stored report. The two groups have different jobs and different keys.
The Palliora docs describe each piece in full. See Learn more in the Palliora docs.
How a report is published
- De-anonymize the transaction. The revoker de-anonymizes one transaction with the Decom guardians, as described in Accountable privacy and disclosure. The revoker’s service returns the notes the transaction created and its sender.
- Build the report. The revoker’s browser builds a report from that result. The report is bound to the request that de-anonymized the transaction.
- Seal it. The browser encrypts the report to a key that only the revoker’s wallet can produce. The sealed bytes are all that leaves the browser.
- Publish. The browser publishes the sealed report to Palliora as an encrypted contract, and signs and pays for it with the revoker’s own Palliora account. The Palliora SDK, also in the browser, encrypts it again to the Guardian group.
- Record. Palliora’s Data Availability layer stores the contract. The report’s place on it is the contract id, the block height and the extrinsic index, which the revoker can look up later.
What the report holds
The report is written as canonical JSON, so the same content always gives the same bytes.
What is public on Palliora and what is not
The commitment does not leak the content, because the salt is random and the hash covers it.
Who can read a report
The revoker. The revoker writes the report and owns it. By default the revoker is the reader. A third party the revoker chooses. The revoker can give someone else access, such as an auditor or a regulator. The revoker decides who, and no one else can add a reader. The grant goes through the same Compute Contract mechanism, and the report is sealed to the key of each reader the revoker grants. A reader gets the report back with an access grant, which is Palliora’s Compute Contract mechanism for releasing a key:- The revoker requests a grant on the stored contract. The request names the public key that may receive the decryption key, and pays the fee.
- Palliora Guardians cooperate, as a threshold, to rebuild the key that opens the stored data.
- The key comes back wrapped to the named public key, so only its holder can unwrap it.
- The holder uses it to open the stored data, then opens the inner seal with its own key. A third party does this with its own key, in the same way.
How a report is opened and checked
When the revoker retrieves a report, the app does this in the browser. A granted third party follows the same steps with its own key.- It finds the revoker’s own report for the transaction. It accepts only one published by the revoker’s own Palliora account.
- It requests an access grant and waits for the key.
- It unwraps the key and opens the stored data, then opens the inner seal with the revoker’s report key.
- It checks four things, and shows the report only as verified when all pass:
Two layers of protection
The report is sealed twice.- Inner seal. The revoker’s browser encrypts the report to the reader’s key, which is the revoker’s own key by default, with X25519 key agreement, HKDF and ChaCha20-Poly1305. The request binding is part of what is authenticated, so a sealed report cannot be replayed against another request.
- Outer layer. Palliora’s silent threshold encryption layer encrypts the sealed bytes to its Guardian group, and the contract controls who gets the key.
Keys and accounts
The revoker’s wallet unlocks two things, once per page session. Nothing is saved.
The report key depends on the site’s origin. A report only opens from the origin it was sealed under.
The Palliora account needs PALI to publish and to request a grant. The app shows the address and the amount, and stops if the balance is too low. Fees and prices are in Fees.
What Palliora does not do
- It does not decide who may de-anonymize a shielded transaction. The revoker and the Decom guardians do. Palliora only keeps the result.
- It does not change what the public sees on the pool. Publishing a report adds a record on Palliora and changes nothing on the pool.
- It does not read the report. No Palliora Guardian, and no Palliora DeFi server, holds the key and the data together.
For builders
The app uses@palliora.org/chainsdk for the Palliora side.
A report’s artefact name is
veilnyx-deanon/v1/<target network id>/<request id>/<transaction hash>. The name keeps its original prefix, as it is part of the stored record.