Skip to main content

📝 Quizzes

The portal includes topic-based quizzes that test understanding of the workshop presentations. Scores are recorded on-chain via the QuizScores smart contract, with a comprehensive anti-cheat system to ensure fair competition.

How Quizzes Work​

  1. Connect your wallet using MetaMask on Sepolia testnet
  2. Register — enter your name and X (Twitter) username (one-time, permanent, on-chain)
  3. Select a quiz corresponding to a presentation topic
  4. Answer 10 random questions — selected from a pool of 100+ questions per quiz
  5. 30 seconds per question — timer auto-advances if you don't answer
  6. Score submitted on-chain — your score is revealed only after it's stored on the blockchain
  7. No retakes — each quiz can only be attempted once per wallet

Quiz Topics​

QuizBased OnPool SizeTopics Covered
Quiz 1Censorship Resistance100+ questionsBlockchain basics, Ethereum, censorship resistance, resistance to capture, validators, EIPs
Quiz 2Open Source100+ questionsOpen source principles, Ethereum's openness, EIP process, developer tools, Solidity, ERCs
Quiz 3Privacy100+ questionsDigital privacy, pseudonymity vs. privacy, zero-knowledge proofs, ZK-Rollups, commit-reveal
Quiz 4Security100+ questionsSmart contract vulnerabilities, reentrancy, access control, CEI pattern, security tools, auditing

Scoring System​

ParameterValue
Questions per attempt10 (randomly selected)
Time limit per question30 seconds (hard limit)
Correct answer100 base points
Speed bonusUp to +100 points (faster = more)
Max per question200 points
Max per quiz2,000 points
Retakes❌ Not allowed

Speed bonus formula: The bonus decreases by 4 points per second. Answering in under 1 second earns the full 100-point bonus. Answering at 25+ seconds earns 0 bonus.

Anti-Cheat System​

The quiz system uses a server-side quiz engine with multiple layers of protection:

🔒 Server-Side Grading​

Correct answers are never sent to the browser. The server:

  • Selects 10 random questions from the 100+ pool
  • Sends questions to the browser without correct answers
  • Grades each answer on the server
  • Calculates the final score server-side
  • Signs the score with an admin key for on-chain submission

🛡️ On-Chain Enforcement​

The QuizScores smart contract enforces:

  • Signature verification: Only admin-signed scores are accepted
  • One attempt per quiz: hasAttempted mapping prevents retakes
  • Unique X usernames: Each X handle can only be used by one wallet
  • Nonce replay protection: Prevents reusing captured signatures

⏱️ Server-Side Timer​

The 30-second timer is enforced on the server, not just in the browser. Even if a student modifies the frontend code, the server will mark the answer as timed out.

🎲 Question Randomization​

Each student receives a different set of 10 questions from a pool of 100+. Options within each question are also shuffled. This makes answer-sharing impractical.

Security Summary​

Attack VectorStatus
Forge score via raw transaction✅ Blocked (requires admin signature)
Extract admin key from frontend✅ Blocked (key is server-side only)
Read correct answers from source code✅ Blocked (answers only on server)
Bypass 30s timer✅ Blocked (enforced server-side)
Take quiz multiple times✅ Blocked (on-chain + server check)
Register same X username twice✅ Blocked (on-chain uniqueness)
Replay a captured signature✅ Blocked (nonce protection)
Share answers between participants✅ Mitigated (random 10 from 100+ pool)

Leaderboard​

The leaderboard supports multiple events — each event (e.g., a university workshop) has its own deployed QuizScores contract on Sepolia. Users can switch between events using a dropdown on the leaderboard page. A Luma ↗ button next to the dropdown links to the event's Luma page.

For each event, the leaderboard displays:

  • Participant name and X username
  • Individual quiz scores (Q1–Q4)
  • Total aggregate score
  • Podium for top 3 participants

The leaderboard updates automatically after each score submission.

Shareable Event URLs​

Each event's leaderboard has a deep-linkable URL:

https://www.road2devcon.quest/#/leaderboard/{eventId}

For example: #/leaderboard/vmatm00s links directly to the ATLAS SkillTech leaderboard. Sharing this URL will open the leaderboard pre-selected to that event.

Adding a New Event​

  1. Deploy a fresh QuizScores.sol on Sepolia via Remix
  2. Append a new entry to the end of src/config/events.js with the event name, Luma URL ID, and contract address (the last entry is automatically the default)
  3. Commit and deploy — the leaderboard dropdown and Luma link update automatically