Gonka GitHub Discussions · Discussion #800

Multi-Model PoC

Отдельная страница дискуссии с русским переводом и параллельным режимом RU / Original с точным сопоставлением предложений.

Как пользоваться: включите RU / Original и кликните по предложению — соответствующее предложение в другой колонке доскроллится и подсветится.
Discussion #800

Multi-Model PoC

Оригинал: Multi-Model PoC

gmorgachev avatar
gmorgachevMaintainerАвтор
2026-02-25

Предложение: мультимодельный PoC

Процедура POC — это краткосрочный тест для сравнения объема вычислительных ресурсов каждого хоста. Один раз в эпоху определяется вес для каждого хоста, который затем используется в качестве консенсусного веса для создания блоков и распределения задач между хостами. Кроме того, существует подтверждение (случайное) POC, которое используется для подтверждения веса, когда сеть недогружена путем вывода (чтобы убедиться, что оборудование все еще там).

Фазы POC:

ГЕНЕРАЦИЯ (блоки по 1-5 мин)

ВАЛИДАЦИЯ (блоки по 2-10 мин)

ФАЗА ВЫВОДА (нет POC, но иногда может быть прервана до POC подтверждения)

Теоретически проверка и вывод могут выполняться параллельно.

Текущая модель безопасности требует >50% общего консенсусного веса сети, чтобы проголосовать за «действительность». Без делегирования злоумышленнику необходимо >50 % общего веса сети, чтобы испортить проверку любого (и всех) хостов.

Часть вознаграждения в стиле биткойнов распределяется пропорционально этому весу. На ранней стадии это основная мотивация, поскольку вывод обходится намного дешевле.

Проблема

Цепочка должна поддерживать несколько моделей.

В настоящее время сеть не может поддерживать несколько моделей, поскольку у нас есть PoC для одной модели.

Почему мы не можем поддерживать несколько моделей с помощью PoC для одной модели?

Если мы обслуживаем несколько моделей с текущим PoC с одной моделью, это означает, что вам необходимо повторно развернуть модель перед каждым cPoC. И если вы сможете это сделать — вы сможете использовать это время для развертывания моделей на новых узлах. По сути, это открывает сеть для атаки, когда злоумышленник развертывает оборудование только для фазы POC. Зачем нам вообще нужен cPoC?

Потому что а) мы хотим убедиться, что если нагрузка на сеть низкая - вычисления все еще есть б) до тех пор, пока качество бенчмаркинга оборудования по самому логическому выводу пользователей не будет достаточно высоким. Таким образом, вариант повторного развертывания моделей для PoC vs inference не может быть использован, и нам нужно выяснить, как поддерживать разные модели во время PoC и cPoC.

Предложение

Давайте попробуем построить систему, которая поддерживает несколько моделей одновременно, где процедура POC происходит без повторного развертывания, для каждой модели независимо. Такие разные POC соответствуют совершенно разной вычислительной мощности (по сути, они будут измерять не чистую вычислительную мощность, а то, насколько «оптимальна» конфигурация для конкретного оборудования). Поскольку POC является не только источником веса для распределения задач по конкретной модели, но и способом определения консенсусного веса, нам необходимо определить, как агрегировать веса от разных POC и как проверять результаты каждого POC.

Для агрегирования цепочка должна будет определить, насколько ценен вес каждого POC для цепочки. Коэффициенты, преобразующие вес POC в консенсусный вес, могут быть определены как параметры управления путем прямого голосования. Их можно определить таким образом, что более крупные, мощные и популярные модели будут иметь больший вес. Поскольку новейшее оборудование также оптимизировано для обслуживания моделей высшего уровня (большое количество видеопамяти, быстрое соединение между графическими процессорами, поддержка FP4/FP8 и т. д.), это естественным образом будет стимулировать хосты переключать новые графические процессоры на самые мощные модели, чтобы получить больший вес за доллар. Для роста сети важно сделать обслуживание лучших моделей (которые требуют наиболее оптимизированных графических процессоров) наиболее прибыльными.

Это предложение ставит целью поддерживать одинаковый стиль проверки POC — каждый хост проверяет каждый другой хост (или его вероятностную аналогию для случая слотов). Один из подходов к достижению этой цели — заставить каждый хост участвовать (иметь аппаратное обеспечение) в каждой модели. Но такой подход непрактичен и слишком сильно повысит требования к оборудованию. Чтобы избежать этого, предложение вводит делегирование PoC от хоста к другому хосту, которому он доверяет. Такое делегирование позволяет поддерживать свойство проверки большинством консенсусных полномочий (но наверняка вводит новое предположение о безопасности, подробнее об этом в Приложении A).

Чтобы определить процесс добавления новых моделей в цепочку, это предложение позволяет обслуживать модели, которые не одобрены руководством, без проверки выводов и без получения консенсуса от обслуживания таких моделей. Он также определяет процесс, согласно которому модель, одобренная руководством, получает право на получение консенсусного веса.

Предупреждение. В этом предложении предполагается модель проверки O(N^2) (порог веса >50%). Проверка на основе слотов выходит за рамки. Скорее всего, подход на основе слотов будет работать таким же образом, с независимым назначением слотов в каждой группе. Но необходимо дважды проверить, использовать ли $votingPower$ или $consensusWeight$ для хостов в группе.

Условия

Пусть эпоха $S$ текущая. Следующее определяет вычисление веса для эпохи $S+1$ . Предварительное право на участие ( $PreE_{S+1}$ ) определяется $N$ блоков до начала эпохи $S+1$ PoC. В этом разделе $*_S$ обозначает значения из эпохи $S$ и используются в качестве входных данных для эпохи $S+1$. Членство в группе и делегирование оцениваются на уровне предварительного отбора и считаются фиксированными для эпохи.

  • $group_i$ — группа моделей для модели $i$ (участниками являются хосты с MLNodes, обслуживающими модель $i$). Сеть поддерживает модели $M$ в цепочке.

$group_i$ — группа моделей для модели $i$ (участниками являются хосты с MLNodes, обслуживающими модель $i$). Сеть поддерживает модели $M$ в цепочке.

  • $pocWeight_S(group_i, p)$ — вес хоста $p$ в $group_i$ в эпоху $S$ . Равно количеству одноразовых номеров, вычисленных $p$ в процедуре PoC для этой группы и успешно проверенных. Локальный вес внутри группы.

$pocWeight_S(group_i, p)$ — вес хоста $p$ в $group_i$ в эпоху $S$ . Равно количеству одноразовых номеров, вычисленных $p$ в процедуре PoC для этой группы и успешно проверенных. Локальный вес внутри группы.

  • $consensusKoeff_i$ — коэффициент, преобразующий $pocWeight$ в $group_i$ в консенсусный вес. Определяется управлением для каждой модели.

$consensusKoeff_i$ — коэффициент, преобразующий $pocWeight$ в $group_i$ в консенсусный вес. Определяется управлением для каждой модели.

  • $consensusWeight_S(p) = \sum_{i: group_i \in E_S} консенсусKoeff_i \times pocWeight_S(group_i, p)$ — (см. Приложение A для защиты ограничения)

$consensusWeight_S(p) = \sum_{i: group_i \in E_S} консенсусKoeff_i \times pocWeight_S(group_i, p)$ — (см. Приложение A для защиты ограничения)

  • $members(group_i) = \lbrace p : p \text{ для модели развернут MLNode } i \rbrace$ — хосты с развернутым MLNode для модели

$members(group_i) = \lbrace p : p \text{ для модели развернут MLNode } i \rbrace$ — хосты с развернутым MLNode для модели

  • $hosts_S(group_i) = \lbrace p : консенсусВес_S(p) > 0 \text{ и } p \inmembers(group_i) \rbrace$ Члены с ненулевым консенсусным весом. Вес может исходить из любой подходящей группы, не обязательно $group_i$ .

$hosts_S(group_i) = \lbrace p : консенсусВес_S(p) > 0 \text{ и } p \inmembers(group_i)\rbrace$

Члены с ненулевым консенсусным весом. Вес может исходить из любой подходящей группы, не обязательно $group_i$ .

  • $PreE_{S+1}$ — набор предварительно подходящих групп для эпохи $S+1$ . Группа $group_i \in PreE_{S+1}$, если выполняются условия 1–3: Модель $i$ одобрена руководством с определенным $consensusKoeff_i$ $\sum_{p \inmembers(group_i)} консенсусВес_S(p) \geq W_{порог} \times \sum_{p} консенсусВес_S(p)$ $|hosts_S(group_i)| \geq V_{min}$

$PreE_{S+1}$ — набор предварительно подходящих групп для эпохи $S+1$ . Группа $group_i \in PreE_{S+1}$, если выполняются условия 1-3:

Модель $i$ одобрена руководством с определенным $consensusKoeff_i$

$\sum_{p \inmembers(group_i)} консенсусВес_S(p) \geq W_{порог} \times \sum_{p} консенсусВес_S(p)$

$|hosts_S(group_i)| \geq V_{min}$

  • $E_{S+1}$ — набор допущенных к консенсусу групп для эпохи $S+1$ . Группа $group_i \in E_{S+1}$, если: $group_i \in PreE_{S+1}$ Как минимум $V_{min}$ хосты в группе проходят проверку PoC в эпоху $S+1$ (см. правило проверки ниже).

$E_{S+1}$ — набор допущенных к консенсусу групп для эпохи $S+1$ . Группа $group_i \in E_{S+1}$, если:

$group_i \in PreE_{S+1}$

  • По крайней мере $V_{min}$ хосты в группе проходят проверку PoC в эпоху $S+1$ (см. правило проверки ниже).

$W_{threshold}$ — минимальная доля общего консенсусного веса сети, необходимая для допуска группы (параметр управления)

$W_{threshold}$ — минимальная доля общего консенсусного веса сети, необходимая для допуска группы (параметр управления)

$V_{min}$ — минимальное количество хостов с ненулевым консенсусным весом, необходимое в группе (параметр управления)

$V_{min}$ — минимальное количество хостов с ненулевым консенсусным весом, необходимое в группе (параметр управления)

  • В настоящее время $group_{Qwen3-235B-FP8}$ является единственной подходящей группой (PoC для одной модели). Это предложение распространяется на несколько групп.

В настоящее время $group_{Qwen3-235B-FP8}$ является единственной подходящей группой (PoC для одной модели). Это предложение распространяется на несколько групп.

  • Первоначальная группа ( $group_{Qwen3-235B-FP8}$ ) освобождена от ограничения веса (Приложение A) и обеспечивает базовый консенсусный вес для проверки новых групп.

Первоначальная группа ( $group_{Qwen3-235B-FP8}$ ) освобождена от ограничения веса (Приложение A) и обеспечивает базовый консенсусный вес для проверки новых групп.

  • Хосту, участвующему в нескольких подходящих группах, требуется отдельное оборудование для каждой группы. PoC работает одновременно во всех подходящих группах в одну и ту же эпоху.

Хосту, участвующему в нескольких подходящих группах, требуется отдельное оборудование для каждой группы. PoC работает одновременно во всех подходящих группах в одну и ту же эпоху.

  • $delegation_S(group_i, p_{from}, p_{to})$ — консенсусный вес, делегированный от хоста $p_{from}$ хосту $p_{to}$ для проверки в $group_i$ в эпоху $S$ . Хост $p_{from} \notinmembers(group_i)$ ; хост $p_{to} \inmembers(group_i)$ . Делегирование устанавливается до начала эпохи; изменения, произошедшие в течение эпохи, вступают в силу со следующей эпохи.

$delegation_S(group_i, p_{from}, p_{to})$ — консенсусный вес, делегированный от хоста $p_{from}$ хосту $p_{to}$ для проверки в $group_i$ в эпоху $S$ . Хост $p_{from} \notinmembers(group_i)$ ; хост $p_{to} \inmembers(group_i)$ . Делегирование устанавливается до начала эпохи; изменения, произошедшие в течение эпохи, вступают в силу со следующей эпохи.

  • $r_{delegation}$ — доля делегатора вознаграждения в стиле биткойн, делящегося с делегатом (параметр управления, например, 1% на каждую группу??)

$r_{delegation}$ — доля делегатора вознаграждения в стиле биткойн, делящегося с делегатом (параметр управления, например, 1% на каждую группу??)

  • $r_{refusal}$ — доля вознаграждения в стиле биткойнов, отправляемая управлению, когда хост явно отказывается участвовать в группе; должно быть > $r_{делегирование}$ (параметр управления, например, 5% на каждую группу??)

$r_{refusal}$ — доля вознаграждения в стиле биткойнов, отправляемая управлению, когда хост явно отказывается участвовать в группе; должно быть > $r_{делегирование}$ (параметр управления, например, 5% на каждую группу??)

  • $r_{penalty}$ — доля вознаграждения в стиле биткойнов, теряемая, когда хост не может сделать выбор участия для какой-либо группы, одобренной руководством (параметр управления, целевой показатель 100%)

$r_{penalty}$ — доля вознаграждения в стиле биткойнов, теряемая, когда хост не может сделать выбор участия для какой-либо группы, одобренной руководством (параметр управления, целевой показатель 100%)

  • $T_{grace}$ — продолжительность льготного окна после одобрения руководства до применения штрафов (параметр управления, например, 3 эпохи)

$T_{grace}$ — длительность льготного окна после одобрения руководства до применения штрафов (параметр управления, например, 3 эпохи)

  • $votingPower_S(group_i, p) = консенсусВес_S(p) + \sum_{p_{from}} Delegation_S(group_i, p_{from}, p)$ — общее количество голосов при проверке хоста $p$ в $group_i$. Ограничения делегирования: $delegation_S(group_i, p_{from}, p_{to}) \ge 0$ и для каждого $(group_i, p_{from})$ , $\sum_{p_{to}} Delegation_S(group_i, p_{from}, p_{to}) \le консенсусВеайт_S(p_{from})$ .

$votingPower_S(group_i, p) = консенсусВес_S(p) + \sum_{p_{from}} Delegation_S(group_i, p_{from}, p)$ — общее количество голосов при проверке хоста $p$ в $group_i$

Ограничения делегирования: $delegation_S(group_i, p_{from}, p_{to}) \ge 0$ и для каждого $(group_i, p_{from})$ , $\sum_{p_{to}} Delegation_S(group_i, p_{from}, p_{to}) \le консенсусВеайт_S(p_{from})$ .

Вопрос 1. Может ли хост разделить делегирование между несколькими хостами в одной группе?

Соответствующие группы

Вес, рассчитанный в процедуре PoC для подходящих групп моделей, способствует общему консенсусному весу посредством коэффициента, определяемого руководством. Консенсусный вес определяет:

Блокировать право подписи

Право голоса в управлении

Право голоса при проверке PoC

Распределение вознаграждений в стиле биткойнов (пропорционально консенсусному весу)

Внутри группы запросы на вывод распределяются согласно $pocWeight_S(group_i, p)$ . Награды за умозаключение распределяются таким же образом.

Проверка PoC

Делегирование: хосты, не входящие в группу, могут делегировать свой консенсусный вес тому хосту, который входит в нее. Делегат голосует от своего имени. Делегирование осуществляется для каждой группы и устанавливается до начала эпохи.

Правило проверки: Результат PoC хоста $p$ в подходящей $group_i$ принимается, если:

$$\frac{\sum_{v \text{ голосов действительны для } p} VotingPower_S(group_i, v)}{\sum_{q} консенсусВес_S(q)} > \frac{1}{2}$$

Числитель: сумма $votingPower_S(group_i, v)$ от всех валидаторов $v$, которые одобрили $p$

  • Знаменатель: общий консенсусный вес сети (все хосты, все группы).

