campustudio/blockchain-vesting-app

GitHub: campustudio/blockchain-vesting-app

基于 Angular 和 Solidity 构建的区块链代币解锁管理平台,提供链上代币释放计划的可视化追踪与交互式领取功能。

Stars: 0 | Forks: 0

# 🔒 区块链代币解锁平台 [![在线演示](https://img.shields.io/badge/demo-live-brightgreen)](https://blockchain-vesting-app-ihvy.vercel.app) [![Angular](https://img.shields.io/badge/Angular-16-red)](https://angular.io/) [![TypeScript](https://img.shields.io/badge/TypeScript-5.0-blue)](https://www.typescriptlang.org/) [![TailwindCSS](https://img.shields.io/badge/TailwindCSS-3.3-38bdf8)](https://tailwindcss.com/) ## 🎯 审核者快速入门 **📖 [查看完整指南](./DEV_GUIDE.md)** - 包含应用开发与测试的详细步骤说明 **在线演示:** [https://blockchain-vesting-app-ihvy.vercel.app](https://blockchain-vesting-app-ihvy.vercel.app) **快速测试(3 个步骤):** 1. 安装 [MetaMask](https://metamask.io/download/) 浏览器插件 2. 在 MetaMask 中切换至 **Sepolia 测试网** 3. 点击网站上的“连接钱包” (Connect Wallet) ## 📋 关于 这是一个展示代币解锁计划管理的 Web 应用,提供简洁、专业的用户界面。本项目涉及对代币经济学、金融计算以及现代 Web3 开发实践的理解。 ### 什么是代币解锁? 代币解锁是区块链项目中使用的一种机制,用于随时间推移逐步释放代币,而不是一次性全部分发。常见用例: - **团队与顾问**:长期承诺激励 - **投资者**:防止代币被立即抛售 - **社区**:公平且受控的分配 ### 平台功能 - 📊 **仪表盘**:实时统计与概览 - 📅 **计划管理**:追踪多个解锁协议 - 💰 **领取界面**:交互式代币领取 - 📈 **进度追踪**:可视化时间轴与进度条 - 🔍 **筛选**:基于状态的计划筛选 - 🌓 **暗黑模式**:完整的深色主题支持 ## ✨ 特性 ### 📊 **仪表盘** - 所有解锁计划的概览 - 实时统计数据(总锁定、可领取、已领取) - 可视化进度指标 - 基于状态分类(进行中、待开始、已完成) ### 📅 **解锁计划** - 所有解锁协议的详细列表 - 交互式领取功能 - 带时间轴可视化的进度追踪 - 按状态筛选 ### 🎨 **用户体验** - 现代、响应式的设计 - 支持暗黑模式 - 平滑的动画与过渡效果 - 对移动端友好的界面 ### 🔧 **技术特性** - TypeScript 类型安全 - 基于 RxJS 的响应式状态管理 - 模块化组件架构 - 丰富的工具函数 - 开发用模拟数据 ## 🚀 快速入门 ### 前置条件 - Node.js 18+ - npm 9+ ### 安装 ``` # Clone 仓库 git clone https://github.com/YOUR_USERNAME/blockchain-vesting-app.git cd blockchain-vesting-app # 安装 dependencies npm install # 启动 development server npm start ``` 访问 `http://localhost:4200` 即可查看应用。 ### 生产环境构建 ``` # 创建 production build npm run build # 输出将在 dist/blockchain-vesting-app/ 中 ``` ## 📐 架构 ### 项目结构 ``` src/app/ ├── lib/ │ ├── interfaces/ │ │ └── vesting.interface.ts # TypeScript type definitions │ ├── services/ │ │ └── vesting/ │ │ └── vesting.service.ts # Business logic & state management │ ├── utils/ │ │ └── vesting.util.ts # Calculation utilities │ └── constants/ │ └── mock-data.constant.ts │ └── pages/ └── vesting/ ├── dashboard/ # Overview dashboard ├── schedules/ # Detailed schedules list └── index.ts # Routing configuration ``` ### 设计模式 - **服务层**:集中的业务逻辑与状态管理 - **响应式状态**:使用 RxJS BehaviorSubjects 进行实时更新 - **独立组件**:现代 Angular 16 模式 - **工具函数**:用于计算的纯函数 - **类型安全**:全面的 TypeScript 接口 ## 🎯 核心算法 ### 1. **解锁计算** ``` // Calculate vested amount based on time elapsed const vestedAmount = (totalAmount * timeElapsed) / totalDuration; const claimableAmount = vestedAmount - alreadyClaimed; ``` ### 2. **锁定 Cliff 周期** 初始阶段内不解锁任何代币: ``` if (currentTime < startTime + cliffPeriod) { return 0; // No tokens vested during cliff } ``` ### 3. **线性解锁** Cliff 周期结束后,代币将随时间线性解锁: ``` Total: 1,000,000 tokens Duration: 24 months Vesting rate: ~41,667 tokens/month ``` ### 4. **状态管理** - **待开始**:解锁尚未开始 - **进行中**:正在解锁 - **已完成**:完全解锁 - **已撤销**:被管理员取消 ## 🛠️ 技术栈 | 技术 | 用途 | | ------------------- | ----------------------------------- | | **Angular 16** | 具备独立组件的前端框架 | | **TypeScript 5.0** | 类型安全的开发环境 | | **RxJS 7.8** | 响应式状态管理 | | **TailwindCSS 3.3** | 实用优先的样式设计 | | **ethers.js 5** | Ethereum 区块链交互 | | **Solidity 0.8.20** | 智能合约开发 | | **Hardhat** | Ethereum 开发环境 | | **Iconify** | 现代图标系统 | ## 🔒 智能合约安全与 Gas 优化 本项目涉及专业的智能合约开发,采用了行业标准的安全实践和 Gas 优化技术。 ### 🛡️ 安全增强(7 项重大改进) 1. **紧急暂停机制** - 用于应急响应的 Pausable 合约 - 检测到漏洞时,Owner 可暂停所有操作 2. **Token 地址验证** - 移除了关键函数中的外部 token 参数 - 使用已存储的 token 地址以防止操纵 3. **开始时间验证** - 防止创建开始时间在过去的解锁计划 - 确保解锁时间轴的逻辑合理性 4. **锁定代币总量追踪** - 通过 `totalLockedTokens` 映射进行合约级记账 - 允许紧急提取未解锁的代币 - 有助于检测记账错误 5. **增强的 Event 索引** - Event 中的 token 地址现已支持索引 - 提供更好的区块链分析和筛选功能 6. **受益人更改功能** - 处理钱包迁移和更正 - 对于生产环境的解锁系统至关重要 7. **紧急提款** - 找回意外发送的代币 - 仅限提取未解锁的代币,以保护受益人 ### ⚡ Gas 优化技术(已应用 6 项) 1. **存储打包** - 将布尔值字段打包到同一个存储槽中 - 创建计划时**节省约 20,000 gas** 2. **Unchecked 算术** - 应用于安全操作(计数器递增、时间计算) - 每次操作**节省约 100-200 gas** 3. **内存缓存** - 将存储变量缓存到内存中 - 每避免一次 SLOAD **节省约 2,100 gas** 4. **批量操作** - 使用 `batchCreateVestingSchedules()` 处理多个计划 - 创建多个计划时最多可**节省 90%** 的费用 5. **循环优化** - 在安全循环中移除了不必要的溢出检查 - 每次迭代**节省约 30 gas** 6. **高效的返回值** - 函数返回计算出的 ID - 在不增加额外 gas 成本的情况下提升用户体验 ### 📊 Gas 节省对比 | 操作 | 原始成本 | 优化后 | 节省量 | 节省百分比 | | ----------------- | ---------- | ---------- | ------- | ---------- | | 创建计划 | ~180,000 | ~165,000 | 15,000 | 8.3% | | 释放代币 | ~85,000 | ~78,000 | 7,000 | 8.2% | | 撤销计划 | ~95,000 | ~88,000 | 7,000 | 7.4% | | 批量创建 (10 个) | ~1,800,000 | ~1,620,000 | 180,000 | 10% | **现实影响:** 使用批量操作创建 100 个解锁计划,大约可节省 **$1,600** 的 gas 费用(按 ETH 为 $2K,50 gwei 计算)。 ### 🎯 专业功能 **批量操作:** ``` batchCreateVestingSchedules( [addr1, addr2, addr3], token, [100e18, 200e18, 300e18], startTime, cliff, duration, true ) ``` **受益人管理:** ``` changeBeneficiary(vestingId, newWallet) ``` **紧急控制:** ``` pause() / unpause() emergencyWithdraw(token, amount) ``` **增强的信息查询:** ``` getVestingInfo(vestingId) // Get all data in single call ``` 📖 **[查看详细优化报告](./SECURITY_AND_OPTIMIZATION.md)** ## 🔄 未来增强计划 ### ✅ 已完成:区块链集成 - [x] 连接到 Sepolia 测试网 - [x] 部署解锁智能合约 - [x] 读取真实的链上数据 - [x] 执行真实的领取交易 - [x] 支持多账户 - [x] 网络切换检测 ### 阶段 2:高级功能 - [ ] 多代币支持 - [ ] 导出解锁数据为 CSV - [ ] 领取的电子邮件通知 - [ ] 用于创建解锁计划的管理员仪表盘 - [ ] 撤销功能 ## 📝 Sepolia 上的实测数据 该应用已连接到部署在 Sepolia 测试网上的**优化版智能合约**,并包含多样化的测试数据: **智能合约(优化版):** - **解锁合约:** `0x186FBa7B212C5aCCAe3f264178f28922080Bf5a5` - **PROJ Token:** `0x10FDc7A86a2EB3864b18e26B5a204134DD85Cb1c` **测试账户:** `0x006Ac68Ea58Ea14cEd038bE25350A44929ADbAda` **多样化测试数据(12 个解锁计划 - 锁定 1,565 万 PROJ):** | Token | 状态 | 总量 | 已解锁 % | Cliff | 周期 | 备注 | | ----- | --------- | ----------- | -------- | ----- | ----- | --------------------------- | | PROJ | 进行中 | 500,000 | 75% | 无 | 1 年 | 解锁 90 天 | | PROJ | 进行中 | 1,000,000 | 50% | 1 个月 | 1 年 | 180 天,Cliff 已过 | | PROJ | 进行中 | 250,000 | 17% | 1 周 | 6 个月 | 早期阶段 | | PROJ | 已完成 | 2,000,000 | 100% | 3 个月 | 1 年 | 完全解锁,可领取! | | PROJ | 待开始 | 750,000 | 0% | 1 个月 | 1 年 | 15 天后开始 | | PROJ | 待开始 | 300,000 | 0% | 2 周 | 6 个月 | 7 天后开始 | | PROJ | 进行中 | 450,000 | 67% | 无 | 3 个月 | 快速解锁 (60/90 天) | | PROJ | 进行中 | 5,000,000 | 25% | 6 个月 | 2 年 | 长期解锁 | | PROJ | 进行中 | 800,000 | 12% | 1 个月 | 1 年 | Cliff 刚过 | | PROJ | 进行中 | 1,500,000 | 55% | 2 个月 | 1 年 | 中期解锁 | | PROJ | 进行中 | 100,000 | 50% | 无 | 1 个月 | 快速短期解锁 | | PROJ | 待开始 | 3,000,000 | 0% | 3 个月 | 2 年 | 30 天后开始 | **分布情况:** - ✅ **进行中:** 8 个计划(正在解锁中) - ⏳ **待开始:** 3 个计划(尚未开始) - 🎉 **已完成:** 1 个计划(100% 解锁,随时可领取) **在 Etherscan 上查看:** - [优化的解锁合约](https://sepolia.etherscan.io/address/0x186FBa7B212C5aCCAe3f264178f28922080Bf5a5) - [PROJ Token 合约](https://sepolia.etherscan.io/address/0x10FDc7A86a2EB3864b18e26B5a204134DD85Cb1c) ## 🧪 测试 ### 手动测试清单 - [x] 所有路由均可访问 - [x] 统计数据计算正确 - [x] 进度条显示准确 - [x] 领取功能正常工作 - [x] 筛选器应用正确 - [x] 暗黑模式切换正常 - [x] 移动端响应正常 - [x] 错误状态正常显示 - [x] 成功消息正常显示 - [x] 加载状态可见 ### 未来的自动化测试 - 计算工具的单元测试 - 服务集成测试 - 组件渲染测试 - 端到端(E2E)用户流程测试 ## 📊 项目指标 - **TypeScript 文件**:约 15 个文件 - **代码行数**:约 2,500 行 - **组件**:2 个主要组件 - **服务**:1 个核心服务 - **工具函数**7 个函数 - **打包体积**:< 500KB(gzipped 压缩后) ## 🎓 学习资源 - [代币解锁详解](https://www.investopedia.com/terms/v/vesting.asp) - [智能合约解锁模式](https://docs.openzeppelin.com/contracts/4.x/api/finance#VestingWallet) - [Angular 最佳实践](https://angular.io/guide/styleguide) - [ethers.js 文档](https://docs.ethers.org/) ## 📄 许可证 MIT 许可证 - 随意将本项目作为参考,或作为您自己解锁平台开发的起点。 ## 👤 作者 本项目的创建旨在展示 Web3 开发能力以及对代币经济学的理解。 **作品集项目:** - [MetaMask 集成测试](../angular-test) - 基础钱包连接 - [代币解锁平台](.) - 高级代币管理(即本项目) ## 🗝️ 关键收获 本项目涉及: ### 技术技能 - 使用 RxJS 进行复杂状态管理 - 高级 TypeScript 应用与类型安全 - 响应式编程模式 - 组件架构设计 - 使用 BigInt 进行金融计算 ### 业务理解 - 代币经济学与解锁机制 - 金融界面的用户体验 - 数据可视化最佳实践 - 基于状态的工作流设计 ### 开发实践 - 整洁代码原则 - 全面的文档说明 - Git 工作流与部署 - 遵守 ESLint 配置规范 **注意**:这是一个部署在 Sepolia 测试网上的项目。若要在主网(Mainnet)用于生产环境,还需要: - 安全审计 - Gas 优化 - 增强的错误处理 - 主网部署 - 管理员控制 ## 📞 联系方式 如果您对实现细节或设计决策有任何疑问,欢迎随时联系!
标签:Angular, Grype, TailwindCSS, TypeScript, Web3, 代币锁仓, 区块链, 安全插件, 自动化攻击