DAOMIX PLATFORM

Anonymous Voting &
Censorship Proof Publishing.
Verifiable results.

Production-ready privacy infrastructure for Polkadot governance.

CORE FEATURES

Key Capabilities

Zero trust governance — anonymous voting + verifiable tallies

Censorship-proof publishing — encrypted IPFS/Crust storage

Transport mix — 3-hop onion relay hides RPC metadata

Regulator-ready — Merkle commitments + XCM audit trails

Polkadot-native — Real Substrate runtimes, XCM V4, production pallets

ARCHITECTURE

Three-Layer Stack

Layer 1: Substrate Parachains

DaoChain (Para 1000) + VotingChain (Para 2001)

pallet-mix-job • pallet-daomix-voting • XCM V4

Layer 2: Dao Mixnet

3 HTTP nodes (9000/9001/9002)

X25519 + XChaCha20-Poly1305 • X25519 + ML-KEM(OPTIONAL) • Fisher-Yates shuffle • Merkle commitments

Layer 3: Transport Mix

Entry→Middle→Exit (9100/9101/9102)

JSON-RPC onion routing • WS proxies (9950/9951) • IP obfuscation

DATA FLOW

Request Path

01

Browser

WsProvider → ws://127.0.0.1:9950

02

Transport Entry

Peel 1st layer → Forward to Middle

03

Transport Middle

Peel 2nd layer → Forward to Exit

04

Transport Exit

Peel 3rd layer → DaoChain RPC

05

Parachain

Process tx → Emit events → Store state

TERMINAL / IDE
01 TERMINAL / IDE
02 WEB BROWSER
03 COMMAND LINE
EXPLORER
daomix
contracts/
mixer/
sdk/
dapp/
polokol-chain/
scripts/
package.json
README.md
examples/xcm-mix-job.ts

1 // Send XCM from Para 2001 to trigger mixing on Para 1000

2 const dest = { V3: { parents: 1, interior: { X1: { Parachain: 1000 } } } };

3

4 const message = {

5 V3: [{

6 Transact: {

7 originKind: 'SovereignAccount',

8 requireWeightAtMost: { refTime: 1000000000 },

9 call: { encoded: api.tx.mixJob.submitJob(electionId).method.toHex() }

10 }

11 }]

12 };

13

14 await votingchainApi.tx.polkadotXcm.send(dest, message).signAndSend(alice);

mixer/mixNodeServer.ts

1 // Mix node receives ciphertexts, peels onion layer, shuffles

2 app.post('/mix', async (req, res) => {

3 const { ciphertexts, nodeIndex } = req.body;

4

5 // Peel one onion layer using node's private key

6 const peeled = ciphertexts.map(ct =>

7 peelOnionForNode(ct, nodeIndex, NODE_PRIVATE_KEYS[nodeIndex])

8 );

9

10 // Fisher-Yates shuffle for unlinkability

11 const shuffled = fisherYatesShuffle(peeled);

12

13 res.json({ shuffled, commitment: hash(shuffled) });

14 });

TERMINAL OUTPUT

$ npm run demo:start

# Starting DaoMix full stack...

[substrate] DaoChain (Para 1000) starting on port 9944...

[substrate] VotingChain (Para 2001) starting on port 9945...

[mixer] Mix node 1 listening on :9000

[mixer] Mix node 2 listening on :9001

[mixer] Mix node 3 listening on :9002

[transport] Entry node started :9100

[transport] Middle node started :9101

[transport] Exit node started :9102

[ws-proxy] DaoChain proxy → ws://127.0.0.1:9950

[ws-proxy] VotingChain proxy → ws://127.0.0.1:9951

[orchestrator] Monitoring mix jobs on DaoChain...

[ui-server] Demo UI serving on :8080

✓ All services operational

→ Open http://127.0.0.1:8080

FEATURE MATRIX

What You Get

PARACHAINS

DaoChain (1000) • VotingChain (2001)

Sibling-parachain XCM flows

Dao MIXNET

3 HTTP nodes • X25519 • XChaCha20-Poly1305

Fisher–Yates shuffle • Merkle proofs

TRANSPORT MIX

Entry→Middle→Exit onion routing

JSON-RPC IP obfuscation

PALLETS

pallet-mix-job • pallet-daomix-voting

Production-grade Substrate code

STORAGE

IPFS • Crust Network

Encrypted off-chain payloads

AUTOMATION

demo:setup • demo:start

Zero to full stack in minutes

USE CASES

Production Scenarios

DAO Governance

Anonymous voting + verifiable tallies. Privacy + auditability.

Cross-Chain Referenda

XCM into MixJob pallet from any parachain.

Encrypted Publishing

E2E encryption • IPFS/Crust storage • Censorship-resistant.

Auditable Privacy

On-chain Merkle commitments for compliance verification.

Sealed-Bid Auctions

Mix-then-reveal prevents MEV and collusion.

DEVELOPER QUICK START

Zero to Full Stack

# 1. Clone + install deps

git clone https://github.com/Ashar20/daomix.git

cd daomix && npm install

# 2. One-time full setup (build runtimes, install IPFS, generate keys)

npm run demo:setup

# 3. Start everything: 2 parachains + 3 mix nodes + transport mix + UI

npm run demo:start

# 4. Open UI

open http://127.0.0.1:8080

demo:setup

  • • Build parachain runtimes
  • • Install & configure IPFS
  • • Generate chain specs
  • • Create cryptographic keys

demo:start

  • • 2 parachains (9944/9945)
  • • 3 mix nodes (9000-9002)
  • • Transport mix (9100-9102)
  • • WS proxies (9950/9951)
  • • Orchestrator + UI (8080)

Ready to build?

Production-ready privacy infrastructure for Polkadot governance.