VoxPop Backend Services
This directory contains the backend services for the VoxPop platform.
Services
Identity Service
The Identity Service manages user verification and identity proofs using Privado ID's zero-knowledge proofs:
- ZKP-based citizenship verification without exposing personal data
- Self-attestation for eligibility with legal disclaimer
- Support for multiple countries through a modular provider interface
- Structured error handling for better user experience
Perspective Service
The Perspective Service handles user perspectives and submissions:
- Submission of perspectives on policy issues
- Validation of content length and file size
- Rate limiting for unverified users
- CAPTCHA verification for unverified users
- Storage of perspectives in IPFS via Pinata
- Retrieval of perspectives from IPFS
Feedback Service
The Feedback Service processes user feedback and stores it on the blockchain.
Moderation Service
The Moderation Service provides content moderation capabilities:
- Content flagging by users
- AI-based content filtering
- Moderation queue management
- Economic barriers for unverified users
Blockchain Service
The Blockchain Service handles interactions with the Polygon blockchain:
- Submit perspective hashes
- Propose insights
- Vote on insights
- Transaction retry mechanism with gas estimation
- Mock contract interactions for development
Development Setup
Prerequisites
- Go 1.20 or higher
- Docker and Docker Compose
- PostgreSQL (via Docker)
- Redis (via Docker)
- Access to Polygon network (Amoy testnet recommended for development)
- Private key with sufficient funds for gas fees
Running Locally
- Set up environment variables:
export RPC_URL=your_ethereum_rpc_url
export CONTRACT_ADDRESS=your_contract_address
export PRIVATE_KEY=your_private_key
export POLYGON_RPC=your_polygon_rpc_url
export CHAIN_ID=80002 # For Amoy testnet
- Start the database and Redis with Docker Compose:
docker-compose up -d postgres redis
- Run the backend:
go run main.go
Docker Setup
To run the entire stack using Docker Compose:
docker-compose up -d
API Endpoints
The backend exposes the following API endpoints:
Identity
POST /verify
- Verify user identity using Privado ID ZKP tokenGET /verify/disclaimer
- Get the legal disclaimer for eligibility self-attestation
Perspective
POST /perspective/submit
- Submit a perspective which will be stored in IPFSGET /perspective/get/:hash
- Get a perspective by its IPFS hashGET /perspective/issue/:issueId
- Get all perspectives for a specific issue
Feedback
POST /submit-feedback
- Submit feedback
Moderation
POST /flag-content
- Flag content for moderationGET /moderation-queue
- Get the moderation queuePOST /moderate-content
- Moderate content (approve/reject)POST /submit-for-moderation
- Submit content for AI moderation
Blockchain
POST /blockchain/submit-hash
- Submit a perspective hash to the blockchainPOST /blockchain/propose-insight
- Propose a new insightPOST /blockchain/vote
- Vote on an insight
Security Considerations
- Private keys should never be committed to version control
- Use environment variables or secure secret management
- Implement rate limiting for API endpoints
- Validate all input parameters
- Use HTTPS for all API communications
Environment Variables
The backend services require the following environment variables:
# Database configuration
DATABASE_URL=postgres://postgres:postgres@localhost:5432/voxpop?sslmode=disable
# Redis configuration
REDIS_ADDR=localhost:6379
REDIS_PASSWORD=
# Ethereum configuration
RPC_URL=https://polygon-amoy.g.alchemy.com/v2/your_api_key
CONTRACT_ADDRESS=0xYourContractAddress
PRIVATE_KEY=yourPrivateKey
# Polygon configuration for blockchain service
POLYGON_RPC=https://rpc-amoy.polygon.technology
CHAIN_ID=80002
# IPFS via Pinata configuration
PINATA_API_KEY=your_pinata_api_key
PINATA_API_SECRET=your_pinata_api_secret
PINATA_JWT=your_pinata_jwt_token
PINATA_PRODUCTION=false
# Privado ID configuration
PRIVADO_API_KEY=your_privado_api_key
PRIVADO_API_URL=https://api.privado.ai