Хозяева, не входящие в группу и не делегирующие полномочия, фактически голосуют против одобрения. Поэтому делегирование необходимо для любой группы, прямые члены которой владеют менее 50% общего веса сети.

Подробности о голосовании:

  • Количество MLNodes не имеет значения: 1 MLNode или 100 MLNodes дают одинаковое количество голосов.

Изменения делегирования вступают в силу со следующей эпохи

Модель доверия: делегат доверяет делегату, который проголосует правильно.

TODO: Механизм отзыва делегирования в середине эпохи, если делегат голосует злонамеренно.

Обязательное групповое участие и стимулирование

Каждый хост, имеющий консенсусный вес, должен активно участвовать в каждой группе, одобренной руководством. Для каждой группы ведущий выбирает одно из:

  • Присоединяйтесь к группе — развертывайте оборудование и участвуйте непосредственно в группе.
  • Делегировать — делегировать право голоса участнику группы; делегатор делится $r_{delegation}$ с делегатом, стимулируя членов группы укреплять доверие

Явный отказ — отказ делегировать полномочия или присоединиться; стоит $r_{отказ}$ ; должен обновляться каждую эпоху

В течение льготного периода (периодов $T_{grace}$ после одобрения руководства) организаторы должны сделать выбор для участия, но за любой выбор штраф не налагается. После окончания льготного периода применяются штрафы: хосты, которые не сделали выбор, теряют $r_{penalty}$ своего вознаграждения в стиле биткойнов.

Это стимулирует более 50% общего консенсусного веса участвовать в проверке PoC для каждой одобренной руководством группы.

Незарегистрированные модели

Любой хост может добавить модель в цепочку и предоставить вывод без одобрения руководства (за дополнительную плату).

Свойства:

Никакой проверки вывода другими хостами

Цена устанавливается непосредственно хозяином

Запросы отправляются непосредственно хосту

  • Хост хранит полезную нагрузку локально, но без перекрестной проверки.
  • За каждый платеж GNK взимается комиссия, отправляемая руководству.

Никаких наград в стиле биткойнов

Цель: построить демо-кейс для предложения по управлению, чтобы показать спрос на модель.

Жизненный цикл модели

  • Незарегистрированный этап — хост добавляет модель, предоставляет выводы непосредственно пользователям, создает демонстрационный пример для предложения по управлению.
  • Предложение по управлению — модель одобрена с определенным $consensusKoeff_i$, группа создана.
  • Grace window (эпохи $T_{grace}$) — применяются обязательные правила участия, но без штрафов; организаторы делают выбор участия (присоединиться/делегировать/отказаться); PoC работает для группы
  • После льготного периода — применяются штрафы ( $r_{penalty}$ , $r_{делегирование}$ , $r_{refusal}$ ); право на участие по-прежнему зависит от условий выполнения ($W_{threshold}$, $V_{min}$, прохождение проверки PoC)

Группа, одобренная руководством, может иметь или не иметь право на участие в любой конкретный период в зависимости от того, соответствует ли она критериям приемлемости.

Реализация

[Будет определено позднее]

Приложение A. Атака и защита на основе делегирования

Атака: Хост накапливает >50% $votingPower$ посредством делегирования, проверяет поддельного участника, претендующего на большой вес, получает консенсусный контроль.

Вариант защиты: ограничить вес каждой группы подтвержденным весом участников в другом месте.

$$\text{Консенсусный вес от } group_i \leq f \times \sum_{p \inmembers(group_i)} \text{(}p\text{Консенсусный вес от других подходящих групп)}$$

Если исходный вес PoC группы превышает ограничение, масштабируйте всех участников пропорционально, чтобы они соответствовали размеру.

Для ясности: «другие подходящие группы» относятся к консенсусному весу, уже полученному от подходящих групп, за исключением самой $group_i$ (т. е. с использованием вкладов $consensusWeight_S$ от $E_S \setminus \lbrace group_i \rbrace$ ), чтобы избежать циклической зависимости.

Освобождение от налога для начальной группы (без ограничения)

$f$ — параметр управления

Делегирование влияет на $votingPower$, но не на ограничение (ограничение основано на весе PoC)

Это ограничивает ущерб от фейковых участников: даже если они пройдут валидацию, их весовой вклад ограничивается реальной долей участников в других группах. Кепка — вторичная защита; валидация (>50% веса сети) остается основной.

Вопрос 5: Каким должен быть $f$?

tcharchian avatar
tcharchianMaintainerMaintainer
2026-02-27

Пожалуйста, рассмотрите возможность присоединиться к обсуждению этого предложения и поделиться любыми идеями или предложениями. Первоначальная версия будет предоставлена автором предложения, а отзывы участников помогут усовершенствовать подход и прояснить следующие шаги.

akup avatar
akupMaintainerMaintainer

Вопросы

  • Когда хост A делегирует свой голос хосту B в другой группе моделей, он добавляет право голоса хосту B. Но почему это не уменьшает количество голосов хоста A?

Когда хост A делегирует свой голос хосту B в другой группе моделей, он добавляет право голоса хосту B. Но почему это не уменьшает количество голосов хоста A?

  • Если какой-то хост А доверяет хосту Б, то создается впечатление, что они уже находятся в группе доверия, имеют общение и могут договориться о совместных действиях. Собственно какая разница, если бы это был один хост?

Если какой-то хост А доверяет хосту Б, то создается впечатление, что они уже находятся в группе доверия, имеют общение и могут договориться о совместных действиях. Собственно какая разница, если бы это был один хост?

  • Как участник может выбрать, какому хосту делегировать свой вес? Как это можно практически скоординировать? Было бы более понятно, если бы был реальный пример с пошаговым планом: если есть новая модель и есть новые хосты, которые хотят ее запустить, как им начать? Как они получают делегирование, как хосты из других групп начинают понимать, что им нужно делегировать, и как они могут решить, какому хосту делегировать свой голос?

Как участник может выбрать, какому хосту делегировать свой вес? Как это можно практически скоординировать? Было бы более понятно, если бы был реальный пример с пошаговым планом: если есть новая модель и есть новые хосты, которые хотят ее запустить, как им начать? Как они получают делегирование, как хосты из других групп начинают понимать, что им нужно делегировать, и как они могут решить, какому хосту делегировать свой голос?

  • Сколько хостов должно запустить модель, чтобы начать групповую работу. Например, если есть только 2 хоста, получат ли они вознаграждение? Если есть 3 хоста? Сформируйте, какому количеству хостов мы можем доверять группе (похоже, это связано с вопросом Q5)

Сколько хостов должно запустить модель, чтобы начать групповую работу. Например, если есть только 2 хоста, получат ли они вознаграждение? Если есть 3 хоста? Сформируйте, какому количеству хостов мы можем доверять группе (похоже, это связано с вопросом Q5)

  • Как можно избежать следующего сценария? Начинается новый льготный период. Злоумышленник создает несколько хостов, которые будут участвовать с участниками модели из других групп, поскольку они лично не знают, кому делегировать голосование, делегируйте его «случайному кому-то». Также злоумышленник делегирует свои голоса (от нескольких хостов) своим хостам в новой группе. И злоумышленник получает контроль над группой

Как можно избежать следующего сценария? Начинается новый льготный период. Злоумышленник создает несколько хостов, которые будут участвовать с участниками модели из других групп, поскольку они лично не знают, кому делегировать голосование, делегируйте его «случайному кому-то». Также злоумышленник делегирует свои голоса (от нескольких хостов) своим хостам в новой группе. И злоумышленник получает контроль над группой

  • Не проще ли создать новую модельную группу семян (генезиса)? Например, хосты, у которых уже есть право голоса, могут запустить некоторые из своих мультинодов с новой моделью и получить дополнительное вознаграждение за участие в раннем запуске группы новой модели. Они помогают создать новую модельную группу (поскольку у них есть ресурсы и они заинтересованы в развитии сети), поскольку у них уже есть право голоса, но при этом не возникнет всех сложностей (не только технических, но и реально-практических) делегирования.

Не проще ли создать новую модельную группу семян (генезиса)? Например, хосты, у которых уже есть право голоса, могут запустить некоторые из своих мультинодов с новой моделью и получить дополнительное вознаграждение за участие в раннем запуске группы новой модели. Они помогают создать новую модельную группу (поскольку у них есть ресурсы и они заинтересованы в развитии сети), поскольку у них уже есть право голоса, но при этом не возникнет всех сложностей (не только технических, но и реально-практических) делегирования.

п.с. Незарегистрированные модели - очень хороший момент.

gmorgachev avatar
gmorgachevMaintainerMaintainer
2026-04-02
Но почему это не уменьшает количество голосов хоста A? Хост A не имеет права голоса в этой модельной группе, его нельзя уменьшить. Хост A может либо иметь MLNode с этой моделью, либо делегировать свою проверку PoC. Важно: это не влияет на консенсусный вес каких-либо хостов.
Если какой-то хост А доверяет хосту Б, то создается впечатление, что они уже находятся в группе доверия, имеют общение и могут договориться о совместных действиях. Собственно какая разница, если бы это был один хост? Насколько я понимаю, хост А может делегировать полномочия известным хостам с хорошей репутацией в основной сети. Таким образом, им не обязательно хорошо знать друг друга, но хост А должен доверять стимулу хоста Б действовать честно. Я думаю, что узлы соединения гораздо ближе :)
Сколько хостов должно запустить модель, чтобы начать групповую работу. Например, если есть только 2 хоста, получат ли они вознаграждение? Если есть 3 хоста? Сформируйте, какому количеству хостов мы можем доверять группе (похоже, это связано с вопросом Q5). Я не думаю, что какая-либо проверка может произойти при наличии менее трех хостов. Но мы также должны иметь ограничение на общий консенсусный вес участников этой модельной группы. Думаю, не должно быть меньше хотя бы 5-10% сети (если говорить о сегодняшних размерах)
Как можно избежать следующего сценария? С моей точки зрения, это должна быть комбинация ограничений на:
  • минимальная сила консенсуса от другой группы, которой должны обладать хосты, чтобы группа имела право на участие (5-10%+)

ограничить вес, который может иметь одна группа (чтобы не получить контроль над всей цепочкой)

Я согласен, что делегирование «случайному кому-то» вызывает серьезную озабоченность, и механизм основан на том факте, что принимающая сторона должна принять обоснованное решение о делегировании. Есть ли у вас какие-то дополнительные идеи, как защититься?

Не проще ли создать новую модельную группу семян (генезиса)? Например, хосты, у которых уже есть право голоса, могут запустить некоторые из своих мультинодов с новой моделью и получить дополнительное вознаграждение за участие в раннем запуске группы новой модели. Они помогают создать новую модельную группу (поскольку у них есть ресурсы и они заинтересованы в развитии сети), поскольку у них уже есть право голоса, но при этом не возникнет всех сложностей (не только технических, но и реально-практических) делегирования.

Я не понимаю, как это поможет избежать делегирования. Вопрос в том, какой консенсусный вес будет иметь такая группа. Если учитывается только их вес, то при текущем ограничении такая начальная группа должна контролировать > 2/3 общей мощности сети, чтобы PoC мог пройти. Что невозможно. Если PoC внутри этой новой группы будет рассчитываться только по весу участников — такие ранние начальные узлы тоже можно легко обмануть.

В исходном предложении первоначальная начальная группа по-прежнему представляет собой существующие валидаторы с некоторым пороговым значением их общего веса. Делегирование просто позволяет сделать этот порог ниже 2/3.

gmorgachev avatar
gmorgachevMaintainerMaintainer
2026-04-02

Извините, я использовал в комментарии 2/3 вместо 50%, так как обнаружил, что в основной сети уже используется 2/3 в качестве порога.

andrey055 avatar
2026-03-03

Предложение тестировать новые модели без вознаграждения в стиле биткойнов очень сильное.

Мне бы очень хотелось, чтобы это было реализовано. Конечно, есть определенные опасения — например, риск того, что хост может дискредитировать сеть, развернув неправильно настроенную модель, например, с уменьшенным контекстным окном.

Я надеюсь, что будут приняты соответствующие меры против этого.

jacky6block avatar
2026-03-04

Спасибо, что написали об этом — направление высокого уровня (многомодельное PoC без повторного развертывания; веса PoC для каждой модели, агрегированные в консенсусный вес) имеет смысл. Прочитав все предложение + Приложение А, я думаю, что есть несколько пробелов с высоким риском и несколько пунктов, которые необходимо уточнить, прежде чем это станет безопасным/реализуемым.

1) Делегирование переносит полномочия по проверке с «аппаратного обеспечения» на «социальную координацию» (безопасность + работоспособность).

Агрегация взяточничества/делегирования становится самым дешевым вектором атаки

Когда собственные члены новой группы владеют гораздо меньшим глобальным порогом> 50%, делегирование становится единственным практическим способом пройти проверку PoC во время холодного запуска. В этом режиме злоумышленник может получить большинство голосов, подкупив/стимулируя небольшое количество делегаторов с высоким консенсусом, что потенциально намного дешевле, чем предоставление эквивалентного оборудования.

Тупик «холодного старта»/структурное вето со стороны действующих компаний

Поскольку для «действительности» требуется> 50% глобального консенсусного веса, новая модельная группа может застрять, если хосты с большим весом не будут активно делегировать (апатия, затраты на координацию или стратегический отказ). Это фактически дает действующим операторам право вето и делает внедрение новых моделей во многом зависимым от координации вне цепочки.

Задержка отзыва/реакции по-прежнему является задачей TODO.

В предложении упоминается необходимость отзыва делегирования в середине эпохи, но не уточняется, как:

делегаты достаточно быстро обнаруживают неправомерное поведение делегатов (окна PoC составляют минуты),

отзыв вступает в силу в ту же эпоху,

  • потери обрабатываются, если обнаружение происходит после окна проверки.

2) Необходимо пояснение: «расходы» делегирования и «репликация».

В текущем определении voicePower(group_i, p) (добавка к делегированным суммам) легко интерпретировать делегирование как добавление веса к делегату без явного «удаления» его из эффективного бюджета делегатора внутри этой группы.

Просьба: пожалуйста, явно определите семантику делегирования как передачу бюджета проверки для конкретной группы (а не репликацию). Конкретно:

  • как только p_from делегирует p_to для group_i , теряет ли p_from какое-либо прямое влияние на голосование/проверку в этой группе на эпоху?
  • влияет ли делегирование только на групповое голосование по проверке или на вес глобального управления/производства блоков?

Мое предложение таково: делегирование должно быть ограничено только групповой проверкой (без изменений глобального веса производства блоков/управления) и должно моделироваться как бюджет без двойного расходования внутри группы.

Кроме того, пожалуйста, разъясните, что означает «неучастие фактически является отказом от голосования» в математике: учитывается ли воздержание через знаменатель, исключается ли воздержание или просто отсутствует в числителе, в то время как знаменатель остается глобальной суммой?

3) Масштабируемость: проверку O(G · N^2) трудно считать устойчивой.

Сохранение проверки O(N^2) для каждой группы становится O(G·N^2), когда несколько подходящих групп работают параллельно. Даже если пропускная способность в порядке, проверка подписи ЦП, обработка состояния, повторные попытки и восстановление вилки, скорее всего, станут узким местом — особенно в окнах продолжительностью 2–10 минут.

Кроме того, «PoC/проверка и вывод могут выполняться параллельно» требует конкретной истории изоляции ресурсов/приоритетов. Даже при использовании отдельных графических процессоров в группе конкуренция между сетью и ЦП все равно может ухудшить задержку вывода и UX.

Запрос: напишите либо:

конкретный план масштабирования (выборка/пакетирование/квоты), который сохраняет семантику> 50%, или

  • почему O(G·N^2) приемлемо при реалистичных целевых показателях N и G.

