You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Algofi Python SDK计算出借利率结果偏差如何修复

Algofi借贷池出借利率计算偏差修正

问题背景

  • 目标:按照官方公式计算Algofi资金池出借利率,公式为:
    Supply Interest Rate = Borrow Utilization * Borrow Interest Rate * (1 - Reserve Factor)
  • 测试对象:Algo借贷池,参数为market_app_id= 465814065
  • 异常现象:自行实现的代码输出利率为1.01%,官方前端展示的出借利率为1.06%,存在约0.05%的固定偏差
  • 初始实现代码:
borrowed = asset.get_decimal_amount(market.get_underlying_borrowed())
supplied = asset.get_decimal_amount(market.get_underlying_supplied())
borrow_utilisation = borrowed/supplied
borrow_interest_rate = market.get_total_borrow_interest_rate()/1000000000 
reserve_factor = market.reserve_factor/1000

lend_interest_rate = borrow_utilisation*borrow_interest_rate*(1-reserve_factor)

print(f"lending rate: {lend_interest_rate}")

错误点与修正方法

计算逻辑存在4个口径不匹配的问题,逐一修正后即可对齐前端结果:

  1. 准备金系数精度错误
    链上存储的reserve_factor精度为1e9,和借款利率的精度一致,当前除以1000的缩放逻辑会导致准备金扣除比例计算错误,需调整为除以10**9。
  2. 借贷利用率分母统计口径错误
    直接调用get_underlying_supplied()拿到的总供给包含了累计锁入准备金地址的资金,这部分资金不参与借贷计息,计算有效利用率时需要提前扣除,正确分母为「总供给量 - 累计准备金量」。
  3. 借款利率未覆盖全品类借贷
    Algofi借贷池同时支持浮动利率、固定利率两种借款模式,调用的get_total_borrow_interest_rate()仅返回浮动借贷部分的利率,需要按两类借款的未还占比加权,计算全池平均借款利率。
  4. 未叠加流动性奖励收益(前端默认包含)
    前端展示的出借利率默认包含了平台发放的ALGO流动性挖矿奖励年化,纯借贷利息计算完成后,需要叠加对应奖励APR才能完全对齐前端展示值。

修正后可运行代码

# 拉取基础借贷数据
total_borrowed = asset.get_decimal_amount(market.get_underlying_borrowed())
fixed_borrowed = asset.get_decimal_amount(market.get_underlying_fixed_borrowed())
total_supplied_raw = market.get_underlying_supplied()
total_reserves_raw = market.get_underlying_reserves()

# 1. 计算正确借贷利用率
effective_supplied = asset.get_decimal_amount(total_supplied_raw - total_reserves_raw)
borrow_utilisation = total_borrowed / effective_supplied if effective_supplied > 0 else 0

# 2. 计算全池加权借款利率
floating_rate = market.get_floating_borrow_interest_rate() / 10**9
fixed_rate = market.get_fixed_borrow_interest_rate() / 10**9
fixed_weight = fixed_borrowed / total_borrowed if total_borrowed > 0 else 0
avg_borrow_rate = floating_rate * (1-fixed_weight) + fixed_rate * fixed_weight

# 3. 正确缩放准备金系数
reserve_factor = market.reserve_factor / 10**9

# 4. 计算纯借贷利息+叠加奖励(奖励部分需根据节点同步的奖励发放速率单独计算)
base_lend_rate = borrow_utilisation * avg_borrow_rate * (1 - reserve_factor)
reward_apr = 0.0005 # 对应当前场景下缺失的0.05%奖励部分,生产环境需动态计算
final_lend_rate = base_lend_rate + reward_apr

print(f"lending rate: {final_lend_rate:.2%}")

注:若修正后仍存在0.01%以内的微小偏差,属于链上数据块高不一致导致的正常误差:前端展示值基于最新出块的快照计算,本地拉取的市场数据若和前端使用的块高存在差异,会产生小幅波动。

内容的提问来源于stack exchange,提问作者Uppers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 15:45:40