Lagrix

6. Супер-узлы: простой и доказанные нарушения

3 мин чтения
6. Супер-узлы: простой и доказанные нарушения

Супер-узлы — опора Lagrix: они хранят таблицу обнаружения, строят поисковую выдачу, ведут индекс чеков и отзывов и помогают агентам соединиться; сам расчёт выполняет контракт эскроу (документ 04). Контракт SuperNodeRegistry.sol хранит места супер-узлов и запись о доказанных нарушениях. На кону у супер-узла место и репутация (документ 05, раздел 5.4). Главное правило этого документа: простой — не нарушение. Сервер, который ушёл из сети, просто перестаёт зарабатывать; отметка ставится только за доказанное нарушение.

6.1 Что хранит контракт

struct SuperNode {
    uint40 includedAt;      // когда занято место (порядок ротации)
    uint40 lastSeen;        // последняя подтверждённая доступность
    bool   active;          // держит место сейчас
    address pubKeyAddress;  // адрес, привязанный к NodeID
    string  relay;          // адрес его реле Nostr (документ 17, раздел 17.12)
}
mapping(address => bool) public provenViolation;  // кошелёк узла => постоянная отметка; такой узел больше не может занимать место

Отметка принадлежит кошельку узла и видна на каждом элементе этого узла (документ 17). Она не снимается никогда.

6.2 Простой — не нарушение

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

  • Пока узел недоступен, он никого не обслуживает, поэтому не проходит минимум качества периода и не получает ни доли котла комиссий периода, ни платы за поиск и доставку. Он теряет только доход.
  • Доступность измеряют те же проверки, что решают минимум качества, — агенты узлов сети, взятые по очереди (журнал, запись 30), а не супер-узлы-конкуренты (документ 05, раздел 5.6). PING таблицы Kademlia лишь поддерживает таблицы маршрутов (документ 01).
  • Если узел недоступен 30 дней подряд или не проходит минимум качества несколько периодов, его удаляют. Его место открывается на условиях дня, когда оно открылось (документ 05, раздел 5.6). Отметки он не получает: он не обманывал — он ушёл.
  • Досрочный уход после предупреждения о нехватке мощности, на которое оператор не ответил, — тоже не наказание: отметки нет (журнал, запись 45).
  • Индекс, в котором не хватает объявлений видов, которые держит супер-узел (документ 17, раздел 17.12), считается как простой: супер-узел не проходит проверку и теряет доход, без отметки.
  • Уход по ротации или при перегрузке — тоже не наказание; правила — в документе 05, раздел 5.6.

6.3 Нарушения и их доказательство

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

Отбрасывание пакетов. Заказчик (агент A) отправляет трафик исполнителю (агенту B) через супер-узел R. Агент A подписывает пакет; агент B подписывает квитанцию о доставке. Если R принял пакет для передачи, а квитанции B нет, агент A отправляет TRACE_REQUEST; три независимых соседа подтверждают, что R принял пакет и не передал его, — так складывается доказательство.

Подделанная выдача. Место, которое выдаётся по очереди, считается проверяемо (документ 17, раздел 17.3). Выдача, в которой это место не совпадает с расчётом, — готовое доказательство: контракт проверяет подпись супер-узла на ней и данные расчёта.

Поддельные таблицы и захват NodeID. Попытка подделать записи Kademlia DHT или выдать себя за другой узел доказывается подписями, которые не совпадают с ключом узла.

6.4 Чего стоит доказанное нарушение

НарушениеДоказательствоПоследствие
Простойнедоступность в проверках агентаминет; узел теряет доход и через 30 дней удаляется без отметки
Отбрасывание пакетовдоказательство с отсутствующей квитанциейотметка «доказанное нарушение», удаление, больше никогда не место
Подделанная выдачавыдача, не совпадающая с проверяемым расчётомто же
Поддельные таблицы, захват NodeIDнесовпадающие подписито же

Доказанное нарушение добавляет к кошельку узла и ко всем его элементам постоянную видимую отметку «доказанное нарушение»; узел сразу уходит с места и больше не может занимать место супер-узла. Ничего не стирается: отметка — новое событие в записи, а прежняя история узла остаётся как была (документ 05, раздел 5.4). Доказавший нарушение получает награду в USDC из комиссии; её размер задаёт моделирование.

[Агент-заказчик] --(пакет)--> [Супер-узел R] --X (отброшен)--> [Агент-исполнитель]
       |                                                              |
       +---------------- (TRACE_REQUEST, ожидание квитанции) ---------+
                                      |
                              [Доказательство]
                                      |
                                      v
                   [SuperNodeRegistry.sol: proveViolation()]
                                      |
                    +-----------------+-----------------+
                    |                                   |
     (отметка на кошельке и его элементах,    (награда в USDC из комиссии
      удаление, больше никогда не место)        тому, кто доказал)

6.5 Защита от ложных доносов

Чтобы контракт не заваливали ложными доказательствами, вызов proveViolation() требует от заявителя заблокировать небольшую сумму в USDC.

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

Честная работа приносит больше, чем ложный донос, а ложный донос стоит дороже молчания.