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

Если что-то не работает

Узел не находит себя в StarRegistry. Проверьте по порядку:

  1. Транзакция register прошла — найдите её в обозревателе блоков.
  2. Зарегистрированный адрес подписанта совпадает с адресом в баннере, символ в символ.
  3. BLOCKCHAIN_RPC_URL указывает на ту сеть, где лежат контракты.
  4. Дальше смотрите логи контейнера. Таймауты значат, что узел так и не достучался до RPC.

Перезапускать после регистрации не нужно. Узел сам следит за блокчейном и подхватит свой starId.

Stargate не может достучаться ни до одного Control Plane по gRPC. Самые вероятные причины — первыми:

  1. Control Plane работает, но эндпоинт не опубликован — это кнопка Set Endpoint.
  2. Эндпоинт указывает на адрес, который не отвечает, или на закрытый порт. Проверьте: grpcurl <host>:<port> singula.admin.v1.AdminService/GetHealth.
  3. У подписанта Control Plane закончился ETH.
  4. В сети сейчас никто не отвечает.

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

В логе узла Control Plane отказывает в регистрации со словами registration is not signed by its signer key. При регистрации узел доказывает, что держит ключ подписанта своей звезды, и узел с Control Plane должны одинаково понимать, как это доказательство устроено. Если один из них на старом образе, они расходятся. Обновите узел до текущего singulanetwork/star:alpha и перезапустите — личность сохранится.

Для тихой сети это нормально.

Узел выбирается по загрузке, свежести heartbeat и случайной добавке — но не по тому, где клиент: этого Control Plane не знает и не спрашивает. NODE_COUNTRY_CODE важен, только когда клиент сам попросил эту страну.

Так что «нет сессий» значит, что их сейчас мало во всей сети, а не что у вас неудачный регион.

Узел возит трафик, но ничего не зарабатывает

Заголовок раздела «Узел возит трафик, но ничего не зарабатывает»

Поищите события Pushed в EpochAttestations от подписанта вашего Control Plane. Если трафик идёт, а событий нет, интервалы отбрасываются, а не отправляются. Обычно причина одна из этих:

  • У подписанта Control Plane нет ETH. Ему нечем отправить транзакцию.
  • Узел не подписывает свои интервалы. Перед отправкой Control Plane просит каждый узел подписать свои интервалы и отбрасывает то, за что узел не поручился. Ровно так бывает, когда узел и Control Plane на разных версиях: узел не узнаёт запрос и молчит.
  • Трафик не засчитался. Время копится, пока с последнего засчитанного чекпоинта не пройдёт 64 КиБ, а если за 10 минут столько не набралось, оно сгорает. Простаивающий туннель не зарабатывает, так задумано.

Отказ называет причину, вот этими словами. У каждой своё решение:

Текст отказаЧто делать
access proof does not verify, permission proof does not verifyСверьте circuitVersion() со своими артефактами, глубину дерева 16 и упаковку точек
... against a subscriber set this CP does not recogniseВаш корень Меркла устарел — пересоберите его из реестра и попробуйте снова
this access claim has already been usedНуллификатор этого слота потрачен, возьмите следующий
access quota for this epoch is exhaustedВсе слоты этой эпохи у этого Control Plane потрачены. У другого Control Plane своя квота, или дождитесь следующей эпохи
an anonymous session needs a permission from this window's packetСначала возьмите разрешение на это окно — см. разрешения
this access slot has spent its node-time budgetУзловое время слота израсходовано, возьмите следующий
this permission of the subscription is already taken for this windowЭтот номер в этом окне уже взят — другим вашим устройством или раньше этим же. Попросите другой номер; ответ отмечает этот случай полем index_taken
the permission index is beyond the published countНомера идут от 0 до опубликованного издателем числа минус один
this permission has already been spentЕго держит сессия, которая ещё идёт. Возьмите другое из своих разрешений; это освободится примерно через минуту после конца сессии
no key is published for that issuer and windowУ издателя нет ключа на это окно — см. ниже
anonymous access is not enabled on this CP, permissions are not enabled on this Control PlaneВ директории нет SubscriberRegistry, или Control Plane запущен с SINGULA_PROTOCOL_ADDRESS=off и без SUBSCRIBER_REGISTRY_ADDRESS

Если клиент вообще не может взять разрешение, проверьте, есть ли у издателя ключ на текущее окно: VoucherKeyRegistry.getEpochKey(issuerStarId, epoch). Ключ можно опубликовать только на будущую эпоху, поэтому у впервые запущенного Control Plane ключа нет до начала следующей.

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

Звезда пытается действовать как Control Plane без этой роли, или кто-то задаёт эндпоинт звезде, которая не Control Plane. Проверьте текущую роль: её не выдавали, отобрали или звезда теперь Banned.

Транзакция идёт не с того адреса, который записан в реестре как владелец. Подключите этот кошелёк.

Кто-то публикует ключ подписи на текущую или прошедшую эпоху. VoucherKeyRegistry принимает только будущие эпохи — именно поэтому ключ можно проверить. Дождитесь следующей эпохи: Control Plane публикует ключи на сутки вперёд.

Control Plane израсходовал свой бюджет газа на эту эпоху. Бюджет у каждого Control Plane свой и обнуляется при смене эпохи.

На адресе получателя уже десять неактивированных Orbit. Активируйте какие-то или отправьте на другой кошелёк.

Деньги звезды в безопасности: награды идут владельцу, а контракты берут получателя из реестра.

  1. Выключите взломанный сервер.
  2. Поднимите чистый и возьмите новый адрес подписанта из баннера при запуске.
  3. С холодного кошелька нажмите Rotate signer на карточке звезды в Stargate или вызовите updateSigner напрямую. Старый ключ отрезается в той же транзакции.

У подписанта узла ETH нет вовсе. У подписанта Control Plane его немного — см. пополнить подписанта, — так что выводить со старого адреса нечего.

Подробнее про два ключа — в главе звёзды и роли.