4) Ограничение (Приложение A) не полностью обеспечивает захват/справедливость на уровне группы.

Ограничение ограничивает влияние новой группы на глобальный консенсусный вес (инфляция/внезапное доминирование), но не останавливает групповой локальный захват, например. скоординированное голосование, чтобы признать честных участников недействительными или монополизировать доход от вывода популярной новой модели.

Ограничение также зависит от веса, полученного в других зрелых группах → сильная зависимость от пути/преимущество действующего оператора (новые участники структурно ограничены, даже если они лучше всех работают в новой модели).

Просьба: уточнить, какое ограничение предназначено для смягчения (глобальное поглощение или захват на уровне группы), и рассмотреть дополнительные механизмы для корректности/справедливости на уровне группы (оспорение/апелляция, сокращение, возможность проверки и т. д.).

5) «Независимое оборудование для каждой группы» сегодня выглядит мягким требованием.

Без поддающегося проверке механизма аттестации (TEE/отпечатков оборудования/аттестации поставщика) требование «независимого оборудования для каждой подходящей группы» является технически неисполнимым. Актеры потенциально могут использовать виртуализацию (vGPU) или приемы планирования, чтобы появляться в нескольких группах с одного и того же физического оборудования.

Просьба: следует ли нам рассматривать это как политику максимальных усилий, а не как основу безопасности (и сказать об этом прямо), или ввести некоторую форму регистрации/аттестации/аудита технических характеристик оборудования?

6) Дополнительные направления улучшения (на уровне приложения, но стоит обсудить)

  • Проверка выборки на основе слотов/VRF: Учитывая O(G·N^2), рассмотрите выборку валидаторов на основе VRF для каждой группы с количественным анализом безопасности (вероятность отказа в зависимости от веса состязательности, размера выборки).
  • Укрепите незарегистрированную фазу в качестве периода наблюдения: используйте реальные сигналы спроса GNK (доходы + отдельные плательщики + ставки споров/возвратов) для ограничения/рекомендации консенсуса Koef вместо чисто управленческого усмотрения (необходимы защитные меры против мошенничества/антисивиллы).
  • План аттестации оборудования: даже если он еще не готов, обсудите, может ли аттестация платформы (TEE/SEV/TPM) или аттестация поставщика сократить повторное использование оборудования между группами.

Будем рады помочь уточнить параметры (W_threshold, V_min, T_grace, f) или предложить размеры выборки/математические модели угроз. IMO, элементы критического пути: семантика делегирования + холодный старт/жизнеспособность + план масштабируемости.

gmorgachev avatar
gmorgachevMaintainerMaintainer
Делегирование переносит полномочия проверки с «аппаратного обеспечения» на «социальную координацию» (безопасность + живучесть). Взяточничество/агрегирование делегирования становится самым дешевым вектором атаки.

Честно говоря, не уверен, как это меняет модель безопасности. Существует то же предположение BFT, что> 2/3 хостов честны, в том числе и с точки зрения взяточничества. Если мы предположим, что злоумышленник может подкупить честное сверхбольшинство, тогда он сможет подкупить их и во время проверки PoC без делегирования, я что-то упускаю?

Тупик «холодного старта»/структурное вето со стороны действующих компаний

Отказ делегировать полномочия после льготного периода приведет к штрафу в виде вознаграждения в виде биткойнов. Это создает стимул для крупных хостов делегировать

Задержка отзыва/реакции по-прежнему является задачей TODO.

Эпоха сейчас составляет около 24 часов. Я думал о случае, когда в середине эпохи N хост A понимает, что хост B пытается обмануть. А затем он пытается отозвать делегирование, чтобы его вес не использовался при голосовании за веса эпохи N+1. Я предполагаю, что делегирование для всей эпохи N получается во время начала эпохи N. В основном вопрос заключается в том, когда делегировать снимки или разрешать динамические изменения.

gmorgachev avatar
gmorgachevMaintainerMaintainer
2026-04-02
Необходимо пояснение: делегирование «расходов» против «репликации» после того, как p_from делегирует p_to для group_i, теряет ли p_from какое-либо прямое влияние на голосование/проверку в этой группе на эпоху?

По моему мнению, p_from должен иметь возможность либо делегировать свой вес в group_i, либо голосовать самостоятельно в group_i. Поэтому, если он делегировал полномочия, он не может голосовать, а также не может иметь MLNode в этой группе. Если p_from решит развернуть MLNode в group_i, он отменит все проверки в group_i.

влияет ли делегирование только на групповое голосование по проверке или на вес глобального управления/производства блоков?

Делегирование влияет только на проверку PoC внутри определенной группы. Вес блока, вес управленческого решения и вес, используемый для вознаграждения или распределения задач, не затрагиваются.

Делегирование происходит по ключу (p_from, p_to, model_id), отдельно по каждой модели.

Масштабируемость: проверку O(G · N^2) трудно считать устойчивой.

Просто чтобы уточнить: вопрос в сложности проверки PoC или в самой цепочке? Если о цепочке

Даже если пропускная способность в порядке, проверка подписи ЦП, обработка состояния, повторные попытки и восстановление вилки, скорее всего, станут узким местом — особенно в окнах продолжительностью 2–10 минут.

Само производство цепочек/блоков не зависит от количества модельных групп. Все эти данные используются в одной основной сети. Таким образом, почти нет изменений в повторных попытках, восстановлении вилки и т. д. из-за многомодельного PoC (пара новых полей в существующих транзакциях MsgPoCV2StoreCommit, MsgMLNodeWeightDistribution и MsgSubmitPocValidationsV2).

Если о проверке PoC

В обновлении v0.2.10 появился механизм на основе слотов https://github.com/gonka-ai/gonka/blob/main/proposals/poc/optimize.md. Он позволяет изменить сложность на O(G * N * N_SLOTS) с рекомендуемым N_SLOTS=128.

Механизм можно активировать голосованием по параметрам, без апгрейда.

Существует также случайная выборка артефактов PoC для проверки, этот механизм уже активен.

gmorgachev avatar
gmorgachevMaintainerMaintainer
2026-04-02
«Независимое оборудование для каждой группы» сегодня выглядит мягким требованием.

Вы имеете в виду часть?

..где процедура POC происходит без повторного развертывания, для каждой модели независимо

Я думаю, что нет необходимости предъявлять какие-либо реальные требования к конкретному оборудованию. Процедура PoC происходит для всех моделей одновременно. Таким образом, если хост может отправлять артефакты для модели A и модели B в одном и том же PoC, и эти артефакты проверяются другими хостами, он предполагает, что у этого хоста есть оборудование для развертывания обеих моделей. С моей точки зрения, не так уж важно, если одно и то же оборудование представлено в разных группах, поскольку его вычислительная мощность / ресурсы VRAM также будут разделены между группами. Таким образом, от таких действий не будет никакой выгоды, просто участие в обеих группах, что хорошо для безопасности.

gmorgachev avatar
gmorgachevMaintainerMaintainer
Ограничение (Приложение A) не полностью решает проблему группового захвата/справедливости. Ограничение ограничивает влияние новой группы на глобальный консенсусный вес (инфляция/внезапное доминирование), но не останавливает групповой захват, например скоординированное голосование, чтобы признать честных участников недействительными или монополизировать доход от вывода популярной новой модели. Ограничение также зависит от веса, полученного в других зрелых группах → сильная зависимость от пути/преимущество действующего оператора (новые участники структурно ограничены, даже если они лучше всех работают в новой модели). Просьба: уточнить, какое ограничение предназначено для смягчения (глобальное поглощение или захват на уровне группы), и рассмотреть дополнительные механизмы для корректности/справедливости на уровне группы (оспорение/апелляция, сокращение, возможность проверки и т. д.).

Основной механизм ограничения группового доминирования – использование общего консенсусного веса в знаменателе. Итак, если общий вес цепочки равен 1000 (из всех групп), чтобы пройти проверку внутри group_i, хост должен быть одобрен хостами с весом голосования > 666 (в исходном тексте это было 50%, это была моя ошибка, цепочка уже использует 2/3). Итак, подавляющее большинство из всей цепочки подтвердило артефакты PoC / делегировало свои голоса PoC.

Вы имеете в виду какую-то конкретную групповую локальную атаку захвата?

gmorgachev avatar
gmorgachevMaintainerMaintainer
2026-04-02

Про TEE есть отдельная ветка, где я полностью согласен с его необходимостью :) #951 (https://github.com/gonka-ai/gonka/discussions/951)

unameisfine avatar
2026-04-20

Обзор уровня реализации текущей базы кода

Общее руководство и анализ безопасности, проведенный @jacky6block (https://github.com/jacky6block), надежны. Я рассмотрел текущую реализацию PoC, чтобы выявить конкретные пробелы, которые необходимо устранить в предложении. Они дополняют уже поднятые проблемы делегирования/масштабирования.

1. Хранение веса для каждой модели не поддерживается текущей моделью данных.

MLNodeInfo.poc_weight — это плоский int64 без контекста модели (activeparticipants.proto:58). Родительский EpochGroupData поддерживает подгруппы через sub_group_models ( epoch_group_data.proto:19 ), но состояние подгруппы находится только в памяти — epoch_group.go:111 хранит их в карте [string]*EpochGroup, которая перестраивается во время выполнения и никогда не сохраняется в цепочке.

Для многомодельного PoC каждому участнику необходим вес для каждой модели, который выдерживает перезапуск и доступен для запроса валидаторами. Два варианта:

  • Расширьте MLNodeInfo полем model_id и сохраните отдельные записи для каждой модели.
  • Создайте новую коллекцию в цепочке с ключом (эпоха, model_id, участник) -> poc_weight.

Второй более чистый — он позволяет избежать раздувания ActiveParticipant.ml_nodes[] (который уже повторяется в нескольких горячих путях, таких как model_assignment.go и epoch_group.go:55-78 ) и позволяет независимое сокращение для каждой модели.

2. Спор о параллельном PoC-графическом процессоре недостаточно конкретизирован

В предложении говорится, что «PoC работает одновременно во всех подходящих группах в одну и ту же эпоху». В настоящее время фазы эпохи являются последовательными: ГЕНЕРАЦИЯ -> ПРОВЕРКА -> ВЫВОД (types/params.go:165-183, продолжительность в блоках). Брокер назначает каждый графический процессор ровно одной модели во время PoC ( model_assignment.go ).

С M одновременными PoC:

  • Каждому хосту требуются отдельные графические процессоры для каждой модели — это признается («требуется отдельное оборудование для каждой группы»), но у брокера нет механизма для разделения графических процессоров по задачам PoC. StartPoCNodeCommandV2 нацелен на одну модель для каждого узла ( node_worker_commands.go:196-210 ).
  • Окно проверки масштабируется с помощью M — WeightCalculator (chainvalidation.go:44-192) обрабатывает проверки последовательно для каждого участника. При использовании моделей M x N задержка проверки растет линейно. Текущее PocValidationDuration = 6 блоков (~ 1 минута) может быть слишком коротким.
  • Ухудшение вывода во время PoC — в предложении говорится, что проверка и вывод могут выполняться параллельно, но когда все графические процессоры заняты M параллельными PoC, пропускная способность вывода падает до нуля на этапе PoC.

Предложение: рассмотрите поэтапный PoC — каждая модель выполняет свой PoC в другом диапазоне блоков в пределах эпохи. Это позволяет избежать конфликтов между графическими процессорами и соответствует существующей модели последовательных фаз.

3. Консенсус Коэффа, цикличность управления

В предложении консенсусKoeff_i определяется как параметр управления. Но количество голосов в управлении = вес консенсуса = f(consensusKoeff). Группа, члены которой имеют консенсусный вес большинства, может проголосовать за увеличение своего собственного консенсусаKoeff, что еще больше концентрирует власть.

Ограничение в Приложении A (ограничение веса по весу участников в других группах) частично смягчает это для новых групп, но не касается исходной группы (group_Qwen3-235B-FP8 явно освобождается от ограничения).

Предложение: Ограничить диапазон консенсусаKoeff для каждой модели (например, [0,5, 2,0] относительно базового уровня) и потребовать сверхбольшинства (67%) для изменений, что соответствует порогу BFT, уже используемому для консенсуса.

4. PoC подтверждения не адресован

Предложение охватывает основной PoC, но не упоминает PoC подтверждения (confirmation_poc_v1.go:10-63). cPoC запускается на этапе вывода для проверки наличия оборудования на узлах — это важно для жизнеспособности.

С мультимоделью:

  • Должен ли cPoC проверять все модели, которые, по утверждению хоста, они обслуживают? Это умножает нагрузку cPoC на G (количество групп).
  • Или только модель, которая в данный момент выводится на этом хосте? Тогда хосты, обслуживающие модели с низким спросом, полностью пропускают cPoC.
  • Текущий cPoC использует ConfirmationWeight из EpochGroupData ( epoch_group_data.proto:47 ) — одно поле, а не для каждой модели.

Это требует четкого проектирования — cPoC — это защита от хостов, которые передают основной PoC, а затем освобождают оборудование.

5. Распределение вознаграждения за урегулирование между группами

Предложение определяет консенсусWeight(p) = sum(consensusKoeff_i * pocWeight(group_i, p)) для силы консенсуса, но не определяет, как вознаграждения в стиле биткойнов (основной экономический стимул) распределяются между группами.

Текущий расчет ( bitcoin_rewards.go ) распределяет вознаграждения пропорционально глобальному весу с ограничением веса подтверждения. С мультимоделью:

  • Объединяются ли вознаграждения глобально и распределяются ли они по совокупному консенсусному весу? Тогда хосты в группах с высоким консенсусом по Коэффу зарабатывают непропорционально.
  • Или сначала разделить по группам, а затем распределить внутри группы? Затем нам нужно определить коэффициент разделения (по консенсусу Коэфф? по требованию вывода?).

Это имеет серьезные экономические последствия — оно определяет, жизнеспособно ли размещение нишевой модели по сравнению с тем, чтобы все стремились к модели с самым высоким коэффициентом.

Конкретный путь реализации (предложение)

Учитывая сложность, поэтапное внедрение кажется практичным:

Фаза 1 может осуществляться независимо и полезна даже без делегирования — она позволяет отслеживать вес каждой модели, чего в сети сейчас нет.

Будем рады помочь с обзором реализации или созданием прототипа любой из этих областей.

Русский перевод
gmorgachev avatar
gmorgachevMaintainerАвтор
2026-02-25

Предложение: мультимодельный PoC

Процедура POC — это краткосрочный тест для сравнения объема вычислительных ресурсов каждого хоста. Один раз в эпоху определяется вес для каждого хоста, который затем используется в качестве консенсусного веса для создания блоков и распределения задач между хостами. Кроме того, существует подтверждение (случайное) POC, которое используется для подтверждения веса, когда сеть недогружена путем вывода (чтобы убедиться, что оборудование все еще там).

Фазы POC:

ГЕНЕРАЦИЯ (блоки по 1-5 мин)

ВАЛИДАЦИЯ (блоки по 2-10 мин)

ФАЗА ВЫВОДА (нет POC, но иногда может быть прервана до POC подтверждения)

Теоретически проверка и вывод могут выполняться параллельно.

Текущая модель безопасности требует >50% общего консенсусного веса сети, чтобы проголосовать за «действительность». Без делегирования злоумышленнику необходимо >50 % общего веса сети, чтобы испортить проверку любого (и всех) хостов.

Часть вознаграждения в стиле биткойнов распределяется пропорционально этому весу. На ранней стадии это основная мотивация, поскольку вывод обходится намного дешевле.

Проблема

Цепочка должна поддерживать несколько моделей.

В настоящее время сеть не может поддерживать несколько моделей, поскольку у нас есть PoC для одной модели.

Почему мы не можем поддерживать несколько моделей с помощью PoC для одной модели?

Если мы обслуживаем несколько моделей с текущим PoC с одной моделью, это означает, что вам необходимо повторно развернуть модель перед каждым cPoC. И если вы сможете это сделать — вы сможете использовать это время для развертывания моделей на новых узлах. По сути, это открывает сеть для атаки, когда злоумышленник развертывает оборудование только для фазы POC. Зачем нам вообще нужен cPoC?

Потому что а) мы хотим убедиться, что если нагрузка на сеть низкая - вычисления все еще есть б) до тех пор, пока качество бенчмаркинга оборудования по самому логическому выводу пользователей не будет достаточно высоким. Таким образом, вариант повторного развертывания моделей для PoC vs inference не может быть использован, и нам нужно выяснить, как поддерживать разные модели во время PoC и cPoC.

