The false choice between privacy and compliance
"Privacy tools are for criminals." We hear this a lot, and honestly, it's frustrating. Your bank doesn't publish your account balance on a billboard. Your employer doesn't announce your salary to everyone. Privacy is normal.
But we get it. Regulators have legitimate concerns. Money laundering is real. Tax evasion is real. And some privacy tools have made it nearly impossible to investigate actual crimes.
So we built something different. Privacy by default, with the ability to prove compliance when needed.
View keys: giving someone read-only access
The core concept is simple: you can give someone access to view your transaction history without giving them control over your funds.
Think of it like giving your accountant access to your bank statements. They can see everything needed for your taxes, but they can't move your money.
We support different levels:
- Full view: They see everything
- Incoming only: Just deposits
- Time-limited: Access expires after a set date
Four ways companies actually use this
1. Always-on monitoring
Your CFO gets a view key when the account is created. They can watch treasury movements in real time without being able to spend anything. The board sleeps better, and day-to-day transactions stay private from competitors.
2. On-demand disclosure
Most of the time, everything is private. If a regulator asks questions, you generate a view key covering exactly what they requested, nothing more. When their investigation ends, the key expires.
3. Automatic reporting for large transactions
Set a threshold, say $10,000. Anything above that automatically becomes visible to your compliance team. Smaller transactions stay private. This mirrors how traditional banking works.
4. Proving negatives
Sometimes you don't need to reveal anything specific. You just need to prove you didn't do something.
"My balance has never exceeded $1 million."
"I've never transacted with this sanctioned address."
"All my funds came from these whitelisted sources."
ZK proofs let you prove these facts without showing your actual history.
Quick integration example
NixPrivateToken token = new NixPrivateToken(
"Private USD",
"pUSD",
complianceOfficerPubKey,
reportingThreshold,
ComplianceLevel.STANDARD
);
Users register with a KYC proof (not the actual documents, just cryptographic proof that valid KYC exists):
function register(
bytes32 kycCommitment,
bytes kycProof
) external;
What we've learned working with compliance teams
-
Start private, add transparency as needed. Easier to grant access than revoke it.
-
Proofs beat full disclosure. If they just need to know you're under a threshold, prove that. Don't dump your entire history.
-
Always set expirations. No reason an auditor needs permanent access.
-
Log everything. When you give someone a view key, record it.
-
Tell users when their data is accessed. Builds trust.
The takeaway
Privacy and compliance aren't enemies. With the right tools, you give regulators what they legitimately need while keeping everything else private.
Your users don't want their financial lives on public display. Regulators don't need to see everything anyway - they need to verify specific things. We built NixProtocol to handle both.