-
Notifications
You must be signed in to change notification settings - Fork 0
[Discussion] 矿工证能量公式、惩罚机制与等级模型的改进建议 #23
Description
背景
当前矿工证系统的核心能量逻辑已经基本实现,相关代码主要位于:
src/btc/usdb-indexer/src/index/energy_formula.rssrc/btc/usdb-indexer/src/index/energy.rssrc/btc/usdb-indexer/src/index/pass.rs
相关协议与设计文档位于:
doc/矿工证铭文设计.mddoc/矿工证铭文协议.md
本 issue 不是最终方案确认,而是在现有实现基础上的一轮改进建议讨论,目标包括:
- 降低能量模型在长期运行中的数值风险
- 改善增长与惩罚之间的经济平衡
- 为后续等级系统设计提供稳定的数值基础
- 为协作矿工证的合并与结算预留合理空间
1. 目前能量增长公式的问题
当前增长模型的核心问题在于:能量增长公式整体仍然偏线性,且曾经采用较大的 ENERGY_GROWTH_MULTIPLIER。
主要问题
- 当
ENERGY_GROWTH_MULTIPLIER = 10000时,增长速度过快,极易在较高余额、较长持有周期下快速逼近u64上限。 - 即使将
ENERGY_GROWTH_MULTIPLIER降到1,如果年龄age仍然采用“无上限线性增长”,从理论上讲依然存在能量最终打满u64的风险。 - 当前实现虽然通过饱和计算避免了 Rust 层面的整数溢出 panic,但一旦能量打满,后续数值会失真,影响:
- 能量排行
- 能量继承
- 等级映射
- 后续经济模型的可解释性
初步建议
建议将 ENERGY_GROWTH_MULTIPLIER 收敛到 1,同时同步调整惩罚算法的量纲和强度,避免出现“增长变慢,但惩罚仍然沿用旧体系”的失衡问题。
也就是说,multiplier 的调整不能单独看,必须和惩罚公式一起重构。
2. 考虑引入 balance_units 的方案
为降低线性增长公式的数值规模,建议引入余额缩放单位:
balance_units = floor(balance_sats / 100_000)
即以 0.001 BTC 为一个最小能量计量单位。
方案意义
这样做的核心目的是:
- 降低原始 satoshi 数值过大带来的增长过快问题
- 将增长公式从“按 sat 直接累计”改为“按缩放后的余额单位累计”
- 为后续
multiplier = 1的简化方案提供更稳定的数值基础
在线性增长公式下的可行性
若配合:
multiplier = 1- 增长仍为线性
growth ~ balance_units * age
则对于绝大多数现实账户规模,数值风险会大幅下降。
极端情况的风险
需要明确的是:
- 如果
age仍然无上限线性增长,则该方案只能显著降低风险,不能从数学上彻底消除风险。 - 也就是说,只要增长对
age仍保持无限线性,理论上经过足够长时间,仍然可能触及u64上限。 - 但从协议寿命和实际运行周期角度看,风险会比“直接使用 sat 原值增长”低很多。
当前讨论结论
balance_units 是一个值得引入的基础改动,优点是:
- 逻辑简单
- 易于实现和审计
- 可显著缓解数值膨胀问题
但它更适合作为“第一层缩放”,而不是唯一防线。后续仍应结合 age 侧的改进一起使用。
3. age 的可能改进方案
背景
当前讨论中,一个核心结论是:
年龄越大,新增能量的边际增长越慢
也就是说,age 更适合从“线性增长变量”改为“衰减后的成熟度函数 R(H)”。
这里的衰减不是指已有能量下降,而是指:
- 持有时间越长
- 每新增一个区块带来的额外收益越小
方案 A:分段衰减
示意为:
- 前一段全速增长
- 中段降速增长
- 后段进一步降速
- 最后可以选择进入平台期
示例思路:
0 ~ T1: 100% 增速
T1 ~ T2: 25% 增速
T2 ~ T3: 10% 增速
T3+: 0% 或极低增速
分段衰减的优点
- 容易解释,适合协议和产品文案表达
- 容易实现,适合索引器历史重放
- 容易审计和测试
- 可以自然形成 hard cap
分段衰减的缺点
- 在断点附近会有不连续感
- 用户可能围绕断点做行为博弈
- 若分段过多,参数会变得比较人工
方案 B:log 衰减
示意为:
R(H) = A * log(1 + H / B)
或等价形式的离散/查表版本。
log 衰减的优点
- 曲线更平滑,没有明显断点
- 更符合“长期仍有增长,但越来越慢”的直觉
- 不容易围绕某个固定高度进行边界博弈
log 衰减的缺点
- 不如分段方案直观
- 若直接使用浮点实现,历史一致性和跨语言复现要更谨慎
- 纯
log仅能降低增速,不会天然形成严格 hard cap - 参数调优不如分段方案直观
推荐方向
从当前项目阶段看,更推荐:
- 底层能量结算层:优先考虑分段衰减
- 上层等级映射层:再考虑
log/ 几何阈值等平滑模型
原因是:
- 底层能量状态需要稳定、可审计、易重放
- 分段方案更适合作为协议级基础规则
log更适合作为展示层或等级层的非线性映射
也可以考虑折中方案:
- 用离线表或查表方式实现“近似
log的年龄函数” - 既保留平滑性,也兼顾实现确定性
4. 惩罚机制的改进
背景问题
如果增长机制引入 age 衰减,但惩罚仍然沿用旧体系,容易出现以下问题:
- 增长越来越慢,但惩罚依旧过重
- 负向余额变化的成本远大于长期积累收益
- 用户只要正常整理 UTXO 或进行少量转账,就可能遭遇过重损失
- 系统更像“强锁仓 + slash 模型”,而不是“长期质押积累模型”
当前推荐方向
更推荐采用“弱对称方案”:
penalty = lost_units * R(H_now) * lambda
其中:
lost_units:按缩放后的损失余额单位计算R(H_now):当前成熟度函数lambda:惩罚放大系数
该方案的意义
该方案保留了以下特性:
- 惩罚与当前成熟度挂钩
- 已成熟的仓位减仓会付出更高代价
- 惩罚强度可以通过
lambda调整 - 比“固定最大惩罚”更平衡
- 比“完全对称无惩罚”更能抑制短期停车资金
lambda 的设计可能性
方案 1:固定系数
例如:
lambda = 1.2lambda = 1.5lambda = 2.0
适合:
- 参数简单
- 易实现
- 易解释
方案 2:随成熟度变化
例如:
- 年轻仓位
lambda更大 - 成熟仓位
lambda更小
这样可以满足不同目标:
- 打击短期流入流出
- 对长期稳定账户更友好
- 减少“成熟账户一次小幅减仓也被过度惩罚”的问题
方案 3:随减仓比例变化
例如:
- 小比例减仓:较小
lambda - 大比例减仓:较大
lambda
适合防止:
- 大额快速撤出
- 短周期套利行为
当前建议结论
相比“最大惩罚”或“完全对称惩罚”,更推荐:
- 以
R(H_now)为基准 - 再乘一个温和的
lambda - 构成“弱对称惩罚”体系
这更符合长期矿工体系的直觉,也更容易与后续等级系统协调。
5. 能量等级模型
设计目标
等级模型需要满足:
- 前期升级较快,增强参与感
- 后期升级变难,体现长期积累价值
- 不应与原始能量完全线性对应
- 能承接未来协作矿工证的合并逻辑
推荐模型:几何级数阈值模型
推荐使用几何级数型阈值定义等级门槛:
E(L) = E0 * (q^L - 1) / (q - 1)
其中:
E(L):达到等级L所需能量阈值E0:初始门槛q:增长系数,q > 1
反向求等级时可理解为对数型增长,因此具有:
- 前期升级快
- 后期升级越来越难
- 参数可控
- 结构成熟,类似许多游戏/成长系统的经验阈值设计
推荐取值方向
建议优先讨论以下区间:
q = 1.15 ~ 1.18E0根据最终能量量纲确定,例如:100_0001_000_000- 或其他更适合新能量尺度的值
后续可根据以下样本场景做等级对照表,再反推参数:
- 1 BTC / 10 BTC / 100 BTC
- 1 个月 / 6 个月 / 1 年 / 4 年
协作矿工证合并能量的注意事项
在该等级模型下,需要特别注意协作矿工证的合并方式。
当前不建议直接采用:
总等级 = 主矿工证等级 + 所有协作矿工证等级之和
原因是:
- 如果等级函数本身是凹函数(如
log/ 几何阈值反函数) - 直接相加多个等级,可能鼓励把能量拆分到多张证上
- 从而带来拆分套利或 sybil 风险
更推荐的方向
先做能量聚合,再映射等级:
effective_energy = E_main + alpha * sum(E_collab)
total_level = level(effective_energy)
其中:
alpha用于控制协作矿工证的贡献比例alpha可以小于1,避免协作路径过强- 等级映射只对聚合后的有效能量做一次
这样更有利于:
- 控制拆分激励
- 保持主矿工证为核心
- 让协作矿工证成为辅助加成,而不是主导套利手段
待进一步讨论的问题
balance_units的单位应选100_000 sats,还是更粗/更细的粒度?age更适合 hard cap 的分段模型,还是平滑的log模型?penalty的lambda应该固定,还是跟随成熟度/减仓比例变化?- 等级模型中的
E0和q应如何通过样本场景反推? - 协作矿工证的
alpha应如何设定,才能既有意义又避免拆分套利? - 当前“负向变动后基线重置”的机制,是否需要与新的
age模型联动调整?
当前建议小结
本轮讨论阶段的建议方向可以概括为:
- 将增长体系收敛到更小量纲,避免长期数值膨胀。
- 引入
balance_units,降低 sat 原值直接累计的风险。 - 将
age从简单线性变量改为带衰减的成熟度函数R(H)。 - 惩罚机制从“旧线性体系下的重惩罚”调整为“基于成熟度的弱对称惩罚”。
- 等级系统采用几何级数阈值模型,并优先采用“先聚合能量,再映射等级”的协作合并方式。