What This Enables
For regulators: Verified, account-level access with cryptographic identity binding (EIP-712 signatures). No way to query without leaving a trail. For users: Privacy by default. Only explicitly authorized auditors can access your data, and you can verify onchain exactly who accessed what and when.How It Works
The audit system combines three components:- AuditGateway contract — An onchain registry of authorized auditors. Only registered addresses can query.
- Audit API — Server-side endpoints that return account-specific data to verified auditors.
- Onchain audit log — Every query is logged immutably onchain.
Access Control
Audit requests pass through three verification layers:| Layer | Mechanism | Rejects if |
|---|---|---|
| Server-level key | Infrastructure secret header | Missing or invalid |
| EIP-712 signature | Auditor signs the query with their EOA key | Signature invalid or address mismatch |
| Onchain registry | Contract checks auditor registration | Address not registered as auditor |
What Auditors Can Access
Auditors can query two things for a specific account:Transaction History
Paginated list of all transactions (deposits, transfers, withdrawals) for a given account, including:- Transaction type and direction (in/out)
- Token ID and amount
- Counterparty (account ID for shielded transfers, Ethereum address for deposits/withdrawals)
- Timestamp
Current Balances
Aggregated token balances for a given account, including the number of unspent notes per token.How Auditors Get the Data
Auditors don’t decrypt anything themselves. They don’t need viewing keys and never interact with onchain ciphertexts. Here’s what happens:- The TEE server has already decrypted all transaction metadata as part of its normal indexing process. This data is stored inside the TEE’s encrypted database, organized by account.
- When an auditor submits a signed query for a specific account, the TEE verifies their authorization.
- If authorized, the TEE returns only the requested scope — that one account’s history or balance.
- The query is logged onchain asynchronously.
What Auditors Can and Cannot Do
| Can | Cannot |
|---|---|
| View transaction history for a specific account | Access private keys or viewing keys |
| View current balances for a specific account | Move funds or modify pool state |
| Filter transactions by type | Query without leaving an onchain audit trail |
| Perform blanket surveillance across all accounts | |
| Decrypt onchain ciphertexts directly |
Onchain Audit Log
After every audit query, the server logs it onchain. This creates an immutable record that:- Cannot be deleted or modified by anyone
- Is publicly verifiable — anyone can check the audit trail
- Holds auditors accountable — excessive or unauthorized access is permanently recorded
Auditor Lifecycle
| Action | Who | How |
|---|---|---|
| Add auditor | Contract owner | Register address in AuditGateway |
| Remove auditor | Contract owner | Remove address from AuditGateway |
| Query data | Registered auditor | Sign EIP-712 request, call audit API |
| Review audit trail | Anyone | Read audit events from the contract |
Next Steps
- Trust & Security — Full trust model and TEE guarantees
- Protocol Deep Dive — How the shielded pool works
- Glossary — Technical terminology reference