현재 비트코인과 이더리움의 풀 노드를 운영하는데 필요한 디스크 사이즈가 비트코인이 150GB, 400GB 정도로 추정됩니다.
이더리움이 비트코인보다 늦게 시작되었다는 점을 감안하면 이더리움의 디스크 사용량이 빠르게 증가했음을 추측할 수 있습니다. 개인용
랩탑이나 데스크탑의 스토리지 구성이 일반적으로 1TB 이하인 것을 생각해보면 개인이 풀 노드를 운영할 때 부담스럽게 느껴질 수
있는 부분입니다.
그러나 저 수치는 블록체인의 모든 블록과 상태를 저장했을 때 얘기이고, 더 이상 참조할 가능성이
없는 불필요한 정보를 삭제하면 비트코인이 약 5GB, 이더리움이 30GB 수준인 것으로 보입니다. 용량 수치 내용은 아래 2개
링크를 참고했습니다.
https://bitcoin.org/en/full-node#minimum-requirements
https://dev.to/5chdn/the-ethereum-blockchain-size-will-not-exceed-1tb-anytime-soon-58a
비트코인을
예로 들면 새로운 블록을 실행/검증하는데 중요한 것은 블록 내 트랜잭션 Input이 가리키는 Output이 사용 가능한지
여부입니다. 이를 효과적으로 처리하기 위해 비트코인 클라이언트는 UTXO(Unspent Transaction Outputs)
set을 관리하며, 신뢰할 수 있는 UTXO set이 있다면 굳이 모든 트랜잭션 히스토리를 저장하고 있지 않더라도 마이닝이
가능합니다. 다만 비교적 최근에 실행된 트랜잭션은 저장하고 있어야 합니다. 블록이 교체될 경우 빠진 블록의 트랜잭션을 되돌리는
과정이 필요하기 때문입니다.
이더리움의 경우 State를 Merkle-Patricia Trie를 통해 상태를 관리하고
루트의 hash를 블록 헤더에 저장합니다. 블록 헤더에 저장되는 내용은 PoW로 보호되기 때문에 특정 State를 다른
노드로부터 통째로 받았을 때 검증해볼 수 있는 항목이 존재하는 장점이 있습니다.
이더리움도 마찬가지로 블록이 교체될
경우를 대비해야 하는데, 비트코인이 트랜잭션을 되돌리는 것과 달리 이더리움은 예전 State 자체를 저장합니다. Trie는
해시포인터 구조로 저장되어 변경되는 경로에 있는 일부 노드만 추가로 저장되기 때문에 효과적인 방법입니다.
리플의 경우
BFT 계열 합의 알고리즘으로 포크가 일어나지 않음을 가정하고 있습니다. 이는 트랜잭션 히스토리를 저장할 필요없이 마지막
State와 해당 State에 대한 합의 내용(서명)만 저장하고 전파하면 됩니다. 리플에서 마지막으로 합의된 상태를
LCL(Last Closed Ledger)라고 부릅니다.
이더리움에서도 PoS 도입을 통해 Block
Finality를 보장하면 삭제할 수 있는 정보가 더 늘어나게 됩니다. 리플과 마찬가지로 마지막으로 PoS로 합의한 상태와 합의
내용과 그 검증만 있으면 그 이전의 트랜잭션 및 State는 저장하지 않아도 됩니다. 다만 PoS 합의 내용 자체를 검증하기
위해선 그 전체 히스토리가 필요할 수 있습니다.
'이더리움 Technical Background' 카테고리의 다른 글
트랜잭션의 마이닝 우선순위 (0) | 2018.02.18 |
---|