PolkaTap: NFC Tap-and-Pay for Polkadot Wallets
Project Overview
PolkaTap is an Android app that enables NFC tap-and-pay for Polkadot wallets, using the Polkadot SDK for secure on-chain transactions without banks or third-party fees. It's a simple, lightweight prototype demonstrating decentralized payments in action.
Inspiration
As a beta tester for Polkadot Pay, I was frustrated by the lack of NFC support—scanners broke, pins failed, and partnerships with Apple/Google meant 20% fees. I wanted to build a native solution for adults to pay with DOT seamlessly, proving Polkadot can rival centralized systems without compromises.
How We Built It
- Frontend: Kotlin on Android with NFCAdapter for tag reading/writing, integrating Polkadot SDK for transaction signing (e.g.,
api.tx.balances.transferon Westend testnet). - Backend: Ktor server on Hetzner as a mock POS (Dockerized, 128MB RAM), verifying transactions via Polkadot.js API.
- Tech Stack: Polkadot SDK, Kotlin Coroutines for async RPC calls, Semaphore for rate-limiting (5 concurrent taps).
What I Learned
- Kotlin's null-safety and coroutines make blockchain apps efficient—e.g., suspending on I/O for 5k taps without thread bloat.
- NFC is straightforward with Android's NdefMessage, but real-world edge cases (e.g., tag conflicts) require robust error handling.
- Polkadot SDK's XCM for cross-chain payments is powerful but needs careful gas estimation for testnet.
Challenges Faced
- Syntax errors in Kotlin DSL for HTML mocked POS UI—fixed by simplifying to p tags (no ul/div nesting).
- Docker volume bloat on Hetzner—pruned with
docker system prune --volumes, dropping usage from 79% to 60%. - Secure cookie timeouts in n8n for monitoring—resolved with Nginx WebSocket headers.
This hackathon pushed me to iterate fast—PolkaTap isn't just a demo; it's a call for open NFC in crypto. Let's tap into Polkadot's future! 🚀iration
What it does
How we built it
Challenges we ran into
Accomplishments that we're proud of
What we learned
What's next for PolkaTap
Built With
- kotlin
Log in or sign up for Devpost to join the conversation.