PR #4 of the multi-device roadmap — desktop client groundwork. The shell compiles and runs end-to-end on top of a v2.2.0 node; sections are placeholders that later alphas fill in with real chat / feed / wallet / contacts / settings content shared with the mobile client-app. Scaffold: * Vite + React + TypeScript renderer; Electron main/preload TS compiled via a separate tsconfig. * npm scripts — `dev` (concurrent Vite + Electron), `build` (installer via electron-builder), `typecheck`. * electron-builder targets: .dmg / .exe / .AppImage + .deb. * CSP pins script-src 'self'; connect-src left open so the renderer can hit any configured node. Electron main + preload: * Frame-less window, hiddenInset on macOS, custom-overlay on Windows, drag region via CSS -webkit-app-region: drag on our TitleBar. * contextIsolation on, nodeIntegration off, sandbox off (needed for safeStorage in preload). * window.dchain.keyfile.{load,save,delete,encryptionAvailable} — keyfile lives in the OS keychain via Electron safeStorage, with a plaintext fallback for OSes without an encryption backend. * window.dchain.dialog.{openFile,saveFile}, .fs.{readText,writeText}, .app.{version,platform}. Everything else still goes over plain fetch() in the renderer. Shell (src/shell/): * TitleBar — draggable 32px strip; DChain brand. * NavBar — left 72px rail, six sections + Cmd+1..5 keybinds. * StatusBar — ● online/connecting/offline dot, node URL, current chain height (polls /api/netstats every 5s). * Shell — composes the 3 panes; picks { List, Detail } by active section. Sections (all stubs — filling in alpha5+): * Messages, Feed, Contacts, Profile — SectionPlaceholder with notes. * Wallet — shows the balance reading from /api/address/{pub} as a first real data binding. * Settings — node-URL card with live ping + commit, identity card (shows pub key), about card (reads Electron app.version via IPC). Auth (src/auth/Welcome.tsx): * Create — generates Ed25519 + X25519 via tweetnacl, saves via IPC. * Import — Electron dialog.openFile → parses node.json → saves. * Pair — stub routed; real poll loop reuses the mobile flow in alpha5. Lib (src/lib/): * types.ts — KeyFile / Contact / Message / NodeSettings mirroring client-app wire formats. * storage.ts — keyfile via IPC, settings + contacts + device-registered marker via localStorage. * api.ts — fetch wrapper with setNodeUrl + onNodeUrlChange; getNetStats, getIdentity, fetchDevices, getBalance bindings. * store.ts — zustand { booted, keyFile, settings, contacts, section }. docs/ROADMAP.md — desktop subsection updated with per-alpha breakdown. Next (alpha5): Messages section wired to the relay mailbox, full conversation view, and the pairing poll loop.
DChain documentation
Справочник по блокчейн-ноде DChain. Читается в любом порядке, но если в первый раз — идите по разделам сверху вниз.
Оглавление
| Документ | О чём |
|---|---|
| quickstart.md | Поднять ноду локально за 5 минут |
| architecture.md | 4 слоя стека: network / chain / transport / app |
| node/README.md | Запуск ноды (docker, native, deployment) |
| update-system.md | Версионирование, /api/update-check, auto-update от Gitea |
| api/README.md | REST + WebSocket API endpoints |
| cli/README.md | CLI client — команды, флаги, примеры |
| contracts/README.md | Системные контракты (native + WASM) |
| development/README.md | SDK для написания своих контрактов (TinyGo) |
| node/governance.md | On-chain governance, голосование параметров |
| node/multi-server.md | Multi-validator federation deploy |
Внешние ссылки из репо
- README.md — обзор проекта
- deploy/single/README.md — operator runbook для single-node
- deploy/prod/README.md — operator runbook для multi-validator
- deploy/UPDATE_STRATEGY.md — дизайн forward-compat обновлений (4 слоя)
Соглашения
- Единицы: микро-токены (
µT). 1 T = 1,000,000 µT. MinFee = 1000 µT = 0.001 T. - Pubkey: 32-байтный Ed25519 (hex, 64 символа).
- Address:
DC+ первые 24 hex-символа SHA-256(pubkey). - ChainID:
dchain-+ первые 12 hex-символов SHA-256 genesis-блока. - Времена: RFC 3339 (UTC) везде, кроме internal-счётчиков в Prometheus (unix seconds).