LZLZL/预测市场/链上机制
免费深 · 动手 丙 链上机制

redeemable 陷阱
与「假空仓」

2026-08-21 · 两个让我们差点丢钱的接口误判

接口上有个 redeemable 字段,看名字就该是「这个仓位能不能赎回」。 实测下来它不能用来判断输赢:盘收盘之后, 赢的和输的会被一起标成可赎回。 另一个同族的坑更险 —— 查持仓返回「空」,你以为清干净了,其实钱还在里面。

坑一:收盘后两侧都说自己可赎回

盘收盘之后订单簿会清空。这时候去查持仓,会看到一个很奇怪的画面:

你持有的接口说给的参考价真相
赢的那一侧redeemable: true≈ 0.5值 $1
输的那一侧redeemable: true≈ 0.5值 $0

0.5 这个数是怎么来的?订单簿空了之后,最优买价是 0、最优卖价是 1, 中间价就是 (0 + 1) / 2 = 0.5。它不是市场对这个仓位的估值, 它是「没有市场」这件事的数值表现

⚠ 两种「合理」的补救办法都会出事

补救一:只赎回价值 ≥ $0.50 的仓位。 结果是输掉的仓位也被放行 —— 因为它也显示 0.5。 你会为一堆注定归零的仓位不停发起赎回交易,白烧手续费。

补救二:把门槛提到 ≥ 0.9。 结果是赢的仓位被卡住 —— 它显示的也是 0.5,够不着 0.9。 钱会一直压在那里,直到别的机制把它救出来。

两条路都试过,都不通。问题不在门槛定多少, 在于「用价格判断输赢」这个思路本身就是错的: 收盘后那个价不携带任何输赢信息。

正解:不问价格,问结算结果

可靠的判据只有一个,而且它是结算本身,不是从价格推出来的:

结算已完成 且 我这一侧的赔付份额 > 0 合约里对应两个值:赔付分母 ≠ 0,且我这一边的赔付分子 > 0
它好在哪说明
是结算本身不是从价格、成交量或任何便利字段出来的
不受订单簿影响书空了、没人报价、盘冷门,都不影响这两个值
任何人可独立复核链上公开,你可以拿任意一个已结算的盘自己验
没有临界模糊不需要选阈值 —— 大于 0 就是赢,等于 0 就是输

我们把判断逻辑换成直接读这两个值之后,误判就消失了。 后来用它逐窗复核全部历史,与市场结算一致率 100% (分歧窗复核 207 : 0,另一批 31 : 0)。

坑二:假空仓 —— 更险的那个

这一个差点让我们把钱丢在盘里。

场景:停掉一条线,收工前查一次持仓确认清干净了。 接口返回 。看起来完美 —— 于是把负责赎回的组件也关了。

⚠ 那个「空」是摄入延迟造成的假空

实际上最后两个窗刚刚买入,还没被接口收录。 持仓是真实存在的,只是查的那一刻接口还不知道。

而赎回组件已经被关了 —— 如果不是复查,那笔钱会一直困在链上。 后来手动核对才发现:其中一窗是赢的,金额不算小。

教训停线之后判断「仓位已空」,不能只信接口的一次快照。 必须至少满足一条:等最后一个盘收盘再过几分钟, 或者拿自己的下单台账逐笔对一遍

为什么这两个坑是同一个

它们看起来无关,其实是同一个错误的两种形态:

把「接口现在告诉我的」当成「事实」 而接口只能告诉你「它此刻知道的」
接口说你以为实际
坑一可赎回,值 0.5这是个还没定的仓位已经定了,只是书空了没人报价
坑二没有持仓清干净了有持仓,只是还没被收录

两个都是「查不到」被当成了「没有」。这是我们付过多次学费的同一类错误 —— 另外两次分别是把「活动流里没有记录」当成「没有亏损」 (差了八倍), 以及把空数组当成「这个盘没有奖励」 (API 口径陷阱)。

还有一个相关的延迟

「这个盘结算了吗」也有类似问题:目录接口上的「已关闭」标记会滞后五到十分钟。 如果你等这个标记再去赎回,白白多等一轮。

而结算这件事链上已经自证了 —— 既然你要读链上的赔付结果, 就不需要先问目录接口「关了没有」。我们把这个多余的前置判断删掉之后, 整个赎回周期从十到二十分钟压到两到六分钟, 那已经是机制本身的下限。

⚠ 顺带一条很难查的:裸调用要带 User-Agent

如果你不用现成的库、自己拼请求去读链上数据,记得带 User-Agent 请求头 —— 否则会被静默拒绝:不报错,只是不给数据。

「静默」是关键词。这类失败看起来就像「链上没有这条记录」, 于是你会去怀疑数据本身,而不是怀疑请求。用库的人踩不到,因为库自带这个头。

一份检查清单

不要用改用
「可赎回」字段判输赢链上赔付结果
收盘后的价格判输赢同上 —— 那个价不携带输赢信息
一次持仓快照判「已清空」等收盘后几分钟 + 台账逐笔对账
目录的「已关闭」标记判结算直接读链上,它已经自证
「查不到」当成「没有」先确认你查得对不对

一句话记住

收盘之后,价格不再携带任何输赢信息 —— 0.5 是「没有市场」的意思,不是「五五开」的意思。 判输赢只有一个地方可问:链上的结算结果。 而判「我清干净了没有」,则永远不要只信一次快照。

证据怎么自己核对

两侧都标可赎回 实测:短周期盘收盘后,赢输两侧的 redeemable 均为 true, 参考价均 ≈ 0.5,即空订单簿的 (0+1)/2
两种阈值都不通 ≥$0.50 会放行输仓、白烧交易;≥0.9 会卡住赢仓。
可靠判据 赔付分母 ≠ 0 且本侧赔付分子 > 0。我们用它复核全部分歧窗: 207 : 0;另一批 31 : 0,无一例外。
假空仓 实测:停线后立刻查持仓返回空,实为摄入延迟; 最后两窗尚未收录,其中一窗为赢仓。
「已关闭」标记滞后 实测滞后五到十分钟;删除该前置判断后赎回周期由 10–20 分钟降至 2–6 分钟。
User-Agent 实测:裸请求缺该头会被静默拒绝,表现为「查不到数据」。
复核日期 2026-08。接口行为会变,使用前请自行复核。
本文不含 我们自己的钱包地址、主机与任何策略参数。

相关接着读什么

丙 · 链上机制
赎回为什么不会自动发生
壬 · 坑与口径
8 个 API 口径陷阱
壬 · 坑与口径
「查不到」当成「没有」的另一次学费
丙 · 链上机制
谁来判赢输
本文属教育与研究记录,不构成投资建议,不承诺任何回报。规则与接口行为以官方文档为准,本文标注考证日期, 随时可能变更。预测市场在部分国家和地区受限制或不可用,参与前请自行确认当地法规。