build a privacy-first app on Ethereum mainnet
Ethereum mainnet is where settlement, security, and the deepest privacy tooling live. A credible privacy stack assigns one protocol per privacy need — shielded transfers, anonymous proofs, private voting, and stealth receiving — using protocols the registry verifies for Ethereum.
Also available as JSON · Markdown
Recommended stack
RAILGUN
Shielded balances and private transfers via zero-knowledge proofs for value-bearing flows on mainnet.
Semaphore
Anonymous membership and signaling proofs for private actions without revealing identity.
MACI
Collusion-resistant private voting when the app needs tamper-resistant governance.
Fluidkey
Stealth addresses so users can receive on Ethereum without linking activity to a public address.
Considered and excluded
- privacy-pools — Association-set / compliance-oriented privacy; choose it when you specifically need proof-of-innocence semantics rather than general shielded transfers.
Risks
- Mainnet gas costs make zk-heavy flows expensive; budget proving and verification costs per action.
- Privacy tooling has distinct trust and compliance assumptions — review each protocol's threat model before shipping.
Next steps
- Decide which actions must be private (balances, membership, votes, receiving) and map each to one protocol.
- Benchmark proving/verification cost on mainnet before committing to an on-chain verification path.
- Document the privacy guarantees and limits you actually provide so claims stay defensible.
What the agent receives
The intent page exposes the same structured recommendation shape agents should use: matched intent, stack roles, readiness scores, difficulty, risks, next steps, and registry version.
{
"intent": "I want to build a privacy-preserving app on Ethereum mainnet",
"matched_intent": "ethereum-mainnet-privacy-app",
"recommended_stack": [
{
"slug": "railgun",
"name": "RAILGUN",
"role": "supporting_protocol",
"readiness_score": 91,
"integration_difficulty": "high",
"reason": "Shielded balances and private transfers via zero-knowledge proofs for value-bearing flows on mainnet."
},
{
"slug": "semaphore",
"name": "Semaphore",
"role": "supporting_protocol",
"readiness_score": 85,
"integration_difficulty": "medium",
"reason": "Anonymous membership and signaling proofs for private actions without revealing identity."
},
{
"slug": "maci",
"name": "MACI",
"role": "supporting_protocol",
"readiness_score": 94,
"integration_difficulty": "high",
"reason": "Collusion-resistant private voting when the app needs tamper-resistant governance."
},
{
"slug": "fluidkey",
"name": "Fluidkey",
"role": "wallet_and_identity",
"readiness_score": 93,
"integration_difficulty": "medium",
"reason": "Stealth addresses so users can receive on Ethereum without linking activity to a public address."
}
],
"excluded_candidates": [
{
"slug": "privacy-pools",
"reason": "Association-set / compliance-oriented privacy; choose it when you specifically need proof-of-innocence semantics rather than general shielded transfers."
}
],
"risks": [
"Mainnet gas costs make zk-heavy flows expensive; budget proving and verification costs per action.",
"Privacy tooling has distinct trust and compliance assumptions — review each protocol's threat model before shipping."
],
"next_steps": [
"Decide which actions must be private (balances, membership, votes, receiving) and map each to one protocol.",
"Benchmark proving/verification cost on mainnet before committing to an on-chain verification path.",
"Document the privacy guarantees and limits you actually provide so claims stay defensible."
],
"generated_with": "composewith.eth",
"registry_version": "2026.06.10-8752c9d"
}