MSTR Cat

블록체인/레벨 II · 작동 원리/2.2 트랜잭션/수업 6

RBF(Replace-by-Fee)와 CPFP(Child-Pays-For-Parent)

수수료 범핑과 핀닝 공격

준비물트랜잭션의 조상 관계를 보여 주는 블록 탐색기(예: mempool.space)수수료 인상을 지원하는 지갑

호기심

  1. 수수료가 너무 낮아 트랜잭션이 묶여 있을 때 발신자는 무엇을 할 수 있나요?
  2. 수취인은 아직 받지도 않은 금액을 어떻게 지불할 수 있나요?
  3. 상대방이 의도적으로 멤풀에 있는 사용자의 자금을 인질로 잡으면 어떻게 되나요?

탐구

  1. 너무 낮은 수수료율로 브로드캐스트된 트랜잭션은 며칠 동안 미확인 상태로 머물거나 멤풀에서 아예 사라질 수 있으며, 그동안 수수료를 더 많이 내는 트랜잭션들이 먼저 확인됩니다. 브로드캐스트 후 실질 수수료를 높이는 방법은 두 가지입니다. 발신자가 수수료를 더 많이 내는 버전으로 트랜잭션을 교체하거나, 수신자가 그 트랜잭션의 출력 하나를 넉넉한 수수료로 사용해 채굴자가 두 트랜잭션을 함께 포함하게 하는 것입니다.
  2. RBF(Replace-by-Fee)를 사용하면 발신자가 너무 낮게 잡은 수수료를 바로잡을 수 있습니다. BIP125는 입력의 nSequence 필드를 통해 교체 가능 여부를 신호하는 방식을 도입했습니다. 비트코인 코어의 교체 규칙에 따르면, 교체 트랜잭션은 자신이 밀어내는 모든 트랜잭션의 총 수수료에 자신의 크기만큼의 추가 릴레이 수수료를 더한 금액 이상을 지불해야 하며, 직접 충돌하는 트랜잭션들보다 높은 수수료율을 가져야 합니다. 비트코인 코어 24 버전은 명시적 신호가 없어도 트랜잭션을 교체 가능한 것으로 취급하는 ‘풀 RBF(full RBF)’ 수용 기능을 추가했고, 이는 28 버전에서 기본값이 되었습니다.
  3. Child-Pays-For-Parent(CPFP)는 들어오는 지불을 수정할 수 없는 수신자를 위한 방식입니다. 수신자는 묶여 있는 부모 트랜잭션의 미확인 출력을 사용하는 새 트랜잭션을 만들고, 이 자식 트랜잭션에 높은 수수료를 붙입니다. 채굴자는 조상 수수료율(ancestor fee rate)로 패키지 전체를 평가합니다. 자식 트랜잭션은 부모가 같은 블록이나 그 이전 블록에서 확인되어야만 유효하므로, 자식을 포함하면 부모도 반드시 포함해야 합니다.
  4. 이 경제 논리는 합산 가치에 기반합니다. 부모가 1 sat/vB를 내고 큰 자식이 50 sat/vB를 내면, 합쳐진 패키지는 채굴자에게 둘을 동시에 확인할 만한 수익성 있는 기회가 됩니다. 이를 통해 수신자는 아직 확인된 코인을 통제하지 못하는 상태에서도, 묶여 있는 입금 트랜잭션이 포함되도록 채굴자에게 사실상 비용을 대 줄 수 있습니다. 다만 총 웨이트와 수수료를 정확히 계산해야 합니다.
  5. 트랜잭션 핀닝은 이 시스템의 심각한 취약점입니다. 상대방은 자손 트랜잭션이 많이 딸린 낮은 수수료율의 트랜잭션을 의도적으로 멤풀에 남겨 두어, 시간에 민감한 트랜잭션이 기한 전에 확인되지 못하게 막을 수 있습니다. 채널 종료가 특정 타임락에 의존하는 라이트닝 네트워크 같은 프로토콜에서는, 공격자가 사용자의 종료 트랜잭션을 핀닝해 사용자가 보안 시간 범위를 넘겨서까지 기다리게 만들면 자금을 탈취할 수도 있습니다.
  6. 개발자들은 최근 비트코인 코어 릴리스에서 정책상 예외 규정(carve-out), 버전 3('TRUC') 트랜잭션, 패키지 릴레이를 도입했고, 비트코인 코어 28과 29에서는 임시 앵커(ephemeral anchor, pay-to-anchor 출력)를 출시했습니다. 이를 통해 수수료가 낮은 부모 트랜잭션이 수수료가 높은 자식 트랜잭션과 함께 패키지로 전파될 수 있습니다. 이러한 완화책은 악의적인 행위자가 시간에 민감한 트랜잭션을 핀닝하는 능력을 줄여 주지만 완전히 없애지는 못합니다. 핀닝은 합의가 아니라 릴레이 정책에 영향을 미칩니다.

핵심 사실

  • Child-pays-for-parent를 사용하면 수신자가 들어오는 지불의 출력을 높은 수수료로 사용해 그 지불의 처리 속도를 높일 수 있습니다.
  • BIP125는 트랜잭션 입력의 nSequence 필드를 통해 교체 가능성을 나타낼 수 있게 합니다.
  • RBF 교체 트랜잭션은 자신이 밀어내는 모든 트랜잭션의 수수료 이상에 자신의 크기만큼의 추가 수수료를 더해, 더 높은 수수료율로 지불해야 합니다.
  • CPFP가 작동하는 이유는 채굴자가 부모-자식 패키지를 합산된 조상 수수료율로 평가하기 때문입니다.
  • 비트코인 코어 28 버전은 풀 RBF 수용을 노드의 기본 동작으로 만들었습니다.
  • 최신 비트코인 코어 버전들은 핀닝에 맞서 수수료 범핑을 더 확실하게 하기 위해 패키지 릴레이와 TRUC(버전 3) 트랜잭션을 추가했습니다.

연습 아홉, 여섯, 셋, 하나

9모으기소매 구매부터 라이트닝 채널 종료까지, 트랜잭션 확인 속도가 중요한 상황 9가지를 나열하세요. 각각의 기한과 그 기한을 놓쳤을 때의 결과를 적으세요.
6묶기9가지를 트랜잭션 속도를 높일 수 있는 주체에 따라 6개 그룹으로 분류하세요: 발신자, 수신자, 둘 중 누구나, 제3자, 프로토콜 규칙, 아무도 없음.
3추리기6개 그룹을, 트랜잭션이 예상 확인 시간을 넘겨서도 멤풀에 묶여 있을 수 있는 3가지 근본 이유로 압축하세요.
1결정화CPFP가 서로 신뢰하지 않는 두 당사자 사이에 어떻게 금전적 의존 관계를 만드는지 한 문장으로 설명하세요.

팩트 체크

날짜, 수치 및 주장은 아래에 명시된 출처들을 통해 확인되었습니다.

인터랙티브 아카데미에서 열기 →

EN PT ES ZH JA RU DE FR MS