← Forecaster← Forecaster← Forecaster
Гайд для создателей рынков: как проставить метаданные, чтобы Forecaster показал ваши рынки одной карточкой события — с исходами, коэффициентами и «ещё N линий».
A market-creator guide: set the right metadata and Forecaster renders your markets as one event card — outcomes, odds and a "+N more lines" drill-down.
市场创建者指南:设置正确的元数据,Forecaster 就会将您的市场 渲染为一张赛事卡片——包含结果、赔率和"+N 条更多盘口"的下钻。
Один матч — это несколько независимых on-chain рынков: «кто победит», «тотал», «первый
Рошан». Специальных «родительских» объектов в протоколе нет — группировку задаёт создатель
через поле metadata (JSON-строка в операции pm_create_market). Нода
индексирует белый список ключей; клиент читает готовые индексы.
One match is several independent on-chain markets: "who wins", "total", "first
Roshan". The protocol has no special "parent" objects — the creator defines grouping via the
metadata field (a JSON string in pm_create_market). The node indexes
a whitelist of keys; the client reads ready-made indexes.
一场比赛由多个独立的链上市场组成:"谁获胜"、"总分"、"第一个罗shan"。
协议没有特殊的"父级"对象——创建者通过 metadata 字段
(pm_create_market 操作中的 JSON 字符串)定义分组。
节点索引白名单中的键;客户端读取现成的索引。
event — общий slug матча у всех его рынков (ключ склейки);
event_title — человекочитаемое имя события на карточках;
child: 1 — дочерняя линия (проп): скрыта из общих лент, видна на странице события.
Рынок БЕЗ child — родительский (лицо карточки).
event — a slug shared by all markets of the match (the join key);
event_title — the human-readable event name on cards;
child: 1 — a child line (prop): hidden from general feeds, visible on the event
page. The market WITHOUT child is the parent (the face of the card).
event — 比赛所有市场共用的 slug(连接键);
event_title — 卡片上可读的事件名称;
child: 1 — 子盘口(prop):在常规信息流中隐藏,在赛事页面上可见。
没有 child 的市场是父级(卡片的正面)。
// Родитель (винлайн) — БЕЗ child // Parent (moneyline) — NO child
{"title":"MOUZ победит Vici Gaming?",
"category":"esports","tags":["dota-2"],
"event":"dota2-mouz-vg-2026-07-12",
"event_title":"Dota 2: MOUZ vs Vici Gaming"}
// Дочерняя линия (проп) // Child line (prop)
{"title":"Тотал убийств больше 45.5?",
"category":"esports","tags":["dota-2"],
"event":"dota2-mouz-vg-2026-07-12",
"event_title":"Dota 2: MOUZ vs Vici Gaming",
"child":1}
Правила: одинаковый event у всех линий матча (точное совпадение строки —
регистр и дефисы важны, ключ выбирайте до создания); винлайн без child; остальным
линиям child: 1. Заголовок родителя со словом «победит» / «winner» / «moneyline»
помогает клиенту выбрать его лицом карточки.
Rules: the same event on every line of the match (exact string match —
case and dashes matter, pick the key before creating markets); the moneyline without
child; every other line gets child: 1. A parent title containing
"winner" / "moneyline" helps the client pick it as the card face.
规则:比赛每条盘口使用相同的 event(精确字符串匹配——
大小写和连字符很重要,请在创建前确定键);胜负盘不加 child;
其他盘口加 child: 1。父级标题包含 "winner" / "moneyline"
有助于客户端将其选为卡片正面。
| Ключ | Key | 键 | Зачем | Purpose | 用途 |
|---|---|---|---|---|---|
title | Вопрос рынка на карточке. | The market question on the card. | 卡片上的市场问题。 | ||
category, tags | Разделы и фильтры листингов (теги — массивом). | Listing sections and filters (tags as an array). | 列表分区和筛选(标签为数组)。 | ||
image | Обложка (URL, не хостится on-chain). | Cover (URL, not hosted on-chain). | 封面(URL,不在链上托管)。 | ||
description | Краткие правила резолва. | Short resolution rules. | 简要结算规则。 | ||
event, event_title | Ключ и имя события (склейка). | Event key and name (grouping). | 事件键和名称(分组)。 | ||
child | 1 = дочерняя линия, скрыта из лент. | 1 = child line, hidden from feeds. | 1 = 子盘口,在信息流中隐藏。 | ||
banned_jurisdictions | Юрисдикционный фильтр клиентов. | Jurisdiction filter for clients. | 客户端的地区过滤器。 |
Остальные ключи JSON не индексируются, но остаются в сыром metadata — свои клиенты могут читать их напрямую.
Other JSON keys are not indexed but stay in the raw metadata — custom clients can read them directly.
其他 JSON 键不会被索引,但保留在原始 metadata 中—— 自定义客户端可以直接读取它们。
event; карточка = винлайн
с кнопками исходов (тап — в купон) и «ещё N линий».event; a card = the moneyline with
tappable outcome buttons (tap adds to the coupon) and "+N more lines".event 分组;卡片 = 胜负盘,
带有可点击的结果按钮(点击加入联投)和"还有 N 条盘口"。#/event/<ключ>: все линии матча одним
списком (API list_markets_by_event).#/event/<key>: every line of the match in one
list (the list_markets_by_event API).#/event/<键>:比赛的所有盘口
以一个列表展示(list_markets_by_event API)。child по умолчанию).child by default).child)。Полная версия гайда — в документации ноды: события и метаданные.
The full guide lives in the node documentation: events & metadata.
完整指南见节点文档: 事件与元数据。