본문으로 건너뛰기
buybitcoinsmart

용어집 / 라이트닝과 레이어 2

커밋먼트 트랜잭션

커밋먼트 트랜잭션이란 무엇입니까?
커밋먼트 트랜잭션은 라이트닝 채널의 양쪽 당사자가 각각 보관하는 서명된 미방송 비트코인 트랜잭션으로, 자금 조달 출력을 현재 잔액 분배에 따라 소비합니다.

모든 라이트닝 결제는 양쪽의 커밋먼트 트랜잭션을 새로운 한 쌍으로 대체하며, 이전 쌍은 삭제되지 않고 폐기됩니다. BOLT 3은 앵커 채널 커밋먼트의 예상 가중치를 1,124 가중치 단위에 아직 처리 중인 결제마다 172를 더한 값으로 정합니다. 하나를 보유한다는 것은 상대방이 몇 주 전에 동의한 수수료로 혼자서 행사할 수 있는 출구를 보유한다는 뜻입니다.

작동 방식

커밋먼트 트랜잭션에는 입력이 정확히 하나 있는데, 채널의 2-of-2 자금 조달 출력이며, 그 출력들은 해당 자금의 현재 분배입니다.

어느 순간에도 두 개가 존재하며, 상대방마다 하나씩이고, 이 둘은 의도적으로 같은 트랜잭션이 아닙니다. 각 사본은 자신의 보유자에게 지급되는 금액을 to_self_delay 블록의 OP_CHECKSEQUENCEVERIFY 잠금 뒤로 지연시키는 한편 상대방에게는 더 일찍 지급하므로, 브로드캐스트하는 쪽이 기다리는 쪽이 됩니다. option_anchors에서는 상대방조차 즉시가 아닙니다. to_remote 출력에는 1블록 CSV 잠금이 걸려 있는데, 이는 어떤 상대방도 값싼 자식 트랜잭션을 붙여 커밋먼트를 막지 못하도록 하기 위해 추가된 것입니다.

이 트랜잭션은 자신의 카운터를 숨깁니다. BOLT 3은 버전 필드를 2로 설정하고, 48비트 커밋먼트 번호를 가져와 open_channel과 accept_channel의 두 payment_basepoint 값에 대한 SHA256의 하위 48비트와 XOR한 뒤, 그 결과를 두 필드에 나눕니다. 상위 24비트는 바이트 0x80 뒤에 오는 입력의 시퀀스로 들어가고, 하위 24비트는 0x20 뒤에 오는 록타임으로 들어갑니다. 양쪽 상대방은 이를 즉시 다시 계산합니다. 체인을 지켜보는 다른 사람은 임의로 보이는 두 숫자를 볼 뿐이며 그 채널이 몇 건의 결제를 처리했는지 셀 수 없습니다.

출구 비용은 자금 제공자가 부담합니다. 어떤 출력이든 배치되기 전에 기본 수수료가 채널에 자금을 제공한 쪽에서 차감되며, option_anchors에서는 각각 330 사토시인 고정 앵커 출력 두 개도 같은 쪽에서 나옵니다. 그런 다음 출력은 가치 기준으로 가장 작은 것부터, 다음으로 scriptPubKey를 바이트 단위로 비교한 순서로, 다음으로 HTLC 출력의 경우 cltv_expiry 순서로 정렬되므로, 양쪽 상대방은 서로에게 한 번도 전송하지 않고도 바이트 단위로 동일한 트랜잭션에 도달합니다.

기록할 가치가 없을 만큼 작은 것은 기록되지 않습니다. BOLT 3은 이를 트리밍된 출력(trimmed outputs)이라고 부릅니다. HTLC의 금액에서 자체 2단계 트랜잭션에 들 수수료를 뺀 값이 소유자의 dust_limit_satoshis 아래로 떨어지면 출력이 전혀 생기지 않고, 그 금액은 누구의 잔액도 아닌 채굴 수수료가 됩니다. BOLT 3이 열거하는 임계값은 Bitcoin Core의 임계값입니다: pay to witness script hash의 경우 330 사토시, pay to witness pubkey hash의 경우 294, pay to anchor의 경우 240입니다. 이는 설정값 자체가 아니라 하한이며, BOLT 3은 앵커 채널에 이보다 위에 있으라고 지시합니다. 그 채널에서는 2단계 트랜잭션이 수수료를 내지 않아 트리밍에 전혀 기여하지 않기 때문입니다.

