Morpho 两个同名市场为什么不同?核对市场 ID 与五项参数
链小知 · 进阶 · 核验 · 依官方文档整理
按网络和 marketId 读取借出资产、抵押资产、预言机、利率模型与 LLTV,识别同名不同配置的市场,再检查流动性与数据时间。
开始前准备
- 已有一个市场链接及网络,能够查看其完整 marketId。
- 本教程核对 Morpho Blue/可变利率市场;Vault 与其他产品需另查相应配置。只读查询不需钱包签名。
1. 从市场页面取完整身份
记录网络、marketId、借出资产与抵押资产的地址。页面“USDC | cbBTC”一类名称帮助阅读,但两个名称一样的市场仍可能由不同 oracle、IRM 或 LLTV 区分。
不要用 Vault 地址替代 marketId。Vault 是资金组织方式,可能分配到多个市场;需要先定位实际分配的市场再继续。
检查结果:得到网络 + marketId,以及两种资产的完整地址。
2. 读取五项不变参数
从对应网络官方 Morpho 部署的只读入口调用 idToMarketParams(marketId),保存 loanToken、collateralToken、oracle、irm、lltv。若使用官方 API,查询同样带上 chainId 与 marketId。
返回空值、调用报错或网络错误时,分别记录。不要用“当前总借款为零”单独判断市场从未创建;零活动与不存在不同。
检查结果:五项参数有原始返回值与读取网络,未读到的值保留未知。
3. 逐项比对并检查 LLTV 单位
先比资产地址,再比 oracle 和 irm;五项中任何一项不同,都应按不同市场研究。链上 LLTV 按 1e18 缩放,将其除以 1e18 后再转百分数。
例如原始 860000000000000000 对应 86%,不能误写成 0.86%。这只是清算阈值的解释,不是建议将借款顶到阈值。
检查结果:对比表包括五项原值与正确转换的 LLTV。
4. 用参数重新生成 ID
官方说明 marketId 由参数的 ABI 编码计算 keccak256 得到。能够编码的研究者可按文档结构重新计算,再与保存的 marketId 比较。
不一致时先查字段顺序、整型与缩放,不要用字符串拼接代替 ABI 编码。不会编码也可先完成双来源字段核对,并注明未进行重编码校验。
检查结果:ID 校验通过,或明确标为未做;不把格式正确当成市场正确。
5. 另外核对 oracle 与可用流动性
oracle 地址相同也需要理解它如何报价;市场界面标价不是对预言机可靠性的保证。按官方资料继续核对依赖资产和报价规则,暂时读不到时保留缺口。
研究供给退出时再看 liquidityAssets 等状态。可提款还取决于市场可用流动性;五项参数永久固定不代表利率、价格和流动性固定。
检查结果:身份与动态状态分开记录,当前可用流动性有单位和时间。
6. 处理 API 与合约数值不一致
先检查是否同一网络、marketId、区块和单位。官方说明 market() 原始状态不包含上次链上交互后的新增利息,而 SDK 或计算后的状态可能已经计入。
留下原始状态、查询区块及是否已计息的标签。不要为让两者一致而删除数据,也不要把数据差异直接写成协议出现亏空。
检查结果:差异解释有身份、时间与计息口径依据;未知部分明确标注。
怎样确认完成
- 市场五项参数和完整 ID 有证据。
- 同名不同市场能逐项区分。
- 动态状态的时间、精度与计息范围已记录。
常见错误与边界
- 用交易对简称或 Vault 地址代替 marketId。
- 只对比两种代币,不核对 oracle、IRM 与 LLTV。
- 把低借款量或零流动性当作市场不存在。
- 混用已计息 API 状态和未更新的原始合约状态。