欢迎光临
我们一直在努力

LRT 抵押品定价:记账汇率、市场价格与数据新鲜度

报价来源与时效门禁示意,卡片时间为教学标签

抵押品页面上显示一个价格,不代表协议已经知道它现在能卖多少钱。对包含质押、赎回队列和二级市场交易的资产,发行方记账汇率、市场成交条件与预言机更新时间可能描述不同的事情。把其中任意一个数叫作“真实价值”,会让风险藏进一个字段里。

这里不复盘未经披露的“头部借贷池漏洞”,也不声称某个模型实际发现了攻击。讨论对象是一种通用的借贷适配器设计:决定是否接受新借款之前,怎样处理几种价格与时间信息。

价格至少是一组带单位的值

输入应记录币种单位、精度、数据源、观测时间和适用资产。一个以 ETH 计的兑换率不能直接和以美元计的市场价取最小值。Chainlink 的接口把 answer、decimals 与 updatedAt 分开提供,应用必须自己正确解释和检查。接口说明

记账汇率、市场价格和时间戳分别输入估值器,过期数据进入暂停新增借款分支

取两个报价的较小值,是一个可讨论的保守政策,不是安全定理。它仍可能被操纵、流动性不足,或者无法反映赎回延迟。政策还应区分暂停新增借款、降低额度与清算现有仓位:同一个异常不一定适合触发同一种动作。

from decimal import Decimal as D

def collateral_price(accounting, market, updated, now, max_age, haircut):
if not D("0") <= haircut < D("1"):
raise ValueError("invalid haircut")
if min(accounting, market) <= 0 or max_age < 0:
return None
if updated > now or now – updated > max_age:
return None
return min(accounting, market) * (D("1") – haircut)

assert collateral_price(D("1.02"), D("0.95"), 950, 1000, 120, D("0.1")) == D("0.855")
assert collateral_price(D("1.02"), D("0.95"), 800, 1000, 120, D("0.1")) is None
assert collateral_price(D("1.02"), D("0.95"), 1001, 1000, 120, D("0.1")) is None
assert collateral_price(D("1"), D("0"), 950, 1000, 120, D("0.1")) is None
print("4 valuation-policy cases checked; teaching quotes only")

保存为 valuation.py,运行 python3 valuation.py。两个价格统一使用“每单位抵押品对应多少 ETH”的教学口径;120 秒与 10% 折扣只用于展示参数,不是任何资产的风险建议。输出 None 表示这份政策无法给出可用价格,不应被转换成零价立刻清算。

时间差怎样传递成坏账风险

发行方公布的新状态、适配器更新与借贷合约读取之间都可能有间隔。检验方式应围绕状态序列:先建立仓位,再改变市场或赎回条件,最后检查新增借款和清算行为。只在单个函数中检查一个价格范围,很难覆盖这些序列。

Agent 可以帮助生成待验证的情景和测试输入,但情景成立仍依赖实际协议接口、价格源和仓位规则。没有对应目标版本与可复现产物,就不把它记作已发现的真实漏洞。

本文只验证四个离线政策分支,未连接预言机、LRT 协议、市场数据或模型,也没有测试清算、罚没或真实交易。这套写法的作用是把估值假设暴露出来,让停止使用一个价格的原因能够解释,而不是给一个看似精准的数字套上“绝对安全”的外壳。

赞(0)
未经允许不得转载:171主机测评 » LRT 抵押品定价:记账汇率、市场价格与数据新鲜度
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址