비트코인 트랜잭션이 미확인 상태로 멈췄다면? Replace-By-Fee(RBF), Child-Pays-for-Parent(CPFP), 재전송(Re-broadcast) 도구를 활용한 해결 방법을 단계별로 안내한다.
비트코인 트랜잭션을 보내고 TXID를 확인했는데, 몇 시간째 미확인 상태로 멈춰 있다. 멤풀이 혼잡하고, 수수료가 너무 낮았고, 트랜잭션이 멈췄다. 비트코인을 사용하다 보면 가장 흔하게 겪는 문제 중 하나인데, 완전히 해결 가능하다.
이 가이드에서는 멈춘 비트코인 트랜잭션을 해결하는 세 가지 방법, 각각의 적용 시점, 그리고 과정을 쉽게 만들어주는 도구를 소개한다.
비트코인 트랜잭션은 멤풀에 들어갔지만, 마이너가 더 높은 수수료를 내는 트랜잭션을 우선 처리하면서 계속 밀릴 때 멈추게 된다. 이런 상황이 발생하는 원인은 다음과 같다:
멈춘 트랜잭션은 소실된 것이 아니다. 비트코인이 사라진 게 아니다. 단지 아직 블록에 포함되지 않았을 뿐이다. 결국 확인되거나, 약 14일(336시간) 후 노드가 멤풀에서 해당 트랜잭션을 제거하면 자금은 마치 트랜잭션이 없었던 것처럼 지갑으로 돌아온다.
하지만 14일은 너무 길다. 지금 바로 해결하는 세 가지 방법을 알아보자.
적합한 경우: 본인이 직접 보낸 트랜잭션이고, 지갑이 RBF를 지원할 때.
RBF는 동일한 입력(input)을 사용하되 더 높은 수수료를 지정한 대체 트랜잭션을 생성하는 방법이다. 새 트랜잭션이 기존 트랜잭션을 무효화하고, 마이너는 수수료가 더 높은 버전을 포함시킨다.
Bitcoin Core에서:
bitcoin-cli bumpfee "your-stuck-txid"
Bitcoin Core가 현재 멤풀 상태를 기반으로 적절한 수수료율의 대체 트랜잭션을 자동 생성한다.
지갑 앱에서: 대부분의 지갑(Sparrow, Electrum, BlueWallet, Nunchuk)은 미확인 트랜잭션에 "Bump Fee" 또는 "Speed Up" 버튼을 표시한다. 버튼을 클릭하고, 새 수수료율을 선택한 뒤 확인하면 된다.
적절한 수수료 선택: mempool.space 또는 txid.uk에서 현재 수수료율을 확인한다. 대체 수수료를 "보통 우선순위(medium priority)" 수준 이상으로 설정하면 몇 블록 내에 확인된다.
원래 트랜잭션에 RBF 시그널링이 없더라도, 일부 노드는 full RBF(Bitcoin Core 26.0부터 기본 활성화)에 따라 대체를 수락한다. 다만 아직 모든 마이너와 노드가 full RBF를 지원하는 것은 아니다. RBF를 사용할 수 없다면 CPFP를 사용하자.
적합한 경우: 수신자인 경우, 또는 RBF를 사용할 수 없을 때.
CPFP는 RBF와 다르게 동작한다. 멈춘 트랜잭션을 대체하는 대신, 멈춘 트랜잭션(부모)의 출력을 사용하는 새 트랜잭션(자식)을 생성한다. 자식 트랜잭션이 부모와 자신 모두를 커버할 만큼 높은 수수료를 지불한다. 마이너는 두 트랜잭션을 함께 확인하는 것이 수익이 된다고 판단하고, 패키지로 포함시킨다.
Bitcoin Core에서:
bitcoin-cli sendtoaddress "your-address" 0.001 \
"" "" false true null "unset" null 25
마지막 파라미터(25 sat/vB)는 부모 + 자식의 합산 수수료율이 현재 멤풀 우선순위 임계값을 초과하도록 충분히 높게 설정해야 한다.
지갑 앱에서: Sparrow Wallet에서 미확인 트랜잭션을 우클릭 → "Accelerate Transaction (CPFP)"를 선택한다. 지갑이 필요한 자식 수수료를 자동으로 계산해준다.
자식 트랜잭션은 부모의 부족한 수수료를 보상해야 한다:
필요한 자식 수수료율 =
(목표_총_수수료 - 부모_실제_수수료) / 자식_vsize
예시: 부모 TX가 200 vB이고 수수료가 400 sat(2 sat/vB)이라면, 패키지 평균을 10 sat/vB로 맞추려면 총 목표는 2,000 sat이다. 자식이 1,600 sat을 내야 한다. 자식이 150 vB라면, 자식 단독 수수료율은 약 10.7 sat/vB가 된다.
적합한 경우: 멤풀에서 완전히 제거된 트랜잭션.
약 14일이 지나면 노드는 미확인 트랜잭션을 제거한다. 트랜잭션이 제거되었다면, 원래의 원시 트랜잭션을 다시 전송하거나, 더 높은 수수료로 새 트랜잭션을 생성할 수 있다.
tx.txid.uk 사용:
Bitcoin Core 사용:
bitcoin-cli sendrawtransaction "raw-tx-hex"
공개 API 사용:
curl -X POST https://mempool.space/api/tx \
-d "raw-tx-hex"
원래 트랜잭션이 제거된 상태라면, 낮은 수수료의 기존 트랜잭션을 재전송하기보다 현재 적정 수수료율로 새 트랜잭션을 만드는 것이 나을 수 있다.
| 상황 | 방법 | 이유 |
|---|---|---|
| 본인이 보냈고, 지갑이 RBF 지원 | RBF | 가장 간단 - 대부분의 지갑에서 버튼 하나로 해결 |
| 수신자인 경우 | CPFP | 수신자가 사용할 수 있는 유일한 방법 |
| RBF 미활성화, 본인이 발신자 | CPFP (잔액 출력 이용) | 잔액 출력을 사용해 패키지 수수료를 올림 |
| TX가 멤풀에서 제거됨 | 재전송 | TX가 멤풀에 없으므로 재전송 필요 |
| 매우 오래된 미확인 TX (14일 이상) | 새 트랜잭션 | 현재 수수료율로 새 TX 생성 |
해결을 시도하기 전에 트랜잭션의 현재 상태를 확인하자:
트랜잭션이 확인 완료로 표시되면 문제가 자연히 해결된 것이다. "not found"로 표시되면 멤풀에서 제거되었을 수 있으므로, 재전송하거나 새 트랜잭션을 생성하자.
가장 좋은 해결책은 예방이다: