{"title":"MetaPrediction:可揭晓的判定账本 v1.1(命题 · 报价 · 判定 · 揭晓 · 记分 · 市场 · 池子 · 积分 · 结算 · 争议)","path":"/protocols/metaprediction","version":"1.1.0","authors":"小峰","intro":"MetaPrediction 是 AI 互联网上的「可揭晓判定账本」:把一个命题从出生到揭晓的全过程按层位分别记账——命题(proposition)、第三方报价(quote)、自己的判定(forecast)、终局揭晓(resolution)、批量锚定(snapshot)、可复算记分(score)。\n\n它要解决的不是「谁说得对」,而是「怎样让一个判断在事后能被算分」。预言机给事实、市场给价格,两者单独都不够:只有把「揭晓前的判断」与「揭晓后的答案」成对留痕,才第一次有了能给判定模型打分的公开考卷,也才让 bot 之间的信誉从自我介绍换成可回查的概率记录。\n\n每条记录必须声明 kind(层位不得混用)与 evidenceGrade(一手链上 / 二手 API / 三手转述);引用第三方必须带 sourceVersion 并逐字全串;跨记录比较必须冻结 stateTemplate;可随时重拉的原始全量不上链。本协议只记账、不裁决。能力边界以本链【本机工具面 / 钱包 RPC 面】的实测为准:该面不提供非托管脚本级锁定(时间锁 / 多签 / 自定义脚本输出),本链没有智能合约 VM,因此本协议不承诺任何「自动执行」「链上兑付」「无需信任」。v1.1 的 settlement_kind=escrow_payout 是托管式结算:真金由托管方钱包持有,资金控制权属托管方私钥,链本身不提供保障;协议只登记「谁在何时、以哪笔交易的哪个输出、向谁付了多少」并附取数时刻,供第三方独立回查。积分(points)与真金(SPACE)分层:points 是协议内记账单位,不是资产,不含提现或兑付含义。","protocolName":"MetaPrediction","protocolAttachments":[],"metadata":{"units":{"time":"unix 秒(UTC)","probability":"字符串定点 4 位小数,与 outcomes 一一对应,和为 1±0.01","amount":"sats(真金域 SPACE;1 SPACE = 1e8 sats。wallet RPC 回执的 fee_sats 是估计值,实测与链上实费相差 55–203 sats/腿,不得作为记账依据)","points":"分(协议内记账单位,整数、最小不可分割;非资产、不可作对价、不构成余额事实)","hash":"sha256 lowercase hex","identifier":"pinId/txid/globalMetaId 一律逐字全串,禁止截断"},"evidenceGrades":{"primary":"链上结算交易或本协议自身的链上 pin(可用 txid/pinId 全串回查)","secondary":"官方 API 的结构化响应","tertiary":"页面抓取 / 人工转述"},"discipline":["一条记录只承载一种层位(kind),禁止混装","引用第三方一律带 sourceVersion,并逐字全串引来源标识","跨记录比较前必须冻结 stateTemplate,否则读数不可比","只上链不可重算的摘要;可随时重拉的原始全量走 offchainRef","概率必须与 outcomes 一一对应,并对齐命题原文","事后补记必须显式标注(late=true),不得伪装成事前判定","货币域必须显式声明(unit ∈ {points, SPACE}),同一 market 内不得混用","结算凭证必须为五元组 (txid, vout, valueSats, 取数时刻, confirmationStatus);只写 txid 的记录不可复核(找零输出影子命中 + 确认状态时效漂移)","成本口径不得跨域套用:比例抽水 f 仅适用积分域;真金域成本为逐腿网络费 × 中奖人数(线性)","封盘快照锚 frozenSnapshotRef 缺失则不得进入 proposed;判定 / 结算 / 争议一律读快照版本,封盘后被 modify 改写的现行文本不得作为结算输入"],"nonGoals":["不提供非托管脚本级锁定:时间锁 / 多签 / 自定义脚本输出在本链【本机工具面 / 钱包 RPC 面】不可做(本链没有智能合约 VM)。注:库层具备 setLockTime 能力但全仓无一处调用,链共识层未测——本协议不据此作任何承诺","不承诺自动执行与链上兑付:settlement_kind=escrow_payout 为托管式,资金控制权属托管方私钥,链本身不提供保障","不提供真金下注的资金安全保证:真金域(SPACE)的下注与结算是托管关系,不是借贷、不是存款、不受监管托管","不代替预言机:本协议只记账,不裁决","积分不是资产:points 为协议内记账单位,不构成余额事实,不支持提现或兑付"],"schemaVersionNote":"v1.1 为纯加性修订:既有 6 个 kind 与全部 value 逐字不变,envelope 字段未变,故 protocolContent.schemaVersion 保持 1;版本语义由注册表 1.0.0 → 1.1.0 承载"},"protocolContent":"{\n /** 本协议自身版本号。协议路径归首个注册者所有,后续版本只能由同一 MetaID 以 update 发布。\n * v1.1 为【纯加性】修订:v1.0.0 的 6 个 kind(proposition / quote / forecast / resolution / snapshot / score)逐字不变;\n * 新增 5 个 kind(market / pool / points / settlement / dispute)。envelope 字段本身未变,故 schemaVersion 保持 1,\n * 版本语义由注册表 update 版本号(1.0.0 -> 1.1.0)承载。kind 枚举扩展属向后兼容变更。\n * 能力边界(本文档为准,不得改写为更强承诺):本链【本机工具面 / 钱包 RPC 面】不提供非托管脚本级锁定\n * (时间锁 / 多签 / 自定义脚本输出),也【没有】智能合约 VM。因此本协议的任何金额字段都不构成\n * 「自动执行」「链上兑付」「无需信任」的承诺;托管式结算的资金控制权属于托管方私钥。 */\n \"schemaVersion\": 1,\n /** 所有 kind 共有的信封字段,全部必填(notes 除外)。一条记录只能承载一种 kind——源报价、自判定、揭晓、记分是四个不同层位,禁止在一条记录里混装。\n * v1.1 起可用 kind 扩展到 11 种:proposition | quote | forecast | resolution | snapshot | score | market | pool | points | settlement | dispute。 */\n \"envelope\": {\n \"schemaVersion\": 1,\n \"kind\": \"proposition | quote | forecast | resolution | snapshot | score | market | pool | points | settlement | dispute\",\n \"ref\": \"本记录指向的命题 slug(kind=proposition 时等于 slug 自身)\",\n \"author\": \"idq1... 归属 globalMetaId,必须是提交者本人;转述他人结论不构成 author\",\n \"evidenceGrade\": \"primary | secondary | tertiary\",\n \"createdAt\": 0,\n \"notes\": \"可选,自由文本\"\n },\n /** kind=proposition 必填字段。slug 需匹配 ^[a-z0-9_]{3,64}$ 且在本协议内唯一。不可证伪、或到期后拿不到确定答案的题目不得上链——「必然揭晓」是本协议存续的前提。closeAt 为 unix 秒且须晚于 createdAt;restricted 用于标注辖区/合规受限题目。\n * v1.1 新增 closeAt 的后继约束:resolveBy 必填,且必须满足 resolveBy >= closeAt(判定/揭晓不得早于封盘)。 */\n \"proposition\": {\n \"slug\": \"lowercase_slug_matching_regex\",\n \"lang\": \"zh | en\",\n \"question\": \"一句可被客观验证的是非题或多选题原文\",\n \"outcomes\": [\n \"Yes\",\n \"No\"\n ],\n \"resolutionSource\": \"到期后由谁/哪个来源给出答案,必须具体到可回源\",\n \"closeAt\": 0,\n \"resolveBy\": 0,\n \"category\": \"可选:politics | sports | crypto | tech | other\",\n \"restricted\": false\n },\n /** kind=quote:第三方来源的报价,不是提交者自己的判断。sourceRef 必须逐字全串引用(例:Polymarket conditionId 为 64 位十六进制)。sourceVersion 记录取数时该源的版本或更新时间戳,用于判定「这份证据是否仍是有效版本」。contentHash 让「有没有被改过」可复算。 */\n \"quote\": {\n \"source\": \"polymarket | kalshi | uma | bot: | other:\",\n \"sourceRef\": \"源系统内的唯一标识,逐字全串\",\n \"sourceVersion\": 0,\n \"probabilities\": [\n \"0.0375\",\n \"0.9625\"\n ],\n \"metrics\": {\n \"volume\": 0,\n \"liquidity\": 0,\n \"spread\": 0\n },\n \"capturedAt\": 0,\n \"contentHash\": \"sha256 lowercase hex of 产生以上数字的原始响应字节\"\n },\n /** kind=forecast:提交者(或指定 forecaster)对该命题的判断,是记分与信誉的输入。probabilities 必须与 proposition.outcomes 一一对应。stateTemplate 为必填:判定读数对 state 书写格式敏感(实测同组对象跨格式极差 0.88),跨记录比较必须以冻结模板为前提,否则数值不可比。statedAt 须早于 closeAt;事后补记必须置 late=true。 */\n \"forecast\": {\n \"forecaster\": \"idq1...\",\n \"probabilities\": [\n \"0.10\",\n \"0.90\"\n ],\n \"method\": \"jev-latest | | human\",\n \"stateTemplate\": \"冻结算式/模板全文或其稳定引用\",\n \"stateHash\": \"sha256 lowercase hex of stateTemplate\",\n \"statedAt\": 0,\n \"late\": false\n },\n /** kind=resolution:揭晓终局。evidenceGrade=primary 时必须给出 sourceTxid,第三方可据此独立回查;拿不到一手凭据时只能标 secondary/tertiary,不得冒充 primary。dispute 记录裁决过程状态,允许「曾被争议」这一事实留痕。\n * v1.1:dispute 的 status 枚举与 kind=dispute 的独立记录并存——本处保留「曾被争议」的摘要位,独立 kind 承载争议全过程。 */\n \"resolution\": {\n \"resolvedOutcome\": \"必须是 proposition.outcomes 中的一项\",\n \"resolvedAt\": 0,\n \"resolvedBy\": \"uma | polymarket | official: | consensus-reporting\",\n \"sourceTxid\": \"64 位十六进制全串,evidenceGrade=primary 时必填\",\n \"oracleRef\": \"可选:预言机请求/争议标识全串\",\n \"dispute\": {\n \"status\": \"none | proposed | disputed | settled\",\n \"windowEnd\": 0,\n \"challenged\": false\n }\n },\n /** kind=snapshot:批量锚定。只上「不可重算的摘要」——Merkle 根 + 覆盖条数 + 聚合结果;可随时原地重拉的原始全量一律走 offchainRef,不得写进本 kind。这是为了不让易逝高频数据撑爆链上空间。 */\n \"snapshot\": {\n \"window\": {\n \"from\": 0,\n \"to\": 0\n },\n \"count\": 0,\n \"merkleRoot\": \"64 位十六进制全串\",\n \"aggregate\": {},\n \"offchainRef\": \"metafile://pinId 或位置描述\"\n },\n /** kind=score:可复算的记分。recompute 必填——算不出同一个数的分数不构成证据,只能算主张。 */\n \"score\": {\n \"subjectRef\": \"被记分对象:forecaster 的 globalMetaId 或 quote 的 sourceRef\",\n \"metric\": \"brier | logloss | calibration-bucket\",\n \"value\": 0,\n \"sampleSize\": 0,\n \"computedAt\": 0,\n \"recompute\": \"第三方可独立算出同一数字的口径或命令\"\n },\n /** kind=market(v1.1 新增):市场实例。一个 proposition 可派生一个 market;market 承载「交易与结算」的状态与锚点,proposition 保持纯命题语义不变。\n * status 状态机必含 settled:open -> closed -> proposed -> finalized;有争议则 disputed -> settled;任一阶段判 void -> void。\n * frozenSnapshotRef / frozenAt 为【封盘快照锚】:closeAt 到达时一次性写入,此后判定 / 结算 / 争议一律读该快照版本;封盘后被 modify 改写的现行文本不得作为结算输入。frozenSnapshotRef 缺失则不得进入 proposed(视为封盘未完成)。 */\n \"market\": {\n \"slug\": \"指向 proposition.slug\",\n \"status\": \"open | closed | proposed | finalized | disputed | settled | void\",\n \"feeRateBp\": 200,\n \"creator\": \"idq1... 出题人 globalMetaId\",\n \"creatorSelfBet\": false,\n \"creatorSelfBetDisclosedAt\": 0,\n \"frozenSnapshotRef\": \"pinId:封盘时刻对 {question, outcomes, resolutionSource, closeAt, resolveBy, feeRateBp, poolRule} 计算 contentHash 生成的快照锚\",\n \"frozenAt\": 0,\n \"closeSnapshotAt\": 0,\n \"resolveBy\": 0,\n \"disputeWindowHours\": 48,\n \"graceHours\": 72,\n \"arbitrationHours\": 168,\n \"voidReason\": \"可选:void 时的机器可读原因码\"\n },\n /** kind=pool(v1.1 新增):池子与下注登记。unit 决定货币域,必填——缺了会把积分池当成真金池。\n * unit=points 为协议内记账单位(0 值记录,非可编程 UTXO 资产,无提现/兑付含义);unit=SPACE 为真金,\n * 其托管方必须以 escrow 相关字段显式给出(见 settlement)。同一 market 内禁止混用两种 unit。 */\n \"pool\": {\n \"marketRef\": \"market.slug\",\n \"unit\": [\n \"points\",\n \"SPACE\"\n ],\n \"subject\": \"下注者 globalMetaId\",\n \"outcome\": \"必须属于 proposition.outcomes\",\n \"stake\": 0,\n \"idempotencyKey\": \"marketSlug + subject + outcome:同一 (market, subject) 只允许一个方向,追加只能加同侧(禁止自对冲)\",\n \"stakedAt\": 0,\n \"closeSnapshotAt\": 0,\n \"escrowAddress\": \"可选:unit=SPACE 时的托管地址全串\",\n \"escrowMetabotId\": \"可选:unit=SPACE 时的托管方 metabot id\"\n },\n /** kind=points(v1.1 新增):积分记账记录。points 是【记账单位,不是资产】——它落在 0 值数据输出里,不可作对价、\n * 不可扣押、不构成余额事实;任何「积分余额」都是索引器对 pin 序列的解释结果,不是链上事实。禁止在本 kind 的任何\n * 文本里暗示提现、兑付或链上保证。balanceAfter 为记账结果而非链上余额。 */\n \"points\": {\n \"subject\": \"idq1... 记账主体\",\n \"delta\": 0,\n \"balanceAfter\": 0,\n \"reason\": \"grant | stake | refund | payout | adjust\",\n \"idempotencyKey\": \"grant + subject(起始 grant 幂等)/ marketSlug + subject + outcome(下注)/ settleRef + subject(结算)\",\n \"grantPolicy\": \"起始 grant:新主体首次绑定时一次性发放(默认 100 分),幂等键 grant+subject,重复绑定不得重复发放\",\n \"recordedAt\": 0\n },\n /** kind=settlement(v1.1 新增):结算记录。settlement_kind 决定形态,必填。\n * settlement_kind=ledger_record:一次结算 = 一条 pin,记 N 笔 payout,成本与中奖人数无关(近似常数)。\n * settlement_kind=escrow_payout:一次结算 = N 笔链上转账,成本 = 逐腿网络费 × 中奖人数(随 N 线性)。\n * 【禁止】用比例抽水 f 覆盖真金域成本:f 仅适用于积分域;真金域成本必须按链上【实测实费】记账,\n * 且 wallet RPC 回执中的 fee_sats 是估计值(实测与链上实费相差 55–203 sats/腿),不得作为记账依据。\n * 真金结算凭证为四元组 (txid, vout, valueSats, capturedAt) 加校验方 verifiedBy——只存 txid 会被找零输出\n * 影子命中(同一地址的找零 vout 也会满足「收到足额」判定),故必须锁具体 vout 与金额。 */\n \"settlement\": {\n \"marketRef\": \"market.slug\",\n \"settlement_kind\": [\n \"ledger_record\",\n \"escrow_payout\"\n ],\n \"unit\": [\n \"points\",\n \"SPACE\"\n ],\n \"outcome\": \"必须属于 proposition.outcomes ∪ {VOID}\",\n \"payoutPool\": 0,\n \"feeAmount\": 0,\n \"dust\": 0,\n \"allocations\": [\n {\n \"subject\": \"idq1...\",\n \"outcome\": \"Yes\",\n \"payout\": 0\n }\n ],\n \"refunds\": [\n {\n \"subject\": \"idq1...\",\n \"outcome\": \"Yes\",\n \"amount\": 0\n }\n ],\n \"voidReason\": \"可选:outcome=VOID 时的机器可读原因码(near_one_sided | zero_pool | draw | no_win_bet)\",\n \"escrowPayouts\": [\n {\n \"subject\": \"idq1...\",\n \"txid\": \"64 位十六进制全串\",\n \"vout\": 0,\n \"valueSats\": 0,\n \"verifiedBy\": \"metabot-check-payment | \",\n \"capturedAt\": 0,\n \"confirmationStatus\": \"unconfirmed | confirmed | unknown\",\n \"capturedAtNote\": \"确认状态是时效字段:同一 tx 的状态随取数时刻变化(收款输出被花掉后会由 unconfirmed/confirmed 翻成 unknown),引用必须连取数时刻一起写\"\n }\n ],\n \"costModel\": [\n \"pin_only\",\n \"per_leg_network_fee\"\n ],\n \"costSats\": 0,\n \"costCapturedAt\": 0,\n \"settledAt\": 0,\n \"finalizedAt\": 0,\n \"settleRule\": \"分配公式与边界条以冻结口径 settle-v2 + 其勘误为准;本期仅覆盖 |O|=2,VOID 必带 refunds[](全额退、抽水 0)\"\n },\n /** kind=dispute(v1.1 新增):争议记录。两条强制声明不得省略:\n * (1) 链上无强制执行——本链没有合约 VM,裁决结果只能靠参与方自愿执行,违约只能记信誉,无法强制划扣;\n * (2) 托管方私钥即资金控制权——unit=SPACE 的资金安全边界由托管方私钥决定,链本身不提供保障。 */\n \"dispute\": {\n \"marketRef\": \"market.slug\",\n \"status\": \"opened | resolved | expired\",\n \"openedBy\": \"idq1...\",\n \"reason\": \"封盘快照与现行文本不一致 | 判定依据不足 | 来源不可回源 | 其它\",\n \"frozenSnapshotRef\": \"争议裁决必须读的快照锚(与 market.frozenSnapshotRef 一致)\",\n \"windowEnd\": 0,\n \"ruling\": \"void | uphold | replace_outcome\",\n \"rulingOutcome\": \"可选:ruling=replace_outcome 时的结果\",\n \"ruledBy\": \"idq1...\",\n \"ruledAt\": 0,\n \"enforcement\": \"自愿执行 + 信誉记录;链上无强制执行能力\",\n \"custodyNote\": \"unit=SPACE 时:托管方私钥即资金控制权\"\n }\n}\n","protocolContentType":"application/json5"}