
막힌 거래: 왜 생기는지, 그리고 수수료 교체가 어떻게 빼내 주는지
당신은 결제를 보냈습니다. 지갑은 "대기 중"이라고 말합니다. 한 시간이 지납니다. 그리고 세 시간. 블록 탐색기는 당신의 거래가 멤풀에 앉아 있는 것을 보여줍니다. 확인되지 않은 채로, 보아하니 영원히.
망가진 것도 없고 잃어버린 것도 없습니다. 당신은 그저 경매에서 낮게 입찰했을 뿐이고, 그 경매는 아직 진행 중입니다.
수수료는 가격이 아니라 경매다
블록 공간은 희소하고 앞으로도 그럴 것입니다. 각 블록이 담을 수 있는 거래 데이터의 양은 제한되어 있고, 채굴자는 어떤 거래를 넣을지 고릅니다. 그들은 수수료율 — 가상 바이트당 사토시 — 로 고릅니다. 그것이 수익을 가장 크게 만들기 때문입니다.
그러니 당신이 붙이는 수수료는 어떤 서비스에 대한 가격이 아닙니다. 다음 블록에 들어가려는 다른 모든 사람을 상대로 계속 열려 있는 경매에서의 입찰입니다.
여기서 두 가지가 따라 나오고, 둘 다 직관에 어긋납니다.
당신의 수수료는 다른 모든 사람의 수수료에 견주어서만 의미가 있습니다. 지난 화요일에 십 분 만에 확인된 그 수수료가, 붐비는 주말에는 이틀을 그대로 앉아 있을 수 있습니다. 당신의 거래에서는 아무것도 바뀌지 않았습니다. 바뀐 것은 경쟁입니다.
시간 초과라는 것은 없습니다. 낮게 입찰된 거래는 만료되지도, 실패하지도 않습니다. 더 높이 부른 이들이 지나가는 동안 멤풀에서 기다리고, 무한정 기다릴 수 있습니다. 노드들은 결국 아주 오래된 거래를 자기 멤풀에서 떨어냅니다 — 보통 두 주쯤 뒤에 — 하지만 그것은 지역적인 정리용 기본값이지 프로토콜 규칙이 아니며, 탈출구로 기댈 수 있는 것이 아닙니다.
바로 그 두 번째 지점이 막힌 거래를 그토록 괴롭게 만듭니다. 오류 메시지도, 환불도, 뻔한 대응책도 없습니다. 끝나지 않는 회전 표시 하나뿐입니다.
당신 것이 왜 막혔나
수수료 추정이 낡았습니다. 추정기는 최근 상황을 읽습니다. 당신이 추정한 시점과 전파한 시점 사이에 멤풀이 차오르면 — 큰 거래소가 자금을 모으고 있거나, NFT 발행이 있거나, 오디널스 물결이 밀려오면 — 당신의 입찰은 곧바로 시세 아래로 내려갑니다.
절약 등급을 골랐고, 요청한 그대로를 받았습니다. 낮은 우선순위 등급은 혼잡이 풀릴 것이라는 데 거는 명백한 내기입니다. 대개는 풀립니다. 가끔은 안 풀립니다.
당신의 거래가 물리적으로 큽니다. 수수료율은 바이트당이므로, 작은 입력을 여럿 쓰는 거래는 같은 금액의 단순한 거래보다 확인에 더 비쌉니다. 먼지가 많은 지갑은 이 문제에 끊임없이 부딪힙니다.
확인되지 않은 입력을 쓰고 있습니다. 확인되지 않은 거래의 거스름돈을 쓰면, 부모 거래가 확인되기 전까지 새 거래도 확인될 수 없습니다. 막힌 결제 하나가 그 뒤에 오는 모든 것을 조용히 좌초시킬 수 있습니다.
수수료 교체: 진짜 해결책
BIP 125에 규정된 수수료 교체는, 확인되지 않은 거래에 대해 더 높은 수수료를 내는 대체 거래를 전파할 수 있게 해줍니다. 노드들은 원래 것을 버리고 새 것을 중계하며, 채굴자는 더 나은 입찰을 취합니다. 둘 중 하나만 확인될 수 있습니다 — 같은 입력을 쓰므로 구조상 서로를 배제합니다.
이것은 두 번째 결제가 아닙니다. 같은 결제를, 다시 입찰하는 것입니다.
실제로는 두 가지 세부가 중요합니다.
거래는 미리 교체 가능으로 표시되어 있어야 합니다. RBF는 선택적으로 켜는 것이고, 입력의 시퀀스 번호를 0xfffffffe보다 낮게 두어 신호합니다. 비트코인 코어의 관례는 0xfffffffd이며, SSP가 설정하는 것도 그것입니다 — 거래 빌더 안에는 말 그대로 0xffffffff - 2라고 적혀 있습니다. 만들 때 교체 가능으로 표시되지 않았다면 대부분의 노드가 대체 거래를 거부하고, 당신의 선택지는 상당히 좁아집니다.
대체 거래는 어떤 하한을 넘어야 하는데, 가장 그럴듯해 보이는 하한이 틀린 것입니다. BIP 125의 네 번째 규칙은 대체 거래가 최소한 원래 수수료 더하기 자기 크기를 최소 중계 요율로 계산한 값을 내라고 요구합니다. 여기서 사람들이 걸려 넘어집니다. "절약"에서 "보통"으로 올리면 크기는 거의 그대로인데 수수료율만 올라갈 수 있고, 셈이 조금이라도 모자라면 노드는 대체 거래를 거부하며 당신은 아무것도 얻지 못합니다. SSP는 대체 거래를 만들기 전에 이 하한을 명시적으로 계산합니다. 그래서 새 수수료는 네트워크에 조용히 거절당하는 대신 규칙 4를 확실히 넘습니다.
SSP에서는 확인되지 않은 교체 가능 거래가 거래 목록에 수수료로 교체 동작을 보여줍니다. 같은 수신자와 같은 금액을 미리 채워 넣고, 하한을 계산할 수 있도록 교체되는 거래의 수수료를 함께 실어 나른 다음, 다른 어떤 결제와도 똑같이 두 기기에서 대체 거래에 서명하도록 안내합니다. 두 번째 서명은 여전히 필요합니다 — 대체 거래는 새로운 거래이고, 한 기기로 서명되는 것은 아무것도 없습니다.
모든 체인이 허용하지는 않는다
RBF는 보편적 기능이 아니라 정책적 선택이고, SSP가 지원하는 체인들은 실제로 다릅니다.
| 체인 | SSP에서 교체 가능 |
|---|---|
| 비트코인 | 예 |
| 라이트코인 | 예 |
| 도지코인 | 예 |
| Ravencoin | 예 |
| 비트코인 캐시 | 아니요 |
| Zcash | 아니요 |
| Flux | 아니요 |
비트코인 캐시가 빠진 것은 그 체인 쪽의 의도적인 결정입니다. BCH는 판매 현장에서 무확인 결제를 더 믿을 만하게 만들려고 RBF를 없앴습니다. 실수가 아니라 진짜 맞바꿈입니다 — 확인되지 않은 결제에 대한 확신을 얻고, 낮게 입찰된 것을 바로잡을 능력을 잃습니다. Zcash와 Flux도 대체 거래를 중계하지 않습니다.
그런 체인에서는 값을 낮게 매긴 거래를 그냥 견뎌내야 합니다. 그리고 그것이야말로, 되돌리게 해주지 않는 체인에서는 애초에 낮게 입찰하지 말아야 할 가장 강력한 이유입니다.
실제로 벌어졌을 때 할 일
먼저 조금 기다리십시오. 멤풀 혼잡은 뾰족뾰족합니다. 밤 아홉 시에 가망 없어 보이던 거래가 밀린 물량이 빠지는 밤사이에 확인되는 일이 흔합니다. 해결에 돈을 쓰기 전에 멤풀 시각화 도구를 먼저 보십시오.
교체 가능하고 급하다면 교체하십시오. 당신의 원래 요율보다 위가 아니라, 지금 다음 블록 맨 아래의 요율보다 위인 수수료율을 고르십시오. 진 입찰보다 아주 조금만 높게 부르는 것이 이 일을 두 번 하게 되는 길입니다.
두 번째 결제를 전파하지 마십시오. 첫 번째가 끝내 확인되면 두 번 낸 것이 됩니다. 교체가 안전한 이유는 바로 원래 것과 서로 배타적이기 때문입니다. 별개의 거래는 그렇지 않습니다.
막힌 거래의 거스름돈을 쓰지 마십시오. 첫 번째 위에 두 번째 막힌 거래를 이어 붙이게 됩니다.
교체할 수 없다면 기다리십시오. RBF가 없는 체인에서는 혼잡이 걷힐 때 거래가 확인되거나, 결국 멤풀에서 떨어져 나가고 그 뒤에 코인을 다시 쓸 수 있게 됩니다. "취소" 서비스를 시도하지 마십시오. 그런 것은 존재하지 않습니다.
다음번에 피하려면
등급 이름표가 아니라 수수료 자체를 보십시오. "절약"은 한산한 일요일과 수수료 급등 때 서로 다른 것을 뜻합니다. SSP를 포함한 대부분의 지갑이 실제 요율을 보여줍니다.
급한 정도와 수수료를 정직하게 맞추십시오. 하루쯤은 정말로 상관없는 결제라면 낮은 수수료를 써야 합니다. 그 등급이 존재하는 이유가 그것입니다. 불안하게 새로 고침하게 될 결제라면 그러지 말아야 합니다.
UTXO 묶음을 정갈하게 유지하십시오. 수수료가 쌀 때 작은 입력들을 합쳐 두면 앞으로의 모든 거래가 더 작고 싸집니다. 장기 보유자가 수수료에 대해 할 수 있는 가장 효과적인 일이고, 가장 좋은 때는 아무도 블록 공간을 원하지 않을 때입니다.
체인과 시점을 의도적으로 고르십시오. 수수료 전략은 진짜 기술이고, 그 대부분은 블록 공간이 어떤 때에는 다른 때보다 싸다는 것을 알아차리는 일입니다.
막힌 거래는 암호화폐에서 진정으로 무해한 몇 안 되는 문제 가운데 하나입니다. 당신의 코인은 한 번도 당신의 통제를 벗어난 적이 없고, 공격자가 끼어 있지도 않으며, 해결책은 잘 규정된 프로토콜 기능입니다. 그것이 비상사태처럼 느껴지는 이유는 오직 화면이 아무런 안심도 건네지 않기 때문이고 — 그 사실 자체가, 아래에서 무슨 일이 벌어지는지 이해해 둘 이유가 됩니다.