Предложение

Давайте попробуем построить систему, которая поддерживает несколько моделей одновременно, где процедура POC происходит без повторного развертывания, для каждой модели независимо. Такие разные POC соответствуют совершенно разной вычислительной мощности (по сути, они будут измерять не чистую вычислительную мощность, а то, насколько «оптимальна» конфигурация для конкретного оборудования). Поскольку POC является не только источником веса для распределения задач по конкретной модели, но и способом определения консенсусного веса, нам необходимо определить, как агрегировать веса от разных POC и как проверять результаты каждого POC.

Для агрегирования цепочка должна будет определить, насколько ценен вес каждого POC для цепочки. Коэффициенты, преобразующие вес POC в консенсусный вес, могут быть определены как параметры управления путем прямого голосования. Их можно определить таким образом, что более крупные, мощные и популярные модели будут иметь больший вес. Поскольку новейшее оборудование также оптимизировано для обслуживания моделей высшего уровня (большое количество видеопамяти, быстрое соединение между графическими процессорами, поддержка FP4/FP8 и т. д.), это естественным образом будет стимулировать хосты переключать новые графические процессоры на самые мощные модели, чтобы получить больший вес за доллар. Для роста сети важно сделать обслуживание лучших моделей (которые требуют наиболее оптимизированных графических процессоров) наиболее прибыльными.

Это предложение ставит целью поддерживать одинаковый стиль проверки POC — каждый хост проверяет каждый другой хост (или его вероятностную аналогию для случая слотов). Один из подходов к достижению этой цели — заставить каждый хост участвовать (иметь аппаратное обеспечение) в каждой модели. Но такой подход непрактичен и слишком сильно повысит требования к оборудованию. Чтобы избежать этого, предложение вводит делегирование PoC от хоста к другому хосту, которому он доверяет. Такое делегирование позволяет поддерживать свойство проверки большинством консенсусных полномочий (но наверняка вводит новое предположение о безопасности, подробнее об этом в Приложении A).

Чтобы определить процесс добавления новых моделей в цепочку, это предложение позволяет обслуживать модели, которые не одобрены руководством, без проверки выводов и без получения консенсуса от обслуживания таких моделей. Он также определяет процесс, согласно которому модель, одобренная руководством, получает право на получение консенсусного веса.

Предупреждение. В этом предложении предполагается модель проверки O(N^2) (порог веса >50%). Проверка на основе слотов выходит за рамки. Скорее всего, подход на основе слотов будет работать таким же образом, с независимым назначением слотов в каждой группе. Но необходимо дважды проверить, использовать ли $votingPower$ или $consensusWeight$ для хостов в группе.

Условия

Пусть эпоха $S$ текущая. Следующее определяет вычисление веса для эпохи $S+1$ . Предварительное право на участие ( $PreE_{S+1}$ ) определяется $N$ блоков до начала эпохи $S+1$ PoC. В этом разделе $*_S$ обозначает значения из эпохи $S$ и используются в качестве входных данных для эпохи $S+1$. Членство в группе и делегирование оцениваются на уровне предварительного отбора и считаются фиксированными для эпохи.

  • $group_i$ — группа моделей для модели $i$ (участниками являются хосты с MLNodes, обслуживающими модель $i$). Сеть поддерживает модели $M$ в цепочке.

$group_i$ — группа моделей для модели $i$ (участниками являются хосты с MLNodes, обслуживающими модель $i$). Сеть поддерживает модели $M$ в цепочке.

  • $pocWeight_S(group_i, p)$ — вес хоста $p$ в $group_i$ в эпоху $S$ . Равно количеству одноразовых номеров, вычисленных $p$ в процедуре PoC для этой группы и успешно проверенных. Локальный вес внутри группы.

$pocWeight_S(group_i, p)$ — вес хоста $p$ в $group_i$ в эпоху $S$ . Равно количеству одноразовых номеров, вычисленных $p$ в процедуре PoC для этой группы и успешно проверенных. Локальный вес внутри группы.

  • $consensusKoeff_i$ — коэффициент, преобразующий $pocWeight$ в $group_i$ в консенсусный вес. Определяется управлением для каждой модели.

$consensusKoeff_i$ — коэффициент, преобразующий $pocWeight$ в $group_i$ в консенсусный вес. Определяется управлением для каждой модели.

  • $consensusWeight_S(p) = \sum_{i: group_i \in E_S} консенсусKoeff_i \times pocWeight_S(group_i, p)$ — (см. Приложение A для защиты ограничения)

$consensusWeight_S(p) = \sum_{i: group_i \in E_S} консенсусKoeff_i \times pocWeight_S(group_i, p)$ — (см. Приложение A для защиты ограничения)

  • $members(group_i) = \lbrace p : p \text{ для модели развернут MLNode } i \rbrace$ — хосты с развернутым MLNode для модели

$members(group_i) = \lbrace p : p \text{ для модели развернут MLNode } i \rbrace$ — хосты с развернутым MLNode для модели

  • $hosts_S(group_i) = \lbrace p : консенсусВес_S(p) > 0 \text{ и } p \inmembers(group_i) \rbrace$ Члены с ненулевым консенсусным весом. Вес может исходить из любой подходящей группы, не обязательно $group_i$ .

$hosts_S(group_i) = \lbrace p : консенсусВес_S(p) > 0 \text{ и } p \inmembers(group_i)\rbrace$

Члены с ненулевым консенсусным весом. Вес может исходить из любой подходящей группы, не обязательно $group_i$ .

  • $PreE_{S+1}$ — набор предварительно подходящих групп для эпохи $S+1$ . Группа $group_i \in PreE_{S+1}$, если выполняются условия 1–3: Модель $i$ одобрена руководством с определенным $consensusKoeff_i$ $\sum_{p \inmembers(group_i)} консенсусВес_S(p) \geq W_{порог} \times \sum_{p} консенсусВес_S(p)$ $|hosts_S(group_i)| \geq V_{min}$

$PreE_{S+1}$ — набор предварительно подходящих групп для эпохи $S+1$ . Группа $group_i \in PreE_{S+1}$, если выполняются условия 1-3:

Модель $i$ одобрена руководством с определенным $consensusKoeff_i$

$\sum_{p \inmembers(group_i)} консенсусВес_S(p) \geq W_{порог} \times \sum_{p} консенсусВес_S(p)$

$|hosts_S(group_i)| \geq V_{min}$

  • $E_{S+1}$ — набор допущенных к консенсусу групп для эпохи $S+1$ . Группа $group_i \in E_{S+1}$, если: $group_i \in PreE_{S+1}$ Как минимум $V_{min}$ хосты в группе проходят проверку PoC в эпоху $S+1$ (см. правило проверки ниже).

$E_{S+1}$ — набор допущенных к консенсусу групп для эпохи $S+1$ . Группа $group_i \in E_{S+1}$, если:

$group_i \in PreE_{S+1}$

  • По крайней мере $V_{min}$ хосты в группе проходят проверку PoC в эпоху $S+1$ (см. правило проверки ниже).

$W_{threshold}$ — минимальная доля общего консенсусного веса сети, необходимая для допуска группы (параметр управления)

$W_{threshold}$ — минимальная доля общего консенсусного веса сети, необходимая для допуска группы (параметр управления)

$V_{min}$ — минимальное количество хостов с ненулевым консенсусным весом, необходимое в группе (параметр управления)

$V_{min}$ — минимальное количество хостов с ненулевым консенсусным весом, необходимое в группе (параметр управления)

  • В настоящее время $group_{Qwen3-235B-FP8}$ является единственной подходящей группой (PoC для одной модели). Это предложение распространяется на несколько групп.

В настоящее время $group_{Qwen3-235B-FP8}$ является единственной подходящей группой (PoC для одной модели). Это предложение распространяется на несколько групп.

  • Первоначальная группа ( $group_{Qwen3-235B-FP8}$ ) освобождена от ограничения веса (Приложение A) и обеспечивает базовый консенсусный вес для проверки новых групп.

Первоначальная группа ( $group_{Qwen3-235B-FP8}$ ) освобождена от ограничения веса (Приложение A) и обеспечивает базовый консенсусный вес для проверки новых групп.

  • Хосту, участвующему в нескольких подходящих группах, требуется отдельное оборудование для каждой группы. PoC работает одновременно во всех подходящих группах в одну и ту же эпоху.

Хосту, участвующему в нескольких подходящих группах, требуется отдельное оборудование для каждой группы. PoC работает одновременно во всех подходящих группах в одну и ту же эпоху.

  • $delegation_S(group_i, p_{from}, p_{to})$ — консенсусный вес, делегированный от хоста $p_{from}$ хосту $p_{to}$ для проверки в $group_i$ в эпоху $S$ . Хост $p_{from} \notinmembers(group_i)$ ; хост $p_{to} \inmembers(group_i)$ . Делегирование устанавливается до начала эпохи; изменения, произошедшие в течение эпохи, вступают в силу со следующей эпохи.

$delegation_S(group_i, p_{from}, p_{to})$ — консенсусный вес, делегированный от хоста $p_{from}$ хосту $p_{to}$ для проверки в $group_i$ в эпоху $S$ . Хост $p_{from} \notinmembers(group_i)$ ; хост $p_{to} \inmembers(group_i)$ . Делегирование устанавливается до начала эпохи; изменения, произошедшие в течение эпохи, вступают в силу со следующей эпохи.

  • $r_{delegation}$ — доля делегатора вознаграждения в стиле биткойн, делящегося с делегатом (параметр управления, например, 1% на каждую группу??)

$r_{delegation}$ — доля делегатора вознаграждения в стиле биткойн, делящегося с делегатом (параметр управления, например, 1% на каждую группу??)

  • $r_{refusal}$ — доля вознаграждения в стиле биткойнов, отправляемая управлению, когда хост явно отказывается участвовать в группе; должно быть > $r_{делегирование}$ (параметр управления, например, 5% на каждую группу??)

$r_{refusal}$ — доля вознаграждения в стиле биткойнов, отправляемая управлению, когда хост явно отказывается участвовать в группе; должно быть > $r_{делегирование}$ (параметр управления, например, 5% на каждую группу??)

  • $r_{penalty}$ — доля вознаграждения в стиле биткойнов, теряемая, когда хост не может сделать выбор участия для какой-либо группы, одобренной руководством (параметр управления, целевой показатель 100%)

$r_{penalty}$ — доля вознаграждения в стиле биткойнов, теряемая, когда хост не может сделать выбор участия для какой-либо группы, одобренной руководством (параметр управления, целевой показатель 100%)

  • $T_{grace}$ — продолжительность льготного окна после одобрения руководства до применения штрафов (параметр управления, например, 3 эпохи)

$T_{grace}$ — длительность льготного окна после одобрения руководства до применения штрафов (параметр управления, например, 3 эпохи)

  • $votingPower_S(group_i, p) = консенсусВес_S(p) + \sum_{p_{from}} Delegation_S(group_i, p_{from}, p)$ — общее количество голосов при проверке хоста $p$ в $group_i$. Ограничения делегирования: $delegation_S(group_i, p_{from}, p_{to}) \ge 0$ и для каждого $(group_i, p_{from})$ , $\sum_{p_{to}} Delegation_S(group_i, p_{from}, p_{to}) \le консенсусВеайт_S(p_{from})$ .

$votingPower_S(group_i, p) = консенсусВес_S(p) + \sum_{p_{from}} Delegation_S(group_i, p_{from}, p)$ — общее количество голосов при проверке хоста $p$ в $group_i$

Ограничения делегирования: $delegation_S(group_i, p_{from}, p_{to}) \ge 0$ и для каждого $(group_i, p_{from})$ , $\sum_{p_{to}} Delegation_S(group_i, p_{from}, p_{to}) \le консенсусВеайт_S(p_{from})$ .

Вопрос 1. Может ли хост разделить делегирование между несколькими хостами в одной группе?

Соответствующие группы

Вес, рассчитанный в процедуре PoC для подходящих групп моделей, способствует общему консенсусному весу посредством коэффициента, определяемого руководством. Консенсусный вес определяет:

Блокировать право подписи

Право голоса в управлении

Право голоса при проверке PoC

Распределение вознаграждений в стиле биткойнов (пропорционально консенсусному весу)

Внутри группы запросы на вывод распределяются согласно $pocWeight_S(group_i, p)$ . Награды за умозаключение распределяются таким же образом.

Проверка PoC

Делегирование: хосты, не входящие в группу, могут делегировать свой консенсусный вес тому хосту, который входит в нее. Делегат голосует от своего имени. Делегирование осуществляется для каждой группы и устанавливается до начала эпохи.

Правило проверки: Результат PoC хоста $p$ в подходящей $group_i$ принимается, если:

$$\frac{\sum_{v \text{ голосов действительны для } p} VotingPower_S(group_i, v)}{\sum_{q} консенсусВес_S(q)} > \frac{1}{2}$$

Числитель: сумма $votingPower_S(group_i, v)$ от всех валидаторов $v$, которые одобрили $p$

  • Знаменатель: общий консенсусный вес сети (все хосты, все группы).

Хозяева, не входящие в группу и не делегирующие полномочия, фактически голосуют против одобрения. Поэтому делегирование необходимо для любой группы, прямые члены которой владеют менее 50% общего веса сети.

Подробности о голосовании:

  • Количество MLNodes не имеет значения: 1 MLNode или 100 MLNodes дают одинаковое количество голосов.

Изменения делегирования вступают в силу со следующей эпохи

Модель доверия: делегат доверяет делегату, который проголосует правильно.

TODO: Механизм отзыва делегирования в середине эпохи, если делегат голосует злонамеренно.

Обязательное групповое участие и стимулирование

Каждый хост, имеющий консенсусный вес, должен активно участвовать в каждой группе, одобренной руководством. Для каждой группы ведущий выбирает одно из:

  • Присоединяйтесь к группе — развертывайте оборудование и участвуйте непосредственно в группе.
  • Делегировать — делегировать право голоса участнику группы; делегатор делится $r_{delegation}$ с делегатом, стимулируя членов группы укреплять доверие

Явный отказ — отказ делегировать полномочия или присоединиться; стоит $r_{отказ}$ ; должен обновляться каждую эпоху

В течение льготного периода (периодов $T_{grace}$ после одобрения руководства) организаторы должны сделать выбор для участия, но за любой выбор штраф не налагается. После окончания льготного периода применяются штрафы: хосты, которые не сделали выбор, теряют $r_{penalty}$ своего вознаграждения в стиле биткойнов.

Это стимулирует более 50% общего консенсусного веса участвовать в проверке PoC для каждой одобренной руководством группы.

Незарегистрированные модели

Любой хост может добавить модель в цепочку и предоставить вывод без одобрения руководства (за дополнительную плату).

Свойства:

Никакой проверки вывода другими хостами

Цена устанавливается непосредственно хозяином

