跳轉到

使用技術

本檔角色:技術選型與責任邊界總覽。 權威細節見 程式架構.md 與 程式架構/*.md 各實作層檔;套件精確版本只以各 repository 的 package.json 與 lockfile 為權威,本檔只列套件名與用途。

1. 前端框架

項目 技術
Web 框架 Angular
3D 渲染 Three.js
UI Component 自製 o4-* ui-kit(全站統一,ui-frontend.md §4
狀態管理 RxJS / Signals
樣式 SCSS + CSS custom properties(主題 token,主題系統.md

2. 物理引擎

項目 技術
物理運算 Rapier deterministic build
套件 @dimforge/rapier3d-deterministic-compat(同 deterministic build、WASM 內嵌變體——esbuild 免 wasm 打包特殊處理;鎖定版本)
時間步長 固定 60Hz;dt 唯一權威為 1 / FIXED_FRAMERATE_HZ 秒精確值
數值精度 f32 全物理計算(避免 f64 跨平台差異)
座標量化 INTEGER_SCALE = 1000(1mm 精度)

Determinism 保證見 程式架構.md §6

3. 模型格式

項目 技術
模型標準 glTF 2.0 (.glb 二進制單檔)
幾何壓縮 Draco
貼圖壓縮 KTX2
讀寫工具 @gltf-transform/cli、Three.js GLTFLoader
編輯 Blender + Custom Properties 面板
不可信 GLB 解析 Sanitize Worker(Web Worker 隔離;資安規範.md §2.4程式架構/security.md §1

4. P2P 網絡

4.1 核心庫

項目 技術
libp2p(JS) 節點探索 / GossipSub / DHT
WebRTC DataChannel / Mesh 連線
Signaling open-4wd-signaling template(Cloudflare Workers/SQLite-backed Durable Objects 與 Node adapters 協定地位相同,由各營運者選擇)
TURN Relay 行動網路 NAT 嚴格時用

4.2 IPFS

項目 技術
瀏覽器 IPFS Helia(UGC 快取 pin / LRU 管理,程式架構/pwa-offline.md §6
Pinning 多副本 自架 open-4wd-pinning(template repo)
內容定址 CID v1 (SHA-256)

5. 鏈式儲存

項目 技術
CRDT log @orbitdb/core(exact 版本以 main repository lockfile 為準;本機 event cache 由 ledger 模組有界管理)
回合共識錨 / 帳本檢查點 多簽演算法(自實作於 ledger 模組;各自 quorum 與用途不同)
衝突處理 回合錨:雙證書 consensus-invalid 並存證、不選鏈;Orbit event multi-head:full-DAG deterministic fold;同 previous 帳本 checkpoint:equivocation quarantine
Canonical 序列化 IPLD dag-cbor

6. 加密 / 身分

項目 技術
助記詞 BIP39(12 / 24 詞,@scure/bip39
簽章 Ed25519(@noble/curves/ed25519
Hash SHA-256(@noble/hashes
PIN 加密本地儲存 Argon2id(KDF,@noble/hashes/argon2)+ AES-GCM(WebCrypto crypto.subtle程式架構/key-manager.md §4
房間邀請 PAKE RFC 9807 OPAQUE(@serenity-kit/opaque)+雙向 confirmation(程式架構/room-runtime.md §4

7. 確定性同步

項目 技術
Rollback Netcode 自實作於 network-sync 模組
Snapshot Checksum SHA-256(32 bytes)
Input 廣播 mesh DataChannel + sign

8. 客戶端基礎建設

項目 技術
PWA Service Worker + manifest
離線快取 Cache API + IndexedDB
i18n 自製 dict + key-based(zh-TW / zh-CN / en / ja)+自寫 ICU 複數子集+Intl.PluralRulesIntl 格式化(零第三方 runtime)
SEO 靜態 metadata + sitemap.xml + hreflang
配對評級 TrueSkill(自製整數定點實作——rating 屬共識 derive、浮點與 erf 禁入,不用 ts-trueskill;算式見 算式表.md §20
音訊 Web Audio AudioContext(三路 gain:master ← sfx / bgm)(程式架構/audio-system.md;槽位名錄+主題供檔)
主題 受控 CSS+token+manifest(current Style API)+fallback 四件組(分類註冊表,主題系統.md §2

9. 部署

項目 技術
主站 GitHub Pages(純靜態)
Pinning template 自架 open-4wd-pinning(TypeScript app〔ledger-peer+管理 API〕+ IPFS Kubo + IPFS Cluster,程式架構/pinning-service.md
Signaling template open-4wd-signaling(平台無關 TS 協定核心+Cloudflare Workers/SQLite-backed Durable Objects與 Node adapters;兩者協定地位相同,由各營運者選擇)
TURN + STUN 自架 open-4wd-turn(coturn 第三方軟體 + k8s manifests,部署資訊.md §4.3
CI/CD GitHub Actions

詳見 部署資訊.md

10. 開發工具

項目 技術
套件管理 pnpm(lock 嚴格 commit)
TypeScript strict 模式
測試 Vitest(unit)+ Playwright(E2E/跨瀏覽器)+ fast-check(property tests 每 PR;bounded fuzz nightly)
Lint / Format ESLint + Prettier(config 與繁中註解規範程式架構.md §14
Mermaid 流程圖(程式架構/程式流程/*.md流程/*.md;索引見 流程.md §2

11. Repository 資產工具

GLB 檢視邏輯位於 main repository scripts/glb-inspect.mjs,由現行 package commands 調用:

命令 用途
pnpm check:assets 驗證 shipped builtin GLB、manifest、幾何與貼圖 policy
pnpm propose:asset-metadata 產生可審閱的 metadata 候選,不直接改寫權威

編輯器的不可信 GLB 收件走 Sanitize Worker;使用者 UI 不暴露開發機腳本路徑。

12. 第三方資源 license 控管

詳見 資安規範.md §6

  • 嚴格鎖版本(lock 檔 commit)
  • White list(well-known 套件)
  • CI audit ≥ moderate 阻擋
  • SRI hash(build 產物;runtime 原則上無第三方 CDN——資安規範.md §5

13. CSP

指令清單權威=程式架構/security.md §3(本檔不重列避免漂移);設計定案見 資安規範.md §4——GH Pages 無法設 HTTP header → CSP 在 prerender 後依每份 HTML 的 inline bytes 逐頁生成 <meta>connect-srcscheme 級 'self' wss: https:(玩家可自選 signaling / pinning / gateway 節點);meta 不支援 frame-ancestors → 主站無框架保護(風險接受)。

14. 跨瀏覽器支援

詳見 程式架構/testing.md §2

  • Chrome / Edge(Win / Mac / Linux)
  • Firefox(Win / Mac / Linux)
  • Safari(Mac / iOS)
  • Mobile Chrome(Android)

WASM 為硬需求(不支援 = 不可玩,顯示引導頁)。物理一律單執行緒確定性——Rapier deterministic build 與 SIMD / parallel feature 互斥,不存在「多執行緒降級」軸;且主站 GH Pages 無法設 COOP / COEP header、SharedArrayBuffer 本就不可用(程式架構/security.md §6 註)。

15. 程式語言比重

語言 用途
TypeScript 本專案程式:main 前端/Service Worker、pinning 與 signaling templates、建置與驗證腳本

Rapier 依賴是上游預編 WASM(package exact pin);本專案沒有自寫 Rust/Go production source, 也不把 workspace-only 美術管線腳本列為 repository technology stack。

16. 未來可換的實作

詳見 程式架構.md §1 — 五個已接線抽象介面允許同版實作替換,另有一個保留接縫:

  • SignalingProvider: 任意相容 WSS endpoint/GossipSub;部署平台不進入介面命名
  • PhysicsEngine: Rapier / 替代物理引擎(若有 deterministic 替代)
  • AssetStorage: IPFS / WebDAV / S3-compatible
  • Ledger: OrbitDB / 自架 CRDT
  • KeyManager: 軟體 key provider/硬體錢包 provider 介面
  • PinningProvider: open-4wd-pinning / Pinata / 自架