WATS Wallet logoWATS Wallet
기술6분 분량

멤풀이란? 모든 트랜잭션이 거쳐 가는 대기실

멤풀은 서명된 트랜잭션이 블록 생산자에게 집혀 가기 전까지 기다리는 노드 차원의 보관 공간입니다. 대기·교체·축출이 실제로 어떻게 작동하는지, 공개 풀이 왜 프런트러닝 봇에게 선물인지, 그리고 Solana와 ERC-4337은 왜 다르게 하는지 살펴봅니다.

멤풀(mempool, 'memory pool'의 줄임말)은 서명되어 네트워크에 브로드캐스트되었지만 아직 블록에 포함되지 않은 트랜잭션을 블록체인 노드가 보관해 두는 대기 공간입니다. 단일한 글로벌 멤풀은 없습니다. 노드마다 자기 사본을 유지하며 이웃에게 가십으로 퍼뜨리므로, '대기 중'이라는 말은 실은 당신의 트랜잭션이 연결 상태 좋은 노드 대부분의 풀에 앉아 집혀 가기를 기다리고 있다는 뜻입니다. 블록 생산자는 그 풀에서 수수료 우선순위에 따라 골라 갑니다. 그래서 수수료를 적게 낸 트랜잭션은 몇 시간을 기다릴 수도, 같은 논스를 지닌 더 높은 수수료 버전으로 교체될 수도, 축출되어 온체인에서 실패한 적도 없이 잊힐 수도 있습니다. 공개 풀은 누구나 읽을 수 있으므로 대기 중인 스왑은 확정되기 전에 서처 봇들에게 그대로 보입니다. 모든 체인이 이렇게 동작하지는 않습니다 — 솔라나는 트랜잭션을 곧 블록을 만들 생산자에게 곧장 흘려보내고, EVM 체인에서는 WATS 같은 ERC-4337 지갑이 UserOperation을 별도의 대체 멤풀에 제출하면 번들러가 이를 평범한 트랜잭션으로 포장합니다.

서명과 블록 사이

보내기를 누르면 트랜잭션은 블록체인으로 가지 않습니다. 블록체인에 어쩌면 들어가기 위한 줄에 서는 것입니다. 지갑이 서명된 트랜잭션을 노드에 브로드캐스트하면, 노드는 형식이 온전한지, 서명이 올바른지, 논스가 합당한지, 잔액이 충분한지 확인하고, 그러고 나서 트랜잭션은 멤풀 — 블록 생산자가 집어 가기를 기다리는 대기 중 트랜잭션의 풀 — 에 들어갑니다. 지갑이 '대기 중'으로 보여 주는 모든 것이 이 대기실에 살고 있으며, 트랜잭션이 하는 혼란스러운 일 대부분 — 멈추기, 사라지기, 교체되기 — 은 블록체인이 아니라 멤풀의 행동입니다.

멤풀은 실제로 무엇인가

첫 번째 반전: 단일하고 정본이라 할 만한 멤풀은 없습니다. 각 노드는 자기만의 대기 트랜잭션 풀을 유지하고 이를 이웃에게 가십으로 퍼뜨립니다. 그래서 네트워크에는 크게 겹치지만 결코 동일하지는 않은 수천 개의 사본이 존재합니다. 트랜잭션이 '멤풀에 있다'는 말은 사실 '지금쯤 연결 상태 좋은 노드 대부분의 멤풀에 있다'는 뜻입니다. 노드는 로컬 정책도 강제합니다 — 트랜잭션을 받아들이기 위한 최소 수수료, 한 계정이 동시에 걸어 둘 수 있는 대기 트랜잭션 수의 상한, 풀이 가득 찼을 때 가장 값싼 항목부터 밀어내는 축출 — 수수료가 아주 낮은 트랜잭션이 온체인에서 되돌려진 적도 없이 네트워크에서 조용히 사라질 수 있는 이유가 이것입니다. 쓰인 것은 아무것도 없습니다. 애초에 실행된 적이 없기 때문입니다.

트랜잭션은 어떻게 나가나: 수수료 경매

블록 공간은 희소하고, 멤풀은 그 시장이 청산되는 곳입니다. 블록 생산자는 자기 블록에 담을 수 있는 가장 수익성 높은 대기 트랜잭션 묶음을 조립하는데, 실질적으로는 수수료 우선순위가 누가 먼저 대기실을 떠날지 결정한다는 뜻입니다. EVM 체인에서 그 우선순위는 EIP-1559 아래 기본 수수료 위에 얹는 팁입니다. 시세대로 내면 한두 블록 안에 빠져나가고, 낮게 부르면 수요가 식거나 트랜잭션이 축출될 때까지 기다립니다. 여기서 사람들이 끊임없이 걸려 넘어지는 결과가 하나 나옵니다. EVM 계정은 논스 순서를 엄격히 지켜 실행되므로, 값싸게 보내 멈춰 버린 트랜잭션 하나가 그 뒤에 보낸 모든 트랜잭션을 — 그것들에 아무리 후하게 수수료를 붙였더라도 — 함께 붙잡아 둡니다.

