저자: 머치
각 풀 노드는 미확인 트랜잭션을 자체 "멤풀"에 저장합니다. 이 캐시(멤풀)는 노드에 매우 중요한 리소스이며, P2P 트랜잭션 포워딩 네트워크를 가능하게 합니다. 새로운 블록이 발표되기 전에 대부분의 트랜잭션(블록에 포함될 트랜잭션)을 파악하고 검증함으로써 블록 전파 속도 또한 빨라집니다.
노드는 트랜잭션 풀에 먼저 나타난 후 블록 확인을 받는 트랜잭션을 관찰함으로써, 블록 공간 입찰에 실패했지만 이후 확인된 트랜잭션에 필요한 거래 수수료율을 일방적으로 추정할 수 있습니다.
노드는 모든 피어에게 트랜잭션을 전달하는데, 이는 사용자 개인정보 보호와 네트워크 검열 저항에 매우 중요합니다. 미확인 트랜잭션에 대한 빠르고 제한 없는 접근은 누구나 경쟁력 있는 블록 템플릿을 구축하고 허가 없이 채굴자가 될 수 있도록 합니다.
현재 Bitcoin Core "선조" 관점에서 각 거래를 추적합니다. 먼저 가장 높은 선조 집합 수수료율을 가진 거래를 선택하여 블록에 포함시킨 다음, 영향을 받는 모든 하위 거래의 선조 집합과 수수료율을 업데이트하고, 이 과정을 지속적으로 반복하여 블록 템플릿을 구성합니다.

이 방법에는 단점이 있습니다. 블록 템플릿을 구축하는 동안 거래 데이터를 지속적으로 업데이트해야 하며, 모든 관련 요소를 고려한 후에야 채굴 점수(블록에 거래를 포함시키는 데 드는 수수료)를 예측할 수 있습니다.
때때로 블록 공간에 대한 수요가 너무 급증하여 노드가 캐시할 수 있는 양보다 더 많은 트랜잭션을 수신하는 경우가 있습니다. 트랜잭션 풀이 오버플로우되면 채굴 에 가장 매력적이지 않은 트랜잭션을 제거해야 합니다.
유감스럽게도, 거래는 다른 거래에 영향을 받을 수 있기 때문에, 모든 선행 거래를 계산한 후에야 어떤 거래가 가장 매력적이지 않은지 정확하게 예측할 수 있습니다. 거래가 거부될 때마다 이처럼 막대한 계산량을 소모하는 것은 용납할 수 없습니다.
따라서, 우리는 어떤 거래를 먼저 제거해야 할지 불완전하게 평가하기 위해 휴리스틱 접근 방식을 사용합니다. 또한, 각 거래를 "하위 집합"의 관점에서 추적하고, 하위 집합 점수가 가장 낮은 거래를 제거 기준으로 사용합니다.

만약 단일 트랜잭션의 전송률 또는 트랜잭션 풀에서 리프 트랜잭션의 하위 트랜잭션 집합의 전송률이 가장 낮다면, 이 결과는 정확하며 해당 트랜잭션은 제거될 수 있습니다. 그러나 이 휴리스틱은 블록 템플릿으로 마지막으로 선택된 트랜잭션을 정확하게 식별하지 못할 수도 있습니다.

위의 거래 다이어그램 예시에서 "거래 J"는 상위 거래 집합 수수료율이 가장 높으므로 상위 거래인 "거래 F"와 함께 삭제됩니다. 그러나 F 자체는 하위 거래 집합 수수료율이 가장 낮으므로 모든 하위 거래(J 포함)와 함께 삭제됩니다.

마지막으로, 잘 알려진 바와 같이 Bitcoin Core 에서 사용하는 RBF(거래 수수료 대체) 규칙(BIP-125에서 영감을 받음)은 항상 인센티브에 부합하는 대체 거래를 생성하는 것은 아닙니다. 어떤 경우에는 대체 거래를 수락해도 거래 풀 상황이 개선되지 않고, 또 어떤 경우에는 거래 풀 상황을 개선할 수 있는 대체 거래가 거부되는 경우가 있다는 것을 우리는 확실히 알고 있습니다.

