Как это работает
У сессии четыре шага: обнаружение, соединение, инференс и расчёт. Ни один из них не обслуживает GenKaKu Labs.
1. Обнаружение
Воркер регистрируется в WorkerRegistry с:
- дайджестом peer ID —
keccak256("genkaku.peer.v0:" + peerId), который связывает его идентичность libp2p с кошельком, - хешем политики — обязательством
bytes32, которое воркер фиксирует при регистрации, - необязательным локатором — подсказкой multiaddr, чтобы пользователь мог к нему подключиться.
Реестр предоставляет публичные count() и isActive(address). Плагины читают их через публичный
RPC; никакого API каталога, которому нужно доверять, нет.
Локаторы необязательны. Воркер публикует свой публичный адрес, только когда оператор явно включает
publishAddress, а опубликованный локатор после попадания в блокчейн постоянен.
Хеш политики — это обязательство, не описание модели. То, что воркер на самом деле предлагает,
публикуется отдельно на его доске офферов (/genkaku/offers/0), где перечислены имя модели, цена и
возможности Ollama.
2. Соединение
Плагин пользователя открывает libp2p-соединение с peer ID воркера. Обмен hello
(/genkaku/hello/0) фиксирует:
- peer ID (должен совпадать с записью в реестре),
- адрес кошелька воркера, доказанный подписью, а не заявленный,
- цену за час и режим биллинга.
Если два пира могут связаться напрямую — одна локальная сеть, публичный IPv4, глобальный IPv6 —
токены идут между ними напрямую. Если нет, сессия идёт через публичный seed-релей, доступный по
адресу staging.genkaku.app/seed.
Релей пересылает зашифрованный трафик libp2p. Он не может читать промпты или вывод, но его оператор видит метаданные соединения: адреса пиров, время и объём. Считайте сессию через релей приватной по содержимому, но не по тому, кто с кем говорит.
В этой сборке нет обхода NAT (нет DCUtR). Либо пиры доступны для прямого подключения, либо сессию несёт релей.
3. Инференс
Воркер запускает модель локально через Ollama и передаёт токены обратно по тому же соединению. Маркетплейс никогда не видит промпт; оператор воркера — видит.
Оффер с нулевой ценой вообще не затрагивает блокчейн и обслуживается бесплатно.
4. Расчёт
Платные сессии используют цену за час с начислением за начатую минуту:
- воркер объявляет цену за час,
- каждая начатая минута считается минутой,
- двухминутная задача оплачивает две минуты, а не час.
Для платной модели пользователь открывает эскроу в JobEscrow до первого токена — это одна
транзакция в блокчейне. Когда сессия завершается:
- воркер подписывает квитанцию по ID сессии, расходу и хешу квитанции;
settle()проверяет эту подпись и освобождает расход;- 99% получает воркер, 1% — казна;
- любой неизрасходованный остаток возвращается пользователю.
Расчёт — вторая транзакция в блокчейне, поэтому платная сессия стоит пользователю двух транзакций: открыть эскроу, затем рассчитаться. Gas платит тот, кто отправляет каждую транзакцию.
Воркер накапливает рассчитанный доход в контракте и может в любой момент вызвать claim(); выплата
идёт на кошелёк воркера.
Что заменяет оркестратор
| Старая модель | GenKaKu |
|---|---|
| Сервер распределяет задачи | Пользователь выбирает воркера из контракта |
| Сервер хранит промпты | Прямое соединение между пирами |
| Сервер считает потребление | Начисление по начатым минутам и подписанная квитанция |
| Сервер платит | Эскроу освобождается в блокчейне |
Допущений о доверии меньше, потому что посредников меньше. Но они не нулевые: вы по-прежнему доверяете промпт воркеру, метаданные — релею, если сессия идёт через него, и коду, который запускаете.