용어집 / 라이트닝과 레이어 2
더스트 HTLC
- 더스트 HTLC란 무엇입니까?
- 더스트 HTLC는 커밋먼트 트랜잭션에서 자체 출력을 가질 만큼 크지 않은 라이트닝 결제로, 강제 종료가 발생하면 채널 당사자 어느 쪽도 아닌 채굴업자에게 이 금액이 돌아갑니다.
라이트닝 채널은 진행 중인 결제가 더스트 한도에 회수 수수료를 더한 금액보다 적으면 그 결제를 위한 출력을 만들지 않으며, 그 금액은 채굴 수수료가 됩니다. 더스트 한도가 546사토시이고 킬로웨이트당 수수료율이 5,000이면 3,861사토시 미만은 모두 잘려 나갑니다. 이 돈은 해당 결제가 아직 이동 중일 때 채널이 강제 종료되는 경우에만 손실됩니다.
작동 방식
더스트 HTLC는 판단이 아니라 계산으로 결정됩니다. 채널 소유자가 선택한 더스트 한도에 온체인에서 해당 결제를 청구하는 데 드는 비용을 더한 금액이 기준입니다.
BOLT 3은 버려지는 출력을 잘린(trimmed) 출력이라고 부릅니다. 자신이 제공하는 결제의 경우 채널은 금액에서 HTLC-timeout 수수료를 뺀 값을 확인하고, 받는 결제의 경우 금액에서 HTLC-success 수수료를 뺀 값을 확인합니다. 이 두 트랜잭션은 앵커가 없는 채널에서 각각 663과 703 웨이트 유닛의 무게를 가지므로, feerate_per_kw가 5,000일 때 각각 3,315사토시와 3,515사토시의 비용이 듭니다. 더스트 한도 546사토시를 기준으로 하면 제공 결제의 임계값은 3,861사토시, 수령 결제의 임계값은 4,061사토시가 됩니다.
BOLT 3의 계산 예시는 이 손실을 보여 줍니다. 해당 수수료율에서 네 건의 결제가 진행 중입니다. 제공 HTLC는 5,000사토시와 1,000사토시이고, 수령 HTLC는 7,000사토시와 800사토시입니다. 5,000과 7,000은 각각 출력을 받습니다. 1,000과 800은 잘려 나가고, 커밋먼트 트랜잭션의 수수료는 기본 5,340사토시에서 7,140사토시로 올라갑니다. 이 추가된 1,800사토시는 정확히 사라진 두 결제분이며, 종료를 채굴하는 쪽에 지급됩니다.
각 당사자는 자신의 dust_limit_satoshis를 선택하므로 한 채널의 두 커밋먼트 트랜잭션은 어떤 결제가 더스트로 간주되는지에 대해 서로 다를 수 있습니다. BOLT 2는 상대방이 354사토시 미만의 값을 제안하면 노드가 해당 채널을 실패 처리하도록 하고, 자신이 너무 크다고 판단하는 값은 거부할 수 있게 합니다. 한도가 높은 상대방은 잘린 결제로 가득 찬 커밋먼트를 게시할 수 있기 때문입니다.
앵커 채널은 이 계산을 바꿉니다. option_anchors 또는 zero_fee_commitments에서는 2단계 HTLC 트랜잭션이 수수료를 싣지 않으므로 계산에서 빠지고, 임계값은 더스트 한도 자체로 낮아집니다. 이런 경우 BOLT 3은 노드가 dust_limit_satoshis를 의도적으로 높이라고 지시합니다. 한도를 넘지만 실제 수수료율에서는 회수할 수 없는 출력은 UTXO 집합만 오염시키기 때문입니다.
BOLT 2는 각 결제가 아니라 총액에 상한을 둡니다. 노드의 max_dust_htlc_exposure_msat는 그 자체로 정책의 문제인데, 이 한도를 넘으면 노드는 커밋된 후 들어오는 HTLC를 실패 처리하고 프리이미지를 공개하지 않아야 하며, 이를 통해 발생 가능한 손실을 깔끔한 실패로 바꿉니다.
확인할 수 있는 곳
더스트 HTLC는 지갑의 인터페이스가 아니라 지갑의 수탁 모델에서 나타나며, 이 사이트에 등재된 41개의 지갑 리뷰는 이 지점에서 뚜렷하게 갈립니다.
Phoenix는 휴대전화에서 실제 자기 보관형 라이트닝 노드를 실행하므로 채널도 사용자 것이고 이 노출도 사용자 것입니다. ACINQ는 전송 시 0.4%에 4사토시를 더해 청구하며, 그 전송 하나하나가 잘림이 닿을 수 있는 HTLC입니다. BlueWallet의 라이트닝 쪽은 LNDHub 서버의 계정이므로 운영자가 채널을 보유합니다. 사용자는 잘린 결제를 떠안지 않는 대신 그 운영자를 떠안습니다.
잘림은 종료 시점에 다시 나타납니다. BOLT 2는 더스트 HTLC를 포함해 어느 커밋먼트 트랜잭션에도 HTLC가 남아 있지 않을 때에만 종료 협상을 허용하므로, 온체인 관찰자가 볼 수 없는 300사토시의 결제도 협력 종료를 계속 붙잡아 둡니다.
더스트 HTLC vs 더스트 한도
더스트 한도는 노드가 선택하는 숫자이고, 더스트 HTLC는 그 숫자에 수수료를 더한 값과의 비교에서 진 결제입니다.
한도는 채널 매개변수로, open_channel과 accept_channel에서 설정되며 이후 어떤 메시지로도 전달되지 않습니다. 잘림은 움직이는 결과입니다. 앵커가 없으면 임계값이 feerate_per_kw를 따라가므로, 같은 2,500사토시의 결제라도 멤풀이 한산하면 실제 출력이 되고 멤풀이 붐비면 잘려 나갑니다.
두 개념은 적용되는 단계도 다릅니다. Bitcoin Core의 임계값, 즉 레거시 출력의 경우 546사토시이고 pay-to-witness-script-hash의 경우 330사토시인 이 값은 존재하는 트랜잭션에 대한 중계 정책입니다. 잘린 HTLC는 출력 자체가 기록되지 않으므로 이 검사에 결코 도달하지 않습니다.