- 몇 가지 구체적인 인센티브 호환성 문제를 설명하기 위해 다음 예를 고려해 보겠습니다. "거래 A"와 "거래 B"가 이미 거래를 진행 중인 상황에서 "거래 A'"(거래 A와 충돌하는 거래)가 나타납니다.
이로써 우리는 "클러스터 멤풀" 제안(수하스 다프투아르와 피터 윌레에게 감사드립니다)에 대해 이야기하게 됩니다. 전체 멤풀의 순서 항상 알 수 있고 각 트랜잭션의 채굴 점수를 항상 알 수 있다면 얼마나 좋을까요?
우리는 거래를 추적할 때 "조상 집합"과 "자손 집합"의 관점을 사용하는 대신, 거래의 "가족", 즉 관련된 모든 거래의 "가족"을 추적합니다.

각 거래는 하나의 그룹에만 속합니다. 특정 그룹에 속한 임의의 거래를 시작으로, 해당 거래의 모든 하위 거래와 상위 거래(그리고 이 하위 거래의 하위 거래, 이 상위 거래의 상위 거래 등)를 모두 더하면 해당 그룹을 완전히 식별할 수 있습니다.
그런 다음 각 그룹을 "선형화"할 수 있습니다. 즉, 거래 그래프를 목록으로 변환하고 블록 템플릿에 선택될 가능성을 기준으로 우선순위에 따라 순서 할 수 있습니다.

지금까지 우리는 인구 선형화를 인구 내에서 블록 생성 알고리즘을 한 번 실행하고 이러한 트랜잭션이 블록에 포함되는 순서를 기록하는 것으로 볼 수 있습니다.
선형화는 규모가 크고 구조적으로 복잡한 집단에서 계산량이 많을 수 있습니다.
클러스터 운영에 드는 계산 비용은 확장성을 제한하는 요인입니다. 이 문제는 일단 제쳐두겠지만, 더 자세히 알고 싶으시다면 Pieter Wuille이 Delving Bitcoin 포럼에 클러스터 선형화의 효율적인 방법을 다룬 글( Introduction to cluster linearization)을 작성했으니 참고하시기 바랍니다.
이전에는 조상 집합을 사용하여 (예를 들어) CPFP에서 부모 및 자식 트랜잭션을 동시에 패키징하는 것이 유리한 상황을 발견했습니다.

거래 그룹을 선형화하면 블록에 자연스럽게 함께 패키징될 거래 조각들을 쉽게 식별할 수 있습니다. 수수료가 높은 거래 다음에 수수료가 낮은 거래가 이어지는 경우, 이들을 "별도의 그룹"으로 분류할 수 있습니다.

이러한 분기는 조상 집합에 비해 엄청난 이점을 가지고 있습니다. (1) 부모 거래와 비교하여 더 높은 비율을 가진 여러 하위 거래가 자연스럽게 분기를 형성할 수 있으며 이 분기의 비율은 어떤 하위 거래의 조상 집합의 비율보다 더 높습니다!

(2) 분기의 수수료율은 분기 내의 거래에만 의존합니다. 조상이 블록에 선택되더라도 분기의 수수료율은 변경되지 않습니다. 분기의 수수료율을 미리 계산하여 분기 내의 모든 거래에 대한 채굴 점수로 읽을 수 있습니다!
따라서 블록 생성은 블록 템플릿이 가득 찰 때까지 모든 하위 그룹 중에서 가장 높은 수수료율을 가진 하위 그룹을 반복적으로 선택하는 과정이 됩니다. 이는 또한 전체 트랜잭션 풀에 대한 암묵적인 전역 순서 제공합니다.

이는 또한 우리가 어떤 가지가 마지막으로 파헤쳐질지 정확히 알고 있다는 것을 의미합니다. 추방은 간단히 말해 모든 씨족 중에서 가장 낮은 수수료를 받는 가지를 제거하는 것입니다.

결론은 "민족 간 교역 풀"이 우리에게 다음과 같은 것을 제공한다는 것입니다.
- 블록 쌓기 속도 향상
- 채굴 포인트는 항상 이용 가능합니다.
- 거의 최적에 가까운 소규모 배출
- RBF 거래 패키지를 이해하기 위한 더 나은 프레임(소위 "금리표")
비용은 단지 사전에 계산된 몇 가지 지출과 인구 규모에 대한 제약 조건일 뿐입니다.

(위에)


