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

Ограничения

Всё на этой странице — числа и правила, на которые можно опираться при планировании. Если значение — параметр сети или его может поменять владелец, указан вызов, который возвращает текущую цифру.

ОграничениеЗначениеОткуда
Срок действия учётных данных4 часаsessionLifetime, параметр сети
Одновременных сессий на Orbitпо одной на слот, 1–5слоты Orbit, выбранные при покупке; потолок — maxSessionsPerSub, параметр сети
Источников на сессию1константа протокола
Проверок сверх лимита источников до закрытия сессии3 подрядконстанта протокола
Закрытие молчащих сессийпроверка раз в 2 минуты, после 5 минут без чекпоинтанастройки Control Plane

SessionCredentials.expires_at — настоящий срок. Когда он проходит, узел удаляет учётную запись, и туннель встаёт. Чтобы сессия жила дальше, клиент заранее продлевает её через RenewSession: каждое продление сдвигает срок ещё на один срок действия учётных данных. См. продление сессии.

Сессий на Orbit столько, сколько у него слотов, и считаются они по всей федерации, а не у каждого оператора: перед выдачей новой сессии каждый Control Plane прибавляет то, что по этому Orbit держат соседи. Слотов от 1 до 5, их число выбирается при покупке, и каждый стоит одну цену.

На кошельковом уровне это считает Control Plane. Анонимное доказательство не говорит, от какого оно Orbit, поэтому там то же правило держат разрешения: по одному на слот.

Один источник на сессию — это одно устройство. Роутер, который раздаёт интернет нескольким машинам, — всё равно один источник, потому что наружу выходит он. Три замера подряд сверх лимита закрывают сессию, а один чистый обнуляет счёт. Источники считаются, но не записываются: узел спрашивает у Xray число, а журнал доступа выключен.

ОграничениеПо умолчаниюПараметр сети
Открытий сессий за эпоху на один Control Plane25accessQuotaPerEpoch
Узлового времени на один слот2 часаaccessBudgetPerSlot, в секундах
Разрешений у личности на окно1permissionsPerWindow

Это числа сети, а не оператора. Их ставят через ProtocolGovernor в пределах ограничений, а каждый Control Plane читает их вызовом SingulaProtocol.param(name), где имя записано в ASCII в bytes32, перечитывает раз в десять минут и, пока в директории значения нет, берёт значение по умолчанию. Новая квота или новый бюджет действуют, как только Control Plane их прочитал. Новое число разрешений действует с первого окна, ключ издателя для которого опубликован после изменения: каждое окно сохраняет число, зафиксированное вместе с его ключом.

Слот тратится при открытии сессии и дальше расходуется по отработанному времени, так что короткая сессия обходится дёшево. Квота, умноженная на бюджет, — это сколько один Orbit может потратить у одного Control Plane за эпоху.

Разрешения — вторая половина: у каждой личности одно разрешение на окно, а личностей у Orbit по одной на слот. Каждое разрешение выдаётся в сети один раз и держит одну сессию за раз в любом месте сети. Control Plane, у которого идёт сессия, держит её разрешение занятым и сообщает о нём всем соседям; когда сессия заканчивается, сообщения прекращаются, и через минуту разрешение свободно везде. Каждая анонимная сессия подчиняется обоим ограничениям: квота считает открытия у каждого Control Plane, разрешение — одновременные сессии.

Число разрешений входит в ончейн-коммитмент к ключу издателя, поэтому издатель не может разным клиентам описать один и тот же ключ по-разному. Прочитать его можно через VoucherKeyRegistry.getEpochKey(issuerStarId, epoch), который возвращает (keyHash, denominationGB, setAt, issuerActive); число — второе значение.

Платят за время, а не за байты. Засчитается ли время вообще, решают три правила:

  • Время копится, пока не пройдёт 64 КиБ с последнего засчитанного чекпоинта, и тогда засчитывается целиком, вместе с тихими отрезками. Простаивающий туннель не зарабатывает.
  • Копится оно не дольше 10 минут. Чекпоинт, пришедший позже этого срока после последнего засчитанного, сдвигает курсор без зачёта, и накопленное пропадает. Частые чекпоинты тут не помогают; Wanderer в любом случае шлёт их раз в 30 секунд.
  • Чекпоинт, по которому выходит больше 10 Гбит/с, отклоняется сразу.

Все три правила — параметры сети и читаются так же, как ограничения выше: minCheckpointBytes, maxCheckpointGap в секундах и maxBytesPerSecPerSession.

Orbit — это подписка в виде токена SubscriptionNFT.

ОграничениеЗначение
Цена10 sUSDC — SubscriptionNFT.priceUSDC()
Срок30 дней с активации
Неактивированных токенов на адрес10
Можно передатьтолько до активации

Пока протокол на паузе, время обслуживания стоит, и конец подписки сдвигается на длину паузы, так что простой не съедает оплаченное время.

Orbit не продлевается. Если активировать новый, пока действует текущий, он встанет в очередь и начнётся, когда текущий закончится. Вернувшийся подписчик может зарегистрировать тот же анонимный коммитмент, что и раньше: он остаётся за его адресом.

Узел получает фиксированную ставку nodeRate() за каждую засчитанную секунду, сколько бы узлов ни работало. Control Plane получает фиксированную seatPay() за каждую эпоху своего места.

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

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

У незабранных наград узлов нет срока, они учитываются как долг пула. Оплату места CP нужно забрать в течение 7 эпох после конца срока места.

Не пускает ваш трафик через Control Plane. Сессии выдаются там, а байты идут прямо к узлу.

Не берёт плату за трафик. Платят за время. Байты решают только, засчитается ли интервал, по порогу и потолку выше, а сам трафик никто не разбирает.

Не скрывает вас от первого узла. Сервер, к которому вы подключаетесь, видит адрес, с которого вы пришли, сколько бы хопов ни было.

Не строит маршруты за вас. Control Plane выдаёт один узел. Соединить два — работа клиента, как и проследить, чтобы они были у разных операторов: ListNodes возвращает ончейн-личность каждого кандидата, а владельцев клиент находит сам. Два хопа через одного оператора защищают как один. Wanderer по умолчанию держит хопы у разных операторов.

Не фильтрует содержимое, кроме одного списка. DomainBlocklist лежит в блокчейне, и прочитать его может кто угодно; узлы отправляют совпавший трафик в никуда. Больше ничего не проверяется.

Не восстанавливает аккаунты. Их нет. Потерянный кошелёк — потерянный Orbit.

Не держит службу поддержки. Если Control Plane не отвечает, клиент переходит к следующему из реестра.

Не проверяет, как узел выходит в интернет. Узел сам сообщает warp, direct или custom, и это его собственное утверждение.

Arbitrum Sepolia, chain id 421614, тестовый токен. Во время альфы контракты уже передеплоивались и будут ещё, поэтому клиенту стоит читать все адреса из SingulaProtocol, а не вшивать свой список.

Роль CP пока выдаёт основатель; дальше её будут получать за стейк, см. как стать Control Plane.

Пока Orbit покупают и звёздам платят в USDC; ECHO добавится к тому и другому на следующей стадии, см. экономику.