용어집 / 트랜잭션과 수수료
TRUC 트랜잭션
별칭은 TRUC transaction, v3 transaction입니다.
- TRUC 트랜잭션이란 무엇입니까?
- TRUC 트랜잭션은 버전 3을 선언하고 확인되지 않은 부모 트랜잭션과 확인되지 않은 자식 트랜잭션을 각각 최대 1개까지 허용함으로써, 확인되지 않은 지출을 연쇄시키는 자유를 신뢰할 수 있는 수수료 인상과 맞바꾸는 트랜잭션입니다.
BIP-431에 명시되어 있습니다.
TRUC는 발신자가 트랜잭션의 버전을 3으로 설정하여 선택하는 중계 정책이며, 합의 규칙이 아닙니다. Bitcoin Core 28.0은 BIP 431에 따라 이를 표준으로 만들었는데, 해당 BIP는 트랜잭션을 10,000 가상 바이트로, 그 자식 트랜잭션을 1,000 가상 바이트로 제한합니다. 직접 설정할 일은 없습니다. BIP 431은 이 정책을 라이트닝 네트워크 같은 프로토콜을 겨냥한 것으로 두며, 이런 프로토콜의 커밋먼트 트랜잭션은 미리 서명되고 방송 시점에 수수료가 올라갑니다.
작동 방식
TRUC는 일반 트랜잭션 위에 얹은 여섯 가지 규칙이며, 발신자는 버전 필드를 3으로 설정하여 여섯 가지를 한 번에 켭니다.
규칙 1은 기존 BIP125 방식의 신호 여부와 관계없이 트랜잭션을 대체 가능하게 만드는데, 같은 릴리스가 전체 수수료 대체(replace-by-fee)를 기본값으로 채택하면서 이 구분 자체를 무의미하게 만들었습니다. 규칙 2는 선택을 고정합니다. TRUC 트랜잭션의 미확인 조상은 모두 TRUC여야 하고, 미확인 TRUC 트랜잭션의 자손도 모두 TRUC여야 하므로, 일반 자식 트랜잭션을 붙여 한도를 우회할 수 없습니다. 다만 확인된 코인은 양방향 모두 예외입니다. 규칙 3은 이름의 유래가 된 제한으로, 미확인 조상 하나와 미확인 자손 하나이며 CPFP 예외(carve out)가 없습니다. 규칙 4는 트랜잭션을 10,000 가상 바이트로 제한하며, 다른 모든 트랜잭션의 표준성 상한은 100,000 가상 바이트입니다. 규칙 5는 자식 트랜잭션을 1,000 가상 바이트로 제한하며, taproot 입력을 쓰더라도 15개의 입력과 2개의 출력을 담을 여지가 남습니다. 규칙 6은 주변 패키지가 충분히 지불한다면 트랜잭션이 노드의 최소 중계 수수료 미만, 심지어 0으로도 머무를 수 있게 합니다.
이 모든 것의 이유는 핀닝(pinning), 즉 다른 누군가의 쓰레기 트랜잭션이 내 트랜잭션의 수수료 인상을 불가능하게 만드는 것입니다. 대체 규칙은 대체 트랜잭션이 자신이 밀어내는 모든 것보다 더 많은 절대 수수료를 지불하도록 요구하며, 100개를 초과하는 트랜잭션을 축출하게 되는 대체는 즉시 거부합니다. BIP 431은 이것이 얼마나 쉽게 악용될 수 있는지에 수치를 붙입니다. 자신의 트랜잭션 다섯 개를 대체하려는데 상대방이 각각에 21개의 자손을 붙여 두었다면, 대체는 수수료를 얼마나 내든 개수만으로 거부됩니다. 내 미확인 트랜잭션에 값싼 자손을 붙일 수 있는 사람이 바로 내 수수료 인상 가격을 정하는 사람입니다.
1,000 가상 바이트의 자식 트랜잭션 한도가 이에 대한 직접적인 답입니다. 기본 자손 한도 아래에서는 수수료를 올리는 자식 트랜잭션 자체가 100,000 가상 바이트가 될 수 있고, 가상 바이트당 1사토시라면 대체 트랜잭션이 정당하게 경쟁하려면 최소 100,000사토시를 부담해야 합니다. 자식 트랜잭션을 1,000으로 제한하면 상한이 100분의 1로 줄어듭니다.
두 가지 메커니즘이 규칙과 함께 작동합니다. 형제 트랜잭션 축출은 더 많은 수수료를 내는 두 번째 자식 트랜잭션을 만난 노드가 새로 온 것을 거부하는 대신 대체 규칙에 따라 첫 번째를 축출하게 하며, 자식 트랜잭션은 하나만 존재할 수 있으므로 무엇을 버릴지 고민할 필요가 없습니다. Bitcoin Core 28.0이 크기 2의 연결된 그룹에 대해 활성화한 패키지 수수료 대체(replace-by-fee)는 그 형태가 보장되므로 TRUC 트랜잭션에서도 작동합니다.
비트코인을 구매할 때 이것이 중요한 이유
TRUC는 일반 비트코인 보유자에게 한 가지 순간에 닿습니다. 라이트닝 채널을 온체인에서 닫아야 하고, 트랜잭션에 서명한 뒤에 수수료를 올려야 하는 순간입니다.
구매가 문제되는 지점은 아닙니다. 이 사이트의 지갑 리뷰 41건 중 실제 라이트닝 노드를 휴대폰에 두는 리뷰에서 이 정책은 더 이상 잡학이 아니게 됩니다. ACINQ의 Phoenix는 이 사이트에서 4.0점으로 평가되며 12단어 시드 문구로 보호되는 독립 실행 노드를 운영하는데, ACINQ가 문서화한 비상 경로는 강제 종료를 하고 약 720개 블록, 대략 닷새를 기다린 뒤 Electrum 같은 도구로 온체인에서 자금을 복구하는 것입니다. 이 종료는 커밋먼트 트랜잭션을 방송하며, BIP 431은 이 트랜잭션이 핀닝을 피하려고 CPFP 예외에 의존하는 대상이라고 명시합니다. 타임아웃이 만료되기 전에 블록에 들어가지 못한 커밋먼트 트랜잭션은 그냥 머물지 않습니다. 그것이 보호하던 자금은 상대방이 청구할 수 있게 됩니다.
수탁은 노출을 옮기며, 이것이 이 사이트 기록의 차이입니다. 4.6점으로 평가된 Strike는 라이트닝으로 출금할 수 있게 하고 이체에 자체 수수료를 붙이지 않지만, 앱에 있는 동안 잔액은 수탁형이므로 채널과 그 종료는 Strike의 몫입니다. 3.8점으로 평가된 Muun은 온체인과 라이트닝을 하나의 잔액으로 표시하고 서브마린 스왑으로 둘 사이를 오갑니다. 채널에서 실제로 보유하는 몫이 클수록 신뢰할 수 있는 수수료 인상이 더 큰 문제가 되며, TRUC는 이 정책을 실행하는 노드 집합 안에서 그러한 수수료 인상을 제공하기 위해 쓰인 정책입니다.
Phoenix의 강제 종료, 핀닝된 경우와 되지 않은 경우
Phoenix의 강제 종료는 TRUC가 제 역할을 하는 모습을 가장 분명히 볼 수 있는 지점입니다. 방송되는 트랜잭션이 수수료 시장이 어떤 모습일지 누구도 알기 오래전에 서명되었기 때문입니다.
먼저 예전 방식을 봅니다. 커밋먼트는 버전 3을 선언하지 않는 일반 트랜잭션이며, 둘 모두의 비용을 지불하는 자식 트랜잭션과 함께 방송됩니다. 상대방은 두 번째 앵커 출력을 보유하는데, 이 출력은 어느 쪽이든 수수료를 올릴 수 있도록 존재하며, 상대방은 이를 이용해 100,000 가상 바이트에 가상 바이트당 1사토시를 내는 자신의 자식 트랜잭션을 붙입니다. 상대방이 한 일 중 무효인 것은 없습니다. CPFP 예외 덕분에 자손 한도를 넘겨 자식 트랜잭션 하나를 추가로 밀어 넣을 수 있었지만, 대체 규칙은 상관하지 않습니다. 상대방의 자식 트랜잭션을 밀어내려면 그것이 이미 지닌 100,000사토시의 수수료를 지불해야 자신의 수수료가 의미를 가지며, 예외는 자식 트랜잭션을 정확히 하나만 추가로 허용했으므로 제3자가 트랜잭션을 공유하는 순간 무력해집니다. 자신의 종료는 작성자에게 거의 비용이 들지 않은 쓰레기 트랜잭션에 의해 핀닝됩니다.
이제 두 트랜잭션을 버전 3으로 설정합니다. 커밋먼트는 아무것도 지불하지 않아도 됩니다. 규칙 6은 패키지가 기준을 통과하기만 하면 중계 하한 아래에서도 이를 받아들이며, 몇 달 전에 서명한 트랜잭션에 필요한 것이 바로 이것입니다. 자식 트랜잭션은 하나만 존재할 수 있고 1,000 가상 바이트를 넘을 수 없으므로, 누군가 내게 부과할 수 있는 최악의 비용은 예전의 100분의 1입니다. 상대방이 자신의 자식 트랜잭션을 먼저 넣는다면 내 것은 더 많이 지불하여 그것을 축출합니다. 그리고 두 트랜잭션은 한 단위로 이동합니다. Bitcoin Core 28.0이 같은 릴리스에서 부모 하나와 자식 하나의 패키지 중계를 함께 내놓았고, TRUC 부모는 최소 중계 수수료율 미만으로 허용되기 때문입니다.
솔직한 단서는 채택입니다. BIP 431은 핀닝 방지 이점이 개별 노드의 멤풀에 국한된다고 밝히며, 자신의 트랜잭션이 얼마나 안전한지는 네트워크에서 이 정책을 실행하는 비중이 얼마나 되는지에 달려 있습니다. 버전 3은 Bitcoin Core 28.0 이전에는 비표준이었으므로, 이전 릴리스에 머문 노드는 이를 전혀 중계하지 않으며, 릴리스 노트는 이 새로운 패키지 중계를 제한적이고 적대적 조건에서는 아직 신뢰할 수 없다고 밝힙니다.
TRUC 트랜잭션 vs 트랜잭션 버전 번호
트랜잭션 버전 번호는 모든 비트코인 트랜잭션이 지니는 필드이며, TRUC는 이제 그 필드의 한 값으로 얻는 규칙 묶음입니다.
버전을 3으로 설정하는 것이 발신자가 선택하는 방식이지만, 규칙이 존재하는 곳은 그 필드가 아닙니다. 필드는 플래그일 뿐이며, 중요한 모든 일은 노드의 정책 코드에서 일어납니다. 그래서 업그레이드된 노드는 이전 노드가 거부하는 트랜잭션을 중계합니다. 합의는 어느 쪽으로도 입장을 취한 적이 없습니다. BIP 431은 버전 3이 이전에는 비표준이었고 기존 사용 방식과 알려진 충돌이 없었다고 기록하므로, Bitcoin Core 28.0에서 바뀐 것은 유효성이 아니라 중계 가능성입니다.
TRUC 트랜잭션 vs 클러스터 멤풀
클러스터 멤풀은 노드 멤풀의 모든 트랜잭션에 토폴로지 한도를 적용하지만, TRUC는 이를 요청하는 트랜잭션에만 훨씬 더 엄격한 한도를 적용합니다.
둘은 경쟁 관계가 아니라 관련된 작업이며, BIP 431이 이를 직접 밝힙니다. 클러스터 멤풀은 선택한 트랜잭션만이 아니라 모든 트랜잭션에 클러스터 크기를 제한하며 TRUC 한도보다 훨씬 덜 제한적입니다. 또한 BIP 431이 지목하는 공백을 남깁니다. 클러스터 멤풀은 절대 수수료나 충돌 개수를 통한 핀닝을 해결하지 못하며, 예전 라이트닝 채널 설계가 의존했던 CPFP 예외와 호환되지 않습니다. TRUC, 형제 트랜잭션 축출, 패키지 대체는 그 예외에 의존하던 프로토콜에 제시된 경로입니다.