Запросы отправляются непосредственно хосту

  • Хост хранит полезную нагрузку локально, но без перекрестной проверки.
  • За каждый платеж GNK взимается комиссия, отправляемая руководству.

Никаких наград в стиле биткойнов

Цель: построить демо-кейс для предложения по управлению, чтобы показать спрос на модель.

Жизненный цикл модели

  • Незарегистрированный этап — хост добавляет модель, предоставляет выводы непосредственно пользователям, создает демонстрационный пример для предложения по управлению.
  • Предложение по управлению — модель одобрена с определенным $consensusKoeff_i$, группа создана.
  • Grace window (эпохи $T_{grace}$) — применяются обязательные правила участия, но без штрафов; организаторы делают выбор участия (присоединиться/делегировать/отказаться); PoC работает для группы
  • После льготного периода — применяются штрафы ( $r_{penalty}$ , $r_{делегирование}$ , $r_{refusal}$ ); право на участие по-прежнему зависит от условий выполнения ($W_{threshold}$, $V_{min}$, прохождение проверки PoC)

Группа, одобренная руководством, может иметь или не иметь право на участие в любой конкретный период в зависимости от того, соответствует ли она критериям приемлемости.

Реализация

[Будет определено позднее]

Приложение A. Атака и защита на основе делегирования

Атака: Хост накапливает >50% $votingPower$ посредством делегирования, проверяет поддельного участника, претендующего на большой вес, получает консенсусный контроль.

Вариант защиты: ограничить вес каждой группы подтвержденным весом участников в другом месте.

$$\text{Консенсусный вес от } group_i \leq f \times \sum_{p \inmembers(group_i)} \text{(}p\text{Консенсусный вес от других подходящих групп)}$$

Если исходный вес PoC группы превышает ограничение, масштабируйте всех участников пропорционально, чтобы они соответствовали размеру.

Для ясности: «другие подходящие группы» относятся к консенсусному весу, уже полученному от подходящих групп, за исключением самой $group_i$ (т. е. с использованием вкладов $consensusWeight_S$ от $E_S \setminus \lbrace group_i \rbrace$ ), чтобы избежать циклической зависимости.

Освобождение от налога для начальной группы (без ограничения)

$f$ — параметр управления

Делегирование влияет на $votingPower$, но не на ограничение (ограничение основано на весе PoC)

Это ограничивает ущерб от фейковых участников: даже если они пройдут валидацию, их весовой вклад ограничивается реальной долей участников в других группах. Кепка — вторичная защита; валидация (>50% веса сети) остается основной.

Вопрос 5: Каким должен быть $f$?

tcharchian avatar
tcharchianMaintainerMaintainer
2026-02-27

Пожалуйста, рассмотрите возможность присоединиться к обсуждению этого предложения и поделиться любыми идеями или предложениями. Первоначальная версия будет предоставлена автором предложения, а отзывы участников помогут усовершенствовать подход и прояснить следующие шаги.

akup avatar
akupMaintainerMaintainer

Вопросы

  • Когда хост A делегирует свой голос хосту B в другой группе моделей, он добавляет право голоса хосту B. Но почему это не уменьшает количество голосов хоста A?

Когда хост A делегирует свой голос хосту B в другой группе моделей, он добавляет право голоса хосту B. Но почему это не уменьшает количество голосов хоста A?

  • Если какой-то хост А доверяет хосту Б, то создается впечатление, что они уже находятся в группе доверия, имеют общение и могут договориться о совместных действиях. Собственно какая разница, если бы это был один хост?

Если какой-то хост А доверяет хосту Б, то создается впечатление, что они уже находятся в группе доверия, имеют общение и могут договориться о совместных действиях. Собственно какая разница, если бы это был один хост?

  • Как участник может выбрать, какому хосту делегировать свой вес? Как это можно практически скоординировать? Было бы более понятно, если бы был реальный пример с пошаговым планом: если есть новая модель и есть новые хосты, которые хотят ее запустить, как им начать? Как они получают делегирование, как хосты из других групп начинают понимать, что им нужно делегировать, и как они могут решить, какому хосту делегировать свой голос?

Как участник может выбрать, какому хосту делегировать свой вес? Как это можно практически скоординировать? Было бы более понятно, если бы был реальный пример с пошаговым планом: если есть новая модель и есть новые хосты, которые хотят ее запустить, как им начать? Как они получают делегирование, как хосты из других групп начинают понимать, что им нужно делегировать, и как они могут решить, какому хосту делегировать свой голос?

  • Сколько хостов должно запустить модель, чтобы начать групповую работу. Например, если есть только 2 хоста, получат ли они вознаграждение? Если есть 3 хоста? Сформируйте, какому количеству хостов мы можем доверять группе (похоже, это связано с вопросом Q5)

Сколько хостов должно запустить модель, чтобы начать групповую работу. Например, если есть только 2 хоста, получат ли они вознаграждение? Если есть 3 хоста? Сформируйте, какому количеству хостов мы можем доверять группе (похоже, это связано с вопросом Q5)

  • Как можно избежать следующего сценария? Начинается новый льготный период. Злоумышленник создает несколько хостов, которые будут участвовать с участниками модели из других групп, поскольку они лично не знают, кому делегировать голосование, делегируйте его «случайному кому-то». Также злоумышленник делегирует свои голоса (от нескольких хостов) своим хостам в новой группе. И злоумышленник получает контроль над группой

Как можно избежать следующего сценария? Начинается новый льготный период. Злоумышленник создает несколько хостов, которые будут участвовать с участниками модели из других групп, поскольку они лично не знают, кому делегировать голосование, делегируйте его «случайному кому-то». Также злоумышленник делегирует свои голоса (от нескольких хостов) своим хостам в новой группе. И злоумышленник получает контроль над группой

  • Не проще ли создать новую модельную группу семян (генезиса)? Например, хосты, у которых уже есть право голоса, могут запустить некоторые из своих мультинодов с новой моделью и получить дополнительное вознаграждение за участие в раннем запуске группы новой модели. Они помогают создать новую модельную группу (поскольку у них есть ресурсы и они заинтересованы в развитии сети), поскольку у них уже есть право голоса, но при этом не возникнет всех сложностей (не только технических, но и реально-практических) делегирования.

Не проще ли создать новую модельную группу семян (генезиса)? Например, хосты, у которых уже есть право голоса, могут запустить некоторые из своих мультинодов с новой моделью и получить дополнительное вознаграждение за участие в раннем запуске группы новой модели. Они помогают создать новую модельную группу (поскольку у них есть ресурсы и они заинтересованы в развитии сети), поскольку у них уже есть право голоса, но при этом не возникнет всех сложностей (не только технических, но и реально-практических) делегирования.

п.с. Незарегистрированные модели - очень хороший момент.

gmorgachev avatar
gmorgachevMaintainerMaintainer
2026-04-02
Но почему это не уменьшает количество голосов хоста A? Хост A не имеет права голоса в этой модельной группе, его нельзя уменьшить. Хост A может либо иметь MLNode с этой моделью, либо делегировать свою проверку PoC. Важно: это не влияет на консенсусный вес каких-либо хостов.
Если какой-то хост А доверяет хосту Б, то создается впечатление, что они уже находятся в группе доверия, имеют общение и могут договориться о совместных действиях. Собственно какая разница, если бы это был один хост? Насколько я понимаю, хост А может делегировать полномочия известным хостам с хорошей репутацией в основной сети. Таким образом, им не обязательно хорошо знать друг друга, но хост А должен доверять стимулу хоста Б действовать честно. Я думаю, что узлы соединения гораздо ближе :)
Сколько хостов должно запустить модель, чтобы начать групповую работу. Например, если есть только 2 хоста, получат ли они вознаграждение? Если есть 3 хоста? Сформируйте, какому количеству хостов мы можем доверять группе (похоже, это связано с вопросом Q5). Я не думаю, что какая-либо проверка может произойти при наличии менее трех хостов. Но мы также должны иметь ограничение на общий консенсусный вес участников этой модельной группы. Думаю, не должно быть меньше хотя бы 5-10% сети (если говорить о сегодняшних размерах)
Как можно избежать следующего сценария? С моей точки зрения, это должна быть комбинация ограничений на:
  • минимальная сила консенсуса от другой группы, которой должны обладать хосты, чтобы группа имела право на участие (5-10%+)

ограничить вес, который может иметь одна группа (чтобы не получить контроль над всей цепочкой)

Я согласен, что делегирование «случайному кому-то» вызывает серьезную озабоченность, и механизм основан на том факте, что принимающая сторона должна принять обоснованное решение о делегировании. Есть ли у вас какие-то дополнительные идеи, как защититься?

Не проще ли создать новую модельную группу семян (генезиса)? Например, хосты, у которых уже есть право голоса, могут запустить некоторые из своих мультинодов с новой моделью и получить дополнительное вознаграждение за участие в раннем запуске группы новой модели. Они помогают создать новую модельную группу (поскольку у них есть ресурсы и они заинтересованы в развитии сети), поскольку у них уже есть право голоса, но при этом не возникнет всех сложностей (не только технических, но и реально-практических) делегирования.

Я не понимаю, как это поможет избежать делегирования. Вопрос в том, какой консенсусный вес будет иметь такая группа. Если учитывается только их вес, то при текущем ограничении такая начальная группа должна контролировать > 2/3 общей мощности сети, чтобы PoC мог пройти. Что невозможно. Если PoC внутри этой новой группы будет рассчитываться только по весу участников — такие ранние начальные узлы тоже можно легко обмануть.

В исходном предложении первоначальная начальная группа по-прежнему представляет собой существующие валидаторы с некоторым пороговым значением их общего веса. Делегирование просто позволяет сделать этот порог ниже 2/3.

gmorgachev avatar
gmorgachevMaintainerMaintainer
2026-04-02

Извините, я использовал в комментарии 2/3 вместо 50%, так как обнаружил, что в основной сети уже используется 2/3 в качестве порога.

andrey055 avatar
2026-03-03

Предложение тестировать новые модели без вознаграждения в стиле биткойнов очень сильное.

Мне бы очень хотелось, чтобы это было реализовано. Конечно, есть определенные опасения — например, риск того, что хост может дискредитировать сеть, развернув неправильно настроенную модель, например, с уменьшенным контекстным окном.

Я надеюсь, что будут приняты соответствующие меры против этого.

jacky6block avatar
2026-03-04

Спасибо, что написали об этом — направление высокого уровня (многомодельное PoC без повторного развертывания; веса PoC для каждой модели, агрегированные в консенсусный вес) имеет смысл. Прочитав все предложение + Приложение А, я думаю, что есть несколько пробелов с высоким риском и несколько пунктов, которые необходимо уточнить, прежде чем это станет безопасным/реализуемым.

1) Делегирование переносит полномочия по проверке с «аппаратного обеспечения» на «социальную координацию» (безопасность + работоспособность).

Агрегация взяточничества/делегирования становится самым дешевым вектором атаки

Когда собственные члены новой группы владеют гораздо меньшим глобальным порогом> 50%, делегирование становится единственным практическим способом пройти проверку PoC во время холодного запуска. В этом режиме злоумышленник может получить большинство голосов, подкупив/стимулируя небольшое количество делегаторов с высоким консенсусом, что потенциально намного дешевле, чем предоставление эквивалентного оборудования.

Тупик «холодного старта»/структурное вето со стороны действующих компаний

Поскольку для «действительности» требуется> 50% глобального консенсусного веса, новая модельная группа может застрять, если хосты с большим весом не будут активно делегировать (апатия, затраты на координацию или стратегический отказ). Это фактически дает действующим операторам право вето и делает внедрение новых моделей во многом зависимым от координации вне цепочки.

Задержка отзыва/реакции по-прежнему является задачей TODO.

В предложении упоминается необходимость отзыва делегирования в середине эпохи, но не уточняется, как:

делегаты достаточно быстро обнаруживают неправомерное поведение делегатов (окна PoC составляют минуты),

отзыв вступает в силу в ту же эпоху,

  • потери обрабатываются, если обнаружение происходит после окна проверки.

2) Необходимо пояснение: «расходы» делегирования и «репликация».

В текущем определении voicePower(group_i, p) (добавка к делегированным суммам) легко интерпретировать делегирование как добавление веса к делегату без явного «удаления» его из эффективного бюджета делегатора внутри этой группы.

Просьба: пожалуйста, явно определите семантику делегирования как передачу бюджета проверки для конкретной группы (а не репликацию). Конкретно:

  • как только p_from делегирует p_to для group_i , теряет ли p_from какое-либо прямое влияние на голосование/проверку в этой группе на эпоху?
  • влияет ли делегирование только на групповое голосование по проверке или на вес глобального управления/производства блоков?

Мое предложение таково: делегирование должно быть ограничено только групповой проверкой (без изменений глобального веса производства блоков/управления) и должно моделироваться как бюджет без двойного расходования внутри группы.

Кроме того, пожалуйста, разъясните, что означает «неучастие фактически является отказом от голосования» в математике: учитывается ли воздержание через знаменатель, исключается ли воздержание или просто отсутствует в числителе, в то время как знаменатель остается глобальной суммой?

3) Масштабируемость: проверку O(G · N^2) трудно считать устойчивой.

Сохранение проверки O(N^2) для каждой группы становится O(G·N^2), когда несколько подходящих групп работают параллельно. Даже если пропускная способность в порядке, проверка подписи ЦП, обработка состояния, повторные попытки и восстановление вилки, скорее всего, станут узким местом — особенно в окнах продолжительностью 2–10 минут.

Кроме того, «PoC/проверка и вывод могут выполняться параллельно» требует конкретной истории изоляции ресурсов/приоритетов. Даже при использовании отдельных графических процессоров в группе конкуренция между сетью и ЦП все равно может ухудшить задержку вывода и UX.

Запрос: напишите либо:

конкретный план масштабирования (выборка/пакетирование/квоты), который сохраняет семантику> 50%, или

  • почему O(G·N^2) приемлемо при реалистичных целевых показателях N и G.

4) Ограничение (Приложение A) не полностью обеспечивает захват/справедливость на уровне группы.

Ограничение ограничивает влияние новой группы на глобальный консенсусный вес (инфляция/внезапное доминирование), но не останавливает групповой локальный захват, например. скоординированное голосование, чтобы признать честных участников недействительными или монополизировать доход от вывода популярной новой модели.

Ограничение также зависит от веса, полученного в других зрелых группах → сильная зависимость от пути/преимущество действующего оператора (новые участники структурно ограничены, даже если они лучше всех работают в новой модели).

Просьба: уточнить, какое ограничение предназначено для смягчения (глобальное поглощение или захват на уровне группы), и рассмотреть дополнительные механизмы для корректности/справедливости на уровне группы (оспорение/апелляция, сокращение, возможность проверки и т. д.).

5) «Независимое оборудование для каждой группы» сегодня выглядит мягким требованием.

Без поддающегося проверке механизма аттестации (TEE/отпечатков оборудования/аттестации поставщика) требование «независимого оборудования для каждой подходящей группы» является технически неисполнимым. Актеры потенциально могут использовать виртуализацию (vGPU) или приемы планирования, чтобы появляться в нескольких группах с одного и того же физического оборудования.

Просьба: следует ли нам рассматривать это как политику максимальных усилий, а не как основу безопасности (и сказать об этом прямо), или ввести некоторую форму регистрации/аттестации/аудита технических характеристик оборудования?

