CPFP는 미확인 부모 거래를 수정하거나 대체하지 않습니다. 부모가 블록에 포함되도록 수수료로 경제적 유인을 제공하는 자식 거래를 추가합니다. 부모는 먼저 확인되거나 같은 블록에서 자식보다 앞에 있어야 합니다. 결과는 합산 수수료율, 부모 출력을 사용할 권한, 노드 정책과 채굴자의 선택에 달려 있습니다.
CPFP는 낮은 수수료 부모 거래를 유지하고 더 높은 수수료율의 자식 거래로 그 출력을 사용합니다. 부모가 미확인 상태라면 자식을 포함하려면 부모와 그 밖의 필요한 미확인 조상도 포함해야 합니다. 채굴자는 이들의 합산 수수료를 받을 수 있지만, 부모만 자식 없이 확인할 수도 있습니다. [Bitcoin Core v31.0 — Package mempool acceptance] [Bitcoin Developer Guide — Transactions]
다른 미확인 조상이 없는 단순한 부모·자식 쌍에서는 satoshi 단위 수수료를 더한 뒤 vB 단위 가상 크기의 합으로 나눕니다. 결과는 총수수료가 아니라 sat/vB 단위 수수료율입니다. 자식 수수료 증가는 합산 수수료율이 경쟁력을 갖출 때만 도움이 되며, 필요한 조상이 더 있으면 계산도 달라집니다. 로컬 패키지 수락은 이미 mempool에 수락된 거래를 다시 계산하지 않고 조정된 수수료를 사용할 수도 있으므로, 표시된 수수료율이 이 단순한 채굴 계산과 항상 같지는 않습니다. [Bitcoin Core v31.0 — Package mempool acceptance]
일반적인 CPFP에는 부모 출력 하나 이상을 사용할 권한이 필요합니다. 송신자는 거스름돈 출력인 change를, 수신자는 지급받은 출력을 사용할 수 있습니다. 필요한 서명을 비롯한 사용 조건을 충족해야 합니다. 출력을 보거나 검사하는 것만으로 이 권한이 생기지는 않습니다. [Bitcoin Developer Guide — Transactions]
RBF는 원래 거래와 사용되는 입력 하나 이상을 공유하는 충돌 대체 거래를 만듭니다. 전체 입력 집합이 완전히 같을 필요는 없습니다. CPFP는 부모를 유지하고 자식을 추가합니다. RBF는 대체 거래 입력의 조건을, 일반적인 CPFP는 부모 출력의 사용 조건을 충족해야 합니다. 거래 그래프를 변경하는 방식이 다릅니다. [Bitcoin Core v31.0 — Package mempool acceptance]
합의는 거래와 블록의 유효성을 결정합니다. mempool 정책은 로컬 수락과 중계를, 채굴자 규칙은 후보 블록에 넣을 거래 선택을 결정합니다. CPFP는 합의를 바꾸지 않습니다. 경제적으로 유리한 패키지도 로컬 규칙을 위반할 수 있으며, 한 노드의 수락은 다른 노드나 채굴자를 구속하지 않습니다. [Bitcoin Core v31.0 — Package mempool acceptance] [Bitcoin Developer Guide — Transactions]
Bitcoin Core 26은 submitpackage RPC와 package CPFP를 추가했습니다. 당시 자식은 mempool의 동적 최저 수수료율보다 낮은 부모를 도울 수 있었지만 최저 중계 수수료율 아래의 부모는 도울 수 없었습니다. 이 제한은 불변이 아닙니다. Core 31은 지원되는 부모 하나·자식 하나 패키지 중계에서 TRUC 이외의 거래도 포함하여 minrelaytxfee보다 낮거나 수수료가 0인 부모를 허용합니다. 자식의 다른 미확인 부모들은 이미 mempool에 있어야 합니다. 로컬 수락은 여전히 네트워크 전체의 동일한 전파를 보장하지 않습니다. [Bitcoin Core 26.0 release notes] [Bitcoin Core 31.0 release notes]
제한은 메모리, CPU와 대역폭을 보호합니다. 구버전 Core는 조상과 후손의 수와 크기를 제한했지만 Core 31은 이 mempool 제한을 연결된 cluster 제한으로 대체했습니다. 별도의 패키지 제한은 남아 있습니다. Core 31 문서는 최대 25개 거래와 총무게 404000 WU를 명시합니다. 무게는 가상 크기가 아닙니다. 잘못된 연결 구조, 충돌 또는 표준성 위반은 충분한 수수료가 있어도 CPFP를 막을 수 있습니다. [Bitcoin Core 31.0 release notes] [Bitcoin Core v31.0 — Package mempool acceptance]
Bitcoin Core 31은 Cluster Mempool을 사용합니다. cluster는 부모·자식 관계를 어느 방향으로든 따라 연결되는 거래들로 구성됩니다. cluster당 기본 제한은 64개 거래와 가상 크기 101 kB이며 설정할 수 있습니다. 순서는 함께 채굴되는 chunks라는 묶음과 그 수수료율을 고려합니다. 과거 CPFP carveout은 후손 제한에 대한 제한적인 예외를 허용했지만 Core 31은 이를 폐지했습니다. 이 방식으로 cluster의 거래 수 제한을 우회할 수는 없습니다. [Bitcoin Core 31.0 release notes] [Bitcoin Core v31.0 — Mempool terminology]
경쟁력 있는 합산 수수료율은 확인 가능성을 높일 수 있지만 다음 블록의 공간을 예약하지 않습니다. 블록 공간 수요, 거래 전파와 개별 채굴자의 선택은 바뀔 수 있습니다. CPFP는 수수료 유인을 높이는 도구이며 확인 시간을 보장하지 않습니다. [Bitcoin Core v31.0 — Package mempool acceptance]
Core 31에서 getmempoolentry RPC는 수수료, vsize, 의존 관계와 chunk 데이터를 보여 주며 getmempoolcluster는 관련 cluster를 보여 줍니다. testmempoolaccept RPC는 수락하거나 방송하지 않고 로컬 테스트를 합니다. 여러 거래는 조상을 후손보다 먼저 배치해야 하며 서로 또는 mempool과 충돌해서는 안 됩니다. submitpackage RPC는 지원되는 패키지를 실제로 mempool 수락과 중계를 위해 제출하므로 단순한 테스트가 아닙니다. 개별 거래의 결과, 버전과 설정을 확인하세요. 어떤 결과도 채굴을 보장하지 않습니다. [Bitcoin Core 31.0 release notes] [Bitcoin Core 31.0 — getmempoolentry RPC] [Bitcoin Core 31.0 — testmempoolaccept RPC] [Bitcoin Core 31.0 — submitpackage RPC] [Bitcoin Core v31.0 — Mempool RPC implementation]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Replace-by-Fee (RBF), 트랜잭션 수수료, Fee Rate, Mempool, 트랜잭션, UTXO. 다음 항목에서도 이 글을 참조합니다 거스름돈 출력, 확인, 이중 지불, Fee Rate.