争议与升级
争议是保证乐观主张诚信的安全机制。任何人有钱包、押同等保证金、能连 DVM,就可以挑战任何活跃断言。
争议结构
断言者发布主张 + 保证金
│
│ 挑战期
▼
┌────────────┐
│ 无人争议? │ → 结算 → 主张判真,
│ │ 断言者拿回保证金
└─────┬──────┘
│ 是(有人调用 disputeAssertion)
▼
争议者保证金被托管
│
▼
价格请求进入 DVM 投票队列
│ 24h commit + reveal 阶段
▼
多数质押投票者给出答案
│
▼
结算 → 胜方拿败方保证金,
投错的投票者被罚没
手动争议
app.xtruth.xyz/oracle 列表里每个活跃 断言都有一个 Dispute 按钮。背后做的:
approve(OOV3, bondAmount)—— 跟断言者同币种。OOv3.disputeAssertion(assertionId, disputer)—— 押你的保证金, 把价格请求推到 DVM。- 等 DVM 这一轮投票结束(commit-reveal,24h)。
- 任何人调
OOv3.settleAssertion(assertionId)完成最终化和支付。
自动争议
如果你跑一个自动监听服务(比如 LLM bot,读每个新断言、跟权威数据对比、
发现不对就争议),指向同一份 disputeAssertion ABI 即可。
一个参考实现:监听新 assertion → 用 LLM + 检索查事实 → 和断言者答案对比
→ 不一致就发争议。
升级管理器(Escalation Manager)
默认争议直接进 DVM。自定义升级管理器可以:
- 否决 不符合条件的争议(比如要求争议者在白名单)。
- 自动结算 不需要 DVM 的断言(常规问题信任某指定 oracle)。
- 叠加 其他解决机制(多签委员会、链上预测市场二次投票等)。
升级管理器实现 EscalationManagerInterface 接口,在 assertTruth() 时
作为参数传入。EscalationManager 源码见
xtruth-app 合约目录。
争议成本怎么算
- 保证金 —— 跟断言者一样多。争议时押上,赢了连同断言者的一起拿回。
- DVM 投票费 —— 很小(L2 上不到一分),给质押的投票者作为裁决报酬。
- Gas ——
approve一笔,disputeAssertion一笔,DVM round 后settleAssertion一笔。
赢了:+保证金 - 投票费 - gas。
输了:-保证金 - 投票费 - gas。
这种不对称就是争议机制的精髓 —— 只有真正确信自己对的人才会去争议。
监听新争议
Subgraph 查询当前在争议中的断言:
{
assertions(
where: { disputer_not: null, settlementTimestamp: null }
orderBy: disputeTimestamp
orderDirection: desc
) {
assertionId
claim
asserter
disputer
bond
disputeTimestamp
}
}
完整 schema 见 Subgraph API。