"Your fingerprint is your wallet."
Imagine walking into a store, picking up what you need, and paying with just a touch of your fingerβno cards, no phones, no passwords. Finger reimagines digital payments by merging the security of biometric authentication with the transparency of blockchain technology.
In a world where we're constantly juggling passwords, PINs, and payment cards, Finger offers a radical simplification: your identity is your payment method. By combining SecuGen fingerprint scanning with Solana blockchain, we've created a system where transactions are:
- π Secure - Biometric data that can't be stolen or forgotten
- β‘ Instant - No fumbling for cards or remembering passwords
- π Transparent - Every transaction recorded immutably on-chain
- π― Inclusive - No need for smartphones or bank accounts
Whether you're a street vendor accepting payments or a customer making a purchase, Finger makes transactions as natural as a handshake. This is the future of paymentsβsimple, secure, and human.
- Fingerprint-based login - No passwords needed
- SecuGen fingerprint scanner integration
- ISO template matching with high accuracy (140+ matching score)
- Real-time fingerprint capture and verification
- User and Vendor accounts with balance management
- Real-time transaction updates via WebSocket
- QR code generation for quick payments
- Transaction history tracking
- Solana blockchain for transparent transactions
- Anchor framework for smart contract interactions
- On-chain transaction recording
- Airdrop functionality for testing
- Responsive design with Tailwind CSS
- Smooth animations using Framer Motion
- Toast notifications for user feedback
- Intuitive navigation with React Router
- Prerequisites
- Installation
- Configuration
- Running the Application
- Project Structure
- API Endpoints
- Technologies Used
- How It Works
- Contributing
- License
Before you begin, ensure you have the following installed:
- Node.js (v16 or higher)
- npm or yarn
- MongoDB (local or cloud instance)
- SecuGen Fingerprint Scanner and SDK
- Solana CLI (for blockchain features)
- Git
- SecuGen fingerprint scanner device
- USB port for scanner connection
git clone <repository-url>
cd fingernpm installcd back
npm install
cd ..Create a .env file in the back directory:
# MongoDB Configuration
MONGODB_URI=mongodb://localhost:27017/finger-payment
# Server Configuration
PORT=3000
# Solana Configuration
SOLANA_NETWORK=devnet
SOLANA_RPC_URL=https://api.devnet.solana.com
# SecuGen Configuration
SECUGEN_API_URL=https://localhost:8000- Install the SecuGen SDK on your system
- Ensure the SecuGen service is running on
https://localhost:8000 - Configure SSL certificates if needed (the app uses
rejectUnauthorized: falsefor development)
- Generate a new Solana wallet or use an existing one
- Place your wallet keypair in
back/blockchain/new_admin.json - Request devnet SOL from the Solana Faucet
# Example wallet structure
{
"publicKey": "your-public-key",
"secretKey": [/* your secret key array */]
}Ensure MongoDB is running:
# Local MongoDB
mongod
# Or use MongoDB Atlas (cloud)
# Update MONGODB_URI in .env with your connection stringRun both frontend and backend concurrently:
npm run devThis will start:
- Frontend:
http://localhost:5173(Vite dev server) - Backend:
http://localhost:3000(Express server)
# Build frontend
npm run build
# Preview production build
npm run preview
# Run backend separately
cd back
npm run devfinger/
βββ back/ # Backend application
β βββ blockchain/ # Solana blockchain integration
β β βββ idl/ # Anchor IDL files
β β βββ airdrop.ts # Airdrop functionality
β β βββ transaction.js # Transaction creation
β β βββ testTransaction.ts # Transaction testing
β βββ controllers/ # Request handlers
β β βββ AuthController.js # Authentication logic
β β βββ FingerController.js # Fingerprint operations
β β βββ TransactionController.js
β β βββ UserController.js
β β βββ VendorController.js
β βββ models/ # MongoDB schemas
β β βββ UserSchema.js
β β βββ VendorSchema.js
β β βββ TransactionSchema.js
β βββ routers/ # API routes
β βββ utils/ # Utility functions
β β βββ connectDb.js # Database connection
β β βββ qr.js # QR code generation
β βββ server.js # Express server & Socket.IO
β βββ package.json
βββ src/ # Frontend application
β βββ pages/ # React pages/routes
β β βββ Landing.jsx # Landing page
β β βββ Login.jsx # User login
β β βββ Signup.jsx # User registration
β β βββ VendorLogin.jsx # Vendor login
β β βββ VendorSignup.jsx # Vendor registration
β β βββ Match.jsx # Fingerprint matching
β β βββ Payments.jsx # Payment interface
β β βββ Transactions.jsx # Transaction history
β β βββ DoneLogin.jsx # Post-login handler
β βββ App.jsx # Main app component
β βββ main.jsx # React entry point
β βββ index.css # Global styles
βββ public/ # Static assets
βββ .gitignore
βββ package.json
βββ vite.config.js # Vite configuration
βββ eslint.config.js # ESLint configuration
βββ README.md
POST /api/auth/signup
POST /api/auth/login
POST /api/auth/vendor/signup
POST /api/auth/vendor/loginPOST /api/finger/scan
POST /api/finger/match
PUT /api/finger/updateGET /api/users/:id
PUT /api/users/:id
GET /api/users/:id/balanceGET /api/vendors/:id
PUT /api/vendors/:id
GET /api/vendors/:id/balancePOST /api/transactions
GET /api/transactions/:userId
GET /api/transactions/vendor/:vendorId// Client -> Server
socket.emit('userMoneyChange', { id: userId })
socket.emit('vendorMoneyChange', { id: vendorId })
// Server -> Client
socket.on('userMoneyChange', ({ balance, id }) => {})
socket.on('vendorMoneyChange', ({ balance, id }) => {})- React 19.1.0 - UI library
- React Router DOM 7.6.2 - Client-side routing
- Tailwind CSS 4.1.8 - Utility-first CSS framework
- Framer Motion 12.16.0 - Animation library
- Lucide React - Icon library
- QRCode.react - QR code generation
- Socket.IO Client - Real-time communication
- React Toastify - Toast notifications
- Vite 6.3.5 - Build tool and dev server
- Node.js - Runtime environment
- Express 5.1.0 - Web framework
- MongoDB - NoSQL database
- Mongoose 8.15.1 - MongoDB ODM
- Socket.IO 4.8.1 - WebSocket library
- bcryptjs - Password hashing
- CORS - Cross-origin resource sharing
- dotenv - Environment variable management
- Solana Web3.js 1.98.4 - Solana JavaScript API
- Anchor 0.32.1 - Solana smart contract framework
- BN.js - Big number library
- SecuGen SDK - Fingerprint scanner integration
- node-fetch - HTTP client for SecuGen API
User β Scan Fingerprint β Create Account β Store Template β Generate Wallet
- User scans fingerprint using SecuGen device
- System captures ISO template (base64 encoded)
- User provides name and password
- Template and credentials stored in MongoDB
- Initial balance set to 0
User β Scan Fingerprint β Match Template β Login Success
- User scans fingerprint
- System retrieves all user templates from database
- Compares scanned template with stored templates using
SGIMatchScore - If matching score > 140, authentication succeeds
- User session established
User β Select Vendor β Enter Amount β Confirm β Blockchain Transaction β Update Balances
- User selects vendor and enters payment amount
- System validates user balance
- Creates Solana blockchain transaction
- Records transaction in MongoDB
- Updates user and vendor balances
- Emits WebSocket events for real-time UI updates
- Generates transaction receipt
// Transaction creation on Solana
1. Initialize Anchor program
2. Create transaction instruction
3. Sign with user wallet
4. Send to Solana network
5. Confirm transaction
6. Store transaction hash- Biometric authentication - More secure than passwords
- Template encryption - Fingerprint templates stored securely
- Password hashing - bcrypt for password security
- HTTPS for fingerprint API - Secure communication with scanner
- Blockchain immutability - Transparent transaction records
- Real-time validation - Immediate balance checks
- Session management - Secure user sessions
cd back/blockchain
npx esrun testTransaction.tsEnsure SecuGen service is running, then:
curl -k -X POST https://localhost:8000/SGIFPCapture \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "Timeout=15000&TemplateFormat=ISO"# Check if SecuGen service is running
curl -k https://localhost:8000/SGIFPCapture
# Restart SecuGen service
# Windows: Services β SecuGen β Restart
# Linux: sudo systemctl restart secugen# Check MongoDB status
mongod --version
# Start MongoDB
mongod --dbpath /path/to/data# Check Solana network status
solana cluster-version
# Check wallet balance
solana balance
# Request airdrop (devnet only)
solana airdrop 2# Find process using port 3000
netstat -ano | findstr :3000
# Kill the process (Windows)
taskkill /PID <process-id> /F
# Kill the process (Linux/Mac)
kill -9 <process-id>- Multi-factor authentication (fingerprint + PIN)
- Support for multiple fingerprint scanners
- Mobile app integration
- Advanced transaction analytics
- Merchant dashboard
- Loyalty rewards system
- Multi-currency support
- Mainnet deployment
- KYC integration
- Refund functionality
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Use ESLint configuration provided
- Follow React best practices
- Write meaningful commit messages
- Add comments for complex logic
- Update documentation for new features
This project is licensed under the ISC License.
- Development Team - Initial work
- SecuGen - Fingerprint scanner technology
- Solana Foundation - Blockchain infrastructure
- Anchor - Smart contract framework
- React Team - Frontend framework
- MongoDB - Database solution
For support, please open an issue in the repository or contact the development team.
- This application is currently configured for development/testing purposes
- Uses Solana devnet - not suitable for production without modifications
- SecuGen SDK requires proper licensing for commercial use
- Ensure compliance with biometric data regulations (GDPR, CCPA, etc.)
- Always use HTTPS in production environments
- Implement proper error handling and logging for production
Made with β€οΈ using React, Node.js, Solana, and SecuGen