FR-x / BR-x / NFR-x)回引本文档。
Genesis Chain 已部署一套 DeFi 协议合约(PledgeLending 质押借贷、UniswapV2 兑换、TriggerParams 利率源) 到 gsc_v2_test 测试网(ChainID 44)。当前缺乏面向终端用户的 Web 前端, 用户只能通过原始 RPC 调用合约,使用门槛极高。
首次接触 GS 协议,没有 GS/GB/GC 代币。 主要诉求:领取测试币、了解协议机制。 高频路径:Faucet → Dashboard 浏览
持有 GS,希望通过质押借出稳定币 GB 或 GC 获取流动性。 关注:质押率、利率、到期日、清算风险。 高频路径:Lending 开仓 → 监控订单 → 还款
在 GS / GB / GC 之间兑换以平衡资产或套利。 关注:实时汇率、滑点、价格影响。 高频路径:Swap 兑换
监控全局订单,发现可清算订单后触发清算获取 1% GS 奖励。 关注:清算线、奖励金额。 高频路径:Lending 清算面板
PledgeLending.openPosition(gsAmount, cycleDays, loanType) 开仓。
ERC20.approve 质押的 GSloanType 枚举:GB = 0 / GC = 1PledgeLending.repay(orderId)。
BR-11):到期日(repayDueDate) ≤ 当前时间 ≤ 宽限期截止日(repayDeadline)repay 会被合约 revert("not due yet"),UI 需在订单状态为 NotDue 时禁用还款按钮Overdue,无法再还款,会被任何人清算(FR-1.4)debtAmount(合约通过 burnFrom 销毁)burnFrom 销毁)getEstimatedRepayment(orderId) 实时读取ERC20.approve 对应数量的 GB 或 GC 给 PledgeLending 合约status 变更为 Repaid,全部 GS 释放回借款人PledgeLending.liquidate(orderId) 触发清算。
collateralRate < 100%(即 1e18)> repayDeadlineBR-4),99% 销毁(burnFrom)getCollateralRate + getRepayStatus 筛选符合条件的订单status 变更为 Liquidated,记录 liquidator 地址与 liquidatedTimegetUserOrders(address) 取得用户全部订单 ID 数组(bytes32[]),逐个调用 getOrder(orderId) 获取 OrderView 详情OrderView 一次返回:订单原始数据 + collateralRate 担保率 + accruedInterest 实时利息 + estimatedRepay 应还数量 + repayStatus 还款状态RepayStatus 枚举:
NotDue → 正常(未到期,禁用「还款」按钮)NotDue 且距到期 < 30 天 → 临近到期(BR-10 前端规则)Repayable → 可还款(在还款窗口内)Overdue → 已逾期(可被清算)Repaid / Liquidated → 已结清 / 已清算(默认不显示在"我的订单"主列表)Router.getAmountsOut)| ID | 规则 | 取值 | 来源 |
|---|---|---|---|
| BR-1 | 质押率 | 70%(借出量 = 质押 GS 价值 × 70%) | 合约硬编码 |
| BR-2 | 借出类型 | GB(无息)/ GC(有利率)。对应合约枚举 LoanType { GB = 0, GC = 1 } |
合约定义 |
| BR-3 | 质押周期 | 360 天 / 720 天 / 1080 天 | 合约枚举 |
| BR-4 | 清算分配 | 清算人获得订单质押 GS 的 1%(liquidationRewardRate = 1e16,admin 可配),剩余 99% 销毁(GS 通过 burnFrom 销毁,不进入"财库") |
合约硬编码 + 管理员可调 |
| BR-5 | 水龙头冷却 | 每个地址每 24 小时可领取一次 | 服务端逻辑 |
| BR-6 | 水龙头领取量 | GS 1,000 · GB 500 · GC 500(可配) | .env.local |
| BR-7 | GC 利率来源 |
调用 TriggerParams.getGCDailyRate() 读取 GC 日利率。算法: iL = EMA(Rt, 180) + K × σr,其中:· Rt = GB 日利率(由 GBMarket 写入)· σr = √(EMA(Rt², 180) − EMA(Rt, 180)²)· K = 上浮系数(默认 0.5,admin 可调)注:开仓时利率被固化到订单 gcDailyRate,订单存续期内不再变化。开仓预览页通过 getGCDailyRate 实时读取。
|
合约 |
| BR-8 | Swap 默认滑点 | 0.5%,可选 0.1% / 0.5% / 1.0% / 自定义 | 前端默认 |
| BR-9 | Swap 手续费 | 0.3% | UniswapV2 标准 |
| BR-10 | 临近到期阈值 | 距到期 < 30 天 时订单状态显示「临近到期」(前端 UI 规则,与合约 RepayStatus 枚举无关) |
前端规则 |
| BR-11 | 还款时间窗口 |
只能在 [repayDueDate, repayDeadline] 内还款。· repayDueDate = 开仓次日 UTC 0 点 + cycleDays· repayDeadline = repayDueDate + gracePeriodDays· 提前还款被合约 revert( "not due yet")· 超过 repayDeadline 不可还款,自动进入可清算状态
|
合约硬编码 |
| BR-12 | 还款宽限期 | GB / GC 各自独立,默认均为 30 天(gbGracePeriodDays / gcGracePeriodDays,admin 可调) |
合约状态变量 |
| BR-13 | GC 利息计算 |
T+1 起息(开仓次日开始计息), 利息 = gcDailyRate × 计息天数 × debtAmount,其中 gcDailyRate 在开仓时固化于订单
|
合约逻辑 |
| BR-14 | 担保率计算 |
· GB:(gsAmount × GS/GB) ÷ debtAmount· GC: (gsAmount × EMA(GS/GC,5)) ÷ (debtAmount + 实时利息)· 汇率来自 TriggerParams.getGSGB() / getGSGC5()
|
合约逻辑 |
/zh/... / /en/...NEXT_PUBLIC_ 前缀,永不注入客户端 bundle每个功能需求的「完成定义」(Definition of Done)。验收时按以下清单逐项检查。
以下需求 v1.0 不实现,留待后续版本或不实现:
| 项 | 原因 | 后续计划 |
|---|---|---|
| 合约部署与升级管理面板 | 运维范畴,由合约工程师用脚本完成 | 不计划 |
| LP 流动性挖矿、添加 / 移除流动性 | 合约暂未提供 LP 激励 | v2.0 候选 |
| 治理投票 | 协议无 DAO 治理设计 | 不计划 |
| 跨链桥 | 仅服务 Genesis Chain | 不计划 |
| K 线 / 历史价格图表 | 需要索引服务 + 后端,v1.0 不投入 | v1.x 候选 |
| 清算机器人 / 自动化清算 | 清算逻辑面向人工触发,效率足够 | v2.0 候选 |
| 邮件 / Push 通知(到期、清算预警) | 需要后端用户系统 | v2.0 候选 |