协议概览
hacds 是运行在 Hacash 主网上的 DeFi 协议。它把 HACD 钻石的评分转化为同质化代币 hacds,并围绕这个代币构建了兑换、做市、借贷三套金融原语。
设计目标
上一版把 hacds 做成刻在钻石上的铭文,导致代币无法拆分、无法自由流通。这一版的核心改动只有一条:把币从钻石上拿下来。
hacds 现在是标准的 Hacash 链上资产:可自由转账、可拆分、可在 AMM 里交易。钻石只作为铸造它的凭证,不再承载它。
三个组成部分
| 组件 | 职责 | 位置 |
|---|---|---|
| 合约 | 持有全部资产与账本,执行兑换/借贷/赎回 | Hacash 主网 HVM |
| 节点 | 提供链上查询与交易广播 | 由社区或项目方运行 |
| 索引器 | 扫链建台账,提供借款人与 HACD 列表 | 链下服务 |
新版设计已移除预言机:HACD 评分改由合约链上直读基因计算,不再依赖链下签名证书。
系统架构
整个协议只有一个合约地址,所有状态都在其中。没有管理员,没有升级入口,没有自毁函数。
职责边界
- 合约 — 唯一的事实来源。所有余额、债务、池子状态都在链上。
- 钱包 — 只管签名。私钥从不离开用户设备。
- 官网 — 只构建交易体,不碰私钥,不保存任何用户数据。
- 索引器 — 只读。合约无法枚举地址,索引器补上这个能力。
资产规格
| serial | 3000 |
|---|---|
| ticket | HACDS |
| name | hacds |
| decimal | 0 |
| 总供给 | 5,963,298,700,000,000 atoms(decimal=0:1 atom = 1 hacds,即 5,963,298,700,000,000 个) |
| issuer | T1A8kaeWqK6wMUw5UMHCA6tMQ1iBdECyH |
链上 #1028 的 ticket 也是 HACDS(它的 name 是 "HACD Fragments",属于他人资产)。协议不检查 name/ticket 唯一性,只认 serial。请核对 serial = 2000。
发行量推导
均值 = 全网 HACD 评分总和 / 颗数
= 492,427 / 138,540
= 3.55440306
总量 = 均值 × HACD 总发行量
= 3.55440306 × 16,777,216
= 59,632,987 分
铸发 atoms = 59,632,987 × 1e8
= 5,963,298,700,000,000
这个数字可以由任何人独立复算:拉取全网 HACD 列表,按同一套 5 维算法逐颗评分,取均值乘以 HACD 总发行量。
AMM 兑换
恒定乘积做市(x × y = k),费率 0.5%,从输入腿收取。
报价公式
输入 amt,扣费后 net = amt × (1 − 0.005) 输出 = pool_out × net / (pool_in + net)
手续费分配
| 去向 | 比例 | 说明 |
|---|---|---|
| LP | 80% | 按份额分配 |
| 协议储备 | 20% | 先补赤字,再补储备,余进金库 |
滑点保护
所有兑换与流动性操作都带 deadline(块高)和 min_out / min_share 参数。任一不满足则整笔回滚,防止被抢跑。
抵押借贷
用户把 hacds 划为抵押品,借出 HAC。
关键参数
| 参数 | 值 | 含义 |
|---|---|---|
| 借款线 | 200% | 债务 ≤ 抵押价值 / 2(50% LTV) |
| 清算线 | 160% | 抵押率跌破 160% 可被清算 |
| 价格缓冲 | 20% | 从满借到清算的下跌空间 |
| 清算奖励 | 5% | 按清算人付款额计,非债务比例 |
| close factor | 50% | 单次最多清算一半债务 |
利率模型
U ≤ 35%: rate = 2% + 4% × U / 35% U > 35%: rate = 6% + 40% × (U − 35%) / 15% U = 利用率 = 总债务 / HAC 提供者总量 U=0 → 2% U=35% → 6% U=50% → 46%
清算
抵押率跌破 160% 后,任何人可发起清算。清算人支付真 HAC,按「付款额 + 5% 奖励」的价值获得对应抵押品。
注意:抵押品交割按付款额计算,不按债务比例。按债务比例会在 160% 抵押率下让清算人拿走借款人几乎全部权益。
HACD 铸造与赎回
铸造(存入 HACD)
存入 1 颗 HACD,按评分铸造等量的 hacds。不打折:1 分 = 1 hacds。
score = score_of(diamond_name) mint = score × SCORE_SCALE // 100%,无折扣
赎回(取出 HACD)
支付 hacds 换回一颗 HACD。基础手续费 0.5%;若该钻石评分高于池内均分,额外收取「挑钻石溢价」。
avg = 池内总分数 / 颗数 premium = min(30%, (score − avg) / avg) fee = 0.5% + premium
溢价上限 30%,防止有人反复从池子里挑走高分钻石、把低分货留给其他持有人。
评分机制
HACD 评分采用 HIP-5 的五维算法:形状、样式、颜色、命名、编号。
| 维度 | 说明 | 取值依赖 |
|---|---|---|
| 形状 | Square / Heart / Circle 等 8 种 | visual_gene[0..2] |
| 样式 | 仅 Common 形状参与 | visual_gene[2..18] |
| 颜色 | 名字首字母 + 明暗加成 | visual_gene + name |
| 命名 | 6 字母的重复/对称加成 | diamond name |
| 编号 | 顺子、对称数字加成 | diamond number |
新版合约通过 HVM 内置直接读取钻石基因并在链上算分,不再依赖链下签名证书。这消除了「谁持有预言机私钥谁就能增发」的风险。
合约接口
以下为 #3000 合约的公开接口。所有 external 函数均可由任何人调用,没有权限限制。
本章描述的是 #3000 合约的接口,该版本正在做上线前的功能测试。
完整源码将在测试通过后推送到
github.com/s6050105/HacdsDeFi。
该仓库当前包含的是上一版 #2000 合约——已部署运行、同样公开可读,但接口与本章略有差异。
兑换与流动性
| 函数 | 签名 |
|---|---|
| swap_hac_to_ds | (hac_in, min_out, deadline) |
| swap_ds_to_hac | (ds_in, min_out, deadline) |
| add_liquidity | (hac_amt, ds_amt, min_share, deadline) |
| remove_liquidity | (share_burn, min_hac_out, min_ds_out, deadline) |
| lp_harvest | () |
借贷
| 函数 | 签名 |
|---|---|
| loan_add_collateral | (ds_amt) |
| loan_borrow | (hac_amt) |
| loan_repay | (hac_amt) |
| loan_liquidate | (borrower, repay, min_coll_out) |
查询视图(常用)
| 函数 | 返回 |
|---|---|
| pool_price | 当前池价(zhu per atom) |
| amm_reserves / amm_reserve_ds | 池子两侧储备 |
| balance_hac(addr) | 有效 HAC 余额 |
| balance_ds(addr) | hacds 配额 |
| loan_health(addr) | 健康度(万分比) |
| hacd_coverage() | HACD 覆盖率(万分比) |
| hcut() / lcut() | 社会化因子(1e12 = 100%) |
错误码
合约以非零整数表示失败,整笔交易回滚。下表对应 #3000 版本。
| 码 | 含义 |
|---|---|
| 0 | 成功 |
| 2 | 参数非法(数量为 0 / 名字格式错) |
| 11 | 余额不足 |
| 20 | 流动性池为空 |
| 21 | 滑点保护触发 |
| 40 | 超过可借额度 |
| 43 | 仓位健康,不能清算 |
| 48 | 单笔只能 1 颗 HACD |
| 50 | 全局利用率已达上限 |
| 51 | 借款已熔断 |
| 52 | 超过单借款人上限 |
| 53 | 超过 hacds 供应上限 |
| 54 | HACD 覆盖率不足 |
| 56 | 滑点/份额保护触发 |
| 59 | 交易已过期(deadline) |
| 61 | HACD 池记录不足 |
风险说明
合约不可升级。一旦部署,任何漏洞都无法修补。请只投入你能承受损失的资金。
hacds 价格完全由 AMM 池子决定。池子较浅时,大额交易会产生显著滑点。抵押借贷在价格下跌 20% 后可能被清算。
极端行情下,AMM 池子可能被单向抽干,导致兑换失败或撤池受限。
HACD 评分基于主观维度(形状、颜色、命名)的量化规则。若评分标准与市场共识偏离,会影响 hacds 的内在价值支撑。