BitcoinTechnical intermediate

CPFP (Child Pays for Parent): 비트코인 트랜잭션 가속하기

비트코인에서 Child-Pays-for-Parent(CPFP)의 작동 원리 — 패키지 릴레이 메커니즘, 수수료 계산법, 수신자와 송신자의 활용 사례, RBF와의 비교, 실제 지갑 사용 예시까지 알아봅니다.

· 6분

비트코인 결제를 기다리고 있다고 가정해 봅시다. 보낸 사람이 수수료를 너무 낮게 설정해서 트랜잭션이 멤풀에서 몇 시간째 미확인 상태입니다. RBF는 보낸 사람만 트랜잭션을 교체할 수 있으므로 사용할 수 없습니다. 하지만 방법이 없는 건 아닙니다. 아직 확인되지 않은 출력(output)을 사용해 새 트랜잭션을 만들고, 채굴자가 두 트랜잭션을 함께 확인하고 싶을 만큼 높은 수수료를 붙이면 됩니다. 이 기법을 **Child Pays for Parent (CPFP)**라고 합니다.

CPFP는 RBF의 보완 수단입니다. RBF가 송신자에게 자신의 막힌 트랜잭션을 교체할 수 있게 해준다면, CPFP는 사용 가능한 출력을 가진 누구나 — 수신자 포함 — 확인을 가속할 수 있게 합니다. 이 둘은 막힌 비트코인 트랜잭션을 해결하는 두 가지 핵심 도구입니다.

CPFP의 작동 원리

CPFP의 메커니즘은 채굴자가 블록에 포함할 트랜잭션을 선택하는 방식에 기반합니다. 채굴자는 트랜잭션을 개별적으로 평가하지 않고, 트랜잭션 패키지 단위로 평가합니다. 수수료가 낮은 부모 트랜잭션에 수수료가 높은 자식 트랜잭션이 연결되어 있으면, 합리적인 채굴자는 패키지의 결합 수수료율이 다른 트랜잭션보다 높기 때문에 둘 다 포함시킵니다.

순서는 다음과 같습니다:

  1. 부모 트랜잭션이 멤풀에 불충분한 수수료율로 존재합니다 (예: 멤풀 최소 요구가 8 sat/vB일 때 2 sat/vB).
  2. 부모의 출력 중 하나를 사용하는 자식 트랜잭션을 생성합니다 — 수신자라면 수신 출력을, 송신자라면 잔돈 출력을 사용합니다.
  3. 두 트랜잭션의 평균 수수료율이 현재 우선순위 기준을 초과하도록 자식의 수수료를 충분히 높게 설정합니다.
  4. 채굴자는 부모 + 자식 패키지를 함께 포함하면 건너뛰는 것보다 더 높은 수수료율을 얻을 수 있다고 판단하여, 같은 블록에 둘 다 채굴합니다.

자식이 온체인에서 유효하려면 부모가 반드시 먼저 확인되어야 합니다. 자식이 사용하는 출력은 부모가 확인되기 전에는 존재하지 않기 때문입니다. 바로 이 의존성이 채굴자로 하여금 부모를 포함하도록 강제합니다.

필요한 자식 수수료 계산

자식 트랜잭션은 부모의 수수료 부족분을 보상해야 합니다. 공식은 다음과 같습니다:

target_package_fee = desired_rate × (parent_vsize + child_vsize)
required_child_fee = target_package_fee - parent_fee
child_fee_rate     = required_child_fee / child_vsize

계산 예시

파라미터
부모 가상 크기225 vB
부모 수수료450 sats (2 sat/vB)
자식 가상 크기141 vB
목표 패키지 수수료율12 sat/vB
target_package_fee = 12 × (225 + 141) = 4,392 sats
required_child_fee = 4,392 - 450 = 3,942 sats
child_fee_rate     = 3,942 / 141 ≈ 28 sat/vB

전체 패키지를 12 sat/vB로 올리려면 자식이 약 28 sat/vB를 지불해야 합니다. 이는 목표 수수료율보다 훨씬 높은데, 자식이 부모의 부족분까지 보상하기 때문입니다.

누가 CPFP를 사용할 수 있나?

수신자 — 이것이 RBF 대비 CPFP의 가장 큰 장점입니다. 누군가 낮은 수수료로 비트코인을 보냈다면, 그 미확인 출력을 높은 수수료의 자식 트랜잭션으로 사용할 수 있습니다. 송신자의 협조가 필요 없습니다.

송신자 — 트랜잭션에 자신의 지갑으로 돌아오는 잔돈 출력이 있다면, 그 잔돈 출력을 CPFP 자식으로 사용할 수 있습니다. 원래 트랜잭션에 RBF가 설정되지 않았을 때 유용합니다.

사용 가능한 출력을 가진 누구나 — 여러 출력이 있는 트랜잭션에서는 어떤 출력의 소유자든 자식을 만들 수 있습니다. CoinJoin이나 Lightning 채널 종료 같은 다자간 프로토콜에서도 사용 가능한 출력을 가진 참여자라면 CPFP를 사용할 수 있습니다.

실제 사용법

Sparrow Wallet

미확인 수신 트랜잭션을 우클릭 → **“Accelerate Transaction (CPFP)“**를 선택합니다. Sparrow가 자동으로 필요한 자식 수수료를 계산하고 트랜잭션을 생성합니다.

