BLOG
블록체인 노드 경량화를 위한 루프체인의 프루닝(Pruning) 기술
2022.07.20
안녕하세요, 파라메타(PARAMETA)입니다.
블록체인 데이터의 증가
블록체인은 트랜잭션(Transaction, TX)들을 수집해 블록(Block)으로 만들고 블록들을 해시 체인(Hash Chain)으로 연결하여 위변조 불가능한 데이터 저장소 역할을 하며, 트랜잭션의 실행 결과로 내부의 상태 데이터를 갱신합니다. 이러한 특성상 블록체인에 저장되는 데이터는 지속적으로 확장됩니다. 그 예로 이더리움 풀노드(Full Node) 데이터 크기의 증가 그래프를 보면 현재 약 800GB 정도의 데이터 동기화가 필요한 상황이며, 지속적으로 늘어나고 있습니다. 특히 2021년 1월과 비교했을 때 2022년 1월에는 1년 사이 2배 이상 그 수치가 늘어나는 등 증가 속도가 꽤나 가파릅니다.
이더리움 풀노드 데이터 크기의 증가
* 출처: Ethereum Chain Full Sync Data Size, https://ycharts.com/indicators/ethereum_chain_full_sync_data_size
이렇게 꾸준히 증가하기만 하는 블록체인의 데이터 용량은 블록체인 도입에 있어 큰 걸림돌이 되는 요소 중 하나입니다.
첫 번째 문제는 비용 증가입니다. 데이터 저장을 위한 스토리지 비용의 지속적 증가는 물론, 늘어나는 데이터 처리를 위한 하드웨어 및 네트워크 사양도 함께 증가하게 되어 시간이 흐를수록 비용 부담이 커지게 됩니다.
두 번째 문제는 새로운 검증 노드(Validator)의 참여 제한으로 탈중앙화에 치명적인 영향을 미칠 수 있다는 점입니다. 새로운 검증 노드로의 참여를 위해 지불해야 하는 비용이 증가하고 기존 검증 노드의 동기화를 위한 시간이 몇 주 이상 소요된다면 새로운 검증 노드의 참여가 제한될 수밖에 없습니다. 이 경우 기존 검증 노드로만 운영해야 하는 이슈가 발생해 탈중앙성을 해칠 수 있는 것입니다.
노드 경량화를 위한 루프체인의 프루닝(Pruning) 기술
파라메타가 자체 개발한 루프체인(loopchain)에서는 최신 블록 데이터만 가지고 있음으로써 노드 운영의 경량화가 가능합니다. 전체 블록의 데이터를 가지고 있지 않은 형태로 경량화하더라도 새로 생성된 블록을 검증할 수 있도록 하는 것이 블록체인 노드 경량화의 핵심인데요, 루프체인에서는 프루닝(Pruning, 가지치기) 기술을 통해 이를 구현해 냈습니다.
기본적으로 블록체인은 이전 블록 헤더의 해시값을 다음 블록 헤더에 포함하는 방식으로 위변조를 방지하고, 타 노드로부터 새롭게 전파된 블록을 검증할 수 있도록 합니다. 블록 헤더에는 블록 높이, 트랜잭션 루트 해시, 트랜잭션 결과값 루트 해시, 검증자 루트 해시 등과 더불어 이전 블록 헤더의 해시값이 포함되는데요, 이러한 해시값을 재생성해 다른 노드로부터 전파된 해시값과 비교함으로써 트랜잭션이나 트랜잭션 실행 결과값에 대한 존재 또는 위변조 여부를 검증합니다. 즉 이러한 해시값들은 제네시스블록(Genesis Block)부터 체인이나 트리 형태로 구성, 계속 확장되는 형태로 쌓여가므로 이전 데이터가 있어야 새로운 데이터를 검증할 수 있게 됩니다. 이것이 바로 블록체인 노드들이 오래된 데이터 역시 보관하고 있는 이유이며, 나아가 시간이 지나면서 블록체인이 점점 커지게 되는 원인으로도 작용합니다.
이러한 해시 체인이나 트리를 중간에 자르려면(Pruning), 새롭게 전파된 블록을 검증할 수 있을 정도의 데이터는 남겨두거나 필요한 검증 데이터를 생성해야 합니다. 각 블록체인의 블록 구조나 합의 알고리즘에 따라 남겨야 하는 검증 데이터에는 차이가 있을 수 있습니다.
루프체인에서 블록(BN)은 TransactionsN, ReceiptsN-1, StateN, ValidatorsN+1 등으로 구성됩니다. 루프체인은 트랜잭션 실행 결과를 다음 블록에 포함시키는 방식을 채택하고 있습니다. 그리고 다음 블록(BN+1)의 생성 또는 검증을 위해서는 TransactionsN+1뿐만 아니라 현재 블록의 TransactionsN를 실행한 결과인 ReceiptsN와 StateN+1, 그 결과에 대해 수집된 VotesN가 필요하며, 해당 VotesN들이 이전 블록의 ValidatorsN 목록에 있는지 또한 확인이 필요합니다. 이렇게 블록 생성 및 검증에 필요한 블록, Vote 정보들을 이용하여 새로운 제네시스 블록을 생성하게 됩니다.
루프체인에서 블록 구성 및 새로운 블록 검증(생성)을 위해 필요한 데이터
루프체인에서는 마지막 3개의 블록과 마지막 블록에 대한 Vote 정보를 이용하여 새로운 제네시스 블록을 만드는 형태로 프루닝 기능을 지원합니다. 새로운 제네시스 블록 이전의 데이터는 블록 검증에 필요하지 않기에 노드에서 삭제할 수 있어 경량화가 가능해지는 방식입니다. 새로운 블록에 대한 검증을 수행할 수 있어 즉시 검증 노드가 될 수도 있으며, 모든 데이터를 가지고 있는 풀노드와의 차이 없이 함께 합의에 참여할 수 있습니다.
프루닝(Pruning) 기술을 이용한 노드 경량화
블록체인의 특성상 저장되는 데이터는 증가하는 방향으로만 진행되며, 데이터 용량이 늘어날수록 비용 및 탈중앙성에 심각한 영향을 줄 수 있습니다. 따라서 경량화된 노드는 반드시 필요하며, 이를 위해 블록체인의 장점인 위변조 불가 및 투명성을 해치지 않는 범위 내에서의 데이터 삭제(Pruning)가 필요합니다.
루프체인에서는 새로운 블록을 생성 및 검증할 수 있도록 기존 블록에서 필요한 정보를 추출하여 새로운 제네시스 블록을 만드는 방법으로 노드 경량화를 지원합니다. 이전 데이터를 프루닝하는 방법 외에도 상태 데이터를 경량화하는 기술을 추가적으로 적용한다면, 노드를 더욱 경량화할 수 있을 것이라 기대합니다.