비트코인과 다르게 이더리움에서는 단순 이진 머클트리가 아닌, 머클트리의 개선된 버전인 머클 패트리샤 트리를 채택하여 사용하고 있다.
머클 트리는 일련의 '데이터 무결성'을 효과적으로 검증(증명)하는 데 사용되는 구조이다
머클 트리 구조의 핵심에는 '해시 함수'가 있다
머클 트리는 데이터를 여러 조각으로 나누며 생성되며,
'머클 루트'를 형성하기 위해 반복적으로 해시화된다
이후 데이터 조각이 잘못된 경우, 이를 효율적으로 검증(수정)할 수 있다
큰 장점은 하위 트리를 분석하여 데이터가 트리 내에 있는지 쉽게 확인할 수 있다
이렇게 파일을 다운로드 하면,
이 자료는 '머클 루트(Merkle Root)' 라는 해시를 제공한다
다운로드 하고자 하는 파일의 해시가 개발자에 의해 공개된 것과 일치하는지 확인해야 한다
두 해시가 일치한다면, 컴퓨터에 존재하는 파일이 개발자들의 것과 정확히 일치한다고 말할 수 있다
머클루트가 중요한 이유는 데이터 유효성의 검증 때문이다
(유효성 검증 속도는 OLog₂N)
👉 '머클 루트'를 사용하면, 훨씬 간단하게 데이터를 검증할 수 있다
하나의 트랜잭션이 변조되면 머클 루트까지 모든 값이 바뀌게 된다
이러한 현상을 '쇄도 효과(avalanche effect)'라고 한다
'이더리움' 에서는 모든 트랜잭션의 완전한 모델을 만들기 위해
머클 패트리샤 트리 Merkle-Patricia-Tree (trie) 방법을 사용한다
- 이더리움의 전역상태는 계정 주소와 계정 상태를 매핑한 것으로 구성되어 있다
- 부모 노드는 '두 자식 노드를 모아' 해싱한 값을 가진다
- 자식 노드의 값이 '조금이라도 바뀌면' 부모 노드의 값도 바뀐다
- 이더리움 블록 헤더는 상태트리 / 트랜잭션 트리 / 영수증 트리
- 세 트리의 루트 노드 해시값이 저장되어 있다
- 블록 헤더에 루트 노드들의 값을 가지고 있지만,
이더리움의 '상태 일부분을 검증' 할 수 있다
- 트리 '맨 아래'에 있는 노드들은 데이터를 가지고 있다
참고링크: 1. 머클 패트리샤 트리 동작
2. 머클 패트리샤 트리 설명
참고링크: 이더리움 상태란 무엇일까?