Обнаружение молниеносного маршрута. Как узнать потенциал в каждом направлении?

Итак, у меня вопрос, как работает маршрутизация в LN. Я читал частично через RFC, описанный в https://github.com/lightningnetwork/lightning-rfc но у меня все еще этот открытый вопрос.

Я знаю, что каждый узел в LN имеет всю сетевую топологию, поэтому он знает каждый узел и каждый канал, а также пропускную способность канала. Но пропускная способность канала не говорит, какая сторона владеет. Как мы можем найти правильный маршрут и убедиться, что в каждом канале есть достаточная емкость для направления, которое является частью нашего маршрута?

Итак, для примера можно сказать, что я узел A и канал для узла B, и у этого есть канал к узлу C. Предположим, что каждый канал имеет емкость 1 BTC, я хочу отправить сейчас 0.4 BTC из A на C и выбрал маршрут A -> B -> C. Но теперь может случиться так, что в канале B - C узел B только владеет 0,3 BTC в данный момент, а узел C владеет 0,7 BTC. Это означало бы, что B не может отправить 0.4 на узел C. Поэтому, если я отправлю сейчас, эта транзакция B вернется с ошибкой.

Если у меня есть более длинный маршрут, возможность такого события возрастает экспоненциально. Поэтому в конце очень маловероятно, что мой выбранный маршрут действителен. Как протокол предотвращает множество попыток, пока не найдет действительно правильный маршрут?

7 голосов | спросил blacktemplar 3 FebruaryEurope/MoscowbSat, 03 Feb 2018 11:39:15 +0300000000amSat, 03 Feb 2018 11:39:15 +030018 2018, 11:39:15

1 ответ


1

Даже если вы нашли такой маршрут успешно, что гарантирует, что B воспользуется своим платежным каналом? B может отрицать в любой момент, поскольку децентрализация.

Кроме того, из рекомендации по маршрутизации :

  

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

Далее объясняется, что проблема глубже:

  

Если маршрут вычисляется путем простой маршрутизации к предполагаемому получателю,   суммируя cltv_expiry_deltas, тогда узлы вдоль маршрута могут   угадать свою позицию на маршруте. Зная CLTV HTLC и   окружающая топология с кодом cltv_expiry_deltas дает злоумышленнику   способ угадать предполагаемого получателя. Поэтому он очень   предложил добавить случайное смещение к CLTV, чтобы   получатель получит, накидывая все CLTV вдоль маршрута. Чтобы   создать правдоподобное смещение отправителя МОЖЕТ начать ограниченную случайную прогулку   на графике, начиная с предполагаемого получателя, суммируют   cltv_expiry_deltas, а затем используйте сумму в качестве смещения. Эта   эффективно создает расширение теневого маршрута на фактический маршрут,   обеспечивая лучшую защиту от такого рода нападений, чем просто   выбор случайного смещения.

Важно отметить этот ответ:

  

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

Таким образом, ответ будет заключаться в том, что LN просто предоставляет обнаружение, не создает путь (потому что канал не может быть гарантирован в сети в децентрализованной сети?), поэтому «попытки» не являются особенностью ядра LN ( но функция автопилота ).

В автопилоте можно увидеть здесь . Здесь находится heuristics для поиска пути.

  

Пакет автопилота подписан как можно более абстрактным в   чтобы пользователи, разработчики и исследователи могли подключать различные   эвристики, чтобы экспериментировать с возможностями или пытаться   для оптимизации субграфа канала для целевых узлов.   текущая эвристика по умолчанию - это режим, называемый ConstrainedPrefAttachment.

Кроме того,

  

Это только один пример   возможные эвристики, которые могут быть подключены к активному   autopilot.Agent. Мы с нетерпением ждем дополнительной эвристики   что разработчики /исследователи будут внедрять!

Короче говоря, текущая эвристическая реализация сначала выбирает срез в сети, а затем жадно выделяет средства .

switch {
    // If we have enough available funds to distribute the maximum channel
    // size for each of the selected peers to attach to, then we'll
    // allocate the maximum amount to each peer.
    case int64(fundsAvailable) >= numSelectedNodes*int64(p.maxChanSize):
        for i := 0; i < int(numSelectedNodes); i++ {
            directives[i].ChanAmt = p.maxChanSize
        }

        return directives, nil

    // Otherwise, we'll greedily allocate our funds to the channels
    // successively until we run out of available funds, or can't create a
    // channel above the min channel size.
    case int64(fundsAvailable) < numSelectedNodes*int64(p.maxChanSize):
        i := 0
        for fundsAvailable > p.minChanSize {
            // We'll attempt to allocate the max channel size
            // initially. If we don't have enough funds to do this,
            // then we'll allocate the remainder of the funds
            // available to the channel.
            delta := p.maxChanSize
            if fundsAvailable-delta < 0 {
                delta = fundsAvailable
            }

            directives[i].ChanAmt = delta

            fundsAvailable -= delta
            i++
        }

        // We'll slice the initial set of directives to properly
        // reflect the amount of funds we were able to allocate.
return directives[:i:i], nil

[РЕДАКТИРОВАТЬ: прямой ответ]

  

Итак, эвристика использует только пропускную способность канала для поиска маршрута?

"на основе текущего внутреннего состояния, состояния графика канала, набора узлов, которые мы должны исключить, и количества доступных средств"

  

Имеется ли в эвристике пути поиск информации, с какой стороныкакой канал в сети владеет, или он только вычисляет маршрут в зависимости от емкости каналов?

Глядя на пример примера , мы только получить информацию о «емкости» «края» в графе и не о том, сколько каждой партии принадлежит ; только то количество, которое они готовы передать. Как объяснялось выше, да, это зависит от емкости, но оно имеет больше свойств, а не только суммы.

ответил skang404 8 FebruaryEurope/MoscowbThu, 08 Feb 2018 02:57:12 +0300000000amThu, 08 Feb 2018 02:57:12 +030018 2018, 02:57:12

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132