Minimal Anti-Collusion Infrastructure (MACI) is a cryptographic protocol that secures on-chain voting and decision-making by making votes private, preventing collusion, and ensuring coercion-resistance. It enables applications like quadratic funding, decentralized governance, and collective decision-making where the integrity of the outcome depends on participants voting their true preferences without being bribed or forced. Developed by the Ethereum community, MACI combines zero-knowledge proofs, public-key cryptography, and a trusted coordinator to achieve these properties while maintaining auditability.
Minimal Anti-Collusion Infrastructure (MACI)
What is Minimal Anti-Collusion Infrastructure (MACI)?
A cryptographic protocol designed to secure on-chain voting and decision-making processes by preventing collusion and coercion.
The core mechanism of MACI relies on a central coordinator, a semi-trusted entity that processes votes but cannot alter them. Participants encrypt their votes using the coordinator's public key and submit them on-chain. After the voting period ends, the coordinator processes all valid votes off-chain, generates a zero-knowledge proof (zk-SNARK) that the tally was computed correctly, and posts this proof along with the final result to the blockchain. This structure ensures vote privacy—individual choices are never revealed—while providing cryptographic assurance that the outcome is valid.
MACI's anti-collusion property stems from its ability to make votes non-reassignable and unforgeable. A user can only change their vote by sending a new, signed message with their private key before the deadline; they cannot prove to a third party how they voted after the fact. This breaks the trust required for bribery schemes, as a bribee could simply change their vote after receiving payment without the briber knowing. This feature is critical for protecting processes like quadratic funding, where large donors could otherwise manipulate grant matching by coordinating votes.
Key technical components include keypairs for user identity and signing, the state tree managed by the coordinator to track user public keys and votes, and the zk-SNARK circuit that generates proofs of correct state transition. While the coordinator is a potential point of centralization or censorship, the protocol is designed to be minimal and verifiable: anyone can cryptographically verify the coordinator's work via the zk-proof, and the system can be designed with multiple coordinators or a decentralized set to reduce trust assumptions.
Primary use cases for MACI include decentralized autonomous organization (DAO) governance, retroactive public goods funding (like Gitcoin Grants), and any community decision where financial incentives might distort honest participation. By ensuring votes are private and unprovable, MACI creates a more robust social layer for blockchain applications, aligning cryptographic guarantees with real-world social and economic behaviors to produce more legitimate and attack-resistant outcomes.
Etymology and Origin
This section traces the conceptual and technical lineage of Minimal Anti-Collusion Infrastructure (MACI), a pivotal cryptographic protocol for secure voting.
The term Minimal Anti-Collusion Infrastructure (MACI) was coined by Ethereum researcher Vitalik Buterin in a 2018 blog post, where he proposed a system to make bribery and collusion in blockchain-based voting economically irrational. The name is a direct descriptor: Minimal refers to the goal of minimal trust and complexity, Anti-Collusion is its primary security objective, and Infrastructure denotes its role as a foundational layer for applications like quadratic funding and decentralized autonomous organization (DAO) governance.
The intellectual origin of MACI lies in the synthesis of several cryptographic primitives. Its core mechanism builds upon zk-SNARKs (Zero-Knowledge Succinct Non-Interactive Arguments of Knowledge) for privacy and verification, and employs a central, non-colluding coordinator—a trusted execution environment or a single honest actor—to perform critical computations. This design is a direct response to the inherent transparency of blockchains, which, while ensuring auditability, makes simple voting schemes vulnerable to vote buying and coercion.
MACI's development was primarily driven by the need for secure quadratic funding rounds, a democratic funding mechanism for public goods. The first major implementation, clr.fund, demonstrated its practical utility. The protocol's evolution continues within the Ethereum ecosystem, with ongoing research focused on reducing trust assumptions in the coordinator role, moving towards a more decentralized and robust anti-collusion infrastructure for the next generation of on-chain governance.
Key Features
MACI is a cryptographic protocol designed to make on-chain voting resistant to bribery and collusion, ensuring the integrity of decentralized governance and funding mechanisms like quadratic funding.
Cryptographic Receipts & Privacy
Voters receive a cryptographic receipt after submitting their vote via a public key. This receipt allows them to verify their vote was recorded correctly, but the vote itself is encrypted and kept private. This prevents anyone, including the vote coordinator, from linking a vote to a specific voter, breaking the chain of verifiability needed for bribery.
Key Change Mechanism
A core defense against bribery. Before the voting period ends, voters can submit a key change command to change their public key. Since bribers cannot see the encrypted votes, they cannot verify if a bribed voter actually voted as promised after changing their key, making the bribe unenforceable.
Centralized Coordinator Role
MACI employs a trusted coordinator (run by a neutral entity or a decentralized network) who holds a private key. This coordinator is the only party that can decrypt and tally the final votes. While this introduces a trust assumption, the coordinator cannot alter votes due to the use of zk-SNARKs to prove the tally's correctness without revealing individual votes.
ZK-SNARK Proof of Correct Tally
After processing all votes and commands, the coordinator generates a zk-SNARK proof. This cryptographic proof verifies that:
- All valid votes were included.
- The final tally is correct.
- No votes were altered or censored. The proof is published on-chain, allowing anyone to trust the result without seeing the private vote data, ensuring end-to-end verifiability.
Resistance to Collusion & Bribery
MACI's architecture makes vote buying economically irrational:
- Votes are encrypted: Bribers cannot see the vote content.
- Keys can be changed: Voters can invalidate prior commitments.
- Only the result is public: The lack of a public, verifiable link between identity and vote action destroys the leverage needed for effective collusion.
How MACI Works: Step-by-Step
Minimal Anti-Collusion Infrastructure (MACI) is a cryptographic protocol that ensures the integrity of on-chain voting by preventing coercion and vote-buying through a multi-step process involving key management, zero-knowledge proofs, and a trusted coordinator.
The MACI process begins with user registration. Each participant generates a public-private key pair, submitting their public key to a smart contract to become an authorized voter. A critical design choice is that users should never reveal their private key, as it is the sole mechanism for submitting valid votes and prevents others from voting on their behalf. This initial registration establishes the cryptographic basis for all subsequent anti-collusion guarantees.
During the voting phase, users encrypt their votes with the public key of a trusted, neutral party called the Coordinator and submit them on-chain. Crucially, users must also sign their encrypted vote message with their private key. This creates a cryptographic link between the voter's identity and their ballot, which is essential for later verification. The Coordinator is the only entity that can decrypt the votes using its private key, keeping the votes confidential during the voting period to prevent real-time bribery schemes.
After the voting period ends, the Coordinator initiates the tallying phase. It downloads all encrypted votes, decrypts them offline, and computes the final result. To prove the tally's correctness without revealing individual votes, the Coordinator generates a zero-knowledge proof (zk-SNARK). This proof cryptographically verifies that: every counted vote came from a registered user, no votes were altered or omitted, and the final tally correctly sums the decrypted votes. Only this proof and the final result are published on-chain.
The protocol's final step is the public key change window. To prevent retrospective coercion—where a briber demands proof of how someone voted after the fact—MACI allows users to submit a command to change their public key. If a user changes their key, any votes signed with their old private key become invalid. This means a coerced voter can simply change their key after voting, rendering any proof of their original vote useless to an attacker, thus nullifying the coercion attempt.
Visual Explainer: The MACI Data Flow
This visual guide traces the step-by-step flow of messages, state changes, and cryptographic proofs within a Minimal Anti-Collusion Infrastructure (MACI) voting round, from user sign-up to the final, verifiable tally.
The MACI data flow begins with the Coordinator deploying the core smart contracts: the Poll contract for a specific voting event, the MessageProcessor for validating votes, and the Tally contract for computing results. Users then sign up by submitting a public key to the SignUp contract, which records their initial state and grants them a stateIndex. This registration phase is critical, as it establishes the set of authorized participants whose subsequent messages will be processed.
During the voting period, a user submits an encrypted command (e.g., a vote for an option). This command is packaged into a Message and sent to the Poll contract. Crucially, each message includes a zk-SNARK proof (generated client-side) that cryptographically verifies the user's right to vote without revealing their identity. The contract batches these messages, and any observer can download them. To change their vote, a user simply submits a new message with a higher nonce, which will supersede the previous one during processing.
Once voting closes, the processing phase begins. The Coordinator downloads all messages and runs them through the MessageProcessor circuit off-chain. This circuit performs the core MACI logic: it decrypts each message using the Coordinator's private key, validates the user's stateIndex and signature, checks the nonce for correctness, and updates an internal state tree to reflect the latest valid command. The output is a state transition proof, which attests that the new state root was computed correctly from the previous root and the batch of messages.
Finally, the tallying phase computes the results. Using the final state from processing, the Coordinator runs the Tally circuit. This circuit aggregates votes per option, again producing a zk-SNARK proof of correct tally computation. The Coordinator then submits both the final state root, the tally result, and the corresponding proofs to the Ethereum blockchain. Anyone can verify these proofs independently, ensuring the outcome is correct without needing to trust the Coordinator, while the encryption prevents the Coordinator from linking votes to individual users, preserving coercion-resistance.
Examples and Use Cases
Minimal Anti-Collusion Infrastructure (MACI) is a cryptographic protocol designed to prevent collusion and bribery in on-chain voting. Its primary use cases center on creating tamper-proof, coercion-resistant decision-making systems for decentralized organizations and public goods funding.
Decentralized Identity & Reputation
MACI can be integrated with decentralized identity systems (like Ethereum Attestation Service) to create sybil-resistant reputation polls. It enables:
- Anonymous yet authenticated voting, where only authorized, unique identities can participate.
- Collusion-proof reputation scoring for community moderation or contribution rewards.
- Privacy-preserving surveys within closed groups (e.g., grant committee evaluations).
Art & NFT Community Curation
NFT communities and digital art collectives use MACI for fair curation and funding decisions. Applications include:
- Selecting artists for residency programs without curator bias or external influence.
- Distributing community treasury funds to projects via private voting.
- Awarding grants in artist DAOs where preventing social pressure is paramount. This ensures artistic merit, not financial coercion, drives community outcomes.
Technical Implementation: zk-SNARKs
MACI's anti-collusion guarantees are enforced by zero-knowledge proofs (zk-SNARKs). The core mechanism involves:
- A central coordinator (a trusted, optional role) who processes encrypted votes and generates a zk-SNARK proof.
- This proof verifies that all votes were tallied correctly without revealing their contents.
- The use of public key encryption (e.g., ECIES) to submit votes, which only the coordinator can decrypt for processing. The system's security relies on the coordinator's inability to decrypt votes after a deadline.
Limitations & Considerations
While powerful, MACI has specific constraints that dictate its use:
- Requires a coordinator for processing, creating a temporary point of trust (though they cannot change votes).
- High computational cost due to zk-SNARK generation, making it expensive for very large voter sets.
- Complex user experience involving key management and multiple transaction steps.
- Fixed voting windows due to encryption keys being published after the deadline. These factors make it ideal for high-value, periodic votes rather than continuous governance.
Ecosystem Usage
Minimal Anti-Collusion Infrastructure (MACI) is a cryptographic protocol for creating collusion-resistant, privacy-preserving voting systems, primarily used for on-chain governance and quadratic funding. Its core use cases focus on preventing bribery and vote-buying in decentralized decision-making.
On-Chain Governance
DAO governance votes are secured using MACI to prevent vote-buying and bribery. Key features include:
- Private voting: Voter choices are encrypted and hidden until the final tally.
- Collusion-proofing: The ability to change one's vote before the deadline makes bribes unenforceable.
- Universal verifiability: Anyone can cryptographically verify the integrity of the election result without learning individual votes.
Key Cryptographic Components
MACI's security relies on three core cryptographic primitives working in concert:
- Public Key Encryption: For submitting encrypted votes to a smart contract.
- Zero-Knowledge Proofs (zk-SNARKs): To prove the correctness of the vote tally without revealing the votes.
- Digital Signatures: To authenticate that votes come from authorized, unique participants.
The Coordinator Role
A trusted coordinator is a temporary, necessary entity in MACI that processes votes. Their role is to:
- Collect encrypted votes and publish a zk-SNARK proof of correct tallying.
- Be unable to censor votes or reveal how any individual voted due to the cryptographic design.
- The system's security is trust-minimized, as the coordinator can only cause a denial-of-service, not alter the valid result.
Implementation Frameworks
Developers implement MACI using specific libraries and circuits:
- The MACI core library (often in TypeScript/JavaScript) for client-side operations.
- Circom circuits for generating the zk-SNARK proofs required for vote processing and tallying.
- Smart contracts (typically in Solidity) to manage the voting state and verify proofs on-chain.
Limitations and Trade-offs
While powerful, MACI involves specific trade-offs:
- Gas Costs: Generating and verifying zk-SNARK proofs on-chain is computationally expensive.
- Voting Window: Requires a fixed, final deadline for vote submission and processing.
- Coordinator Dependency: While trust-minimized, the system initially relies on a coordinator to produce the proof, creating a liveness dependency.
Security Considerations and Limitations
While MACI provides strong cryptographic guarantees for voting privacy and collusion-resistance, its implementation and operation have specific constraints and trust assumptions that must be understood.
Vote Bribery & Collusion Resistance
MACI is designed to be bribery-resistant, not bribery-proof. Its primary mechanism is making bribery unverifiable:
- A voter can claim they voted a certain way to collect a bribe, but cannot cryptographically prove their actual vote to the briber.
- Limitation: Voters can still be coerced to reveal their private key, allowing a third party to vote on their behalf. This shifts the attack vector from vote-buying to key-extortion.
Censorship Resistance & Message Pool
The coordinator has the temporary ability to censor messages (votes or key changes) before processing. Key constraints:
- All valid messages must be included in the final state root published on-chain; censorship is detectable after the fact.
- The system relies on a public message pool (like an Ethereum calldata) and observers to hold the coordinator accountable for omission.
- Final results are non-censorable once the zk-SNARK proof is verified on-chain.
Operational Complexity & Cost
Deploying and running a MACI round involves significant technical overhead:
- High Gas Costs: Publishing messages and verifying the zk-SNARK proof on-chain is expensive.
- Proving Overhead: Generating the final proof is computationally intensive, requiring specialized hardware and time.
- Key Management: Users must securely manage MACI private keys, distinct from their wallet keys, introducing UX friction and risk of loss.
Limited Vote Flexibility
To enable efficient zero-knowproofs, MACI imposes constraints on voting mechanics:
- Pre-defined options: The list of candidates or choices is fixed at the start of the round.
- Quadratic voting is supported, but complex voting schemes (e.g., ranked-choice) require more complex, expensive circuits.
- No write-in votes: The voting structure is not open-ended, limiting expressiveness for some governance use cases.
Temporal Constraints & Finality
MACI elections operate in discrete, time-bound rounds with specific phases:
- Sign-up period: Users must register their public key.
- Voting period: All votes must be submitted.
- Processing period: Coordinator must process messages and generate proof.
- Limitation: Once a round is finalized, votes are immutable. There is no mechanism for on-chain dispute or recalculation of results within the same round; challenges can only occur in subsequent rounds.
MACI vs. Other Voting Mechanisms
A technical comparison of on-chain voting systems based on core security and privacy properties.
| Feature | Minimal Anti-Collusion Infrastructure (MACI) | Standard On-Chain Voting | Anonymous Voting (e.g., zk-SNARKs) |
|---|---|---|---|
Collusion Resistance | |||
Voter Privacy | |||
Receipt-Freeness | |||
On-Chain Verifiability | |||
Requires Trusted Coordinator | |||
Vote Buying Prevention | |||
Gas Cost per Vote | $10-50 | $5-20 | $50-200+ |
Common Misconceptions
Clarifying frequent misunderstandings about MACI, a cryptographic system designed to prevent collusion and ensure coercion-resistance in blockchain-based voting and funding mechanisms.
MACI is not a blockchain or a consensus protocol; it is a cryptographic application-layer framework built on top of existing blockchains like Ethereum. Its core function is to provide collusion resistance and coercion resistance for on-chain voting mechanisms, such as quadratic funding rounds. It uses a central coordinator, zero-knowledge proofs (zk-SNARKs), and public-key cryptography to allow users to submit encrypted votes while enabling a trusted party to prove the final tally's correctness without revealing individual votes.
Frequently Asked Questions (FAQ)
Essential questions and answers about MACI, a cryptographic system designed to ensure the integrity of on-chain voting and governance by preventing collusion and bribery.
MACI (Minimal Anti-Collusion Infrastructure) is a cryptographic protocol that secures on-chain voting by making votes private and preventing participants from proving how they voted, thereby neutralizing bribery and collusion. It works by using a central coordinator who collects encrypted votes, performs a zk-SNARK-based tally off-chain to prove correct execution, and publishes only the final result and a validity proof on-chain. This ensures the process is verifiably correct while keeping individual votes confidential and unlinkable to voters, breaking the chain of provability that enables coercion.
Get In Touch
today.
Our experts will offer a free quote and a 30min call to discuss your project.