Files
explorer-monorepo/README.md

101 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SolaceScan Explorer - Tiered Architecture
## 🚀 Quick Start - Complete Deployment
**Execute this single command to complete all deployment steps:**
```bash
cd ~/projects/proxmox/explorer-monorepo
bash EXECUTE_DEPLOYMENT.sh
```
## What This Does
1. ✅ Tests database connection
2. ✅ Runs migration (if needed)
3. ✅ Stops existing server
4. ✅ Starts server with database
5. ✅ Tests all endpoints
6. ✅ Provides status summary
## Manual Execution
If the script doesn't work, see [QUICKSTART.md](QUICKSTART.md) for step-by-step manual commands.
## Frontend
- **Production (canonical target):** the current **Next.js standalone frontend** in `frontend/src/`, built from `frontend/` with `npm run build` and deployed to VMID 5000 as a Node service behind nginx.
- **Canonical deploy script:** `./scripts/deploy-next-frontend-to-vmid5000.sh`
- **Canonical nginx wiring:** keep `/api`, `/api/config/*`, `/explorer-api/*`, `/token-aggregation/api/v1/*`, `/snap/`, and `/health`; proxy `/` and `/_next/` to the frontend service using `deployment/common/nginx-next-frontend-proxy.conf`.
- **Legacy fallback only:** the static SPA (`frontend/public/index.html` + `explorer-spa.js`) remains in-repo for compatibility/reference, but it is not a supported primary deployment target.
- **Architecture command center:** `frontend/public/chain138-command-center.html` — tabbed Mermaid topology (Chain 138 hub, network, stack, flows, cross-chain, cW Mainnet, off-chain, integrations). Linked from the SPA **More → Explore → Visual Command Center**.
- **Legacy static deploy scripts:** `./scripts/deploy-frontend-to-vmid5000.sh` and `./scripts/deploy.sh` now fail fast with a deprecation message and point to the canonical Next.js deploy path.
- **Frontend review & tasks:** [frontend/FRONTEND_REVIEW.md](frontend/FRONTEND_REVIEW.md), [frontend/FRONTEND_TASKS_AND_REVIEW.md](frontend/FRONTEND_TASKS_AND_REVIEW.md)
## Documentation
- **[QUICKSTART.md](QUICKSTART.md)** — 5-minute bring-up for local development
- **[RUNBOOK.md](RUNBOOK.md)** — Operational runbook for the live deployment
- **[CONTRIBUTING.md](CONTRIBUTING.md)** — Contribution workflow and conventions
- **[CHANGELOG.md](CHANGELOG.md)** — Release notes
- **[docs/README.md](docs/README.md)** — Documentation index (API, architecture, CCIP, legal)
- **[docs/EXPLORER_API_ACCESS.md](docs/EXPLORER_API_ACCESS.md)** — API access, CSP, frontend deploy
- **[deployment/DEPLOYMENT_GUIDE.md](deployment/DEPLOYMENT_GUIDE.md)** — Full LXC/Nginx/Cloudflare deployment guide
## Architecture
- **Track 1 (Public):** RPC Gateway - No authentication required
- **Track 2 (Approved):** Indexed Explorer - Requires authentication
- **Track 3 (Analytics):** Analytics Dashboard - Requires Track 3+
- **Track 4 (Operator):** Operator Tools - Requires Track 4 + IP whitelist
## Configuration
All secrets and environment-specific endpoints are read from environment
variables — nothing is committed to this repo. See
[docs/SECURITY.md](docs/SECURITY.md) for the rotation checklist and
[docs/DATABASE_CONNECTION_GUIDE.md](docs/DATABASE_CONNECTION_GUIDE.md) for
setup.
| Variable | Purpose | Example |
|---|---|---|
| `DB_USER` | Postgres role | `explorer` |
| `DB_PASSWORD` | Postgres password (required, no default) | — |
| `DB_HOST` | Postgres host | `localhost` |
| `DB_NAME` | Database name | `explorer` |
| `RPC_URL` | Besu / execution client RPC endpoint | `http://rpc.internal:8545` |
| `CHAIN_ID` | EVM chain ID | `138` |
| `PORT` | API listen port | `8080` |
| `JWT_SECRET` | HS256 signing key (≥32 bytes, required in prod) | — |
| `CSP_HEADER` | Content-Security-Policy header (required in prod) | — |
## Reusable libs (extraction)
Reusable components live under `backend/libs/` and `frontend/libs/` and may be split into separate repos and linked via **git submodules**. Clone with submodules:
```bash
git clone --recurse-submodules <repo-url>
# or after clone:
git submodule update --init --recursive
```
See [docs/REUSABLE_COMPONENTS_EXTRACTION_PLAN.md](docs/REUSABLE_COMPONENTS_EXTRACTION_PLAN.md) for the full plan.
## Testing
- **All unit/lint:** `make test` — backend `go test ./...` and frontend `npm test` (lint + type-check).
- **Backend:** `cd backend && go test ./...` — API tests run without a real DB; health returns 200 or 503, DB-dependent endpoints return 503 when DB is nil.
- **Frontend:** `cd frontend && npm run build` or `npm test` — Next.js build (includes lint) or lint + type-check only.
- **E2E:** `make test-e2e` or `npm run e2e` from repo root — Playwright tests against https://blockscout.defi-oracle.io by default; use `EXPLORER_URL=http://localhost:3000` for local.
## Status
✅ All implementation complete
✅ All scripts ready
✅ All documentation complete
✅ Frontend: C1C4, M1M4, H4, H5, L2, L4 done; H1/H2/H3 (escapeHtml/safe href) in place; optional L1, L3 remain
✅ CI: backend + frontend tests; lint job runs `go vet`, `npm run lint`, `npm run type-check`
✅ Tests: `make test`, `make test-e2e`, `make build` all pass
**Ready for deployment!**