6) Дополнительные направления улучшения (на уровне приложения, но стоит обсудить)

  • Проверка выборки на основе слотов/VRF: Учитывая O(G·N^2), рассмотрите выборку валидаторов на основе VRF для каждой группы с количественным анализом безопасности (вероятность отказа в зависимости от веса состязательности, размера выборки).
  • Укрепите незарегистрированную фазу в качестве периода наблюдения: используйте реальные сигналы спроса GNK (доходы + отдельные плательщики + ставки споров/возвратов) для ограничения/рекомендации консенсуса Koef вместо чисто управленческого усмотрения (необходимы защитные меры против мошенничества/антисивиллы).
  • План аттестации оборудования: даже если он еще не готов, обсудите, может ли аттестация платформы (TEE/SEV/TPM) или аттестация поставщика сократить повторное использование оборудования между группами.

Будем рады помочь уточнить параметры (W_threshold, V_min, T_grace, f) или предложить размеры выборки/математические модели угроз. IMO, элементы критического пути: семантика делегирования + холодный старт/жизнеспособность + план масштабируемости.

gmorgachev avatar
gmorgachevMaintainerMaintainer
Делегирование переносит полномочия проверки с «аппаратного обеспечения» на «социальную координацию» (безопасность + живучесть). Взяточничество/агрегирование делегирования становится самым дешевым вектором атаки.

Честно говоря, не уверен, как это меняет модель безопасности. Существует то же предположение BFT, что> 2/3 хостов честны, в том числе и с точки зрения взяточничества. Если мы предположим, что злоумышленник может подкупить честное сверхбольшинство, тогда он сможет подкупить их и во время проверки PoC без делегирования, я что-то упускаю?

Тупик «холодного старта»/структурное вето со стороны действующих компаний

Отказ делегировать полномочия после льготного периода приведет к штрафу в виде вознаграждения в виде биткойнов. Это создает стимул для крупных хостов делегировать

Задержка отзыва/реакции по-прежнему является задачей TODO.

Эпоха сейчас составляет около 24 часов. Я думал о случае, когда в середине эпохи N хост A понимает, что хост B пытается обмануть. А затем он пытается отозвать делегирование, чтобы его вес не использовался при голосовании за веса эпохи N+1. Я предполагаю, что делегирование для всей эпохи N получается во время начала эпохи N. В основном вопрос заключается в том, когда делегировать снимки или разрешать динамические изменения.

gmorgachev avatar
gmorgachevMaintainerMaintainer
2026-04-02
Необходимо пояснение: делегирование «расходов» против «репликации» после того, как p_from делегирует p_to для group_i, теряет ли p_from какое-либо прямое влияние на голосование/проверку в этой группе на эпоху?

По моему мнению, p_from должен иметь возможность либо делегировать свой вес в group_i, либо голосовать самостоятельно в group_i. Поэтому, если он делегировал полномочия, он не может голосовать, а также не может иметь MLNode в этой группе. Если p_from решит развернуть MLNode в group_i, он отменит все проверки в group_i.

влияет ли делегирование только на групповое голосование по проверке или на вес глобального управления/производства блоков?

Делегирование влияет только на проверку PoC внутри определенной группы. Вес блока, вес управленческого решения и вес, используемый для вознаграждения или распределения задач, не затрагиваются.

Делегирование происходит по ключу (p_from, p_to, model_id), отдельно по каждой модели.

Масштабируемость: проверку O(G · N^2) трудно считать устойчивой.

Просто чтобы уточнить: вопрос в сложности проверки PoC или в самой цепочке? Если о цепочке

Даже если пропускная способность в порядке, проверка подписи ЦП, обработка состояния, повторные попытки и восстановление вилки, скорее всего, станут узким местом — особенно в окнах продолжительностью 2–10 минут.

Само производство цепочек/блоков не зависит от количества модельных групп. Все эти данные используются в одной основной сети. Таким образом, почти нет изменений в повторных попытках, восстановлении вилки и т. д. из-за многомодельного PoC (пара новых полей в существующих транзакциях MsgPoCV2StoreCommit, MsgMLNodeWeightDistribution и MsgSubmitPocValidationsV2).

Если о проверке PoC

В обновлении v0.2.10 появился механизм на основе слотов https://github.com/gonka-ai/gonka/blob/main/proposals/poc/optimize.md. Он позволяет изменить сложность на O(G * N * N_SLOTS) с рекомендуемым N_SLOTS=128.

Механизм можно активировать голосованием по параметрам, без апгрейда.

Существует также случайная выборка артефактов PoC для проверки, этот механизм уже активен.

gmorgachev avatar
gmorgachevMaintainerMaintainer
2026-04-02
«Независимое оборудование для каждой группы» сегодня выглядит мягким требованием.

Вы имеете в виду часть?

..где процедура POC происходит без повторного развертывания, для каждой модели независимо

Я думаю, что нет необходимости предъявлять какие-либо реальные требования к конкретному оборудованию. Процедура PoC происходит для всех моделей одновременно. Таким образом, если хост может отправлять артефакты для модели A и модели B в одном и том же PoC, и эти артефакты проверяются другими хостами, он предполагает, что у этого хоста есть оборудование для развертывания обеих моделей. С моей точки зрения, не так уж важно, если одно и то же оборудование представлено в разных группах, поскольку его вычислительная мощность / ресурсы VRAM также будут разделены между группами. Таким образом, от таких действий не будет никакой выгоды, просто участие в обеих группах, что хорошо для безопасности.

gmorgachev avatar
gmorgachevMaintainerMaintainer
Ограничение (Приложение A) не полностью решает проблему группового захвата/справедливости. Ограничение ограничивает влияние новой группы на глобальный консенсусный вес (инфляция/внезапное доминирование), но не останавливает групповой захват, например скоординированное голосование, чтобы признать честных участников недействительными или монополизировать доход от вывода популярной новой модели. Ограничение также зависит от веса, полученного в других зрелых группах → сильная зависимость от пути/преимущество действующего оператора (новые участники структурно ограничены, даже если они лучше всех работают в новой модели). Просьба: уточнить, какое ограничение предназначено для смягчения (глобальное поглощение или захват на уровне группы), и рассмотреть дополнительные механизмы для корректности/справедливости на уровне группы (оспорение/апелляция, сокращение, возможность проверки и т. д.).

Основной механизм ограничения группового доминирования – использование общего консенсусного веса в знаменателе. Итак, если общий вес цепочки равен 1000 (из всех групп), чтобы пройти проверку внутри group_i, хост должен быть одобрен хостами с весом голосования > 666 (в исходном тексте это было 50%, это была моя ошибка, цепочка уже использует 2/3). Итак, подавляющее большинство из всей цепочки подтвердило артефакты PoC / делегировало свои голоса PoC.

Вы имеете в виду какую-то конкретную групповую локальную атаку захвата?

gmorgachev avatar
gmorgachevMaintainerMaintainer
2026-04-02

Про TEE есть отдельная ветка, где я полностью согласен с его необходимостью :) #951 (https://github.com/gonka-ai/gonka/discussions/951)

unameisfine avatar
2026-04-20

Обзор уровня реализации текущей базы кода

Общее руководство и анализ безопасности, проведенный @jacky6block (https://github.com/jacky6block), надежны. Я рассмотрел текущую реализацию PoC, чтобы выявить конкретные пробелы, которые необходимо устранить в предложении. Они дополняют уже поднятые проблемы делегирования/масштабирования.

1. Хранение веса для каждой модели не поддерживается текущей моделью данных.

MLNodeInfo.poc_weight — это плоский int64 без контекста модели (activeparticipants.proto:58). Родительский EpochGroupData поддерживает подгруппы через sub_group_models ( epoch_group_data.proto:19 ), но состояние подгруппы находится только в памяти — epoch_group.go:111 хранит их в карте [string]*EpochGroup, которая перестраивается во время выполнения и никогда не сохраняется в цепочке.

Для многомодельного PoC каждому участнику необходим вес для каждой модели, который выдерживает перезапуск и доступен для запроса валидаторами. Два варианта:

  • Расширьте MLNodeInfo полем model_id и сохраните отдельные записи для каждой модели.
  • Создайте новую коллекцию в цепочке с ключом (эпоха, model_id, участник) -> poc_weight.

Второй более чистый — он позволяет избежать раздувания ActiveParticipant.ml_nodes[] (который уже повторяется в нескольких горячих путях, таких как model_assignment.go и epoch_group.go:55-78 ) и позволяет независимое сокращение для каждой модели.

2. Спор о параллельном PoC-графическом процессоре недостаточно конкретизирован

В предложении говорится, что «PoC работает одновременно во всех подходящих группах в одну и ту же эпоху». В настоящее время фазы эпохи являются последовательными: ГЕНЕРАЦИЯ -> ПРОВЕРКА -> ВЫВОД (types/params.go:165-183, продолжительность в блоках). Брокер назначает каждый графический процессор ровно одной модели во время PoC ( model_assignment.go ).

С M одновременными PoC:

  • Каждому хосту требуются отдельные графические процессоры для каждой модели — это признается («требуется отдельное оборудование для каждой группы»), но у брокера нет механизма для разделения графических процессоров по задачам PoC. StartPoCNodeCommandV2 нацелен на одну модель для каждого узла ( node_worker_commands.go:196-210 ).
  • Окно проверки масштабируется с помощью M — WeightCalculator (chainvalidation.go:44-192) обрабатывает проверки последовательно для каждого участника. При использовании моделей M x N задержка проверки растет линейно. Текущее PocValidationDuration = 6 блоков (~ 1 минута) может быть слишком коротким.
  • Ухудшение вывода во время PoC — в предложении говорится, что проверка и вывод могут выполняться параллельно, но когда все графические процессоры заняты M параллельными PoC, пропускная способность вывода падает до нуля на этапе PoC.

Предложение: рассмотрите поэтапный PoC — каждая модель выполняет свой PoC в другом диапазоне блоков в пределах эпохи. Это позволяет избежать конфликтов между графическими процессорами и соответствует существующей модели последовательных фаз.

3. Консенсус Коэффа, цикличность управления

В предложении консенсусKoeff_i определяется как параметр управления. Но количество голосов в управлении = вес консенсуса = f(consensusKoeff). Группа, члены которой имеют консенсусный вес большинства, может проголосовать за увеличение своего собственного консенсусаKoeff, что еще больше концентрирует власть.

Ограничение в Приложении A (ограничение веса по весу участников в других группах) частично смягчает это для новых групп, но не касается исходной группы (group_Qwen3-235B-FP8 явно освобождается от ограничения).

Предложение: Ограничить диапазон консенсусаKoeff для каждой модели (например, [0,5, 2,0] относительно базового уровня) и потребовать сверхбольшинства (67%) для изменений, что соответствует порогу BFT, уже используемому для консенсуса.

4. PoC подтверждения не адресован

Предложение охватывает основной PoC, но не упоминает PoC подтверждения (confirmation_poc_v1.go:10-63). cPoC запускается на этапе вывода для проверки наличия оборудования на узлах — это важно для жизнеспособности.

С мультимоделью:

  • Должен ли cPoC проверять все модели, которые, по утверждению хоста, они обслуживают? Это умножает нагрузку cPoC на G (количество групп).
  • Или только модель, которая в данный момент выводится на этом хосте? Тогда хосты, обслуживающие модели с низким спросом, полностью пропускают cPoC.
  • Текущий cPoC использует ConfirmationWeight из EpochGroupData ( epoch_group_data.proto:47 ) — одно поле, а не для каждой модели.

Это требует четкого проектирования — cPoC — это защита от хостов, которые передают основной PoC, а затем освобождают оборудование.

5. Распределение вознаграждения за урегулирование между группами

Предложение определяет консенсусWeight(p) = sum(consensusKoeff_i * pocWeight(group_i, p)) для силы консенсуса, но не определяет, как вознаграждения в стиле биткойнов (основной экономический стимул) распределяются между группами.

Текущий расчет ( bitcoin_rewards.go ) распределяет вознаграждения пропорционально глобальному весу с ограничением веса подтверждения. С мультимоделью:

  • Объединяются ли вознаграждения глобально и распределяются ли они по совокупному консенсусному весу? Тогда хосты в группах с высоким консенсусом по Коэффу зарабатывают непропорционально.
  • Или сначала разделить по группам, а затем распределить внутри группы? Затем нам нужно определить коэффициент разделения (по консенсусу Коэфф? по требованию вывода?).

Это имеет серьезные экономические последствия — оно определяет, жизнеспособно ли размещение нишевой модели по сравнению с тем, чтобы все стремились к модели с самым высоким коэффициентом.

Конкретный путь реализации (предложение)

Учитывая сложность, поэтапное внедрение кажется практичным:

Фаза 1 может осуществляться независимо и полезна даже без делегирования — она позволяет отслеживать вес каждой модели, чего в сети сейчас нет.

Будем рады помочь с обзором реализации или созданием прототипа любой из этих областей.

Оригинал
gmorgachev avatar
gmorgachevMaintainerАвтор
2026-02-25

Proposal: Multi-Model PoC

POC procedure is short term benchmark to compare how much compute each host has. It happens 1 time per epoch to define weight per each host which then used as consensus weight to produce blocks and for distributing tasks between hosts. Additionally there is Confirmation (random) POC which is used to confirm weight when network is underloaded by inference (to make sure hardware it still there).

POC phases:

GENERATION (blocks equal to 1-5 min)

VALIDATION (blocks equal to 2-10 min)

INFERENCE PHASE (no POC but sometime might be interrupted to Confirmation POC)

Validation and inference theoretically can be done in parallel.

Current security model required >50% of total network consensus weight to vote "valid". Without delegation, an attacker needs >50% of total network weight to corrupt any (and all) host's validation.

The bitcoin-style part of reward distributed proportionally to this weight. On early phase it's main motivation as inference is much cheaper.

Problem

The chain must support multiple models.

Currently the chain can’t support multiple models because we have single-model PoC

Why can’t we support multiple models with single-model PoC?

If we serve multiple models with current single-model PoC, that means that you need to redeploy a model before each cPoC. And if you can do that - you can use this time to deploy models on new nodes. Which essentially opens the network for attack when attacker deploy hardware only for POC phase Why do we need cPoC at all?

Because a) we want to make sure that if the network load is low - compute is still there b) until the quality of benchmarking hardware by the users’ inference itself is high enough Thus the option of redeploying models for PoC vs inference can’t be used and we need to figure out how to support different models during PoC and cPoC.

Proposal

Let's try to build a system which supports several models simultaneously where POC procedure happens without re-deploy, for every model independently. Such different POCs correspond to quite different compute power (essentially they would measure not raw compute power but how "optimal" the configuration is for specific hardware). As POC is not only a source of the weight for task distribution across a specific model but also a way to define the consensus weight, we need to define how to aggregate weights from different POCs and how to validate each POC's results.

For aggregation, the chain would have to define how valuable each POC's weight is to the chain. Coefficients converting POC weight to consensus weight can be defined as governance parameters by direct voting. They can be defined in a way that bigger, more powerful and more popular models would bring more weight. As the newest hardware is also optimized for serving top-tier models (a lot of VRAM, fast cross-gpu connection, FP4/FP8 support, etc.), it would naturally incentivize hosts to switch newer GPUs to the most powerful models, to get more weight per $. It's important for the chain's growth to make serving best models (which require most optimized GPUs) most profitable.

This proposal sets the goal to maintain same style of POC validation - every host validates every other host (or its probabilistic analogy for case of slots). One approach to achieve that would be to enforce each host to participate (have hardware) in each model. But such approach is impractical and would raise the hardware requirements too much. To avoid that, the proposal introduces PoC delegation from a host to another host it trusts. Such delegation allows to maintain the property of validation by majority of consensus power (but for sure introduces new security assumption, more about it in Appendix A).

To define the process of adding new models to the chain, this proposal allows serving models which are not approved by governance, without inference validation and without gaining consensus power from serving such models. It also defines the process how a model approved by governance becomes eligible for consensus weight.

