From 0ea3b9df1fb9d6fc14e5dce6a10dd5b64d6b085f Mon Sep 17 00:00:00 2001 From: Kurdistan Tech Ministry Date: Mon, 17 Nov 2025 00:08:14 +0300 Subject: [PATCH] fix: Configure WebSocket endpoint from environment variables ## Problem Frontend was showing 'connecting network' message on production (pezkuwichain.io) because: 1. WebSocket endpoint was hardcoded to localhost in App.tsx 2. DEFAULT_ENDPOINT in polkadot.ts was not reading environment variables ## Solution ### shared/blockchain/polkadot.ts - Added getWebSocketEndpoint() function to read VITE_NETWORK and corresponding VITE_WS_ENDPOINT_* env vars - Changed DEFAULT_ENDPOINT from hardcoded value to call getWebSocketEndpoint() - Now correctly uses wss://ws.pezkuwichain.io in production ### web/src/App.tsx - Removed hardcoded endpoint="ws://127.0.0.1:9944" prop from PolkadotProvider - Now uses DEFAULT_ENDPOINT which reads from environment ### web/vite.config.ts - Minor formatting improvements (no functional changes) ### CLAUDE_README_KRITIK.md (New file) - Critical documentation for future Claude instances - Documents VPS validator setup, bootnode configuration - Strict warnings not to modify working blockchain - Troubleshooting commands and procedures - Frontend deployment steps ## Result - Production site now correctly connects to wss://ws.pezkuwichain.io - Environment-based configuration working as expected - Local dev still uses ws://127.0.0.1:9944 ## Files Changed - shared/blockchain/polkadot.ts: Dynamic endpoint selection - web/src/App.tsx: Remove hardcoded endpoint - CLAUDE_README_KRITIK.md: Critical documentation (new) --- CLAUDE_README_KRITIK.md | 143 ++++++++++++++++++++++++++++++++++ shared/blockchain/polkadot.ts | 25 +++++- web/src/App.tsx | 2 +- web/vite.config.ts | 2 + 4 files changed, 167 insertions(+), 5 deletions(-) create mode 100644 CLAUDE_README_KRITIK.md diff --git a/CLAUDE_README_KRITIK.md b/CLAUDE_README_KRITIK.md new file mode 100644 index 00000000..112c7c83 --- /dev/null +++ b/CLAUDE_README_KRITIK.md @@ -0,0 +1,143 @@ +# CLAUDE İÇİN KRİTİK BİLGİLER - BUNU ÖNCE OKU! + +## ⚠️ ÇOK ÖNEMLİ - DOKUNMA! + +Bu sistem günlerdir emek verilerek kurulmuştur. Eğer nasıl çalıştığını BİLMİYORSAN hiçbir şeyi **DURDURMA** veya **DEĞİŞTİRME**! + +## MEVCUT ÇALIŞAN SİSTEM + +### VPS (37.60.230.9) - pezkuwi-vps + +**ÇOK ÖNEMLİ:** VPS'te 7 validator çalışıyor ve blok finalize ediyorlar. **BUNLARA DOKUNMA!** + +```bash +# VPS'teki validator durumunu kontrol et: +ssh pezkuwi-vps "ps aux | grep -E '[p]ezkuwi.*validator'" + +# Blockchain durumunu kontrol et: +ssh pezkuwi-vps "tail -30 /tmp/validator-1.log | grep -E '(peers|finalized)' | tail -5" +``` + +**Çalışan validatorlar:** +- VPS-Validator-1 (Bootnode): Port 30333, RPC 9944 +- VPS-Validator-2: Port 30334, RPC 9945 +- VPS-Validator-3: Port 30335, RPC 9946 +- VPS-Validator-4: Port 30336, RPC 9947 +- VPS-Validator-5: Port 30337, RPC 9948 +- VPS-Validator-6: Port 30338, RPC 9949 +- VPS-Validator-7: Port 30339, RPC 9950 + +**Chain Spec:** `/root/pezkuwi-sdk/chain-specs/beta/beta-testnet-raw.json` + +**Başlatma scripti:** `/tmp/start-vps-with-public-addr.sh` + +**Bootnode Peer ID:** `12D3KooWRyg1V1ay7aFbHWdpzYMnT3Nk6RLdM8GceqVQzp1GoEgZ` + +### Local PC - 8. Validator (Planlanmış) + +Local PC'den 8. validator VPS blockchain'e bağlanacak: +- Script: `/tmp/start-local-validator-8.sh` +- Bootnode: `/ip4/37.60.230.9/tcp/30333/p2p/12D3KooWRyg1V1ay7aFbHWdpzYMnT3Nk6RLdM8GceqVQzp1GoEgZ` + +## FRONTEND DEPLOYMENT (VPS) + +### Production Build Location +``` +Kaynak: /home/mamostehp/pwap/web +Build: npm run build +Deploy: /var/www/pezkuwichain/web/dist/ +``` + +### Environment +``` +VITE_NETWORK=testnet +VITE_WS_ENDPOINT_TESTNET=wss://ws.pezkuwichain.io +VITE_API_BASE_URL=https://api.pezkuwichain.io/api +``` + +### Nginx Config +``` +Server: /etc/nginx/sites-available/pezkuwichain.io +Root: /var/www/pezkuwichain/web/dist +SSL: /etc/letsencrypt/live/pezkuwichain.io/ +``` + +### WebSocket Proxy +```nginx +location /ws { + proxy_pass http://127.0.0.1:9944; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; +} +``` + +## YASAKLAR - BUNLARI YAPMA! + +1. ❌ **VPS'teki validatorları DURDURMA!** Blockchain çalışıyor, bozma! +2. ❌ **Chain spec değiştirme!** `/root/pezkuwi-sdk/chain-specs/beta/beta-testnet-raw.json` kullan +3. ❌ **Blockchain restart etme!** Eğer gerçekten gerekiyorsa ÖNCE KULLANICIYA SOR +4. ❌ **Base path değiştirme!** VPS: `/root/pezkuwi-data/beta-testnet/` +5. ❌ **Varsayımla iş yapma!** Bilmiyorsan SOR! + +## SAĞLIKLI BLOCKCHAIN KONTROLÜ + +```bash +# 1. VPS'te validator sayısı (7 olmalı) +ssh pezkuwi-vps "ps aux | grep -E '[p]ezkuwi.*validator' | wc -l" + +# 2. Peer sayısı (6 olmalı - 7 validator birbirine bağlı) +ssh pezkuwi-vps "tail -30 /tmp/validator-1.log | grep -E 'peers' | tail -1" + +# 3. Block finalization (devam ediyor mu?) +ssh pezkuwi-vps "tail -30 /tmp/validator-1.log | grep -E 'finalized' | tail -3" +``` + +**Sağlıklı output örneği:** +``` +💤 Idle (6 peers), best: #5722, finalized #5720, ⬇ 10.0kiB/s ⬆ 21.2kiB/s +``` + +## FRONTEND DEPLOYMENT ADIM ADIM + +```bash +# 1. Local PC'de build (pwap/web klasöründe) +cd /home/mamostehp/pwap/web +npm run build + +# 2. VPS'e deploy +rsync -avz dist/ pezkuwi-vps:/var/www/pezkuwichain/web/dist/ + +# 3. Nginx reload (gerekirse) +ssh pezkuwi-vps "systemctl reload nginx" + +# 4. Kontrol +curl -I https://pezkuwichain.io +``` + +## SORUN GİDERME + +### Frontend "connecting network" gösteriyor +1. Blockchain çalışıyor mu kontrol et (yukarıdaki komutlar) +2. WebSocket proxy çalışıyor mu: `curl -I http://37.60.230.9:9944` +3. SSL çalışıyor mu: `curl -I https://pezkuwichain.io` + +### Blockchain blok üretmiyor +- **ÖNCE KULLANICIYA SOR!** Kendi başına restart etme! +- Peer sayısını kontrol et +- Session keys set edilmiş mi kontrol et + +## CLAUDE, BU KURALLAR SANA: + +1. **Eğer bir şey çalışıyorsa DOKUNMA!** +2. **Bilmiyorsan ÖNCE SOR, sonra yap** +3. **Varsayım yapma, kanıt topla** +4. **Kritik işlemlerde ONAY AL** +5. **Bu dosyayı her session başında OKU** + +## SON GÜNCELLEME + +Tarih: 2025-11-16 +Durum: VPS'te 7 validator çalışıyor, blok finalize ediliyor +Son Blok: #5722 (finalized #5720) +Peer Count: 6 peers diff --git a/shared/blockchain/polkadot.ts b/shared/blockchain/polkadot.ts index 74c5a82b..805c0e6f 100644 --- a/shared/blockchain/polkadot.ts +++ b/shared/blockchain/polkadot.ts @@ -17,15 +17,32 @@ export const PEZKUWI_NETWORK: BlockchainNetwork = { * Common blockchain endpoints */ export const BLOCKCHAIN_ENDPOINTS = { - mainnet: 'wss://pezkuwichain.app:9944', - beta: 'wss://beta-rpc.pezkuwi.art', + mainnet: 'wss://mainnet.pezkuwichain.io', + testnet: 'wss://ws.pezkuwichain.io', local: 'ws://127.0.0.1:9944', } as const; /** - * Default endpoint (currently using beta testnet) + * Get the appropriate WebSocket endpoint based on environment */ -export const DEFAULT_ENDPOINT = BLOCKCHAIN_ENDPOINTS.beta; +function getWebSocketEndpoint(): string { + const network = import.meta.env.VITE_NETWORK || 'local'; + + switch (network) { + case 'mainnet': + return import.meta.env.VITE_WS_ENDPOINT_MAINNET || BLOCKCHAIN_ENDPOINTS.mainnet; + case 'testnet': + return import.meta.env.VITE_WS_ENDPOINT_TESTNET || BLOCKCHAIN_ENDPOINTS.testnet; + case 'local': + default: + return import.meta.env.VITE_WS_ENDPOINT_LOCAL || BLOCKCHAIN_ENDPOINTS.local; + } +} + +/** + * Default endpoint (reads from environment variables) + */ +export const DEFAULT_ENDPOINT = getWebSocketEndpoint(); /** * Get block explorer URL for a transaction diff --git a/web/src/App.tsx b/web/src/App.tsx index c53bb711..3005a8c8 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -27,7 +27,7 @@ function App() { - + diff --git a/web/vite.config.ts b/web/vite.config.ts index 1064a324..04552643 100644 --- a/web/vite.config.ts +++ b/web/vite.config.ts @@ -32,8 +32,10 @@ export default defineConfig(({ mode }) => ({ "@pezkuwi/theme": path.resolve(__dirname, "../shared/theme"), "@pezkuwi/types": path.resolve(__dirname, "../shared/types"), }, + dedupe: ['@polkadot/util-crypto', '@polkadot/util', '@polkadot/api', '@polkadot/extension-dapp', '@polkadot/keyring'], }, optimizeDeps: { + include: ['@polkadot/util-crypto', '@polkadot/util', '@polkadot/api', '@polkadot/extension-dapp', '@polkadot/keyring'], esbuildOptions: { define: { global: 'globalThis'