statedb와 Trie, 그리고 leveldb.

in #statedb6 years ago (edited)

오늘은 diskdb에 statedb가 어떻게 연결되는지 확인했다. 전에 statedb가 따로 있는거 아니냐고 누가 물어봤었는데 대답을 못했어서.

정답은
물리적인 leveldb 하나에
논리적으로 체인 데이터db와
state용 cachingdb 2개를 쓴다.

체인데이터(블록)는 그냥 디스크에 직접 쓰고,
스테이트만 캐싱db(메모리)를 쓰는데
이 캐싱db가 결국 trie다.

트라이는 메모리를 쓰다가 얼마이상 메모리에 데이터가 쌓이면 디스크디비에 저장을 하는데 이 디스크가 체인데이터의 db로 설정되어
한 디스크db에 써지는 구조다.

[그리고 이 아랫그림에서
트라이간 연결선은 실제로 존재했다.
trie의 메모리 database(정확히는 node map)에서만 일어나서 leveldb상에 안보일뿐.]
이표현 틀렸습니다. 정정합니다.

reference는 statedb의 어카운트와 storage db를 연결하는 연결선을 생성합니다.

저그림은 실제로 구현되기보다, 루트해시를 통해 이전 블록의 트라이를 만들고 그 트라이에 업데이트를하여,
다시 트라이의 루트를 구하는 그림이 맞습니다.

20190404_233750.jpg

스크린샷, 2019-04-07 01-52-45.png