Warning : This proposal assumes the O(N^2) validation model (>50% weight threshold). Slot-based validation is out of scope. Most probably slot-based approach will work the same way, with independent slot assigning in each group. But it must be double-checked whether to use $votingPower$ or $consensusWeight$ for hosts in group.

Terms

Let epoch $S$ be current. The following defines weight computation for epoch $S+1$ . Pre-eligibility ( $PreE_{S+1}$ ) is determined $N$ blocks before epoch $S+1$ PoC starts. In this section, $*_S$ denotes values from epoch $S$ and used as inputs for epoch $S+1$ . Group membership and delegation are evaluated at the pre-eligibility cutoff and treated as fixed for the epoch.

  • $group_i$ — model group for model $i$ (members are hosts with MLNodes serving model $i$ ). Network supports $M$ models on-chain.

$group_i$ — model group for model $i$ (members are hosts with MLNodes serving model $i$ ). Network supports $M$ models on-chain.

  • $pocWeight_S(group_i, p)$ — weight of host $p$ in $group_i$ at epoch $S$ . Equals the number of nonces computed by $p$ in PoC procedure for this group and successfully validated. Local weight within the group.

$pocWeight_S(group_i, p)$ — weight of host $p$ in $group_i$ at epoch $S$ . Equals the number of nonces computed by $p$ in PoC procedure for this group and successfully validated. Local weight within the group.

  • $consensusKoeff_i$ — coefficient converting $pocWeight$ in $group_i$ to consensus weight. Defined by governance per model.

$consensusKoeff_i$ — coefficient converting $pocWeight$ in $group_i$ to consensus weight. Defined by governance per model.

  • $consensusWeight_S(p) = \sum_{i: group_i \in E_S} consensusKoeff_i \times pocWeight_S(group_i, p)$ — (see Appendix A for cap protection)

$consensusWeight_S(p) = \sum_{i: group_i \in E_S} consensusKoeff_i \times pocWeight_S(group_i, p)$ — (see Appendix A for cap protection)

  • $members(group_i) = \lbrace p : p \text{ has MLNode deployed for model } i \rbrace$ — hosts with MLNode deployed for the model

$members(group_i) = \lbrace p : p \text{ has MLNode deployed for model } i \rbrace$ — hosts with MLNode deployed for the model

  • $hosts_S(group_i) = \lbrace p : consensusWeight_S(p) > 0 \text{ and } p \in members(group_i) \rbrace$ Members with non-zero consensus weight. The weight may come from any eligible group, not necessarily $group_i$ .

$hosts_S(group_i) = \lbrace p : consensusWeight_S(p) > 0 \text{ and } p \in members(group_i) \rbrace$

Members with non-zero consensus weight. The weight may come from any eligible group, not necessarily $group_i$ .

  • $PreE_{S+1}$ — set of pre-eligible groups for epoch $S+1$ . A group $group_i \in PreE_{S+1}$ if conditions 1-3 hold: Model $i$ is approved by governance with defined $consensusKoeff_i$ $\sum_{p \in members(group_i)} consensusWeight_S(p) \geq W_{threshold} \times \sum_{p} consensusWeight_S(p)$ $|hosts_S(group_i)| \geq V_{min}$

$PreE_{S+1}$ — set of pre-eligible groups for epoch $S+1$ . A group $group_i \in PreE_{S+1}$ if conditions 1-3 hold:

Model $i$ is approved by governance with defined $consensusKoeff_i$

$\sum_{p \in members(group_i)} consensusWeight_S(p) \geq W_{threshold} \times \sum_{p} consensusWeight_S(p)$

$|hosts_S(group_i)| \geq V_{min}$

  • $E_{S+1}$ — set of consensus-eligible groups for epoch $S+1$ . A group $group_i \in E_{S+1}$ if: $group_i \in PreE_{S+1}$ At least $V_{min}$ hosts in the group pass PoC validation at epoch $S+1$ (see validation rule below)

$E_{S+1}$ — set of consensus-eligible groups for epoch $S+1$ . A group $group_i \in E_{S+1}$ if:

$group_i \in PreE_{S+1}$

At least $V_{min}$ hosts in the group pass PoC validation at epoch $S+1$ (see validation rule below)

  • $W_{threshold}$ — minimum fraction of total network consensus weight required for group eligibility (governance parameter)

$W_{threshold}$ — minimum fraction of total network consensus weight required for group eligibility (governance parameter)

$V_{min}$ — minimum number of hosts with non-zero consensus weight required in a group (governance parameter)

$V_{min}$ — minimum number of hosts with non-zero consensus weight required in a group (governance parameter)

  • Currently $group_{Qwen3-235B-FP8}$ is the only eligible group (single-model PoC). This proposal extends to multiple groups.

Currently $group_{Qwen3-235B-FP8}$ is the only eligible group (single-model PoC). This proposal extends to multiple groups.

  • The initial group ( $group_{Qwen3-235B-FP8}$ ) is exempt from the weight cap (Appendix A) and provides base consensus weight for validating new groups.

The initial group ( $group_{Qwen3-235B-FP8}$ ) is exempt from the weight cap (Appendix A) and provides base consensus weight for validating new groups.

  • A host participating in multiple eligible groups requires separate hardware per group. PoC runs concurrently across all eligible groups within the same epoch.

A host participating in multiple eligible groups requires separate hardware per group. PoC runs concurrently across all eligible groups within the same epoch.

  • $delegation_S(group_i, p_{from}, p_{to})$ — consensus weight delegated from host $p_{from}$ to host $p_{to}$ for validation in $group_i$ at epoch $S$ . Host $p_{from} \notin members(group_i)$ ; host $p_{to} \in members(group_i)$ . Delegation is set before epoch start; changes during an epoch take effect from the next epoch.

$delegation_S(group_i, p_{from}, p_{to})$ — consensus weight delegated from host $p_{from}$ to host $p_{to}$ for validation in $group_i$ at epoch $S$ . Host $p_{from} \notin members(group_i)$ ; host $p_{to} \in members(group_i)$ . Delegation is set before epoch start; changes during an epoch take effect from the next epoch.

  • $r_{delegation}$ — fraction of bitcoin-style reward delegator shares with delegate (governance parameter, e.g., 1%, per each group??)

$r_{delegation}$ — fraction of bitcoin-style reward delegator shares with delegate (governance parameter, e.g., 1%, per each group??)

  • $r_{refusal}$ — fraction of bitcoin-style reward sent to governance when host explicitly refuses to participate in a group; must be > $r_{delegation}$ (governance parameter, e.g., 5%, per each group??)

$r_{refusal}$ — fraction of bitcoin-style reward sent to governance when host explicitly refuses to participate in a group; must be > $r_{delegation}$ (governance parameter, e.g., 5%, per each group??)

  • $r_{penalty}$ — fraction of bitcoin-style reward lost when host fails to make a participation choice for any governance-approved group (governance parameter, target 100%)

$r_{penalty}$ — fraction of bitcoin-style reward lost when host fails to make a participation choice for any governance-approved group (governance parameter, target 100%)

  • $T_{grace}$ — grace window duration after governance approval before penalties apply (governance parameter, e.g., 3 epochs)

$T_{grace}$ — grace window duration after governance approval before penalties apply (governance parameter, e.g., 3 epochs)

  • $votingPower_S(group_i, p) = consensusWeight_S(p) + \sum_{p_{from}} delegation_S(group_i, p_{from}, p)$ — total validation voting power of host $p$ in $group_i$ Delegation constraints: $delegation_S(group_i, p_{from}, p_{to}) \ge 0$ and, for each $(group_i, p_{from})$ , $\sum_{p_{to}} delegation_S(group_i, p_{from}, p_{to}) \le consensusWeight_S(p_{from})$ .

$votingPower_S(group_i, p) = consensusWeight_S(p) + \sum_{p_{from}} delegation_S(group_i, p_{from}, p)$ — total validation voting power of host $p$ in $group_i$

Delegation constraints: $delegation_S(group_i, p_{from}, p_{to}) \ge 0$ and, for each $(group_i, p_{from})$ , $\sum_{p_{to}} delegation_S(group_i, p_{from}, p_{to}) \le consensusWeight_S(p_{from})$ .

Q1: Can a host split delegation across multiple hosts in the same group?

Eligible Groups

Weight computed in PoC procedure for eligible model groups contributes to total consensus weight via governance-defined coefficient. Consensus weight determines:

Block signing power

Governance voting power

PoC validation voting power

Bitcoin-style reward distribution (proportional to consensus weight)

Within a group, inference requests are distributed according to $pocWeight_S(group_i, p)$ . Inference rewards follow the same distribution.

PoC Validation

Delegation : Hosts not in a group can delegate their consensus weight to a host who is. The delegate votes on their behalf. Delegation is per-group and set before epoch start.

Validation rule : Host $p$ 's PoC result in eligible $group_i$ is accepted if:

$$\frac{\sum_{v \text{ votes valid for } p} votingPower_S(group_i, v)}{\sum_{q} consensusWeight_S(q)} > \frac{1}{2}$$

Numerator: sum of $votingPower_S(group_i, v)$ from all validators $v$ who approved $p$

Denominator: total network consensus weight (all hosts, all groups)

Hosts not in the group and not delegating effectively vote against approval. Delegation is therefore essential for any group whose direct members hold less than 50% of total network weight.

Voting power details :

Number of MLNodes does not matter -- 1 MLNode or 100 MLNodes yields the same vote power

Delegation changes take effect from next epoch

Trust model : Delegator trusts the delegate to vote correctly.

TODO : Mechanism to revoke delegation mid-epoch if delegate votes maliciously.

Mandatory Group Participation & Incentive

Every host with consensus weight must actively participate in every governance-approved group. For each group, the host chooses one of:

Join group — deploy hardware and participate directly in the group

  • Delegate — delegate voting power to a group member; delegator shares $r_{delegation}$ with delegate, incentivizing group members to build trust

Explicit refusal — decline to delegate or join; costs $r_{refusal}$ ; must be renewed each epoch

During the grace window ( $T_{grace}$ epochs after governance approval), hosts must make a participation choice but there is no penalty for any choice. After the grace window ends, penalties apply: hosts who didn't make a choice lose $r_{penalty}$ of their bitcoin-style reward.

This incentivizes >50% of total consensus weight to participate in PoC validation for every governance-approved group.

Unregistered Models

Any host can add a model to the chain and serve inference without governance approval (with additional fees).

Properties:

No inference validation by other hosts

Price set directly by host

Requests sent directly to host

Host stores payload locally but no cross-validation

Each GNK payment has fee sent to governance

No bitcoin-style rewards

Purpose: build demo-case for governance proposal to show demand for the model.

Model Lifecycle

Unregistered phase — host adds model, serves inference directly to users, builds demo-case for governance proposal

Governance proposal — model approved with defined $consensusKoeff_i$ , group created

  • Grace window ( $T_{grace}$ epochs) — mandatory participation rules apply but without penalties; hosts make participation choices (join/delegate/refuse); PoC runs for the group
  • After grace window — penalties apply ( $r_{penalty}$ , $r_{delegation}$ , $r_{refusal}$ ); eligibility still depends on meeting conditions ( $W_{threshold}$ , $V_{min}$ , passing PoC validation)

A governance-approved group may or may not be eligible in any given epoch depending on whether it meets eligibility conditions.

Implementation

[To be defined]

Appendix A: Delegation-based Attack and Protection

Attack: Host accumulates >50% $votingPower$ via delegation, validates fake participant claiming large weight, gains consensus control.

Protection option: Cap weight from each group by members' proven weight elsewhere.

$$\text{consensus weight from } group_i \leq f \times \sum_{p \in members(group_i)} \text{(}p\text{'s consensus weight from other eligible groups)}$$

If a group's raw PoC weight exceeds the cap, scale all members proportionally to fit.

For clarity: "other eligible groups" refers to consensus weight already earned from eligible groups excluding $group_i$ itself (i.e., using $consensusWeight_S$ contributions from $E_S \setminus \lbrace group_i \rbrace$ ), to avoid circular dependence.

Initial group exempt (no cap)

$f$ is a governance parameter

Delegation affects $votingPower$ but not the cap (cap is PoC-weight-based)

This bounds the damage from fake participants: even if they pass validation, their weight contribution is limited by real members' stake in other groups. The cap is a secondary defense; validation (>50% of network weight) remains the primary one.

Q5: What should $f$ be?

tcharchian avatar
tcharchianMaintainerMaintainer
2026-02-27

Please consider joining the discussion on this proposal and sharing any ideas or suggestions. An initial version will be provided by the proposal author, and feedback from participants will help refine the approach and clarify next steps.

akup avatar
akupMaintainerMaintainer

Questions

  • When host A delegates it's vote to host B in another model group, it adds the voting power to host B. But why it is not reducing voting power of host A?

When host A delegates it's vote to host B in another model group, it adds the voting power to host B. But why it is not reducing voting power of host A?

  • If some host A trusts host B it seams that they are already in the trust group and have communication and can agree on joint actions. Actually what is the difference if it was one host?

If some host A trusts host B it seams that they are already in the trust group and have communication and can agree on joint actions. Actually what is the difference if it was one host?

  • How participant can choose to what host delegate it's weight? How it could be practically coordinated? It would be more clear if there will be real world example with a step by step plan: if there is a new model, and there are new hosts who want to run it, how do they start? How they are getting delegation, how hosts from other groups starting to know that they need to delegate and how they can decide what host to choose to delegate it's vote to?

How participant can choose to what host delegate it's weight? How it could be practically coordinated? It would be more clear if there will be real world example with a step by step plan: if there is a new model, and there are new hosts who want to run it, how do they start? How they are getting delegation, how hosts from other groups starting to know that they need to delegate and how they can decide what host to choose to delegate it's vote to?

  • How many hosts should run the model to start group working. For example if there is just 2 hosts will they get the reward? If there are 3 hosts? Form what number of hosts we can trust the group (seems to be related to Q5 question)

How many hosts should run the model to start group working. For example if there is just 2 hosts will they get the reward? If there are 3 hosts? Form what number of hosts we can trust the group (seems to be related to Q5 question)

  • How following scenario can be avoided? New grace period begins. Attacker creates multiple hosts that are going to participate with the model Participants from other groups, as they don't know personally to whom delegate the vote, delegate it to "random someone" Also attacker delegates his votes (from multiple hosts) to his hosts in a new group. And attacker gets the control of the group

How following scenario can be avoided? New grace period begins. Attacker creates multiple hosts that are going to participate with the model Participants from other groups, as they don't know personally to whom delegate the vote, delegate it to "random someone" Also attacker delegates his votes (from multiple hosts) to his hosts in a new group. And attacker gets the control of the group

  • Isn't it simpler to have a new model seed (genesys) group? For example, hosts that already have voting power can run some of their mlnodes with new model and get additional reward for participating in early start of the new model group. They help to start the new model group (as they have resources and are interested in network development) as they already have the voting power, but there will no be all difficulties (that are not only technical but also real-life practical) of delegation.

Isn't it simpler to have a new model seed (genesys) group? For example, hosts that already have voting power can run some of their mlnodes with new model and get additional reward for participating in early start of the new model group. They help to start the new model group (as they have resources and are interested in network development) as they already have the voting power, but there will no be all difficulties (that are not only technical but also real-life practical) of delegation.

p.s. Unregistered Models is a very good point

gmorgachev avatar
gmorgachevMaintainerMaintainer
2026-04-02
But why it is not reducing voting power of host A? host A doesn't have voting power in this model group, it can't be reduces. host A can either has MLNode with this model or delegate its PoC validation important: it's doesn't affect consensus weight of any hosts
If some host A trusts host B it seams that they are already in the trust group and have communication and can agree on joint actions. Actually what is the difference if it was one host? In my understanding host A can delegate to well known hosts with great reputation on mainnet. So they don't have to really know each other but host A must trust host B incentive to act honest. I think the joining nodes is much closer :)
How many hosts should run the model to start group working. For example if there is just 2 hosts will they get the reward? If there are 3 hosts? Form what number of hosts we can trust the group (seems to be related to Q5 question) I don't think any validation can happen with less then 3 hosts. But we also must have limitation on the total consensus weight of this this model group participants. I think it should not be less then at least 5-10% of the network (if talk about today's size)
How following scenario can be avoided? From my perspective it should be combination of limits on:

minimal consensus power from another group which hosts must have for group to be eligible (5-10%+)

cap on the weight which single group might have (to avoid getting control of the whole chain)

I agree that delegation to "random someone" is serious concern and mechanism relies on the fact that host must make informed decision about delegation. Do you have some additional ideas how to protect in mind?

Isn't it simpler to have a new model seed (genesys) group? For example, hosts that already have voting power can run some of their mlnodes with new model and get additional reward for participating in early start of the new model group. They help to start the new model group (as they have resources and are interested in network development) as they already have the voting power, but there will no be all difficulties (that are not only technical but also real-life practical) of delegation.

I don't see how it would help to avoid delegation. The question is what consensus weight will have such group. If only their weight counts, with current limit such seed group must control > 2/3 of the total network power for PoC to pass. Which is impossible If PoC inside this new group will be counted only from weight of participants - such early seed nodes can also easily cheat.

In the original proposal the initial seed group is still existing validators with some threshold on their total weight. Delegation just allows to make this threshold lower then 2/3

gmorgachev avatar
gmorgachevMaintainerMaintainer
2026-04-02

Sorry, i used 2/3 instead of 50% in the comment as found out that mainnet already uses 2/3 as the threshold

andrey055 avatar
2026-03-03

The proposal to test new models without a Bitcoin-style reward is very strong.

I would really like to see it implemented. Of course, there are certain concerns — for example, the risk that a host could discredit the network by deploying an incorrectly configured model, such as one with a reduced context window.

I hope appropriate safeguards against this will be put in place.

jacky6block avatar
2026-03-04

Thanks for writing this up — the high-level direction (multi-model PoC w/o redeploy; per-model PoC weights aggregated into consensus weight) makes sense. After reading the whole proposal + Appendix A, I think there are a few high-risk gaps and several must-clarify items before this feels safe / implementable.

1) Delegation shifts validation power from “hardware” to “social coordination” (security + liveness)