가장 최근 형태의 트랜잭션은 내장 수수료를 버립니다. zero_fee_commitments가 적용되는 곳에서는 버전 필드가 3이 되고, feerate_per_kw은 0으로 고정되며, pay to anchor 스크립트 OP_1 <0x4e73>을 담은 shared_anchor 출력 하나가 해당 240 사토시 한도로 추가됩니다. 누구나 이를 쓸 수 있으므로, 커밋먼트는 그 쌍이 서명될 당시의 비용이 아니라 그날 수수료 시장이 요구하는 비용으로 자식이 부모를 지불하는 방식(child pays for parent)을 통해 블록에 도달합니다.

비트코인을 구매할 때 이것이 중요한 이유

커밋먼트 트랜잭션은 라이트닝 잔액이 화면 위의 숫자에서 수수료를 뺀 사토시가 되는 지점이며, 그 규칙 두 가지는 실제 돈을 들게 합니다.

첫째는 트리밍입니다. 채널 안의 작은 금액은 반올림되지 않고 삭제되며, 사양 자체의 예시 계산은 처리 중인 결제 각각이 더스트 한도에 2단계 비용을 더한 값 아래로 떨어졌기 때문에 1,800 사토시를 채굴업자에게 넘깁니다. 이는 무엇이 애초에 라이트닝으로 옮길 가치가 있는지에 하한을 둡니다. 이 사이트의 리뷰에 실린 ACINQ의 지갑 Phoenix는 채널 생성에 1,000 사토시를 청구하며, 강제 종료에서 복구하는 데 대략 720 블록, 약 5일이 걸린다고 명시합니다. 수천 사토시로 자금을 조달한 채널은 결코 맞아떨어지지 않는 계산입니다.

둘째는 커밋먼트 트랜잭션 안의 수수료가 서명될 때 선택되었다는 점입니다. 자금 제공자의 잔액은 그날의 feerate_per_kw으로 차감되었고, 그 후 멤풀이 움직였다면 지갑에 있는 트랜잭션은 그것이 담고 있는 가격으로 컨펌되지 않을 수 있습니다. 앵커는 바로 이 때문에 존재하며, zero_fee_commitments는 그 결정을 대신 브로드캐스트 시점으로 옮기기 위해 존재합니다.

채널을 다른 누군가가 보유하고 있다면 두 규칙 어느 것도 적용되지 않습니다. 이 사이트의 거래소 리뷰에서 4.6점을 받은 Strike는 라이트닝 네이티브이자 수탁형으로, 잔액이 앱 안에 있는 동안 그러하며, Coinbase는 소액에서는 라이트닝 출금 가격을 온체인 전송보다 낮게, 대액에서는 높게 책정합니다. 그 대가로 포기하는 것은 지갑 리뷰에 기록되어 있습니다: 2.7점을 받고 주의 표시가 붙은 Wallet of Satoshi는 2023년 11월 23일에 미국 고객에 대한 서비스를 중단했고, 이후 MiCA 전환 기간이 끝나면서 유럽연합 전역에서 수탁형 라이트닝 서비스를 철수했습니다. 의지할 커밋먼트 트랜잭션이 존재하지 않았던 것입니다.

BOLT 3 수수료 예시 살펴보기

BOLT 3은 예시 수수료 계산을 하나 공개하며, 이를 끝까지 따라가면 채널의 돈이 실제로 어디로 가는지 알 수 있습니다.

설정은 feerate_per_kw 5,000, dust_limit_satoshis 546, 그리고 처리 중인 결제 네 건입니다: 제안된 HTLC 5,000 및 1,000 사토시, 수신된 HTLC 7,000 및 800 사토시입니다. 그 수수료율에서 HTLC 타임아웃 트랜잭션의 비용은 3,315 사토시이고 HTLC 성공 트랜잭션의 비용은 3,515입니다.

가중치는 724에서 시작하며, 이는 이 예시 전체가 가정하는 형태인 option_anchors가 없는 채널의 수치입니다. 제안된 5,000 사토시 HTLC는 546에 3,315를 더한 값을 통과하므로 출력을 받고 가중치는 896으로 올라갑니다. 제안된 1,000 사토시 HTLC는 이를 통과하지 못하고 트리밍됩니다. 수신된 7,000 사토시 HTLC는 546에 3,515를 더한 값을 통과하므로 출력을 받고 가중치는 1,068로 올라갑니다. 수신된 800 사토시 HTLC는 트리밍됩니다.

