Возможное состояние гонки (двойная трата) на HTLC-Timeout в сети Lightning?

Из предлагаемых выходов HTLC,

# To remote node with revocation key
OP_DUP OP_HASH160 <RIPEMD160(SHA256(revocationpubkey))> OP_EQUAL
OP_IF
    OP_CHECKSIG
OP_ELSE
    <remote_htlcpubkey> OP_SWAP OP_SIZE 32 OP_EQUAL
    OP_NOTIF
        # To local node via HTLC-timeout transaction (timelocked).
        OP_DROP 2 OP_SWAP <local_htlcpubkey> 2 OP_CHECKMULTISIG
    OP_ELSE
        # To remote node with preimage.
        OP_HASH160 <RIPEMD160(payment_hash)> OP_EQUALVERIFY
        OP_CHECKSIG
    OP_ENDIF
OP_ENDIF

При следующих условиях,

  • a locktimeустанавливается равным 600900 в транзакции HTLC-Timeout.
  • удаленный узел имеет payment_secret.
  • локальный узел хочет прервать последнюю транзакцию фиксации.

Насколько я понимаю, для тайм-аута последней транзакции фиксации локальный узел должен,

  1. транслировать транзакцию фиксации с высотой блока 600900;
  2. немедленно транслировать транзакцию HTLC-Timeout;
  3. подождите несколько дней, чтобы провести транзакцию HTLC-Timeout после того, как пройдет указанное значение блокировки времени.

Между тем, удаленный узел также payment_secretможет провести транзакцию фиксации. Приведет ли это к состоянию гонки/двойной трате в сети Биткойн? Если да, то как это можно решить?

Ответы (1)

Прежде всего, я думаю, что есть небольшая путаница в обозначениях. Вы не тратите транзакцию, а выводит транзакцию. В случае предлагаемых htlcs вывод является только одним (из потенциально многих других) выходом.

Также я понимаю, что таймлок немного отличается. Если вы опубликуете коммит-транзакцию, ее можно будет добыть и проверить напрямую. Это выход с временной блокировкой, например, htlc, который можно потратить только после блокировки по времени.

Что касается условий гонки / двойной траты. Прежде всего, двойные траты в биткойнах невозможны по замыслу (если только у нас нет неизвестного эксплойта), поэтому мы можем свести это к вопросу о состоянии гонки. Здесь мы должны различать два случая:

  1. До временной блокировки: в этом случае вы не можете провести вывод htlc, и только удаленная сторона может сделать это с прообразом. Это безопасный период для удаленной стороны, чтобы получить средства, если предполагалось, что htlc будет перенаправлен.
  2. После временной блокировки: в этом случае на самом деле может возникнуть состояние гонки. В это время удаленная сторона не должна получать прообраз, а в любом случае прерывать маршрутизацию, но если вы не сканируете вывод, а удаленная сторона получает прообраз, то на самом деле возникает вопрос, какие расходы будут включены в блок первыми.
Спасибо за ваш ответ! Тем не менее, передача локального обязательства должна транслироваться с передачей htlc-timeout, иначе не возникнет состояния гонки. Мне интересно, обязан ли держатель прообраза избегать состояния гонки?
Итак, у меня есть вопрос здесь. Предположим, что период тайм-аута равен 600900, а транзакция HTLC_success транслируется в 600959-м блоке. Между тем, на 600900 также транслируется тайм-аут HTLC. В этом случае, какой из них будет включен в блокчейн?
@SubhraMazumdar Транзакции успеха и тайм-аута HTLC тратят один и тот же вывод, поэтому они не могут быть добыты одновременно.