멤풀
멤풀은 아직 블록에 포함되지 않은 거래가 잠시 머무는 대기 공간입니다. 거래를 받은 노드는 먼저 규칙에 맞는지 확인한 뒤 자신의 멤풀에 보관할 수 있고, 채굴자는 그곳에서 블록에 담을 거래를 선택합니다.
멤풀은 전 세계에 하나만 있는 공용 대기열이 아닙니다. 노드마다 멤풀이 따로 있으며, 거래를 받은 시점과 최소 수수료 설정, 저장할 수 있는 크기가 다를 수 있습니다. 따라서 노드별 멤풀의 내용은 조금씩 다르고, 인터넷에서 보는 멤풀 통계도 특정 노드의 상태를 보여 주는 경우가 많습니다.
블록을 기다리는 거래
비트코인의 장부에는 평균적으로 약 10분마다 새로운 블록이 추가됩니다. 한 블록에 담을 수 있는 거래의 양은 제한되어 있으므로, 그 사이에 도착한 모든 거래를 즉시 기록할 수는 없습니다. 거래가 잠시 머물 공간이 필요한 이유입니다.
이를 평균 10분 간격으로 출발하는 기차에 비유할 수 있습니다. 기차의 좌석 수는 정해져 있는데 승객이 더 많다면 일부 승객은 대합실에서 다음 기차를 기다려야 합니다. 멤풀은 블록에 아직 실리지 않은 거래가 대기하는 자리입니다.
다만 거래가 도착한 순서대로 처리되는 것은 아닙니다. 채굴자는 한정된 블록 공간 안에서 거래의 크기와 수수료율을 함께 고려합니다. 일반적으로 가상 바이트당 사토시(sat/vB)로 표시하는 수수료율이 높은 거래가 먼저 선택될 가능성이 커집니다. 가상 바이트는 증인 데이터 할인 등을 반영해 거래의 무게를 나타내는 크기 단위입니다. 늦게 도착한 거래가 먼저 온 거래를 앞지를 수도 있습니다. (Bitcoin Developer Guide)
수수료율과 대기 시간
급한 이용자는 높은 수수료율을 설정해 먼저 선택될 가능성을 높이려 하고, 여유가 있는 이용자는 낮은 수수료율을 설정하고 기다릴 수 있습니다. 멤풀이 붐비면 경쟁이 커져 수수료율이 올라가는 경향이 있고, 한산할 때는 비교적 낮은 수수료율도 선택될 수 있습니다.
개인키로 거래에 서명하는 도구인 서명 장치와 함께 쓰는 앱은 최근 멤풀 상태를 참고해 수수료를 추천할 수 있습니다. 하지만 멤풀은 노드마다 다르고 상황도 계속 변하므로, 추천값이 특정 처리 시간을 보장하는 것은 아닙니다.
거래가 멤풀에 들어갔다고 해서 수취인에게 최종적으로 도착한 것은 아닙니다. 거래는 아직 블록에 기록되지 않았고, 멤풀에서 언제든 사라질 수 있습니다. 블록에 포함된 뒤부터 확인 횟수를 세기 시작합니다.
멤풀에 들어오고 나가는 조건
거래가 멤풀에 들어오려면 서명이 유효해야 하고, 현재 체인에서 이미 소비된 출력이 아닌 입력을 지목해야 합니다. 현재 체인에서 이미 소비된 출력을 다시 사용하는 거래는 유효하지 않으므로 거부됩니다.
한편 아직 블록에 포함되지 않은 멤풀 거래와 같은 입력을 사용하는 거래는 서로 충돌할 수 있습니다. 이 경우 노드는 대체 정책과 거래 조건에 따라 기존 거래를 더 높은 수수료의 거래로 대체하도록 허용할 수 있습니다. 따라서 멤풀에 있는 거래의 입력을 다시 사용하려는 시도가 언제나 같은 방식으로 거부된다고 단정할 수는 없습니다.
멤풀을 떠나는 가장 흔한 경로는 블록에 포함되는 것입니다. 거래가 블록에 실리면 해당 노드의 멤풀에서 제거됩니다. 반대로 한동안 블록에 포함되지 않은 거래는 노드의 정책에 따라 자동으로 제거될 수 있습니다. 예를 들어 Bitcoin Core 28.0의 멤풀 만료 시간 기본값은 336시간(2주)입니다. 실제 기간은 노드 설정과 운영 정책에 따라 달라지며, 용량 제한이나 거래 대체 등의 이유로 그보다 일찍 제거될 수도 있습니다.
수수료가 너무 낮아 거래가 오래 대기할 때는 몇 가지 방법을 사용할 수 있습니다. 같은 입력을 사용하는 거래를 더 높은 수수료로 다시 만들어 대체하는 방식이 있고, 부모 거래의 수수료가 낮더라도 자식 거래의 높은 수수료와 묶어 채굴자가 함께 선택하도록 유도하는 방식도 있습니다. 이런 방법은 사용하는 서명 장치 앱과 노드가 해당 기능을 지원하고 거래 조건이 맞을 때만 작동합니다.
멤풀은 거래가 블록에 포함되기 전 잠시 기다리는 노드별 대기 공간입니다. 전 세계에 하나의 확정된 순서가 있는 것이 아니며, 수수료율과 거래 크기, 각 노드의 정책에 따라 선택 가능성이 달라집니다. 거래가 멤풀에 있다는 사실과 블록에 포함되었다는 사실을 구분해야 합니다.