Это во время прохождения транзакции вы знаете только две точки. А во время поиска вы должны знать как минимум поисковый запрос, а в данном случае запросом является конечный получатель (канал до него).
Отправителя запроса в общем случае знать не обязательно, но что-то мне подсказывает, что в случае LN и отправитель всем известен ибо алгоритм поиска оптимального пути и так сам по себе тормоз и дополнять его велосипедами с неизвестными вершинами вряд-ли кто-то решился.
Ссылка на оригинальный текст на английском:
https://github.com/lightningnetwork/lightning-rfc/blob/master/07-routing-gossip.mdДалее идёт мой личный суверенный и субъективный перевод той части, которая касается маршрутизации:
Сообщение обновления информации о канале (сплетни).
После того, как канал был первоначально объявлен, каждая сторона независимо объявляет размер комиссии и минимальную дельту истечения срока действия , которая требуется для ретрансляции HTLC (врЕменных блокировок для прохождения платежей) через этот канал. Каждая из сторон использует 8-байтовый короткий идентификатор канала, который соответствует channel_announcement и 1-битному полю channel_flags, чтобы указать, на каком конце канала он находится (в начале или в конце канала). Узел может делать это многократно, чтобы изменять плату за использование канала.
Обратите внимание, что сообщение о "сплетне" channel_update полезно только в контексте ретрансляции платежей нодами, и не нужны для отправки платежей. При совершении платежа A -> B -> C -> D используются только channel_updates (сплетни), относящиеся к каналам B -> C (объявлен B) и C -> D (объявлен C). При построении маршрута, суммы и сроки действия для блокировок каналов (HTLC) должны быть рассчитаны в обратном направлении от пункта назначения к источнику. Точное начальное значение для amount_msat и минимальное значение для cltv_expiry, которое будет использоваться для последней HTLC (блокировке) в маршруте, указаны в запросе на оплату (см. БОЛТ № 11).
тип: 258 (channel_update)
данные:
[64: signature]
[32: chain_hash]
[8: short_channel_id]
[4: временная метка]
[1: message_flags]
[1: channel_flags]
[2: cltv_expiry_delta]
[8: htlc_minimum_msat]
[4: fee_base_msat]
[4: fee_proportional_millionths]
[8: htlc_maximum_msat] (option_channel_htlc_max)
Битовое поле channel_flags используется для указания направления канала: оно идентифицирует узел, с которого произошло это обновление, и сигнализирует о различных параметрах, касающихся канала. В следующей таблице указано значение отдельных битов:
Позиция Название Значение
0 direction направление, к которому относится это обновление.
1 disable отключить канал.
Битовое поле message_flags используется для указания наличия дополнительных полей в сообщении channel_update:
Позиция бита Имя Поле
0 option_channel_htlc_max htlc_maximum_msat
Обратите внимание, что поле htlc_maximum_msat является статическим в текущем протоколе на протяжении всего срока службы канала: оно не предназначено для указания пропускной способности канала в реальном времени в каждом направлении, что может быть как массовой утечкой данных, так и бесполезным спамом в сети ( для распространения каждой сплетни требуется в среднем 30 секунд на один переход)
Node_id для проверки подписи берется из соответствующего channel_announcement: node_id_1, если младший значащий бит флагов равен 0, или node_id_2 в противном случае.
Требования
Исходный узел:
МОЖЕТ создать channel_update для передачи параметров канала равноправному каналу, даже если канал еще не был объявлен (то есть бит анонса_канала не был установлен).
НЕ ДОЛЖЕН пересылать такой channel_update другим партнерам по причинам конфиденциальности.
Примечание: такое channel_update, которому не предшествует channel_announcement, недопустимо для любого другого однорангового узла и будет отброшено.
ДОЛЖЕН установить подпись для подписи двойного SHA256 всего оставшегося пакета после подписи, используя свой собственный идентификатор_узла.
НЕОБХОДИМО установить chain_hash AND short_channel_id, чтобы соответствовать 32-байтовому хешу И 8-байтовому идентификатору канала, который однозначно идентифицирует канал, указанный в сообщении channel_announcement.
если исходный узел является node_id_1 в сообщении:
ДОЛЖЕН установить бит направления channel_flags в 0.
иначе:
ДОЛЖЕН установить бит направления channel_flags в 1.
если присутствует поле htlc_maximum_msat:
ДОЛЖЕН установить бит option_channel_htlc_max в message_flags равным 1.
ДОЛЖЕН установить для htlc_maximum_msat максимальное значение, которое будет отправлено через этот канал для одного HTLC.
ДОЛЖЕН установить это значение меньше или равно пропускной способности канала.
ДОЛЖЕН установить это значение меньше или равным max_htlc_value_in_flight_msat, полученному от однорангового узла.
для каналов с chain_hash, идентифицирующих цепочку биткойнов:
ДОЛЖЕН установить это значение менее 2 ^ 32.
иначе:
ДОЛЖЕН установить бит option_channel_htlc_max в message_flags равным 0.
ДОЛЖНЫ установить биты в channel_flags и message_flags, которым не присвоено значение 0.
МОЖЕТ создать и отправить channel_update с битом отключения, установленным в 1, чтобы сигнализировать о временной недоступности канала (например, из-за потери соединения) ИЛИ постоянной недоступности (например, до расчета по цепочке).
МОЖЕТ послать последующее channel_update с битом отключения, установленным в 0, чтобы повторно включить канал.
ДОЛЖЕН установить временную метку больше 0, а больше, чем любая ранее отправленная channel_update для этого short_channel_id.
СЛЕДУЕТ основывать метку времени на метке времени UNIX.
ДОЛЖЕН установить для cltv_expiry_delta количество блоков, которое будет вычтено из входящего HTLC cltv_expiry.
ДОЛЖЕН установить для htlc_minimum_msat минимальное значение HTLC (в миллисатосах), которое будет принимать одноранговый канал.
ДОЛЖЕН установить в fee_base_msat базовую плату (в миллисатоши), которую он будет взимать за любой HTLC.
ДОЛЖЕН установить fee_proportional_millionths на сумму (в миллионных долях сатоши), которую он будет взимать за каждую переведенную сатоши.
НЕ ДОЛЖЕН создавать избыточные channel_updates
Принимающий узел:
если short_channel_id НЕ соответствует предыдущему channel_announcement, ИЛИ, если канал был закрыт в это время:
НЕОБХОДИМО игнорировать channel_updates, которые НЕ соответствуют одному из его собственных каналов.
СЛЕДУЕТ принимать channel_updates для своих собственных каналов (даже если они не являются общедоступными), чтобы узнать параметры пересылки связанных исходных узлов.
если подпись не является действительной подписью, используется node_id двойного SHA256 всего сообщения, следующего за полем подписи (включая неизвестные поля после fee_proportional_millionths):
НЕ ДОЛЖЕН обрабатывать сообщение дальше.
ДОЛЖЕН разорвать соединение.
если указанное значение chain_hash неизвестно (то есть оно не активно в указанной цепочке):
НЕОБХОДИМО игнорировать обновление канала.
если отметка времени НЕ больше, чем отметка последнего полученного channel_update для этого short_channel_id И для node_id:
ДОЛЖЕН игнорировать сообщение.
иначе:
если временная метка равна последнему полученному channel_update И поля (кроме подписи) отличаются:
МОЖЕТ занести в черный список этот node_id.
МОЖЕТ забыть все каналы, связанные с ним.
если отметка времени необоснованно далека в будущем:
МОЖЕТ отказаться от channel_update.
иначе:
СЛЕДУЕТ помещать в очередь сообщение для ретрансляции.
МОЖЕТ выбрать НЕ для сообщений длиннее минимальной ожидаемой длины.
если бит option_channel_htlc_max для message_flags равен 0:
ДОЛЖЕН считать, что htlc_maximum_msat не присутствует.
иначе:
если htlc_maximum_msat отсутствует или превышает емкость канала:
МОЖЕТ занести в черный список этот node_id
СЛЕДУЕТ игнорировать этот канал при рассмотрении маршрута.
иначе:
СЛЕДУЕТ учитывать htlc_maximum_msat при маршрутизации.
Обоснование
Поле метки времени используется узлами для упрощения channel_updates, которые либо слишком далеки в будущем, либо не были обновлены в течение двух недель; поэтому имеет смысл, чтобы это была временная метка UNIX (т.е. секунды с UTC 1970-01-01). Это не может быть жестким требованием, учитывая возможный случай двух channel_updates в течение одной секунды.
Явный флаг option_channel_htlc_max, указывающий на наличие htlc_maximum_msat (вместо того, чтобы иметь htlc_maximum_msat, который подразумевает длину сообщения), позволяет нам расширять channel_update различными полями в будущем. Поскольку ширина каналов ограничена 2 ^ 32-1 миллисатосами, htlc_maximum_msat имеет такое же ограничение.
Рекомендация против избыточных channel_updates сводит к минимуму спам в сети, однако иногда это неизбежно. Например, канал с одноранговым узлом, который недоступен, в конечном счете заставит channel_update указать, что канал отключен, с другим обновлением, повторно включающим канал, когда одноранговый узел восстанавливает контакт. Поскольку сообщения о сплетнях группируются и заменяют предыдущие, результатом может быть одно, казалось бы, избыточное обновление.