Глоссарий / Lightning и layer 2
Псевдоним узла
- Что такое псевдоним узла?
- Псевдоним узла представляет собой имя из 32 байт, которое узел Lightning записывает в собственное подписанное сообщение node_announcement, чтобы обозреватели и кошельки показывали что-то читаемое вместо необработанного публичного ключа.
Каждый узел Lightning выбирает себе имя и подписывает его, в этом состоит весь механизм и вместе с тем вся проблема. BOLT 7 отводит полю ровно 32 байта, заполняет остаток нулями и предписывает принимающему программному обеспечению намекать, что имя подписано самим узлом. Ничто не мешает двум узлам называться одинаково, поэтому никогда не считайте псевдоним доказательством того, кому вы платите.
Как это работает
Псевдоним узла передается внутри node_announcement, сообщения gossip типа 257, подписанного тем же ключом, который он называет.
Сообщение несет подпись, битовое поле возможностей, метку времени, node_id, rgb_color из 3 байт, псевдоним из 32 байт и сетевые адреса, на которых узел принимает подключения. Задавать псевдоним и цвет необязательно; делать псевдоним корректным UTF-8 обязательно, а любые неиспользуемые конечные байты должны быть нулевыми.
Тридцать два байта представляют собой бюджет в байтах, а не число символов. Поле содержит корректный UTF-8, поэтому имя на письменности, где каждый символ занимает несколько байт, вмещает меньше букв, чем обычное латинское.
Сменить имя дешево. Узел обязан ставить каждую метку времени выше предыдущей, поэтому новое имя является всего лишь новым сообщением node_announcement, которое пиры принимают вместо старой записи и ставят в очередь на повторную рассылку. В протоколе нет ни реестра, ни комиссии, ни проверки на уникальность.
Поле не является бесплатным рекламным местом. BOLT 7 игнорирует объявления узлов, еще не связанных с известным каналом, а объявить канал нельзя, пока его выход финансирования не получит шесть подтверждений, поэтому читаемое имя стоит ончейн-транзакции и заблокированного капитала, прежде чем кто-либо его ретранслирует.
В BOLT 7 есть раздел безопасности, написанный специально о псевдонимах. Поскольку их задает пользователь, они служат вектором внедрения и при отображении, и при хранении, поэтому разработчикам предписано очищать их, прежде чем вставлять в HTML или JavaScript, и использовать подготовленные запросы при сохранении. Программному обеспечению, которое показывает псевдоним, также предписано намекать на его самоподписанное происхождение.
Где это видно
Псевдонимы узлов появляются везде, где граф Lightning рисуется для человека.
BOLT 7 позволяет принимающему программному обеспечению использовать псевдоним и rgb_color для ссылок на узлы в своих интерфейсах, поэтому обозреватель графа или средство выбора пиров показывает имя, а не ключ. Оператор маршрутизации на это опирается, поскольку node_id никто не набирает дважды.
Есть ли он у вас, зависит от того, чем на самом деле является ваш кошелек. Phoenix запускает настоящий самодостаточный узел Lightning на смартфоне, поэтому у него есть ключ идентичности и он мог бы объявить имя. Wallet of Satoshi в кастодиальном режиме хранит ключи за вас, поэтому вашего узла в графе нет и называть нечего.
Ничто из того, что вы платите или получаете, не зависит от имени: счета, маршруты и открытие каналов привязаны к node_id.
Псевдоним узла vs адрес Lightning
Псевдоним узла называет машину, а адрес Lightning называет место, где запрашивают счет. С помощью псевдонима нельзя заплатить: в нем нет ни домена, ни конечной точки, ни суммы, и ничто в протоколе не преобразует его во что-то оплачиваемое. Адрес Lightning выполняет обратную задачу: он разрешается по HTTPS и передает вашему кошельку настоящий счет.
Псевдоним узла vs короткий идентификатор канала
Короткий идентификатор канала представляет собой восьмибайтовый указатель на выход финансирования канала, и BOLT 7 также позволяет пиру передать псевдоним короткого идентификатора канала в качестве его замены. Этот второй псевдоним не имеет с псевдонимом узла ничего общего, кроме слова. Узел может отправить channel_update для канала, который не был объявлен, с полем short_channel_id, равным псевдониму, предоставленному пиром, а не настоящему, и обязан установить dont_forward и никогда не передавать дальше это обновление по соображениям приватности. Один псевдоним представляет собой публичное имя, которое узел хочет показать, другой является частной заменой числа, которое узел хочет скрыть.