Compliance

How Senddy prevents illicit deposits and supports privacy-preserving regulatory compliance.

Overview#

Senddy takes a layered approach to compliance — blocking sanctioned deposits at the contract level while giving legitimate users the tools to prove their funds are clean without sacrificing privacy.

LayerMechanismTypePurpose
Deposit screeningChainalysis sanctions oracleAutomatic, enforcedBlocks OFAC-sanctioned addresses from depositing
Association proofsZK association circuitVoluntary, privacy-preservingUsers prove funds trace back to approved deposits
View key sharingCryptographic key separationVoluntaryUsers grant read-only access to auditors

Deposit Screening#

How it works#

Every deposit into the Senddy pool is screened against the Chainalysis sanctions oracle — a smart contract maintained by Chainalysis that tracks wallet addresses included in sanctions designation lists from the US (OFAC), EU, and UN.

When a user calls depositWithPermit2Sig, the pool contract checks the depositor's address against the oracle before accepting funds. If the address is flagged, the transaction reverts with a SanctionedAddress error.

Key properties#

  • On-chain enforcement — The check happens in the pool contract itself. There is no way to bypass it.
  • No off-chain dependency for blocking — The oracle is an on-chain smart contract, not an API. It works even if Senddy's services are down.
  • Admin-configurable — The pool owner can update the oracle address or disable screening if needed (e.g., to migrate to a new oracle version).
  • Minimal gas overhead — The oracle check is a simple storage read on the Chainalysis contract.

Chainalysis oracle#

The Chainalysis sanctions oracle is deployed across multiple EVM chains. Senddy uses the Base deployment:

NetworkOracle Address
Base0x3A91A31cB3dC49b4db9Ce721F50a9D076c8D739B

The oracle is maintained by Chainalysis, updated regularly to reflect the latest sanctions designations, and is free to use without a customer relationship.

Association Proofs#

The problem#

Deposit screening prevents sanctioned addresses from entering the pool. But what about the other direction — how can a user prove their funds are clean after they've been in the private pool?

Traditional approaches break privacy: you'd have to reveal your full transaction history. Senddy solves this with association proofs — a zero-knowledge proof that your funds trace back to approved deposit sources, without revealing which specific deposits funded you.

How it works#

  1. Association Set Providers (ASPs) maintain Merkle trees of approved deposits. An ASP might be a compliance service, a regulated entity, or a jurisdiction-specific operator.
  2. When a user wants to prove compliance, they generate a ZK proof showing:
    • Their note's nullifier is correctly derived
    • The source deposit exists in the ASP's approved set (Merkle membership proof)
    • There is a valid chain of custody from the deposit to their current note
  3. The proof reveals nothing about which specific deposit was used — only that it was in the approved set.

Use cases#

  • Institutional compliance — Funds, DAOs, or businesses using Senddy can prove their treasury is clean for auditors
  • Regulatory requests — Users can respond to compliance inquiries without exposing their full transaction graph
  • Cross-protocol trust — Other DeFi protocols can require association proofs before accepting Senddy withdrawals
  • Jurisdictional flexibility — Different ASPs can maintain different compliance standards (US OFAC, EU sanctions, etc.)

Key properties#

  • Voluntary — Association proofs are never required for basic usage
  • Privacy-preserving — The proof reveals nothing about your transaction history, balance, or which deposit funded you
  • Multi-ASP support — Users can prove compliance against multiple providers simultaneously
  • No retroactive enforcement — Users who don't need compliance proofs are unaffected

View Key Sharing#

For situations where full transparency is needed (tax reporting, institutional audits), Senddy's key architecture supports voluntary disclosure:

  • The spend key controls funds and never leaves the user's device
  • The view key can decrypt transaction history but cannot move funds
  • Users can share their view key with auditors, accountants, or regulators to provide full read access without giving up control

This provides a spectrum of compliance options — from proving a single claim (association proof) to full transparency (view key sharing) — all without compromising the privacy of other users.