용어집 / 프로토콜과 업그레이드
클러스터 멤풀
- 클러스터 멤풀이란 무엇입니까?
- 클러스터 멤풀은 Bitcoin Core의 대기 공간을 재설계한 것으로, 서로 연결된 미확인 트랜잭션의 모든 묶음을 정렬된 상태로 유지하여 노드가 채굴업자가 실제로 선택할 트랜잭션을 항상 알 수 있게 합니다.
서로를 소비하는 미확인 트랜잭션은 의존성 그래프를 이루는데, 소프트웨어는 수년 동안 각 항목에 허용되는 조상과 자손의 수에 대한 조잡한 상한을 통해서만 이 그래프를 다룰 수 있었습니다. 버전 31.0은 이를 하나의 규칙으로 대체했습니다. 연결된 묶음이 트랜잭션 64개 또는 가상 크기 101kB를 넘을 수 없다는 규칙입니다. 그 결과 수수료 인상과 대체 모두 더 예측 가능해졌습니다.
작동 방식
클러스터는 멤풀의 연결 요소입니다. 미확인 트랜잭션을 아무거나 골라 부모와 자식 연결을 양방향으로 따라가면, 도달할 수 있는 모든 것이 같은 클러스터에 속합니다.
이전 설계는 조상과 자손을 따로 추적하고 각각을 25개로 제한했으며 크기 상한도 함께 두었습니다. 계산은 저렴했지만 한 가지 중요한 점에서 틀렸습니다. 이는 노드에 한 가족이 얼마나 큰지는 알려 주면서 합리적인 채굴업자가 그 가족을 어떤 순서로 가져갈지는 알려 주지 않았고, 그래서 멤풀은 자신의 핵심 질문에 답할 수 없었습니다. 지금 당장 블록을 만들어야 한다면 무엇이 들어갈 것입니까?
클러스터 멤풀은 모든 클러스터를 항상 선형화된 상태로 유지하여 이 질문에 답합니다. 선형화는 청크로 나뉜 순서이며, 각 청크는 함께 채굴되고 하나의 유효 수수료율을 공유하는 트랜잭션 집합입니다. 이 청크를 정렬하면 멤풀 전체의 수수료율 다이어그램이 만들어지고, 이제 결정은 이 다이어그램을 기준으로 평가됩니다.
한도는 클러스터당 트랜잭션 64개와 가상 크기 101kB이며, 이는 조상과 자손 개수를 완전히 대체했습니다. 예전에 자손 한도를 넘어 자식 하나가 추가로 빠져나갈 수 있게 해 주던 예외인 CPFP carveout도 함께 삭제되었습니다. 클러스터의 트랜잭션 수 제한을 우회하는 것은 허용되지 않기 때문입니다.
효과는 대체에서 드러납니다. 이전의 replace-by-fee 규칙은 여러 조건을 이어 붙인 것이어서, 공유 트랜잭션에 값싼 잡동사니를 붙여 대체가 터무니없이 비싸질 때까지 악용될 수 있었습니다. 수수료율 다이어그램을 비교하면 대신 하나의 검사가 됩니다. 대체가 다이어그램을 어느 곳에서도 더 나쁘게 만들지 않고 어딘가는 더 좋게 만들 때 수용됩니다. 두 개의 새 RPC가 이 구조를 노출합니다. 클러스터의 내용과 순서를 위한 getmempoolcluster와 다이어그램 자체를 위한 getmempoolfeeratediagram입니다.
나타나는 곳
클러스터 멤풀은 미확인 지출을 너무 많이 이어 붙였을 때 오류 메시지로 나타나고, 문제가 생길 것으로 예상한 곳에서 성공하는 수수료 인상으로 나타납니다.
지갑 사용자는 흔한 상황에서 한도를 만납니다. 붐비는 시기에 미확인 잔돈을 거듭 지출하는 경우입니다. 트랜잭션 64개는 개인에게는 넉넉하고 결제를 일괄 처리하는 서비스에는 빠듯한데, 이 숫자는 대략 그러한 서비스를 염두에 두고 정해진 것입니다. 지갑이 지출을 거부하면서 클러스터를 언급하면, 해결책은 수수료를 올리는 것이 아니라 확인을 기다리는 것입니다.
더 조용한 이점은 child-pays-for-parent가 이제 주장하는 대로 작동한다는 것입니다. 막힌 트랜잭션의 출력을 높은 수수료율로 지출하여 그 트랜잭션의 수수료를 올리면, 노드는 그 쌍이 이미 대기 중인 것보다 나은지 즉시 알 수 있으므로 근사치가 아니라 한 단계로 명확한 답을 얻습니다.
클러스터 멤풀 vs 멤풀
멤풀은 노드가 보유한 트랜잭션의 집합이고, 클러스터 멤풀은 한 프로그램이 그 집합을 내부적으로 조직하는 방식입니다. 합의 규칙은 바뀌지 않았고 포크도 일어나지 않았으며, 이전 버전을 계속 실행하는 노드는 더 나쁜 장부 처리로 같은 트랜잭션을 보유합니다. 이 구분이 중요한 이유는 이 변경이 마치 비트코인에 트랜잭션 체인에 관한 새로운 네트워크 전체 규칙이 생긴 것처럼 보도되기도 하기 때문입니다. 그렇지 않았습니다. 이것은 정책이며 노드마다 선택되고, 어떤 운영자든 자신의 기계에서 명령줄 인수로 한도를 바꿀 수 있습니다.