Документ фіксує стек, який реально є в репозиторії зараз:
він відповідає за Hardhat/deploy tooling, а application runtime винесений у app/ і server/.
predict-edge/
├── app/ # Vite + React frontend, Bun, PWA
├── server/ # Hono API на Bun
├── contracts/ # Solidity contracts: market, AMM, CLOB
├── scripts/ # deploy, verify, env sync, wallet/reset utilities
├── data/ # markets.json
├── docs/ # архітектурна документація
├── artifacts/ # Hardhat output, gitignored
├── cache/ # Hardhat cache, gitignored
└── typechain-types/# TypeChain output, gitignored
| Категорія | Реалізація |
|---|---|
| Runtime/build | Bun, Vite 5, @vitejs/plugin-react-swc |
| UI | React 18, Tailwind 3, shadcn-style primitives на Radix, lucide-react, framer-motion |
| App shell | react-router-dom маршрути /, /market/:address, /portfolio |
| Data fetching | @tanstack/react-query |
| Web3 reads/writes | wagmi 3, viem 2, injected connector, explicit Arc Testnet chain guard |
| Circle wallet | @circle-fin/modular-wallets-core, passkey/WebAuthn, smart account, bundler client, paymaster |
| Charts | lightweight-charts, generated sparklines |
| PWA | vite-plugin-pwa, manifest/icons, /v1/* network-only caching rule |
| Архітектура | feature-sliced: src/app, src/features/{markets,trading,wallet,portfolio}, src/shared/{ui,lib}, src/styles |
| API access | Vite dev proxy /v1 -> http://localhost:8787 |
| Docker | Bun build -> nginx (app/Dockerfile, app/nginx.conf) |
Основні frontend-команди:
cd app
bun install
bun run dev # http://localhost:5173
bun run build
bun run typecheck
bun run lint| Категорія | Реалізація |
|---|---|
| Runtime | Bun, Bun.serve |
| Framework | Hono, OpenAPIHono |
| API docs | /openapi.json, /docs через Scalar |
| Routes | /health, /v1/markets, /docs, /openapi.json |
| Web3 | ethers v6 для server-side deploy market + AMM + CLOB |
| Валідація | zod schemas у Hono routes |
| Error model | neverthrow у create-market service |
| Logging | pino |
| Persistence | JSON file: data/markets.json for created market metadata |
| Config | root .env.local + server .env, API_PORT, CORS_ORIGINS, ARC_RPC_URL, PRIVATE_KEY |
| Docker | server/Dockerfile на oven/bun |
Основні backend-команди:
cd server
bun install
bun run dev # http://localhost:8787
bun run typecheck
bun run lint
bun test| Категорія | Реалізація |
|---|---|
| Framework | Hardhat 2 + @nomicfoundation/hardhat-toolbox |
| Solidity | 0.8.17, optimizer enabled, runs=1000000 |
| Contracts | EventBasedPredictionMarket.sol, PredictionMarketAMM.sol, OnChainLimitOrderBook.sol |
| Dependencies | OpenZeppelin 4.9, UMA @uma/core artifacts |
| Network | arcTestnet, chainId 5042002, RPC default https://rpc.testnet.arc.network |
| Explorer config | Arcscan custom chain in hardhat.config.ts |
| Collateral | Arc Testnet USDC ERC-20 system address 0x3600000000000000000000000000000000000000, 6 decimals |
| Gas | Native Arc USDC, 18 decimals at wallet balance level |
Root commands:
bun install
bun run compile
bun run deploy
bun run verify-deploy
bun run sync-env
bun run generate-wallet
bun run reset
bun run test:contracts
bun run keeper
bun run dev:api
bun run dev:app
bun run build:app| File | Призначення |
|---|---|
root .env.local |
PRIVATE_KEY, DEPLOY_RPC_URL, deployed DEPLOY_* addresses |
app/.env.local |
VITE_* addresses and optional Circle credentials |
server .env |
optional backend overrides such as API_PORT, CORS_ORIGINS, ARC_RPC_URL |
Deploy writes root .env.local. scripts/sync-env.ts maps root variables into Vite variables:
| Root | Frontend |
|---|---|
DEPLOY_RPC_URL |
VITE_ARC_RPC_URL |
DEPLOY_MARKET_ADDRESS |
VITE_MARKET_ADDRESS |
DEPLOY_AMM_ADDRESS |
VITE_AMM_ADDRESS |
DEPLOY_CLOB_ADDRESS |
VITE_CLOB_ADDRESS |
DEPLOY_USDC_ADDRESS |
VITE_USDC_ADDRESS |
DEPLOY_OO_V2_ADDRESS |
VITE_OO_V2_ADDRESS |
DEPLOY_FINDER_ADDRESS |
VITE_FINDER_ADDRESS |
DEPLOY_TIMER_ADDRESS |
VITE_TIMER_ADDRESS |
- Market grid із категоріями, одним базовим live market із env addresses і user-created markets із API.
- Market detail із live AMM prices/reserves, portfolio balances, TradingPanel, OrderBook і UMA resolution controls.
- Buy/sell YES/NO через AMM із preview-функціями
calcBuy*/calcSell*. - Escrowed on-chain limit orders через
OnChainLimitOrderBook:placeLimitOrder,cancelOrder,fillOrder,matchOrders. TradeHistoryчитає AMM і CLOB logs з Arc.- Portfolio page, що агрегує positions по live markets.
- Create Market dialog, який викликає
POST /v1/marketsі деплоїть market + AMM + CLOB серверним key. - Dual-wallet UX: MetaMask/injected або Circle Passkey, якщо Circle credentials задані.
- Testnet keeper script exists as
bun run keeper; production still needs monitoring and failure policy. - Немає Postgres/Drizzle/Redis/worker scheduler. Збереження зараз файлове.
- Немає production auth/rate-limit для
POST /v1/markets. - Немає real UMA DVM на Arc у цьому testnet bootstrap; використовується
MockOracleAncillary.