# SilverPAY Server Fix Instructions ## Issue Summary SilverPAY on Hostinger server (31.97.57.205:8001) is returning HTTP 500 errors when attempting to create payment orders. The health check returns 200 OK, but the `/api/v1/orders` endpoint fails. ## Root Cause The SilverPAY container is missing critical configuration: 1. Database initialization (SQLite schema) 2. HD Wallet mnemonic seed 3. Exchange rate API configuration 4. Environment variables ## Temporary Solution (Active) We've enabled a mock payment service locally: - Set `"UseMockService": true` in appsettings.json - This allows full testing of the payment flow - Mock service simulates payment confirmations after 5 seconds - **Remember to set to false before production deployment!** ## Permanent Fix - Server Commands SSH into the server and run these commands: ```bash # 1. Find the SilverPAY container docker ps -a | grep silverpay # 2. Check container logs for specific errors docker logs [CONTAINER_ID] 2>&1 | tail -100 # 3. Navigate to SilverPAY directory cd /root/silverpay # or /opt/silverpay # 4. Create .env file if missing cat > .env << 'EOF' ENVIRONMENT=production DEBUG=false API_HOST=0.0.0.0 API_PORT=8001 DATABASE_URL=sqlite:///./data/silverpay.db WALLET_MNEMONIC="profit canyon draft system example volcano humor pelican rotate merit purity bomb" DEFAULT_FIAT_CURRENCY=GBP USE_TESTNET=false LOG_LEVEL=INFO WEBHOOK_SECRET=webhook_secret_2025 EOF # 5. Initialize database mkdir -p data sqlite3 data/silverpay.db << 'EOF' CREATE TABLE IF NOT EXISTS orders ( id TEXT PRIMARY KEY, external_id TEXT UNIQUE NOT NULL, amount DECIMAL(20,8) NOT NULL, currency TEXT NOT NULL, payment_address TEXT NOT NULL, status TEXT NOT NULL DEFAULT 'pending', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, expires_at TIMESTAMP NOT NULL, paid_at TIMESTAMP, tx_hash TEXT, confirmations INTEGER DEFAULT 0, webhook_url TEXT, metadata TEXT ); CREATE TABLE IF NOT EXISTS wallets ( id INTEGER PRIMARY KEY AUTOINCREMENT, currency TEXT NOT NULL, address TEXT UNIQUE NOT NULL, private_key TEXT NOT NULL, derivation_path TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_used_at TIMESTAMP ); CREATE TABLE IF NOT EXISTS exchange_rates ( id INTEGER PRIMARY KEY AUTOINCREMENT, from_currency TEXT NOT NULL, to_currency TEXT NOT NULL, rate DECIMAL(20,8) NOT NULL, source TEXT NOT NULL, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); EOF # 6. Restart the container docker-compose down docker-compose up -d # 7. Test the fix curl -X POST http://localhost:8001/api/v1/orders \ -H "Content-Type: application/json" \ -H "X-API-Key: sp_live_key_2025_production" \ -d '{ "external_id": "test-order", "fiat_amount": 10.00, "fiat_currency": "GBP", "currency": "BTC", "webhook_url": "http://localhost:8080/webhook", "expires_in_hours": 24 }' ``` ## Alternative: Docker Run Command If docker-compose isn't available: ```bash docker run -d \ --name silverpay \ --restart unless-stopped \ -p 8001:8001 \ -v $(pwd)/data:/app/data \ -v $(pwd)/.env:/app/.env \ -e PYTHONUNBUFFERED=1 \ silverpay:latest ``` ## Verification Steps 1. Check health: `curl http://31.97.57.205:8001/health` 2. Check API docs: `curl http://31.97.57.205:8001/docs` 3. Test order creation with the curl command above ## Important Notes - The WALLET_MNEMONIC shown is for testing only - generate a new one for production - Consider setting up proper blockchain API keys (BlockCypher, Blocknomics) - Monitor disk space for the SQLite database - Set up proper logging and monitoring ## Rollback Instructions If issues persist: 1. Set `"UseMockService": false` in appsettings.json 2. Restore original SilverPAY configuration 3. Contact system administrator for server access