Перейти к основному содержимому

Архитектура

Всё, что GenKaKu запускает в продакшене, — это либо статический сайт, либо одноранговый процесс. Ничто в пути запроса не является сервером GenKaKu.

Пакеты​

ПакетРоль
@genkaku/protocolПривязки к блокчейну, биллинг эскроу, сайдкар libp2p, мост Ollama
@genkaku/dsh-runtimeАдаптер, общий для обоих плагинов
@genkaku/dsh-worker-pluginОтдаёт локальные модели
@genkaku/dsh-user-pluginПотребляет модели сети
@genkaku/seedРелей libp2p и служба обнаружения пиров
@genkaku/adminКонсоль оператора для хоста seed

Ядро протокола не зависит от DeepSeek Harness. Это сделано намеренно: другой адаптер не должен требовать его изменения.

В блокчейне​

Base Sepolia, chain ID 84532:

КонтрактАдрес
WorkerRegistry0xFbE9FF497dC24bD69d13E4201418938Df7435Ff6
JobEscrow0x8175df796A659681009BeDa4609a3cFe9d281D82
MockUSDC (только тесты)0xEb33DFC0424810039337a38510ef522e9E7F9727

WorkerRegistry хранит для каждого кошелька дайджест peer ID, хеш политики bytes32, необязательный локатор и флаг активности. JobEscrow держит USDC по сессиям, проверяет подпись квитанции воркера, делит 99/1 и начисляет воркеру баланс к выводу. Комиссия 1% — константа контракта.

Запись доступна только в тестовой сети. Пути для mainnet выбрасывают исключение: канонический USDC и мультисиг-казна — это отдельный запуск, а не флаг конфигурации.

Плоскость данных​

Воркеры обслуживают следующие протоколы libp2p:

/genkaku/open/0 session open
/genkaku/token/0 auth token
/genkaku/receipt/0 signed ledger increments
/genkaku/settle/0 co-sign a settlement
/genkaku/offers/0 offer board
/genkaku/policy/0 policy document
/genkaku/hello/0 identity, wallet proof, quote

Каждый обработчик принимает соединение через релей (runOnLimitedConnection). Поэтому сессия либо прямая, либо идёт через релей, и оба варианта полноценны. libp2p шифрует поток, так что релей пересылает шифротекст и видит только метаданные.

В этой сборке нет DCUtR / обхода NAT. Пир за симметричным NAT использует релей или недостижим.

Обнаружение​

Два независимых пути:

  1. Каталог в блокчейне — события WorkerRegistry дают кошелёк, дайджест peer ID и необязательный локатор. Плагины читают логи через публичный RPC со списком fallback (base-sepolia.gateway.tenderly.co первым, sepolia.base.org последним, потому что он ограничивает eth_getLogs 200 блоками).
  2. Seed-релей — https://staging.genkaku.app/seed отвечает на GET /peers multiaddr-ами, которые верны прямо сейчас, и предоставляет circuit relay для пиров, которые не могут подключиться напрямую.

Адрес seed зашит в пакет протокола, но его можно переопределить через GENKAKU_BOOTSTRAP_SEEDS (multiaddr-ы через запятую).

Модель биллинга​

pricePerHour : 6-decimal USDC, set by the worker
unit : 1 minute (60 units per hour)
billed : ceil(elapsed / 1min) × ceil(pricePerHour / 60)

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

Платная сессия — это две транзакции:

  1. openEscrow(worker, pricePerHour) — пользователь → JobEscrow,
  2. settle(...) — JobEscrow → воркер (99%) + казна (1%), остаток возвращается.

Цена 0 обслуживается без эскроу — поэтому бесплатный воркер может работать на машине вообще без ETH.

Интерфейсы оператора​

  • Панель — собственный интерфейс плагина в DeepSeek Harness: модели, цена, кошелёк, claim, платежи, ручные воркеры.
  • Сервер статуса — локальная HTTP-поверхность на 127.0.0.1, первый свободный порт в 47821–47826, используется панелью и клиентским адаптером.
  • Администрирование seed — отдельная консоль на VM seed за Caddy по пути /admin, читает статистику seed и логи блокчейна. Она не держит ключи кошелька и не двигает деньги.

Чего здесь намеренно нет​

  • Токена, стейкинга, токена кредитного рейтинга.
  • Сервера оркестрации, базы данных промптов.
  • Автоматического фильтра контента — в протоколе нет хука, который проверяет промпт до того, как его увидит воркер.
  • Пути записи в mainnet.