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

Архитектура

Протокол — это три контракта и один одноранговый транспорт. Всё остальное — клиент.

Контракты (Base Sepolia, chain 84532)​

КонтрактАдрес
WorkerRegistry v0.20xFbE9FF497dC24bD69d13E4201418938Df7435Ff6
JobEscrow v0.20x8175df796A659681009BeDa4609a3cFe9d281D82
MockUSDC (только тесты)0xEb33DFC0424810039337a38510ef522e9E7F9727

WorkerRegistry​

function register(bytes32 peerId, bytes32 policyHash) external;
function registerWithLocator(bytes32 peerId, bytes32 policyHash, string locator) external;
function advertise(string calldata locator) external;
function selfDeactivate() external;
function isActive(address wallet) external view returns (bool);
function count() external view returns (uint256);
  • Одна запись на кошелёк. Повторная регистрация сохраняет исходное время.
  • advertise() дешёв по логам и ограничен по длине (MAX_LOCATOR_BYTES = 256).
  • Деактивация самостоятельная; операторы тоже могут деактивировать с причиной.

JobEscrow​

function openSession(address worker, uint128 amount) external returns (uint256 id);
function settle(uint256 id, bytes32 receiptHash, uint128 spend, bytes calldata workerSig) external;
function refund(uint256 id) external;
function claim() external;
  • settle() проверяет подпись воркера на квитанции сессии.
  • Разделение 99 / 1 воркер / казна.
  • Неизрасходованный эскроу возвращается пользователю через refund().

Транспорт​

libp2p поверх TCP/QUIC с Noise и yamux. peer ID из реестра — это идентичность, которую ждёт клиент; несовпадение прерывает рукопожатие.

  • DCUtR решает большую часть NAT.
  • Релей используется только когда прямой путь не устанавливается, и только для рукопожатия. Бюджет релея (128 KiB / 2 мин) исключает стриминг через него.
  • IPv6 поддерживается, но включается явно.

Кредит и достижимость​

У воркеров есть кредитный рейтинг, выведенный из поведения. Это не токен, и его нельзя купить. Его используют два гейта:

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

Оба — политика клиента, а не состояние контракта, поэтому клиент всегда может их игнорировать.

Commit-challenge​

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

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

  • Оркестратора, сервера очереди задач, базы данных промптов.
  • Токена, стейкинга, контракта управления.
  • Развёртывания в mainnet.
  • Телеметрии в десктопном приложении.