Bribery / delegation aggregation becomes the cheapest attack vector

When a new group’s native members hold far less than the >50% global threshold, delegation becomes the only practical path to pass PoC validation during cold-start. In that regime, an attacker may be able to acquire majority votingPower by bribing / incentivizing a small number of high- consensusWeight delegators — potentially much cheaper than provisioning equivalent hardware.

Cold-start deadlock / structural veto by incumbents

Because “valid” requires >50% of global consensusWeight , a new model group can get stuck if large-weight hosts don’t actively delegate (apathy, coordination costs, or strategic refusal). This effectively gives incumbents a veto and makes onboarding new models depend heavily on off-chain coordination.

Revocation / reaction latency is still a TODO

The proposal mentions the need to revoke delegation mid-epoch, but it’s not specified how:

delegators detect delegatee misbehavior fast enough (PoC windows are minutes),

revocation becomes effective within the same epoch ,

  • losses are handled if detection happens after the validation window.

2) Clarification needed: delegation “spending” vs “replication”

In the current definition of votingPower(group_i, p) (additive with delegated amounts), it’s easy to interpret delegation as adding weight on top of the delegatee without clearly “removing” it from the delegator’s effective budget inside that group.

Request: please explicitly define delegation semantics as a group-specific transfer of validation budget (not replication) . Concretely:

  • once p_from delegates to p_to for group_i , does p_from forfeit any direct voting/validation influence in that group for the epoch?

does delegation affect only group validation voting, or also global governance / block production weight?

My suggestion would be: delegation should be scoped to group validation only (no change to global block production / governance weight), and should be modeled as non-double-spendable budget inside the group.

Also, please clarify what “non-participation is effectively a no vote” means in the math: is it abstain counted via denominator, abstain excluded, or simply absent from numerator while denominator remains global total?

3) Scalability: O(G · N^2) validation is hard to see as sustainable

Keeping O(N^2) validation per group becomes O(G·N^2) when multiple eligible groups run in parallel. Even if bandwidth is okay, CPU sig verification, state handling, retries, and fork recovery will likely bottleneck — especially in 2–10 minute windows.

Also “PoC/validation and inference can run in parallel” needs a concrete resource isolation / priority story. Even with separate GPUs per group, network + CPU contention can still degrade inference latency/UX.

Request: outline either:

a concrete scalability plan (sampling/batching/quotas) that preserves the >50% semantics, or

  • why O(G·N^2) is acceptable under realistic target N and G.

4) Cap (Appendix A) doesn’t fully address group-local capture / fairness

Cap limits a new group’s impact on global consensus weight (inflation / sudden dominance), but it doesn’t stop group-local capture , e.g. coordinated voting to mark honest participants invalid or monopolize inference revenue for a popular new model.

Cap also depends on weight earned in other mature groups → strong path dependence / incumbent advantage (new entrants are structurally capped even if they’re best on the new model).

Request: clarify what cap is intended to mitigate (global takeover vs group-local capture), and consider extra mechanisms for group-local correctness/fairness (challenge/appeal, slashing, auditability, etc.).

5) “Independent hardware per group” looks like a soft requirement today

Without a verifiable attestation mechanism (TEE / hardware fingerprints / vendor attestation), the “independent hardware per eligible group” requirement is technically unenforceable. Actors could potentially use virtualization (vGPU) or scheduling tricks to appear in multiple groups from the same physical hardware.

Request: should we treat this as a best-effort policy rather than a security pillar (and say so explicitly), or introduce some form of hardware spec registration / attestation / auditing?

6) Optional improvement directions (appendix-level, but worth discussing)

  • Slot-based / VRF sampling validation: Given O(G·N^2), consider VRF-based per-group validator sampling with quantitative security analysis (failure probability vs adversarial weight, sample size).
  • Strengthen unregistered phase as an observation period: use real GNK demand signals (revenue + distinct payers + dispute/refund rates) to constrain/recommend consensusKoef instead of purely governance discretion (needs anti-wash-trading / anti-sybil guardrails).
  • Hardware attestation roadmap: even if not ready now, discuss whether platform attestation (TEE/SEV/TPM) or vendor attestation can reduce cross-group hardware reuse.

Happy to help refine parameters (W_threshold, V_min, T_grace, f) or propose sampling sizes / threat-model math. IMO the critical path items are: delegation semantics + cold-start/liveness + a scalability plan .

gmorgachev avatar
gmorgachevMaintainerMaintainer
Delegation shifts validation power from “hardware” to “social coordination” (security + liveness) Bribery / delegation aggregation becomes the cheapest attack vector

To be honest not sure how it changes the security model. There is same BFT assumption that >2/3 of hosts are honest, in terms of bribery too. If we assume that attacker can bribe honest supermajority, then they would be able to bribe them during PoC validation without delegation too, am i missing smth?

Cold-start deadlock / structural veto by incumbents

Refusal to delegate after the grace period would lead to penalty on bitcoin-style reward. Which creates incentive for big hosts to delegate

Revocation / reaction latency is still a TODO

The epoch now is about 24hours. I was thinking about the case when in the middle of epoch N host A understands that host B tries to cheat. And then it tries to revoke delegation so it's weight will not be used during voting for epoch N+1 weights. I assume that delegation for whole epoch N are obtained on the time of epoch N's start. The question is mostly when to snapshot delegation or allow dynamic changes

gmorgachev avatar
gmorgachevMaintainerMaintainer
2026-04-02
Clarification needed: delegation “spending” vs “replication” once p_from delegates to p_to for group_i, does p_from forfeit any direct voting/validation influence in that group for the epoch?

In my opinion p_from must be able to either delegate its weight in group_i OR vote by itself in group_i. So if it delegated - it can't vote and also can't have MLNode in that group. If p_from decides to deploy MLNode in group_i, it'll cancel all its validation in group_i

does delegation affect only group validation voting, or also global governance / block production weight?

Delegation affects only PoC validation inside certain group. Block production weight, governance decision weight and weight used for reward or tasks distribution are not affected

Delegation happens by key (p_from, p_to, model_id), separately per each model

Scalability: O(G · N^2) validation is hard to see as sustainable

Just to clarify, the question is about PoC validation complexity or about chain itself? If about chain

Even if bandwidth is okay, CPU sig verification, state handling, retries, and fork recovery will likely bottleneck — especially in 2–10 minute windows.

Chain / block production itself doesn't depends on amount of model groups. All this data are used in the same mainnet. So there is almost no changes in retries, fork recovery, etc due to multi-model PoC (couple new fields in existing transactions MsgPoCV2StoreCommit , MsgMLNodeWeightDistribution and MsgSubmitPocValidationsV2 )

If about PoC validation

There were slot-based mechanism which were released in v0.2.10 upgrade https://github.com/gonka-ai/gonka/blob/main/proposals/poc/optimize.md It allows to change complexity to O(G * N * N_SLOTS), with recommended N_SLOTS=128

The mechanism can be activated by voting for parameters, without upgrade

There is also random sampling of PoC artifacts to validate, that mechanism is already active

gmorgachev avatar
gmorgachevMaintainerMaintainer
2026-04-02

“Independent hardware per group” looks like a soft requirement today

Are you reference to part?

..where POC procedure happens without re-deploy, for every model independently

I think there is no need in any real requirements for specific hardware. The PoC procedure happens for all models simultaniously. So if host is able to submit artifacts for model A and model B at the same PoC and these artifacts are validated by another hosts, it assumes that this host had hardware to deploy both models. From my perspective it's not that much important if same hardware is presented in different groups as it's computation power / VRAM resources will be also splitted between groups. So it'll no power gain from such action, just participating in both groups, which is good for security

gmorgachev avatar
gmorgachevMaintainerMaintainer
Cap (Appendix A) doesn’t fully address group-local capture / fairness Cap limits a new group’s impact on global consensus weight (inflation / sudden dominance), but it doesn’t stop group-local capture, e.g. coordinated voting to mark honest participants invalid or monopolize inference revenue for a popular new model. Cap also depends on weight earned in other mature groups → strong path dependence / incumbent advantage (new entrants are structurally capped even if they’re best on the new model). Request: clarify what cap is intended to mitigate (global takeover vs group-local capture), and consider extra mechanisms for group-local correctness/fairness (challenge/appeal, slashing, auditability, etc.).

The main mechanism to limit group specific dominance - is using of the total consensus weight in denominator. So, if total chain's weight is 1000 (from all groups), to pass validation inside the group_i, host will have to be approved by hosts with > 666 votingWeight (in initial text it was 50% that was my mistake, chain already uses 2/3) So, supermajority from the whole chain validated PoC artifacts / delegated their PoC votes

Do you mean some specific group-local capture attack?

gmorgachev avatar
gmorgachevMaintainerMaintainer
2026-04-02

About the TEE, there is a separate thread where i fully agree that it's required :) #951 (https://github.com/gonka-ai/gonka/discussions/951)

unameisfine avatar
2026-04-20

Implementation-level review from the current codebase

The high-level direction and the security analysis by @jacky6block (https://github.com/jacky6block) are solid. I went through the current PoC implementation to identify concrete gaps the proposal would need to address. These are supplementary to the delegation/scaling concerns already raised.

1. Per-model weight storage is not supported by current data model

MLNodeInfo.poc_weight is a flat int64 with no model context ( activeparticipants.proto:58 ). The parent EpochGroupData supports subgroups via sub_group_models ( epoch_group_data.proto:19 ), but the subgroup state is in-memory only — epoch_group.go:111 stores them in a map[string]*EpochGroup that is rebuilt at runtime and never persisted on-chain.

For multi-model PoC, each participant needs per-model weight that survives restarts and is queryable by validators. Two options:

Extend MLNodeInfo with a model_id field and store separate entries per model

Create a new on-chain collection keyed by (epoch, model_id, participant) -> poc_weight

The second is cleaner — it avoids bloating ActiveParticipant.ml_nodes[] (which is already iterated in multiple hot paths like model_assignment.go and epoch_group.go:55-78 ) and allows independent pruning per model.

2. Parallel PoC GPU contention is under-specified

The proposal states "PoC runs concurrently across all eligible groups within the same epoch" . Currently, epoch phases are sequential: GENERATION -> VALIDATION -> INFERENCE ( types/params.go:165-183 , durations in blocks). Broker assigns each GPU to exactly one model during PoC ( model_assignment.go ).

With M concurrent PoCs:

  • Each host needs separate GPU(s) per model — this is acknowledged ("requires separate hardware per group") but the broker has no mechanism to partition GPUs across PoC tasks. StartPoCNodeCommandV2 targets a single model per node ( node_worker_commands.go:196-210 ).
  • Validation window scales with M — WeightCalculator ( chainvalidation.go:44-192 ) processes validations sequentially per participant. With M models x N participants, validation latency grows linearly. Current PocValidationDuration = 6 blocks (~1 min) may be too short.
  • Inference degradation during PoC — the proposal says validation and inference can run in parallel, but with all GPUs occupied by M parallel PoCs, inference throughput drops to zero during the PoC phase.

Suggestion : Consider staggered PoC — each model runs its PoC in a different block range within the epoch. This avoids GPU contention and fits the existing sequential phase model.

3. consensusKoeff governance circularity

The proposal defines consensusKoeff_i as a governance parameter. But governance voting power = consensus weight = f(consensusKoeff). A group whose members hold majority consensus weight can vote to increase their own consensusKoeff , concentrating power further.

The cap in Appendix A (capping weight by members' weight in other groups) partially mitigates this for new groups, but does not address the initial group ( group_Qwen3-235B-FP8 is explicitly exempt from the cap).

Suggestion : Bound consensusKoeff range per model (e.g., [0.5, 2.0] relative to a baseline), and require supermajority (67%) for changes — matching the BFT threshold already used for consensus.

4. Confirmation PoC not addressed

The proposal covers main PoC but does not mention Confirmation PoC ( confirmation_poc_v1.go:10-63 ). cPoC is triggered during inference phase to verify nodes still have hardware — it is essential for liveness.

With multi-model:

  • Should cPoC verify all models a host claims to serve? That multiplies cPoC load by G (number of groups).
  • Or only the model currently being inferred on that host? Then hosts serving low-demand models skip cPoC entirely.
  • Current cPoC uses ConfirmationWeight from EpochGroupData ( epoch_group_data.proto:47 ) — a single field, not per-model.

This needs explicit design — cPoC is the defense against hosts that pass main PoC then deallocate hardware.

5. Settlement reward split between groups

The proposal defines consensusWeight(p) = sum(consensusKoeff_i * pocWeight(group_i, p)) for consensus power, but does not specify how bitcoin-style rewards (the main economic incentive) split between groups.

Current settlement ( bitcoin_rewards.go ) distributes rewards proportional to global weight with confirmation weight capping. With multi-model:

  • Are rewards pooled globally and distributed by aggregated consensusWeight ? Then hosts in high- consensusKoeff groups earn disproportionately.
  • Or split per-group first, then distributed within group? Then we need to define the split ratio (by consensusKoeff ? by inference demand?).

This has major economic implications — it determines whether hosting a niche model is viable vs everyone piling into the highest-coefficient model.

Concrete implementation path (suggestion)

Given the complexity, a phased rollout seems practical:

Phase 1 can ship independently and is useful even without delegation — it enables per-model weight tracking which the chain currently lacks.

Happy to help with implementation review or prototyping any of these areas.