Skip to content

预言机:如何宣布结果并为之负责

预言机是那个告诉链上「事件如何结束」的账户。奖池归谁取决于它。正因如此,VIZ 上的预言机不只是「按一个按钮」:它持有一笔资金保证金与一份声誉,并以两者为诚实与及时负责。

两段话讲清

你用 pm_resolve_market 操作宣布获胜结果(只能在下注关闭之后)。对判对者的赔付会自动记入。要被托付市场与资金,你需要持有保险 —— 一笔绑定在你的预言机账户上的 VIZ 保证金。如果保险相对于你所服务的下注量跌到风险下限之下,节点会把你的市场从目录中隐藏 —— 这一机制保护下注者免受资本不足的预言机之害。

对于错误与沉默,你会从累计的声誉与保证金中受罚:裁定错误、被争议挑战并推翻;错过截止期限(result_expiration),此时市场作为错过裁定(missed-resolution)死去。你的声誉reliability_score,0..10000 bp)由准确率、争议裁决结果、响应率与及时性构成 —— 并且对每一个挑选预言机的人都是可见的。

你分步要做什么

做好准备。 为预言机账户注入保险(pm_oracle_update)—— 把它保持在风险下限之上并留有余量,否则你的市场会被隐藏。下限规则:一个市场可见的条件是保险 ≥ 阈值,且 ≥ 你所管理的下注总额的某个倍数。

等待下注关闭。 裁定只能在 betting_expiration 之后进行。不能更早(在下注还在进来的时候宣布结果毫无意义)。如果市场创建时带有 allow_early_resolution 且结果已经确凿,你可以提前关闭它 —— 此时争议窗口会收缩到裁定的那一刻。

宣布结果。pm_resolve_market 提交获胜结果。节点分配池:判对的人自动获得赔付(虚拟 pm_payout),失败的结果被清零。对于这次裁定,你会获得一笔预言机费用(受网络中位数参数限制,最多 pm_max_oracle_fee_percent)。

如果没有结果。 事件被取消、来源消失、平局无胜者 → 你不做裁定,而是宣告 no-contestpm_no_contest):下注被退还,无人赢也无人输。这是一次诚实的退出,不是惩罚 —— 但必须及时完成,在截止期限之前。

度过争议窗口。 宣布之后,下注者可以在宽限期内挑战结果(pm_dispute_create)。如果争议认定你是对的,你的声誉得到确认;如果你的裁定被认定错误,你会受罚。详情 —— 见关于争议的文章。

你会因什么受罚

  • 裁定错误。 你宣布了错误的结果,且争议予以确认 → 从保证金/声誉中受罚,赔付被重算。
  • 错过截止期限。 你没有在 result_expiration 之前宣布结果 → 市场作为错过裁定死去,你被罚没。不要沉默:如果来源没有给出结果,就宣告 no-contest。
  • 系统性迟缓。 迟到(但完成了)的裁定会拉低 reliability_score 中的及时性因子。迟到不再等同于按时。

预言机需要理解什么

  • 保险就是用数字表达的信任。 把它保持在下限之上并留有余量;它会因累积的罚没而下沉,并随你所服务的成交量而增长。资金不足的预言机会从目录中消失 —— 市场看起来像是「不见了」。
  • 声誉是公开且综合的。 reliability_score = 准确率 + 争议裁决结果 + 响应率 + 及时性 − 惩罚(衰减的故障印记 penalty-stamps) − 封禁,并在裁定数量较少时向平均值收缩。界面中以百分比显示(bp/100)。
  • 裁定的效果不可逆,但可被争议。 赔付会立即发出,但争议窗口可以取消它们并惩罚你。如果你判错了,自己发起更正比等着被罚没更诚实。
  • 及时性 = 金钱。 及时的 no-contest 胜过沉默到截止期限。如果你服务很多市场,就把裁定自动化。

你身边的角色

  • 市场创建者 —— 选择你作为预言机,并设定争议窗口。
  • 下注者 —— 把结果托付给你,也可以挑战它。
  • 争议者 —— 争议的参与者,检验你的裁决。

延伸阅读:「争议」(结果如何被挑战、这对预言机意味着什么)、「市场创建者」(谁指派你、如何指派)、「预言机与裁定」(期限、错过裁定、no-contest 详解)。