대기 중, 교체됨, 폐기됨

대기 중 트랜잭션은 아직 역사가 아니므로, 한 가지 특정한 방식으로는 여전히 편집할 수 있습니다. 바로 교체입니다. 같은 논스에 의미 있게 더 높은 수수료를 붙인 새 트랜잭션을 브로드캐스트하면 노드들에게 예전 것을 버리라고 말하는 셈입니다 — 멈춘 송금의 표준 처방이고, 교체본이 자기 주소로 보내는 0값 송금이라면 그것이 표준 취소 방법입니다. 확인도 교체도 되지 않는 트랜잭션은 결국 폐기됩니다. 풀에서 축출되고, 보낸 적 없다는 듯 잊힙니다. 잃은 것은 없습니다 — 자금은 움직인 적이 없으니까요 — 하지만 이 중 어느 것도 일반적인 지갑 UI에서는 보이지 않으며, '내 트랜잭션 어디 갔지?' 하는 패닉 대부분이 바로 거기서 나옵니다.

몹시 공개적인 대기실

공개 멤풀에 있는 모든 것은 확정되기 전에 누구에게나 보입니다. 대기 중인 스왑을 파싱해 본 것에 따라 움직이는 봇들에게도 마찬가지입니다. 그 가시성이 프런트러닝과, 슬리피지 해설에서 다룬 샌드위치 거래의 원재료입니다. 대기 중인 거래는 당신이 무엇을 사려 하는지, 그리고 받아들이기로 동의한 최악의 가격이 얼마인지를 그대로 알려 줍니다. 슬리피지 허용치를 빡빡하게 잡는 것이 실질적인 방어인 이유가 이것입니다 — 샌드위치가 뽑아 갈 수 있는 몫에 상한을 걸어 주니까요. 같은 이유로 EVM 트래픽의 점점 더 큰 몫이 공개 풀을 건너뛰고 블록 빌더에게 직행하는 프라이빗 제출 채널을 지나갑니다. 투명성을 보호와 맞바꾸는 선택이고, 그 과정에서 새로운 신뢰 가정을 떠안는 선택이기도 합니다.

모든 체인에 있는 것은 아니다

가십으로 퍼지는 멤풀은 이더리움 계열의 설계 선택일 뿐 자연법칙이 아닙니다. 솔라나는 대체로 이를 건너뜁니다. 리더 스케줄이 미리 알려져 있어서, 클라이언트는 전역 풀에 트랜잭션을 흩뿌리는 대신 곧 블록을 만들 생산자에게 곧장 전달합니다 — 이 체인의 대기 상태가 그토록 짧게 느껴지는 이유 중 하나입니다. TON은 하나의 공유 큐 대신 자체 샤드 라우팅으로 메시지를 흘려보냅니다. 그리고 ERC-4337은 EVM 자체에 평행 차선을 하나 더합니다. UserOperation은 자기들만의 대체 멤풀에서 기다리고, 거기서 번들러가 이를 집어 평범한 트랜잭션으로 감싸는데, 번들러와 UserOperation 해설에 그 과정이 정리되어 있습니다. 같은 대기실 논리, 다른 방입니다.

지갑이 멤풀과 만나는 지점

멤풀은 WATS가 대신 처리해 주어 당신이 좀처럼 신경 쓸 일 없게 만드는 계층입니다. WATS는 건강한 노드를 통해 브로드캐스트하고, Ethereum, Arbitrum, Optimism, Base, Polygon, BNB Chain, Solana, TON — 서로 다른 대기실을 가진 세 생태계 — 의 대기 상태를 하나의 인터페이스 뒤에서 추적합니다. 그래서 어느 대기실에 갇혀 있든 '대기 중'이 당신에게 뜻하는 바는 같습니다. EVM 체인에서 WATS의 동작은 ERC-4337 UserOperation으로 대체 멤풀을 지나가고, 거기서 페이마스터가 블록 생산자가 요구하는 네이티브 가스를 정산하는 동안 당신은 단 하나의 토큰 ATS로 정산합니다. 이것은 할인이 아닙니다 — 네트워크는 여전히 시세대로 전액을 받고 당신의 ATS 청구액은 그 값을 따라갑니다 — 바뀌는 것은 어떤 토큰이 지불하느냐뿐입니다. ATS는 LayerZero OFT이므로 여덟 개의 네이티브 코인 잔액 대신 잔액 하나가 지원되는 모든 체인을 감당하고, 수수료로 걷힌 ATS는 소각되어 공급량을 1억 개에서 3천만 개라는 바닥을 향해 밀어 내립니다. WATS는 ERC-4337과 OFT 단일 토큰 수수료를 이 소각과 결합한 최초이자 유일한 지갑이며, 이 중 어느 것도 수탁에는 손대지 않습니다. WATS는 완전한 논커스터디얼이고, 키는 당신이 보유하며, WATS는 결코 키를 보유하지 않습니다.

