aadityakumarsah/Staking-Vault

GitHub: aadityakumarsah/Staking-Vault

一个用 Rust 实现的抵押式线性质押金库引擎,配套交互式浏览器测试控制台,解决定期质押中奖励计算精度、资金抵押安全性和流程可视化问题。

Stars: 0 | Forks: 0

# VaultLab — 线性质押金库 一个全栈式的质押产品原型:一个确定性的 Rust 金库引擎 以及一个专业的、多路由的浏览器控制台,用于安全地测试其流程。 **在线演示:** [aadityakumarsah.github.io/Staking-Vault](https://aadityakumarsah.github.io/Staking-Vault/) ## 问题 定期质押产品看起来简单,但其核心规则很容易出 错: - 对于 1.5 年等非整数年的期限,奖励公式可能会变得不一致。 - 金库承诺的奖励可能会超过其拥有的支付资金。 - 浮点运算对于 token 余额来说是不安全的。 - 用户需要一个清晰、可测试的视图,以了解何时可以领取奖励以及何时可以提取本金。 - 如果没有交互式的产品体验,智能合约逻辑很难解释清楚。 ## 解决方案 VaultLab 实现了一种抵押、定期质押设计,具有线性 奖励和交互式测试控制台。 当用户创建一个头寸时,金库会计算所选期限的最大 奖励,并立即将其预留。如果奖励池无法覆盖该承诺,质押将被拒绝。奖励会持续释放,而本金将一直锁定直到到期。 在 10% 的年化奖励率下,模型行为如下: | 锁定期限 | 到期总奖励 | 1,000 TOK 的奖励 | | --- | ---: | ---: | | 1 年 | 1.0× 年化奖励 | 100 TOK | | 1.5 年 | 1.5× 年化奖励 | 150 TOK | | 2 年 | 2.0× 年化奖励 | 200 TOK | ``` maximum reward = principal × annual_reward_bps / 10,000 × lock_seconds / 31,536,000 vested reward = maximum reward × min(elapsed, lock_seconds) / lock_seconds claimable = vested reward − previously claimed reward ``` ## 为什么使用 VaultLab? - **清晰的奖励经济学** — 回报随所选期限呈线性增长。 - **全额奖励抵押** — 新的质押无法过度透支储备金。 - **安全的记账模型** — Rust 使用带检查的 `u128` 运算;不包含浮点数。 - **确定性测试** — 时间被传入金库,使得边缘情况可复现。 - **专业的产品演示** — 前端使得合约流程易于向招聘人员、审查人员和利益相关者展示。 - **演示无需设置** — 托管的 UI 使用本地测试状态,从不要求连接钱包。 ## 如何使用该应用 ### 选项 1:打开托管应用 1. 打开 [VaultLab](https://aadityakumarsah.github.io/Staking-Vault/)。 2. 在 **概览** 中,查看活跃的钱包、金库余额、可用奖励和抵押状态。 3. 从侧边栏打开 **创建质押**。 4. 在 **注入奖励** 中,作为模拟管理员向奖励池添加 TOK。 5. 输入本金金额,选择 1 年、1.5 年或 2 年的锁定期限,并确认抵押预览已注资。 6. 选择 **预留奖励并创建质押**。 7. 打开 **头寸** 以检查释放进度和可领取的奖励。 8. 使用快捷控件推进模拟时间。在可用时领取已释放的奖励;到期后,提取本金以及任何剩余的奖励。 9. 打开 **活动** 以审查每个状态转换,移动时间滑块,将当前状态导出为 JSON,或重置本地测试会话。 测试状态会持久化保存在浏览器的本地存储中,因此当您在路由之间切换时,它仍然可用。随时使用 **重置本地数据** 即可重新开始。 ### 选项 2:在本地运行前端 ``` git clone https://github.com/aadityakumarsah/Staking-Vault.git cd Staking-Vault python3 -m http.server 4173 --directory frontend ``` 在浏览器中打开 [http://localhost:4173](http://localhost:4173)。 ### 运行 Rust 金库引擎 安装稳定的 [Rust 工具链](https://www.rust-lang.org/tools/install), 然后运行: ``` cargo test cargo run cargo fmt --check cargo clippy --all-targets -- -D warnings ``` `cargo run` 演示了一个 1.5 年的头寸,包含期中奖励领取和到期提款。`cargo test` 验证财务规则和失败路径。 ## 产品路由 | 路由 | 用途 | | --- | --- | | [概览](https://aadityakumarsah.github.io/Staking-Vault/) | 金库健康状况、储备状态、未平仓头寸和近期事件 | | [创建质押](https://aadityakumarsah.github.io/Staking-Vault/stake.html) | 注入奖励,配置期限,并创建抵押头寸 | | [头寸](https://aadityakumarsah.github.io/Staking-Vault/positions.html) | 查看释放情况,领取奖励,提取已到期本金,并推进时间 | | [活动](https://aadityakumarsah.github.io/Staking-Vault/activity.html) | 检查审计跟踪,导出状态,并运行 1.5 年的示例场景 | ## 技术栈 | 层级 | 技术 | 用途 | | --- | --- | --- | | 合约域 | Rust 2021 | 确定性的质押规则和 token 记账 | | 财务类型 | 原生 `u128`,带检查的算术运算 | 精确的 token 单位计算,无浮点数 | | 前端 | HTML5,现代 CSS,原生 JavaScript 模块 | 无依赖的响应式产品控制台 | | 浏览器状态 | `localStorage` | 在路由间共享测试钱包、时钟、头寸和事件 | | 测试与质量 | Rust 测试,`rustfmt`,Clippy | 单元测试、格式化和 Lint 强制执行 | | CI/CD | GitHub Actions | 在每次 push 时运行格式化、Clippy 和所有 Rust 测试 | | 托管 | GitHub Pages | 自动从 `main` 分支发布静态前端 | ## 架构 ``` ┌──────────────────────────────┐ │ Browser test console │ │ HTML + CSS + JavaScript │ │ Local storage test state │ └──────────────┬───────────────┘ │ mirrors the same business rules ┌──────────────▼───────────────┐ │ Rust staking vault engine │ │ Positions · rewards · auth │ │ Reservation · invariants │ └──────────────────────────────┘ ``` 前端有意设计为安全的模拟器,而不是 Rust 库的直接运行时适配器。Rust 单元测试是合约行为的真实来源。生产环境的集成会将浏览器状态替换为区块链运行时或 API 适配器。 ## 核心规则与安全机制 - 头寸具有不可变的所有者、本金、创建时间和锁定持续时间。 - 只有管理员才能注入奖励。 - 只有头寸所有者才能领取奖励或提取本金。 - 本金在到期前不可用。 - 奖励线性释放,可以在多次交易中领取。 - 在创建质押时即预留所有未领取的奖励权益。 - 金库维持以下不变性: ``` vault balance = outstanding principal liability + reward balance reserved rewards ≤ reward balance ``` ## 应用场景 VaultLab 可用于: - 一个 **DeFi / 质押产品原型**,在选择链运行时之前使用。 - 一个 **作品集项目**,展示 Rust 财务逻辑、测试、CI/CD 和以产品为中心的前端设计。 - 一个 **QA 沙盒**,用于手动演练注入资金、质押、释放、领取和到期边缘情况。 - 一个 **教学工具**,用于解释抵押和基于时间的奖励计算,而不会让用户暴露于真实资金的风险中。 - 作为 **CosmWasm、Solana 或 EVM 适配器**的起点,前提是将内存账本替换为链原生存储、转账、身份和时间。 ## 项目结构 ``` . ├── src/ │ ├── lib.rs # Staking-vault domain model and tests │ └── main.rs # Runnable Rust demonstration ├── frontend/ │ ├── index.html # Overview route │ ├── stake.html # Create-stake route │ ├── positions.html # Position operations route │ ├── activity.html # Audit and simulation route │ ├── app.js # Shared persistent simulator state │ └── styles.css # Responsive professional UI system └── .github/workflows/ ├── ci.yml # Rust quality checks └── deploy-frontend.yml # GitHub Pages deployment ``` ## 生产环境注意事项 在使用真实资产应用此设计之前,请添加特定于链的 token 适配器、持久化的链上存储、原生的调用者身份、链上时间、治理和紧急控制、token 小数位处理、集成测试以及独立的安全审计。 ## 简历描述
标签:Rust, Web3, 区块链, 可视化界面, 数据可视化, 智能合约, 网络流量审计, 质押金库, 通知系统, 金融模型