$ MAN VEILVOTE
veilvote uses arcium's Multi-Party Computation (MPC) to keep your vote encrypted during the entire tallying process. here's the full pipeline.
CONNECT_WALLET
connect your solana wallet (phantom, solflare) to veilvote. your wallet generates a deterministic x25519 encryption keypair through a signed message -- no extra keys to manage.
ENCRYPT_VOTE
your yes/no choice is encrypted locally using x25519 key exchange with the MXE public key, then wrapped in RescueCipher. the plaintext NEVER leaves your device.
SUBMIT_TO_CHAIN
the encrypted vote ciphertext is sent as a solana transaction to the veilvote program. the onchain program queues it for MPC computation -- the encrypted bytes are visible, but they reveal nothing about your choice.
MPC_COMPUTATION
arcium's distributed arx nodes perform the vote tallying on secret-shared data. each node holds a mathematical fragment -- no single node ever sees your vote. the computation adds your vote to the encrypted running total.
RESULT_REVEALED
when the proposal authority triggers reveal, the MPC network compares encrypted yes vs no counts and publishes only a boolean result (pass/fail). exact vote counts remain encrypted forever.
$ DIFF --COMPARE PRIVACY_TECH
// comparing MPC to other privacy approaches for DAO voting.
| FEATURE | MPC (ARCIUM) | FHE | ZK PROOFS |
|---|---|---|---|
| vote_privacy | [OK] full | [OK] full | [..] partial |
| compute_speed | [OK] fast | [ERR] slow | [OK] fast |
| trusted_setup | [OK] none | [OK] none | [..] depends |
| encrypted_tally | [OK] native | [OK] native | [ERR] no |
| solana_native | [OK] arcium | [ERR] no | [..] limited |
| multi_party_input | [OK] native | [ERR] single-key | [ERR] prover only |
$ CAT /ARCHITECTURE
// every veilvote operation flows through three coupled surfaces.
ARCIS_CIRCUIT
rust code that runs inside arcium's MPC network on encrypted data. defines the vote tallying logic -- adding votes, comparing counts. all arithmetic on secret-shared data.
$ cat encrypted-ixs/src/lib.rsSOLANA_PROGRAM
anchor program that manages proposals, queues MPC computations, stores encrypted state onchain, and handles callbacks from the arx node network.
$ cat programs/veilvote/src/lib.rsCLIENT_APP
performs x25519 key exchange with MXE, encrypts votes using RescueCipher, submits transactions, and decrypts results. your vote is encrypted before it ever touches the network.
$ cat app/src/lib/arcium.ts$ READY TO VOTE PRIVATELY?
// connect your wallet and cast your first encrypted vote.