샤딩 멤풀, 대기 거래를 노드가 나눠 맡는 멤풀
Strawmap 그 이후 (장기) · sharded mempool
지금은 모든 노드가 대기 중인 거래 전부를 받아 보관합니다. 샤딩 멤풀은 이 대기 거래를 여러 조각으로 나눠 노드마다 일부만 맡게 해, 거래가 크게 늘어도 노드 하나의 부담이 그만큼 커지지 않게 합니다.
왜 필요한가
이더리움에서 거래는 블록에 담기기 전에 멤풀(mempool)이라는 대기실에 모입니다. 지금은 네트워크의 모든 노드가 이 대기 거래를 전부 받아 서로에게 전달합니다. 거래 수가 적을 때는 문제가 없지만, 메인넷 처리량을 크게 늘리려면 대기 거래도 그만큼 늘어나고 모든 노드가 그 전부를 내려받아 검사하는 데 쓰는 통신량과 메모리가 한계에 부딪힙니다. 블록을 만들기 전 단계인 멤풀이 병목이 되는 것입니다. 샤딩 멤풀은 대기 거래를 여러 조각으로 나눠 노드마다 일부 조각만 맡게 하는 방식입니다. 각 노드는 자기 몫만 받아 검사하고 전달합니다. 블록을 만드는 쪽은 여러 조각에서 거래를 모아 옵니다. 거래가 늘어도 노드 하나가 감당할 양은 일정하게 유지할 수 있어 실행 층(execution layer) 확장의 바탕이 됩니다. 프로토콜 규칙을 바꾸는 하드포크 없이 클라이언트와 네트워크 명세를 고치는 일이며 Strawmap에서는 가까운 포크가 아닌 장기 과제 칸에 놓여 있습니다. 구체적인 설계는 아직 연구와 논의 단계입니다.
어떻게 동작하나
- 대기 거래를 조각으로 나눕니다 새 거래가 들어오면 정해진 규칙에 따라 여러 조각 중 하나에 속하게 합니다. 모든 거래가 한 줄로 쌓이던 멤풀을 여러 줄로 나누는 셈입니다.
- 노드는 맡은 조각만 받습니다 각 노드는 자기가 맡은 조각의 거래만 내려받아 검사하고 이웃 노드에 전달합니다. 거래 전체가 늘어도 노드 하나가 쓰는 통신량은 자기 몫 안에 머뭅니다.
- 블록을 만들 때 조각을 모읍니다 블록을 만드는 쪽은 여러 조각에서 거래를 가져와 한 블록에 담습니다. 조각마다 다른 노드가 보관하고 있어도 최종 블록에는 모두 들어갈 수 있습니다.