그래서 실질적인 교훈은 좁습니다. 멤풀을 없앨 수는 없고, 없애고 싶어 해서도 안 됩니다 — 애초에 당신의 트랜잭션을 블록에 넣어 주는 것이 바로 그 경매니까요. 없앨 수 있는 것은 경매와 아무 상관 없는 실패 모드입니다. 입찰에 쓸 네이티브 코인 없이 엉뚱한 체인 위에 앉아 있는 상황 말이죠. 당신이 계속 부딪히는 '대기 중'이 그 버전이라면, WATS Hot Wallet에서 ATS 잔액 하나를 채워 두는 것이 해법이고, 그 원리는 ATS 수수료 페이지에 정리되어 있습니다.

자주 묻는 질문

멤풀이란 무엇인가요, 한 문장으로 말하면?

멤풀은 네트워크에 브로드캐스트되었지만 아직 블록에 포함되지 않은, 유효하게 서명된 트랜잭션을 블록체인 노드가 보관해 두는 대기 공간입니다. 블록 생산자는 대체로 수수료 우선순위에 따라 여기에서 골라 가므로, 멤풀은 대기열인 동시에 블록 공간을 놓고 벌이는 경매이기도 합니다. 지갑이 '대기 중'이라고 표시하는 것은 모두 그곳에서 기다리고 있습니다.

글로벌 멤풀이 하나만 존재하나요?

아니요. 각 노드가 자기만의 대기 트랜잭션 풀을 유지하고 가십 네트워크로 이웃과 공유합니다. 존재하는 것은 하나의 마스터 큐가 아니라 수천 개의 겹치는 로컬 뷰입니다. 익스플로러들이 대기 중 트랜잭션을 두고 가끔 서로 다르게 말하는 이유, 그리고 수수료가 아주 낮은 트랜잭션이 어떤 풀에는 있고 다른 풀에서는 축출되었다가 결국 모두에게 잊힐 수 있는 이유가 여기 있습니다.

제 트랜잭션이 왜 대기 중에 멈춰 있고, 취소할 수 있나요?

거의 언제나 수수료가 시세보다 낮아 멤풀에서 기다리는 중입니다 — 수요가 식으면 확인되고, 아니면 무기한 기다립니다. 대기 중 트랜잭션은 교체할 수 있으므로, 해법은 같은 논스에 더 높은 수수료로 다시 브로드캐스트하는 것입니다. 같은 트랜잭션이면 가속이고, 자기 주소로 보내는 0값 송금이면 취소입니다. 지갑들은 보통 이 둘을 '가속'과 '취소' 버튼으로 제공합니다. EVM 체인에서는 이 문제가 트랜잭션 하나로 끝나지 않습니다. 멈춘 논스 하나가 그 계정에서 나중에 보낸 모든 트랜잭션을 함께 붙잡아 두기 때문입니다.

확인 전에 다른 사람이 제 트랜잭션을 볼 수 있나요?

공개 멤풀에서는 볼 수 있습니다 — 대기 중 트랜잭션은 완전히 공개되어 있고 봇들이 활발히 해석합니다. 프런트러닝과 샌드위치 공격이 가능한 이유가 그것입니다. 슬리피지 허용치를 빡빡하게 유지하면 그런 봇이 스왑에서 뽑아 갈 수 있는 몫이 제한되고, EVM에서는 공개 풀을 아예 건너뛰는 프라이빗 제출 채널을 쓰는 트래픽이 늘고 있습니다 — 그 투명성을 보호와 맞바꾸는 것이죠.

ERC-4337 UserOperation도 같은 멤풀에서 기다리나요?

아니요. UserOperation은 트랜잭션이 아니므로 별도의 대체 멤풀을 지나갑니다. 거기에서 번들러가 이들을 모아 하나의 일반 트랜잭션으로 감싸고, 그 트랜잭션이 비로소 일반 멤풀에 들어갑니다. WATS는 EVM 체인에서 이 경로를 사용합니다. UserOperation에는 네이티브 가스를 정산하는 페이마스터가 실려 있고, WATS 사용자가 각 체인의 네이티브 코인 대신 ATS로 네트워크 수수료를 낼 수 있는 것이 바로 이 구조 덕분입니다.

멤풀에서 트랜잭션을 빼내려면 체인마다 그 체인의 네이티브 코인이 필요한가요?

WATS에서는 필요 없습니다. WATS Hot Wallet은 Ethereum, Arbitrum, Optimism, Base, Polygon, BNB Chain, Solana, TON 전반에서 네트워크 수수료를 ATS라는 하나의 토큰으로 청구하므로, 한 체인에 ETH가 없고 다른 체인에 BNB가 없다는 이유만으로 브로드캐스트가 막히는 일은 없습니다. EVM에서는 ERC-4337을 통해 작동하며, 페이마스터가 블록 생산자가 요구하는 네이티브 가스를 대신 냅니다. 그리고 ATS는 LayerZero OFT라서 잔액 하나가 지원되는 모든 체인을 커버합니다. 이것은 할인이 아닙니다 — 네트워크는 여전히 수수료 전액을 받고, ATS는 어떤 토큰이 그것을 지불하느냐만 바꿉니다.