ggdude-sudo/kaspa-Learn

GitHub: ggdude-sudo/kaspa-Learn

一个基于 Kaspa 区块链的互动式学习平台,通过 CTF 风格的挑战和钱包认证机制,提供游戏化的知识问答与等级成长体验。

Stars: 0 | Forks: 0

# KaspaLearn - 技术文档 一个游戏化的 Kaspa 区块链学习平台,用户可以通过解决挑战、回答问题来赚取 XP 和徽章。 ## 目录 - [设置](#setup) - [架构概览](#architecture-overview) - [钱包认证](#wallet-authentication) - [数据库模式](#database-schema) - [功能模块](#feature-modules) - [排行榜与挑战](#leaderboard--challenges) - [问题添加与导入](#question-add--import) - [管理面板](#admin-panel) - [环境变量](#environment-variables) - [路由](#routing) ## 设置 ### 前置条件 - Node.js 18+ - Supabase 项目 - Kaspa 钱包(用于身份验证) ### 安装 ``` npm install ``` ### 环境变量 在根目录下创建一个 `.env` 文件: ``` VITE_SUPABASE_URL=https://your-project.supabase.co VITE_SUPABASE_ANON_KEY=your-anon-key ``` ### 开发 ``` npm run dev ``` ### 构建 ``` npm run build ``` ## 架构概览 ``` src/ ├── components/ # Reusable UI components │ ├── auth/ # Login, Signup, Auth components │ ├── gamification/ # Level badges, achievements │ └── ui/ # Base UI (Button, Card, Input, etc.) ├── context/ # React context providers │ ├── AuthContext.tsx # Wallet authentication state │ └── ThemeContext.tsx# Dark/light theme ├── features/ # Main page components │ ├── Leaderboard.tsx # Leaderboard display │ ├── ChallengeList.tsx │ ├── ChallengeDetail.tsx │ ├── Questions.tsx # Q&A section │ ├── AdminPanel.tsx # Admin management │ └── DevPanel.tsx # Developer tools ├── services/ # Business logic │ ├── challengeService.ts │ └── badgeService.ts ├── supabaseClient.ts # Database client & wallet auth ├── App.tsx # Routes & app structure └── index.tsx # Entry point ``` ## 钱包认证 认证通过 Supabase Edge Functions 使用 Kaspa 钱包地址完成。 ### 文件 - `src/supabaseClient.ts` - 主要认证逻辑 - `src/context/AuthContext.tsx` - 认证状态管理 - `src/components/auth/Login.tsx` - 登录界面 ### 工作原理 1. 用户输入他们的 Kaspa 钱包地址 2. 应用调用 `initSupabaseWithWallet(walletAddress)` 3. Supabase edge function (`wallet-auth`) 验证地址并返回一个 JWT 4. JWT 存储在 localStorage 中,用于后续请求 5. 在 `profiles` 表中创建/更新用户配置文件 ### Profile 表 ``` profiles ( id uuid PK username text UNIQUE wallet_address text UNIQUE role text DEFAULT 'user' -- 'user', 'mod', 'admin', 'dev' xp integer DEFAULT 0 level integer DEFAULT 1 challenges_solved integer DEFAULT 0 first_bloods integer DEFAULT 0 created_at timestamptz updated_at timestamptz ) ``` ## 数据库模式 ### 主要数据表 | 数据表 | 描述 | | --------------------- | -------------------------- | | `profiles` | 用户账户与统计数据 | | `challenges` | 挑战定义 | | `challenge_questions` | 挑战中的问题 | | `challenge_flags` | CTF 风格的 flag | | `user_progress` | 已完成的挑战 | | `user_answers` | 问题回答 | | `categories` | 挑战分类 | | `difficulty_levels` | 难度设置 | | `levels` | 玩家等级 | | `badges` | 成就定义 | | `user_badges` | 已获得的徽章 | | `xp_history` | XP 交易日志 | ### 核心数据表详情 #### 挑战 ``` challenges ( id uuid PK title text description text category_id uuid FK difficulty_id uuid FK xp_reward integer solves_count integer DEFAULT 0 is_active boolean DEFAULT true is_retired boolean DEFAULT false creator_id uuid FK -> profiles.id creator_notes text created_at timestamptz ) ``` #### challenge_questions ``` challenge_questions ( id uuid PK challenge_id uuid FK -> challenges.id question_type text -- 'mcq', 'fib', 'single_choice' question_text text options jsonb -- for MCQ correct_answer text explanation text hint text order_index integer points integer ) ``` #### 分类 ``` categories ( id uuid PK name text display_name text description text icon text -- emoji color text -- hex color ) ``` ## 功能模块 ### 排行榜与挑战 **文件:** - `src/features/Leaderboard.tsx` - 排行榜 UI - `src/services/challengeService.ts` - 挑战逻辑 - `src/features/ChallengeList.tsx` - 挑战列表 - `src/features/ChallengeDetail.tsx` - 挑战页面 **工作原理:** 1. 排行榜从 `profiles` 表中获取按 XP 排序的顶级用户 2. 挑战列表带有分类/难度过滤器 3. 用户提交答案以获取 XP 4. 首位解决者(一血)会获得额外荣誉 **核心函数 (challengeService.ts):** ``` // Get all challenges with filters challengeService.getChallenges(filters); // Get leaderboard ranking challengeService.getLeaderboard(limit); // Submit answers and earn XP challengeService.submitAnswers(userId, challengeId, answers); // Get first blood leaders challengeService.getFirstBloodLeaders(limit); ``` **等级系统:** | 等级 | XP 范围 | 称号 | | ---- | --------- | ------------ | | 1 | 0-99 | Beginner | | 2 | 100-299 | Novice | | 3 | 300-599 | Intermediate | | 4 | 600-999 | Advanced | | 5 | 1000-1999 | Expert | | 6 | 2000+ | Master | ### 问题添加与导入 **文件:** - `src/features/Questions.tsx` - 问答界面 - `src/features/DevPanel.tsx` - 开发者面板 **添加问题 (Questions.tsx):** 1. 导航到问题页面 2. 填写问题表单: - 问题文本 - 选项(用于 MCQ) - 正确答案 - 解释 - 分类 - 难度 3. 点击 "Add Question" 4. 管理员:问题会进入 `modules_pending` 表 5. 普通用户:保存到 localStorage **开发者面板 (DevPanel.tsx):** - 创建包含多个问题的新挑战 - 从 JSON 导入问题 - 提交挑战以待批准 - 编辑自己的提交 **问题类型:** - `mcq` - 多项选择(4个选项) - `fib` - 填空题 - `single_choice` - 是/否或真/假 **导入格式:** ``` { "questions": [ { "question_text": "What is Kaspa?", "options": ["Option A", "Option B", "Option C", "Option D"], "correct_answer": "Option A", "explanation": "Kaspo explanation..." } ] } ``` ### 管理面板 **文件:** `src/features/AdminPanel.tsx` **功能:** - 管理用户(提升/降低角色) - 批准/拒绝挑战 - 查看待处理的提交 - 审核内容 - 查看统计数据 **角色:** | 角色 | 权限 | | ------- | ---------------------------------- | | `user` | 解决挑战,获取 XP | | `dev` | 创建挑战,提交以待批准 | | `mod` | 批准内容,管理用户 | | `admin` | 完全访问权限,系统设置 | ## 环境变量 | 变量 | 描述 | 是否必须 | | ----------------------- | ----------------- | -------- | | `VITE_SUPABASE_URL` | Supabase 项目 URL | 是 | | `VITE_SUPABASE_ANON_KEY` | Supabase anon key | 是 | 从你的 Supabase 项目设置 > API 中获取这些信息。 ## 路由 | 路由 | 组件 | 访问权限 | | -------------------- | --------------- | ------------- | | `/` | Home | 公开 | | `/challenges` | ChallengeList | 公开 | | `/challenges/:id` | ChallengeDetail | 公开 | | `/leaderboard` | Leaderboard | 公开 | | `/login` | Login | 公开 | | `/dashboard` | Dashboard | 需认证 | | `/profile` | Profile | 需认证 | | `/profile/:username` | PublicProfile | 公开 | | `/questions` | Questions | 需认证 | | `/admin` | AdminPanel | Admin/Mod | | `/dev` | DevPanel | Dev/Admin/Mod | ## 技术栈 - **前端:** React, TypeScript, Vite - **样式:** Tailwind CSS, Radix UI - **数据库:** Supabase (PostgreSQL) - **钱包:** Kaspa (通过 @kasplex/KaspaTS) - **状态管理:** React Context, localStorage ## 许可证 MIT
标签:BaaS, DApp, EdTech, GNU通用公共许可证, IP 地址批量处理, Kaspa, MITM代理, Node.js, PostgreSQL, React, SPA, Supabase, Syscalls, TypeScript, Vite, Web3, XP, 加密货币, 区块链, 升级, 单页应用, 去中心化, 威胁情报, 学习平台, 安全插件, 开发者工具, 徽章, 成就系统, 挑战赛, 排行榜, 教育科技, 暗色模式, 游戏化, 用户体验, 管理后台, 经验值, 自动化攻击, 解谜, 钱包认证, 问答系统, 题库导入