기본 수수료는 5,000에 1,068을 곱하고 1,000으로 나눈 값, 즉 5,340 사토시이며, 자금 제공자의 출력에서만 차감됩니다. 채굴업자가 실제로 받는 수수료는 7,140 사토시인데, 트리밍된 HTLC 두 건이 그 위에 더해지기 때문입니다. 처리 중인 13,800 사토시 가운데 1,800은 누구의 잔액으로도 존재하지 않게 되며, 수수료가 빠진 뒤 자금 제공자 자신의 출력이 더스트 한도 아래로 떨어지면 총액은 더 늘어날 수도 있습니다.

커밋먼트 트랜잭션 vs 페널티 트랜잭션

커밋먼트 트랜잭션은 양쪽 상대방이 서명한 분배를 지급하고, 페널티 트랜잭션은 이미 폐기한 분배를 공개한 상대방으로부터 채널 전체를 빼앗습니다.

둘은 서로 다른 것을 씁니다. 커밋먼트 트랜잭션은 자금 조달 출력을 씁니다. 페널티 트랜잭션은 구식이 된 것으로 드러난 커밋먼트 트랜잭션의 출력을, 그 상태가 대체될 때 보유자가 넘긴 폐기 키를 사용해 씁니다. to_local 스크립트는 두 가지 미래를 하나의 출력에 기록합니다: 한 갈래는 to_self_delay 블록 뒤에 지연 키가 필요하고, 다른 갈래는 폐기 서명이 필요하며 지연 없이 작동합니다.

커밋먼트 트랜잭션 vs 강제 종료

커밋먼트 트랜잭션은 보유하는 객체이고, 강제 종료는 누군가 그것을 브로드캐스트하는 사건입니다.

이 구분이 중요한 이유는 행동하는 쪽이 반드시 본인이 아닐 수 있기 때문입니다. 상대방이 현재 상태로 강제 종료하면, 상대방의 사본이 본인이 아무것도 하지 않아도 본인 쪽에 지급하며, 조건은 앵커 채널이 to_remote 출력에 거는 1블록 CSV 잠금뿐입니다. 본인의 사본은 응답이 끊긴 상대방에 대한 대비책이며, 지연을 끝까지 기다리게 만드는 사본입니다. 커밋먼트 트랜잭션을 보유하는 것은 정상적이고 지속적이며 무료이고, 브로드캐스트하는 것은 차라리 겪지 않았으면 하는 사건입니다.

혼동하기 쉬운 용어

자주 묻는 질문

커밋먼트 트랜잭션은 실제로 브로드캐스트되는 경우가 있습니까?

대개는 아닙니다. 협력적으로 폐쇄되는 채널은 더 저렴한 다른 트랜잭션에 서명하고, 커밋먼트 트랜잭션 쌍은 그대로 폐기됩니다. 커밋먼트 트랜잭션은 한쪽이 협력을 포기할 때만 브로드캐스트되며, 강제 종료가 바로 그런 경우입니다.

채널이 폐쇄되었을 때 라이트닝 잔액보다 적은 금액을 돌려받은 이유는 무엇입니까?

두 가지 규칙이 일부를 가져갑니다. 기본 수수료는 채널에 자금을 넣은 쪽에서 나가며, 두 상대방이 정한 더스트 한도, 즉 BOLT 3에서 라이트닝 출력이 사용하는 스크립트 유형 기준으로 330 사토시 이상이라고 정한 그 한도 미만인 금액은 출력으로 아예 기록되지 않고 채굴업자에게 돌아갑니다.

채널 상대방이 저 없이 제 커밋먼트 트랜잭션을 다시 작성할 수 있습니까?

아닙니다. 새로운 상태마다 두 개의 서명이 필요하므로, 본인이 서명하지 않으면 잔액은 바뀌지 않습니다. 상대방이 할 수 있는 일은 이미 서명한 오래된 상태를 브로드캐스트하는 것뿐이며, 폐기 키와 지연 기간은 바로 그런 경우를 처벌하기 위해 존재합니다.

다음에 읽을 글

관련 용어

라이트닝과 레이어 2 분야의 다른 용어

이 페이지를 영어로 읽기