Mempool
Mempool을 이해하기 위해서는 블록체인 및 블록 그리고 채굴에 대한 이해가 필요하다.
블록체인은 블록과 블록이 체인(링크드 리스트)형태로 연결된 자료구조이다.
블록체인의 원소 역할을 수행하는 ‘블록’은 크게 헤더와, 바디정보로 구성되며, 블록의 바디 정보에는 다수의 거래 정보가 포함되어 있다.
블록체인은 =현재까지 모든 내역을 가지고 있는, append-only한, 거대한 분산 장부
비트코인을 예시로 들자.
블록에 포함되는 다수의 거래는 채굴자(마이너)가 새로운 블록을 생성하기 앞서,
거래 요청은 하였으나 아직 거래가 성립되지 않은, 즉 대기중인 트랙잭션을 블록에 포함시키게 된다.
채굴자는 대기중인 트랙잭션을 새롭게 생성할 블록에 포함시킨 후 임의의 nonce 값을 대입하여,
일종의 수학 문제를 풀어내고, 수학문제의 정답을 맞추었을 경우 ‘검증’ 및 블록체인에 새로운 블록을 연결하기 위하여 각 노드에 해당 블록을 전파하게된다.
노드들은 전달 받은 블록의 유효성을 검증하고 '진짜'블록, 즉 검증된 블록일 경우 자신의 블록체인에 해당 블록을 업데이트한다.
그렇다면 채굴자(마이너)는 어디서 대기중인 트랜잭션 정보를 가져오는가?
What is Mempool?
Mempool 이란, 아직 블록에 들어가지 않은 상태의 트랜잭션, 즉 0 Confirm(zero-confirm) 상태의 트랜잭션들이 존재하는 공간이다.
블록을 생성할 경우, 이 mempool 에 존재하는 트랜잭션을 블록에 포함시키게 된다.
각 노드는 해당 트랜잭션이 유효한지 검증한 후 검증된 트랜잭션을 mempool에 넣게 된다.
이 때 mempool 에서 블록으로 담기는 우선순위는 거래 수수료가 높은 순서로 mempool 에서 빠져나가게 되며, 블록이 블록체인에 연결되는 순간, 즉 1 Confirm 이 발생되면 mempool 에서 삭제된다.
보통 네트워크에서 내 참여자들을 우리는 노드라고 부른다.
각 참여자가 노드이든 채굴자이든 모두 멤풀을 하나씩 가지고 있다.
따라서 mempool에는 중앙화가 존재하지 않다.
mempool 자체는 탈중앙화된 트랜잭션을 위한 집결지일뿐이다.
가령 비트코인 블록체인 블록은 일정한 주기를 가지고 매 10분마다 추가되는데 그렇다고 트랜잭션 또한 그 주기에 맞춰 발생해야 하는 건 아니다.
10분마다 한 번의 트랜잭션을 기다릴 필요가 없다는 뜻이다.
A가 B에게 송금하고 싶어하는 상황
-
A가 송금 트랜잭션을 발생시킨다.
-
트랜잭션이 A의 멤풀에 추가된다.
-
해당 프랜잭션은 네트워크를 통해 브로드캐스팅 또는 릴레이된다.
-
채굴자를 포함하여 가장 가까운 노드로 릴레이된다.
-
그리고 다시 해당 트랜잭션이 멤풀에 추가된다. (유효성 검사를 수행하고)
-
…
-
블록이 생성되면, 모든 트랜잭션을 멤풀에서 빼내고, 블록을 릴레이한다.
-
블록에 있는 트랜잭션은 멤풀에서 제거되고, 그렇지 않은 경우 블록에 기록하면서 전파된다.