Bitcoin Core

미확인 UTXO를 높은 수수료로 자신에게 전송합니다:

bitcoin-cli -named sendtoaddress \
  address="your-address" \
  amount=0.0009 \
  fee_rate=30 \
  include_unsafe=true

include_unsafe=true 플래그는 미확인 출력의 사용을 허용합니다.

Electrum

History 탭에서 미확인 트랜잭션을 우클릭 → **“Child pays for parent.”**를 선택합니다. Electrum이 수수료 계산을 자동으로 처리합니다.

CPFP vs RBF

CPFPRBF
사용 가능자송신자 또는 수신자송신자만
메커니즘새 자식 트랜잭션교체 트랜잭션
시그널링 필요 여부아니오예 (opt-in RBF) 또는 full RBF
새 TXID 생성예 (자식이 별도 TXID를 가짐)예 (교체 트랜잭션에 새 TXID 부여)
부모 TXID 변경아니오 — 부모 TXID 유지예 — 원래 TXID 무효화
비용 효율성낮음 (자식 TX의 추가 블록 공간 소비)높음 (단일 TX, 추가 오버헤드 없음)
적합한 경우수신자, non-RBF 트랜잭션RBF 지원 지갑의 송신자

핵심적인 차이: CPFP에서는 원래 부모 TXID가 유효한 채로 유지됩니다. 수신자의 TXID가 바뀌지 않습니다. 반면 RBF에서는 원래 TXID가 무효화되고 새 TXID로 교체됩니다. TXID로 트랜잭션을 추적하는 상점이나 결제 처리 업체에게 이 차이는 중요합니다.

패키지 릴레이와 멤풀 정책

CPFP는 채굴자가 트랜잭션을 개별이 아닌 패키지 단위로 평가하는 것에 의존합니다. 이는 Bitcoin Core의 조상 수수료율(ancestor fee rate) 계산을 통해 구현됩니다.

블록 템플릿용 트랜잭션을 선택할 때, Bitcoin Core는 각 트랜잭션의 조상 수수료율을 계산합니다 — 해당 트랜잭션과 모든 미확인 조상의 총 수수료를 결합된 가상 크기로 나눈 값입니다. 트랜잭션은 조상 수수료율로 정렬되어 수익성 높은 패키지가 함께 포함됩니다.

멤풀 수용

자식 트랜잭션이 멤풀에 수용되려면 부모가 이미 멤풀에 있거나 패키지 릴레이를 통해 동시에 제출되어야 합니다. Bitcoin Core는 조상 및 자손 체인에 대해 다음 제한을 적용합니다:

  • 최대 조상 수: 25개 트랜잭션
  • 최대 조상 크기: 101,000 vB
  • 최대 자손 수: 25개 트랜잭션
  • 최대 자손 크기: 101,000 vB

이 제한은 지나치게 긴 트랜잭션 체인을 통한 서비스 거부 공격을 방지하면서도 실용적인 CPFP 사용을 허용합니다.

패키지 릴레이 (BIP 331)

기존에는 CPFP에 닭과 달걀 문제가 있었습니다: 부모의 수수료율이 멤풀 최소치 미만이면 자식이 제출되기 전에 노드가 부모를 거부했습니다. 패키지 릴레이(Bitcoin Core에서 점진적으로 구현)는 부모와 자식을 하나의 패키지로 제출하고 함께 평가하는 방식으로 이 문제를 해결합니다.

이는 Lightning Network의 강제 종료(force-close) 트랜잭션에 특히 중요합니다. 수수료 급등 시 사전 서명된 수수료가 불충분해질 수 있기 때문입니다.

Lightning Network에서의 CPFP

CPFP는 Lightning Network 보안에서 핵심적인 역할을 합니다. 채널이 강제 종료될 때, 커밋먼트 트랜잭션은 채널이 마지막으로 업데이트된 시점의 수수료로 브로드캐스트됩니다 — 그게 수일 또는 수주 전일 수 있습니다. 그 사이 수수료가 올랐다면 커밋먼트 트랜잭션이 막힐 수 있습니다.

Lightning 구현체는 **앵커 출력(anchor outputs)**을 사용합니다 — CPFP를 통해 사용하도록 설계된 작은 출력입니다. 채널의 각 당사자는 커밋먼트 트랜잭션의 실효 수수료율을 올리는 데 사용할 수 있는 앵커 출력을 받습니다. 이를 통해 수수료가 급등하더라도 채널 종료가 적시에 확인될 수 있습니다.

한계

  • 비용 오버헤드 — 자식 트랜잭션 자체가 블록 공간을 소비하므로, 송신자 입장에서 CPFP는 RBF보다 수수료 효율이 떨어집니다.
  • 사용 가능한 출력 필요 — 모든 출력이 잠겨 있으면(예: 다른 서명자가 필요한 멀티시그) CPFP를 사용할 수 없습니다.
  • 체인 제한 — 25개 조상/자손 제한으로 인해 미확인 트랜잭션 체인에 CPFP를 무한히 적용할 수는 없습니다.
  • 더스트 출력 — 사용하려는 출력이 더스트 기준(P2PKH의 경우 546 sats, P2WSH의 경우 294 sats) 미만이면 유효한 자식 트랜잭션을 만들 수 없습니다.

더 알아보기

관련 글