A Web2.5 proof-of-concept voting system that enables wallet-less voting on Solana while maintaining privacy and cryptographic integrity.
This project demonstrates how people can participate in blockchain-based voting without requiring Web3 wallet onboarding. Users draw their signature to generate a unique keypair, which is then used to cast votes. The system maintains privacy while ensuring vote integrity through cryptographic signatures.
- Wallet-less Voting: Voters don't need their own Solana wallet
- Signature-based Authentication: Users draw signatures to generate unique keypairs
- Privacy Preservation: Admins cannot see individual votes
- Tamper-proof Proposals: All proposals are cryptographically secured on-chain
Frontend:
- Next.js 15.5.5 with React 19
- TypeScript
- Tailwind CSS
- Perfect Freehand (signature drawing)
Backend:
- Solana Program (Anchor framework)
- Prisma ORM with SQLite
- Next.js API routes
Blockchain:
- Solana (localnet/devnet/mainnet support)
- Anchor framework for program development
- Borsh serialization
- Signature Generation: Users draw signatures using Perfect Freehand
- Keypair Derivation: Signatures are converted to Solana keypairs
- Vote Casting: Votes are signed and submitted to the blockchain
- Privacy Layer: Only signature hashes are stored in the database
- Proposal Management: On-chain proposal storage with off-chain metadata
- Wallet-less Voting: No wallet required for voters
- Signature-based Authentication: Draw-to-vote mechanism
- Privacy Protection: Admins cannot see individual votes
- Proposal Creation: Create and manage voting proposals
- Vote Verification: Cryptographic proof of voting
- User Management: Registration and authentication system
- Responsive UI: Modern, mobile-friendly interface
- Proposal Duration/Expiry: Time-based proposal lifecycle
- Vote Reclaiming: Mechanism to reclaim unused vote accounts
- Separate Vote Counter: Dedicated account for vote tallying
- Advanced Security: Additional cryptographic protections
- Audit Trail: Enhanced logging and transparency features
- Node.js 18+
- Rust 1.70+
- Solana CLI tools
- Anchor framework
-
Clone the repository
git clone <repository-url> cd signedvoting
-
Install dependencies
# Install root dependencies npm install # Install app dependencies cd app npm install
-
Setup Solana environment
# Configure Solana CLI solana config set --url localhost # Create keypair (if needed) solana-keygen new --outfile ~/.config/solana/id.json
-
Setup database
cd app npx prisma generate npx prisma db push -
Build and deploy the program
# Build the Solana program anchor build # Deploy to localnet anchor deploy
-
Start the development server
cd app npm run dev
- Register: Create an account with username/password
- Browse Proposals: View available voting proposals
- Draw Signature: Use the signature pad to create your unique signature
- Cast Vote: Select your choice and submit your signed vote
- Download Proof: Save your signature as proof of voting
- Create Proposals: Define voting options and descriptions
- Manage Vote Accounts: Fund and maintain voting accounts
- Monitor Results: View aggregated voting results
- Verify Integrity: Ensure proposal and vote integrity
- Individual votes are not visible to administrators
- Only signature hashes are stored in the database
- Vote choices are encrypted and stored on-chain
- All proposals are hashed and stored on-chain
- Votes are cryptographically signed
- Signature-based keypair generation ensures uniqueness
- This is a proof-of-concept implementation
- Not audited for production use
- Centralized database for user management
- Vote accounts managed by trusted parties
This is a proof-of-concept implementation created for educational and experimental purposes. The author is not a cryptography expert, and this implementation may contain security vulnerabilities. Do not use in production without proper security auditing and additional development.
Vibe coded in 2 days using Cursor.
This project was developed as a proof-of-concept for a niche community. Contributions, improvements, and security reviews are welcome.
This project is licensed under the MIT License - see the LICENSE file for details.
Built with ❤️ for the Solana community