블록체인/레벨 II · 작동 원리/2.2 트랜잭션/수업 5
멤풀
각 노드가 독립적으로 관리하는 로컬 대기실
준비물멤풀 보기 기능이 있는 블록 탐색기(예: mempool.space)선택 사항: 비트코인 코어 노드('getmempoolinfo')
호기심
- 하나의 풀 노드에서는 유효한 트랜잭션이 그 인접 노드에 의해 거부되는 이유는 무엇인가요?
- 노드가 메모리 한도에 도달하면 수수료가 가장 낮은 트랜잭션은 어떻게 되나요?
- 채굴자는 다음 블록에 넣을 미확인 트랜잭션을 어떻게 결정하나요?
탐구
- 멤풀은 중앙 데이터베이스가 아니라, 각 풀노드가 독립적으로 관리하는 로컬 인메모리 목록입니다. 비트코인 코어는 너무 오래 머무는 미확인 트랜잭션을 삭제합니다. 만료 기능이 도입된 0.12 버전에서는 72시간이었고, 0.14 버전부터는 2주(336시간)입니다. 트랜잭션을 서로 다른 순서로 받았거나 다른 설정으로 실행되는 두 노드는 조금씩 다른 멤풀을 갖습니다.
- 각 노드는 유효한 스크립트, 이중 지불 금지 같은 합의 규칙과 함께 최소 수수료율, RBF 설정 같은 로컬 정책 규칙을 적용합니다. 트랜잭션이 특정 노드의 최소 수수료율 기준을 충족하지 못하면, 다른 노드가 받아들이더라도 그 노드는 이를 거부하거나 이미 들어와 있다면 퇴출합니다.
- 비트코인 코어는 기본적으로 bitcoin.conf 파일의 ‘maxmempool’ 파라미터를 통해 멤풀 크기를 300MB로 제한합니다. 이 한도에 도달하면 노드는 수익성이 더 높은 트랜잭션을 위한 공간을 확보하기 위해 최소 수수료 임계값을 동적으로 올리고, 가치가 가장 낮은 트랜잭션부터 내보냅니다. ‘getmempoolinfo’를 실행해 멤풀이 가득 찰 때 ‘mempoolminfee’ 값이 고정된 ‘minrelaytxfee’ 값보다 어떻게 올라가는지 확인해 보세요.
- 채굴자는 자신의 멤풀에서 트랜잭션을 골라 블록을 구성하며, 미확인 부모 트랜잭션이 있으면 함께 평가해 가상 바이트당 수수료가 가장 높은 것을 우선합니다. 유효한 블록이 도착하면 모든 노드는 확인된 트랜잭션과 그와 충돌하는 트랜잭션을 멤풀에서 제거합니다.
- 정책은 합의가 아닙니다. 수수료 하한에 못 미치거나 비표준 형식을 사용한다는 이유로 대부분의 노드가 릴레이를 거부하는 트랜잭션도 블록 안에서는 여전히 유효할 수 있으며, 일부 채굴자는 그런 트랜잭션을 직접 받습니다. 따라서 각 노드의 멤풀은 다음 블록에 무엇이 담길지에 대한 추정치일 뿐이며, 노드마다 경계선에 있는 트랜잭션에 대해서는 판단이 갈릴 수 있습니다.
- 비트코인 코어는 종료할 때 멤풀을 mempool.dat 파일에 저장하고, 시작할 때 이를 다시 불러오면서 더 이상 유효하지 않은 것은 버립니다. 그래서 재시작한 노드도 빈 멤풀로 시작하지 않습니다. 멤풀이 작동하는 모습을 보려면 mempool.space를 열어 보세요. 예상 블록은 채굴자가 다음에 포함할 가능성이 높은 트랜잭션을 보여 주며, 새 블록이 나올 때마다 맨 위층이 비워집니다.
핵심 사실
- 멤풀은 단일한 범용 서비스가 아니라 각 노드에 있는 로컬 메모리 풀입니다.
- 비트코인 코어는 ‘maxmempool’ 설정을 통해 멤풀 크기에 기본 300MB 한도를 적용합니다.
- 비트코인 코어는 기본적으로 미확인 트랜잭션을 2주(0.14 버전부터 336시간)가 지나면 삭제합니다.
- 노드는 합의 규칙과, 최소 수수료율을 포함한 로컬 정책 규칙을 모두 적용합니다.
- 멤풀이 가득 차면, 노드들은 수익성이 낮은 트랜잭션을 제거하기 위해 동적으로 수수료 임계값을 올립니다.
- 비트코인 코어는 종료 시 멤풀을 ‘mempool.dat’에 저장하므로 재시작 후에도 멤풀이 유지됩니다.
연습 아홉, 여섯, 셋, 하나
9모으기블록 탐색기의 멤풀 화면에서 서로 다른 미확인 트랜잭션 9건을 나열하세요. 각각의 현재 수수료율, 가상 바이트 단위 크기, 확인 수(모두 0)를 적으세요.
6묶기9건의 트랜잭션을 처리가 지연될 수 있는 이유에 따라 6개 범주로 분류하세요: 낮은 수수료율, 큰 크기, RBF 신호, 미확인 입력, 고아 상태, 기타 정책상 이유.
3추리기6개 그룹을, 합의 규칙상 유효한 트랜잭션인데도 노드가 멤풀에서 이를 거부하거나 퇴출하는 3가지 핵심 이유로 압축하세요.
1결정화노드 간 로컬 정책 차이가 어떻게 네트워크 전반에서 대기 중인 트랜잭션에 대한 시각을 단일하지 않고 파편화되게 만드는지 한 문장으로 설명하세요.
팩트 체크
날짜, 수치 및 주장은 아래에 명시된 출처들을 통해 확인되었습니다.
- Bitcoin Core documentation: -maxmempool and -mempoolexpiry configuration parameters
- A. M. Antonopoulos & D. A. Harding, Mastering Bitcoin, 3rd ed. (2023)
- mempool.space documentation on real-time mempool visualization