Что такое Singula
Singula — это сеть серверов, которые возят чужой трафик и получают за это деньги из смарт-контракта. Запустить сервер и зарабатывать может кто угодно. Написать клиент и пользоваться сетью — тоже. Разрешения ни у кого спрашивать не нужно.
Первое, что приходит в голову построить на такой сети, — VPN, и он уже есть. Но сам протокол проще: он выдаёт клиенту адрес сервера, считает секунды, которые сервер на клиента работал, и платит за них. Что клиент соберёт из выданных серверов — один хоп, цепочку или что-то своё, — решает клиент.
Из чего она состоит
Заголовок раздела «Из чего она состоит»Звезда — участник сети, запись в контракте StarRegistry. У каждой звезды два адреса:
- владелец — холодный кошелёк, на который приходят деньги. Он задаётся при регистрации и больше не меняется;
- подписант — горячий ключ на сервере, которым звезда подписывает рабочие сообщения. Владелец может сменить его в любой момент.
Узел — звезда, которая возит трафик. На нём работает Xray с четырьмя входами REALITY, он принимает сессии и отчитывается перед Control Plane.
Control Plane — звезда с ролью CP. Трафик через неё не идёт. Она проверяет, что у клиента есть право на сессию, подбирает узел, передаёт запечатанные учётные данные, собирает отчёты и записывает отработанные секунды в блокчейн. Свои адреса Control Plane публикуют в CPEndpointRegistry, и клиент сам выбирает, к какому идти.
Клиент — всё, что говорит на протоколе. Wanderer, наше приложение для Windows, Linux и Android, — первая реализация, но никаких особых прав у него нет.
Одна программа на все роли. Программа star одинаковая на любом сервере: при запуске она находит себя в StarRegistry и включает то, что нужно её роли.
Что такое Orbit
Заголовок раздела «Что такое Orbit»Orbit — подписка на сеть в виде NFT. Действует 30 дней с момента активации, а не покупки. При покупке вы выбираете число слотов, от 1 до 5: слот — одно одновременное подключение, то есть одно устройство или один хоп маршрута. Каждый слот стоит 10 sUSDC.
Пока Orbit не активирован, это обычный токен: его можно купить и подарить, на одном адресе может лежать до десяти неактивированных. После активации он привязывается к владельцу.
Для покупки не нужен ETH. Вы подписываете намерение EIP-712 и permit на токен, транзакцию отправляет GasStation, а её газ вы оплачиваете в USDC вместе с ценой.
Аккаунтов, логинов и API-ключей нет. Право на сессию клиент показывает одним из двух способов:
- кошельком — подписывает короткий текст с именем Control Plane, и тот проверяет Orbit в блокчейне;
- доказательством — доказывает с нулевым разглашением, что держит один из Orbit, зарегистрированных в
SubscriberRegistry, не говоря какой. Control Plane узнаёт только то, что подключился какой-то подписчик.
Как деньги доходят до сервера
Заголовок раздела «Как деньги доходят до сервера»Сеть платит за отработанное время, в USDC. Байты нужны только чтобы отличить работающий туннель от простаивающего, на сумму они не влияют.
Каждый Orbit делится так: 70% в пул узлов, 10% в казну DAO, 10% в ликвидность протокола, 5% в пул Control Plane и 5% основателю. Узлу платят фиксированную ставку за каждую засчитанную секунду, Control Plane — фиксированную сумму за каждую эпоху, пока он держит место. Сплит может поменять владелец контракта, текущие цифры возвращает SubscriptionNFT.getSplit().
Эпоха длится 24 часа. Когда она закрывается, можно вызвать claimNode и claimCp. Вызвать их может кто угодно: деньги всё равно уйдут владельцу звезды, записанному в реестре. Поэтому оператору не нужен ETH, чтобы получить выплату.
Как это устроено
Заголовок раздела «Как это устроено»flowchart TB
chain["Arbitrum<br/>SingulaProtocol · StarRegistry<br/>SubscriberRegistry · EpochAttestations"]
client["Клиент<br/><i>сам выбирает маршрут</i>"]
cp["Control Plane<br/><i>выдаёт сессии, собирает отчёты</i>"]
node["Узел<br/><i>возит трафик</i>"]
client -->|"подпись кошелька или ZK-доказательство"| cp
cp -->|"PrepareSession"| node
client ==>|"трафик — VLESS + REALITY"| node
node -->|"heartbeat, подписанный интервал"| cp
cp -->|"подписанные интервалы"| chain
chain -.->|"адреса, роли, часы эпох"| client
Трафик идёт от клиента прямо к узлу. Control Plane на этом пути не стоит.
Где это работает
Заголовок раздела «Где это работает»Сейчас идёт открытая альфа в Arbitrum Sepolia, chain id 421614. Платят в sUSDC — тестовом токене с 18 знаками, настоящих денег в игре нет.
Запомнить стоит один адрес, всё остальное читается из него:
SingulaProtocol 0xC7aA88375cE5B1d43768EA0545069CB294Fc2992Вызов snapshot() на этом контракте возвращает текущую эпоху, её параметры и адреса всех остальных контрактов.
Куда дальше
Заголовок раздела «Куда дальше»Хотите запустить сервер — запуск узла: один контейнер и одна транзакция. Если у вас уже есть роль Control Plane — запуск Control Plane.
Пишете клиент — начните с главы собрать клиент, подробности в gRPC API и справочнике API. Для сессий без кошелька — анонимный доступ и построение доказательства.
Делаете продукт на сети — построить на Singula: своё устройство, которое само держит Orbit.
Прикидываете, подходит ли вам сеть — кто что видит и ограничения.
Об этих страницах
Заголовок раздела «Об этих страницах»Здесь описано то, что делает код, а цифры прочитаны из развёрнутых контрактов. Если значение может поменять владелец — сплит, цену, версию схемы, — рядом указан вызов, который его возвращает: живую цифру лучше проверить, чем поверить странице.
Если что-то здесь расходится с тем, что вы видите в сети, напишите нам.
