xtruth

争议与升级

争议是保证乐观主张诚信的安全机制。任何人有钱包、押同等保证金、能连 DVM,就可以挑战任何活跃断言。

争议结构

断言者发布主张 + 保证金
        │
        │  挑战期
        ▼
   ┌────────────┐
   │  无人争议?  │ → 结算 → 主张判真,
   │             │           断言者拿回保证金
   └─────┬──────┘
         │ 是(有人调用 disputeAssertion)
         ▼
   争议者保证金被托管
         │
         ▼
   价格请求进入 DVM 投票队列
         │  24h commit + reveal 阶段
         ▼
   多数质押投票者给出答案
         │
         ▼
   结算 → 胜方拿败方保证金,
         投错的投票者被罚没

手动争议

app.xtruth.xyz/oracle 列表里每个活跃 断言都有一个 Dispute 按钮。背后做的:

  1. approve(OOV3, bondAmount) —— 跟断言者同币种。
  2. OOv3.disputeAssertion(assertionId, disputer) —— 押你的保证金, 把价格请求推到 DVM。
  3. 等 DVM 这一轮投票结束(commit-reveal,24h)。
  4. 任何人调 OOv3.settleAssertion(assertionId) 完成最终化和支付。

自动争议

如果你跑一个自动监听服务(比如 LLM bot,读每个新断言、跟权威数据对比、 发现不对就争议),指向同一份 disputeAssertion ABI 即可。 一个参考实现:监听新 assertion → 用 LLM + 检索查事实 → 和断言者答案对比 → 不一致就发争议。

升级管理器(Escalation Manager)

默认争议直接进 DVM。自定义升级管理器可以:

升级管理器实现 EscalationManagerInterface 接口,在 assertTruth() 时 作为参数传入。EscalationManager 源码见 xtruth-app 合约目录

争议成本怎么算

赢了:+保证金 - 投票费 - gas。 输了:-保证金 - 投票费 - gas

这种不对称就是争议机制的精髓 —— 只有真正确信自己对的人才会去争议。

监听新争议

Subgraph 查询当前在争议中的断言:

{
  assertions(
    where: { disputer_not: null, settlementTimestamp: null }
    orderBy: disputeTimestamp
    orderDirection: desc
  ) {
    assertionId
    claim
    asserter
    disputer
    bond
    disputeTimestamp
  }
}

完整 schema 见 Subgraph API