|
| 1 | +# Faucet-TOTP |
| 2 | + |
| 3 | +- **Team Name:** TurnaLabs |
| 4 | +- **Payment Details:** |
| 5 | + - **DOT**: 13YqVAq8Yihh9FWHLT91wzKU7okFQueg4fgDGDVK4WZ8bi3k (Polkadot:DOT) |
| 6 | +- **Level:** 1 |
| 7 | + |
| 8 | +## Project Overview :page_facing_up: |
| 9 | + |
| 10 | +### Overview |
| 11 | + |
| 12 | +A secure, sybil-resistant faucet for the Westend and Paseo testnets, enabling verified token claims using Google Authenticator. |
| 13 | + |
| 14 | +The Westend & Paseo Testnet Faucet is a lightweight application designed for developers building on Polkadot. It enables them to receive test tokens securely by verifying their identity via TOTP (Time-based One-Time Password) using Google Authenticator. To prevent abuse, the system includes Redis-powered rate limiting to enforce a 24-hour claim cooldown per user. |
| 15 | + |
| 16 | +We built this faucet to streamline the developer experience in the Polkadot ecosystem. Test tokens are essential for building and testing parachains and dApps, yet distributing them manually or with insecure faucets leads to sybil attacks or spam. Our solution offers a modern, developer-friendly and secure approach. |
| 17 | + |
| 18 | +### Project Details |
| 19 | + |
| 20 | +#### UI & Stack |
| 21 | + |
| 22 | +- Frontend: React (Vite) + Material UI |
| 23 | + |
| 24 | +- Backend: NestJS + Redis + Polkadot.js API |
| 25 | + |
| 26 | +- Auth: TOTP (Google Authenticator) |
| 27 | + |
| 28 | +- Redis: Used for storing OTP verifications and enforcing rate limits |
| 29 | + |
| 30 | +- Polkadot RPCs: Westend and Paseo endpoints via WSS |
| 31 | + |
| 32 | + |
| 33 | + |
| 34 | +#### Data Flow |
| 35 | + |
| 36 | +1. User scans QR → Adds secret to Authenticator |
| 37 | + |
| 38 | +2. User enters OTP + wallet address |
| 39 | + |
| 40 | +3. Backend verifies OTP using speakeasy |
| 41 | + |
| 42 | +4. If valid, backend sends tokens via Polkadot.js API |
| 43 | + |
| 44 | +#### Deliverables Include |
| 45 | + |
| 46 | +* Responsive web frontend |
| 47 | + |
| 48 | +* Backend with RESTful endpoints: |
| 49 | + |
| 50 | + * /setup (generate secret) |
| 51 | + |
| 52 | + * /claim (verify TOTP and send tokens) |
| 53 | + |
| 54 | +* Redis integration for 24h cooldown per user |
| 55 | + |
| 56 | +* Support for both Westend and Paseo |
| 57 | + |
| 58 | +### Ecosystem Fit |
| 59 | + |
| 60 | +* Fit: This faucet is a direct utility dApp to support the growth and testing of parachains and dApps on Polkadot. It supports both current testnets: Westend and Paseo. |
| 61 | + |
| 62 | +* Audience: Primarily developers building with Substrate/Polkadot who need test tokens for deployment, transactions, or parachain testing. |
| 63 | + |
| 64 | +* Needs Met: Provides a secure, developer-friendly faucet with sybil resistance. Eliminates the need for social login, wallet signature, or captchas. |
| 65 | + |
| 66 | +* Need Validation: This need is consistently raised on Element channels and GitHub repos for testnet projects (e.g., Polkadot-JS Apps, Ink! playgrounds). Existing faucets often suffer from abuse or manual verification delays. |
| 67 | + |
| 68 | +* Similar Projects: Few public faucets exist, and they often use simplistic verification (e.g. reCAPTCHA or none). Our project uses TOTP, which is more secure and scalable. |
| 69 | + * [Substrate Faucet](https://github.com/OAXFoundation/substrate-faucet) |
| 70 | + * [Polkadot Testnet Faucet](https://github.com/paritytech/polkadot-testnet-faucet) |
| 71 | + * [Sybil Resistant Substrate Faucet](https://github.com/karooolis/sybil-resistant-substrate-faucet) |
| 72 | + |
| 73 | +## Team :busts_in_silhouette: |
| 74 | + |
| 75 | +### Team members |
| 76 | + |
| 77 | +- Arslan Bilecen - Core Developer |
| 78 | + |
| 79 | +### Contact |
| 80 | + |
| 81 | +- **Contact Name:** Arslan Bilecen |
| 82 | +- **Contact Email:** arslanblcn@proton.me |
| 83 | + |
| 84 | +### Legal Structure |
| 85 | + |
| 86 | +- **Registered Address:** Ankara / Turkiye |
| 87 | +- **Registered Legal Entity:** - |
| 88 | + |
| 89 | +### Team's experience |
| 90 | + |
| 91 | +As a security engineer with 2 years of professional experience, I have developed a strong foundation in application security, including penetration testing, vulnerability assessment, and secure development practices. Alongside my professional role, I have explored full-stack development as a hobby, building various Web2 projects using technologies like React, Node.js, and Express. |
| 92 | + |
| 93 | +Recently, I have shifted my focus toward the Web3 ecosystem, driven by a growing interest in decentralized technologies. I am actively learning and building within the Polkadot ecosystem, and this faucet project represents both my technical curiosity and my desire to contribute to meaningful infrastructure in the space. |
| 94 | + |
| 95 | +In addition to this project, I received a grant from the DFINITY Foundation for my work on MoDojo, a learn-to-earn platform designed to teach developers the Motoko programming language through interactive coding challenges and dApp projects. This experience has further strengthened my ability to architect secure, developer-friendly applications within decentralized ecosystems. |
| 96 | + |
| 97 | +### Team Code Repos |
| 98 | + |
| 99 | +- [TurnaLabs](https://github.com/labturna) |
| 100 | + |
| 101 | +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. |
| 102 | + |
| 103 | +- [arslanblcn](https://github.com/arslanblcn) |
| 104 | + |
| 105 | +### Team LinkedIn Profiles (if available) |
| 106 | + |
| 107 | +- [Arslan Bilecen](https://www.linkedin.com/in/arslan-bilecen-27020a172/) |
| 108 | + |
| 109 | + |
| 110 | +## Development Status :open_book: |
| 111 | + |
| 112 | +- Public repo: [Faucet-TOTP](https://github.com/labturna/Faucet-TOTP) |
| 113 | +- Core functionality implemented (frontend, backend, TOTP verification) |
| 114 | +- QR generation, OTP verification, and token transfer working |
| 115 | +- Deployed locally for testing; preparing for hosted version on Vercel/Fly.io |
| 116 | +- Frontend and backend separation complete (Docker coming soon) |
| 117 | + |
| 118 | +## Development Roadmap :nut_and_bolt: |
| 119 | + |
| 120 | +### Overview |
| 121 | + |
| 122 | +- **Total Estimated Duration:** 1 month |
| 123 | +- **Full-Time Equivalent (FTE):** 1 FTE |
| 124 | +- **Total Costs:** 6000 USD |
| 125 | + |
| 126 | +### Milestone 1 Example — Basic functionality |
| 127 | + |
| 128 | +- **Estimated duration:** 1 month |
| 129 | +- **FTE:** 1 |
| 130 | +- **Costs:** 6,000 USD |
| 131 | + |
| 132 | +| Number | Deliverable | Specification | |
| 133 | +| -----: | ----------- | ------------- | |
| 134 | +| **0a.** | License | Apache 2.0 | |
| 135 | +| **0b.** | Documentation | README, detailed usage guide including backend setup instructions, API usage documentation, frontend interaction flow, and inline code comments for both frontend and backend components | |
| 136 | +| **0c.** | Testing and Testing Guide | Unit tests for backend OTP and Redis functions | |
| 137 | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | |
| 138 | +| 0e. | Article | We will publish an **article**/workshop that explains [...] (what was done/achieved as part of the grant). (Content, language, and medium should reflect your target audience described above.) | |
| 139 | +| 1. | Backend API | NestJS API with /setup and /claim endpoints | |
| 140 | +| 2. | OTP Auth | TOTP-based Google Authenticator flow with speakeasy | |
| 141 | +| 3. | Redis Logic | User-based rate limiter (24h claim cooldown) | |
| 142 | +| 4. | Frontend UI | React + MUI claim form, QR generation, and OTP input | |
| 143 | +| 5. | Faucet Transfers | Token transfers using Polkadot.js API on Westend & Paseo | |
| 144 | + |
| 145 | +## Future Plans |
| 146 | + |
| 147 | +- Add admin dashboard to track claim volume and abuse prevention |
| 148 | +- Support other networks (e.g. Kusama testnets, parachain localnets) |
| 149 | +- Integrate optional email-based OTP (for broader accessibility) |
| 150 | + |
| 151 | +## Additional Information :heavy_plus_sign: |
| 152 | + |
| 153 | +- Project is actively maintained and continuously tested locally. |
| 154 | +- We plan to open-source it fully and invite community contributions after milestone 1. |
| 155 | + |
| 156 | +**How did you hear about the Grants Program?** Web3 Foundation Dev Forum |
| 157 | + |
0 commit comments