Mempool

Mempool을 이해하기 위해서는 블록체인 및 블록 그리고 채굴에 대한 이해가 필요하다.

블록체인은 블록과 블록이 체인(링크드 리스트)형태로 연결된 자료구조이다.

블록체인의 원소 역할을 수행하는 '블록'은 크게 헤더와, 바디정보로 구성되며, 블록의 바디 정보에는 다수의 거래 정보가 포함되어 있다.

블록체인은 =현재까지 모든 내역을 가지고 있는, append-only한, 거대한 분산 장부

비트코인을 예시로 들자.

블록에 포함되는 다수의 거래는 채굴자(마이너)가 새로운 블록을 생성하기 앞서,

거래 요청은 하였으나 아직 거래가 성립되지 않은, 즉 대기중인 트랙잭션을 블록에 포함시키게 된다.

채굴자는 대기중인 트랙잭션을 새롭게 생성할 블록에 포함시킨 후 임의의 nonce 값을 대입하여,

일종의 수학 문제를 풀어내고, 수학문제의 정답을 맞추었을 경우 '검증' 및 블록체인에 새로운 블록을 연결하기 위하여 각 노드에 해당 블록을 전파하게된다.

노드들은 전달 받은 블록의 유효성을 검증하고 '진짜'블록, 즉 검증된 블록일 경우 자신의 블록체인에 해당 블록을 업데이트한다.

그렇다면 채굴자(마이너)는 어디서 대기중인 트랜잭션 정보를 가져오는가?


Mempool

Mempool 이란, 아직 블록에 들어가지 않은 상태의 트랜잭션, 즉 0 Confirm(zero-confirm) 상태의 트랜잭션들이 존재하는 공간이다.

블록을 생성할 경우, 이 mempool 에 존재하는 트랜잭션을 블록에 포함시키게 된다.

각 노드는 해당 트랜잭션이 유효한지 검증한 후 검증된 트랜잭션을 mempool에 넣게 된다.

이 때 mempool 에서 블록으로 담기는 우선순위는 거래 수수료가 높은 순서로 mempool 에서 빠져나가게 되며, 블록이 블록체인에 연결되는 순간, 즉 1 Confirm 이 발생되면 mempool 에서 삭제된다.

보통 네트워크에서 내 참여자들을 우리는 노드라고 부른다.

각 참여자가 노드이든 채굴자이든 모두 멤풀을 하나씩 가지고 있다.

따라서 mempool에는 중앙화가 존재하지 않다.

mempool 자체는 탈중앙화된 트랜잭션을 위한 집결지일뿐이다.

가령 비트코인 블록체인 블록은 일정한 주기를 가지고 매 10분마다 추가되는데 그렇다고 트랜잭션 또한 그 주기에 맞춰 발생해야 하는 건 아니다.

10분마다 한 번의 트랜잭션을 기다릴 필요가 없다는 뜻이다.

A가 B에게 송금하고 싶어하는 상황

  1. A가 송금 트랜잭션을 발생시킨다.

  2. 트랜잭션이 A의 멤풀에 추가된다.

  3. 해당 프랜잭션은 네트워크를 통해 브로드캐스팅 또는 릴레이된다.

  4. 채굴자를 포함하여 가장 가까운 노드로 릴레이된다.

  5. 그리고 다시 해당 트랜잭션이 멤풀에 추가된다. (유효성 검사를 수행하고)

  6. 블록이 생성되면, 모든 트랜잭션을 멤풀에서 빼내고, 블록을 릴레이한다.

  7. 블록에 있는 트랜잭션은 멤풀에서 제거되고, 그렇지 않은 경우 블록에 기록하면서 전파된다.

Last updated