Sifchain项目中非Rowan流动性奖励功能的优化方案
sifnode SifNode - The future of Defi 项目地址: https://gitcode.com/gh_mirrors/si/sifnode
概述
在Sifchain区块链项目中,非Rowan流动性奖励机制是一个重要功能,它允许用户向奖励池添加流动性,系统会自动将这些流动性分配到对应的流动性池中。然而,当前实现存在一个局限性:所有添加的流动性都会立即全部分配,缺乏灵活性和可控性。
现有机制分析
当前的非Rowan流动性奖励机制工作流程如下:
- 用户通过交易向奖励池添加流动性
- 系统立即将全部添加的流动性分配到目标流动性池
- 分配过程是即时的、一次性的
这种机制虽然简单直接,但在实际应用中存在几个问题:
- 大额流动性添加会对市场造成突然冲击
- 缺乏对流动性释放节奏的控制
- 无法实现渐进式的流动性注入策略
功能优化方案
针对上述问题,我们提出了一种优化方案:为流动性添加功能增加可选的时间参数,实现渐进式流动性分配。
核心改进点
- 时间参数扩展:在原有的流动性添加消息结构中增加Duration字段,类型为time.Duration
- 渐进式分配机制:当指定Duration时,流动性将按照时间均匀分配,而非一次性全部释放
- 向后兼容:不指定Duration或设为0时,保持原有即时分配行为
技术实现细节
消息结构修改
在proto文件中扩展MsgAddLiquidityToRewardBucket消息,增加duration字段:
message MsgAddLiquidityToRewardBucket {
string signer = 1;
repeated cosmos.base.v1beta1.Coin amount = 2;
google.protobuf.Duration duration = 3; // 新增字段
}
分配调度机制
实现一个DistributionSchedule结构体,用于跟踪待分配的流动性:
type DistributionSchedule struct {
StartTime time.Time
EndTime time.Time
TotalAmount sdk.Coins
Distributed sdk.Coins
}
分配逻辑修改
在EndBlocker中实现渐进式分配算法:
- 计算当前区块时间与分配周期的进度比例
- 根据比例计算应分配的数量
- 执行实际分配并更新已分配数量记录
技术挑战与解决方案
挑战1:时间精度处理
区块链时间与系统时间可能存在差异,解决方案是统一使用区块时间作为基准,确保分配进度的确定性。
挑战2:剩余分配处理
当分配周期结束时,可能会有微量未分配余额,解决方案是在最后一次分配时将所有剩余金额一次性分配完毕。
挑战3:状态存储效率
频繁更新分配状态会增加存储开销,优化方案是采用惰性更新策略,只在必要时才更新状态。
预期效果
- 市场稳定性提升:大额流动性注入不再造成市场剧烈波动
- 策略灵活性增强:项目方可以根据需要制定不同的流动性释放策略
- 用户体验改善:用户可以选择更适合自己需求的流动性添加方式
总结
Sifchain的非Rowan流动性奖励功能通过引入时间参数,实现了从简单分配到智能调度的升级。这一改进不仅提升了系统的灵活性,也为更复杂的流动性管理策略奠定了基础。未来还可以在此基础上进一步扩展,如支持自定义分配曲线、多阶段分配策略等高级功能。
sifnode SifNode - The future of Defi 项目地址: https://gitcode.com/gh_mirrors/si/sifnode
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考