Overview
Umbra’s compliance system is entirely voluntary and user-initiated. Two independent mechanisms cover different parts of the protocol:Stealth Pool Viewing Keys
Derive scoped cryptographic keys from your master viewing key and share them with auditors. Viewing keys give read access to Stealth Pool Note activity within a specific time window or token scope — without exposing anything outside that scope. Pure off-chain Poseidon hierarchy.
X25519 Compliance Grants
Create on-chain grants that authorise Arcium MPC to re-encrypt your EncryptedTokenAccount balances under a grantee’s X25519 key. The grantee then decrypts the re-encrypted ciphertexts with their own private key.
No party can access your data without your explicit action. Neither mechanism is reversible for data the grantee has already received — revoking a grant prevents future access but does not invalidate ciphertexts already re-encrypted.
Stealth Pool viewing keys
The master viewing key (MVK) is a BN254 field element derived from your master seed. It is the root of an off-chain key hierarchy you can share selectively:pc_encrypted_*).
Eight derivers ship in the SDK, all from the key-derivation primitives:
getViewingKeyClaimableStealthPoolNoteScannerFunction factory — compose one from the shipped primitives (~50 lines). See Stealth Pool Viewing Keys for the canonical recipe.
X25519 compliance grants
X25519 compliance grants use on-chain PDAs to authorise Arcium MPC to re-encrypt your ETA ciphertexts under a grantee’s X25519 key. You create the grant voluntarily, choose the receiver and a unique nonce, and can revoke it at any time.Compliance factory inventory
All under@umbra-privacy/sdk/compliance:
getComplianceGrantIssuerFunction— create a grant.getComplianceGrantRevokerFunction— revoke (deletes the grant PDA).getUserComplianceGrantQuerierFunction— query a user-issued grant.getNetworkComplianceGrantQuerierFunction— query a network-issued grant.getSharedComplianceGrantQuerierFunction— query a Shared-balance grant.getSharedCiphertextReencryptorForUserGrantFunction— re-encrypt under a user grant.getNetworkCiphertextReencryptorForNetworkGrantFunction— re-encrypt under a network grant.getSharedCiphertextReencryptorForNetworkGrantFunction— re-encrypt a Shared-mode ciphertext for a network grantee.
Privacy and Trust Model
- Compliance grants are stored on-chain as marker PDAs — their existence is transparent and auditable.
- A viewing key at scope X gives access only to data within scope X — no access to anything outside that scope.
- Revoking a compliance grant (deleting the PDA) prevents future re-encryption requests, but does not invalidate ciphertexts the grantee has already obtained.
- The master viewing key and master seed are never shared directly through either mechanism.