[가상화폐] 나의 이더리움 분석기 - Light Ethereum Service

오늘은 Light Etherium Services에 대해 분석시작.

기본적 정의는 다음과 같다.
블록헤더를 다운받고 아주 작은 부분을 검증하기 위해 하드 디스크에 저장된 trie노드 형태의 분산된 해시 테이블을 DB로 이용한다.

In Ethereum, a light client can be viewed as a client that downloads block headers by default, and verifies only a small portion of what needs to be verified, using a distributed hash table as a database for trie nodes in place of its local hard drive.

IoT같은 디바이스에서 compact하게 ethereum을 실행하기 위해 디자인 된 서비스이다.

우선 한글 주석은 여기..
https://github.com/NAKsir-melody/go-ethereum/commit/50133d56fc95640630c427fc79909a38bdb53da5

geth 바이너리가 실행되면서 노드를 생성후 초기화 하는데,
노드객체는 기본적으로 서비스들이 등록되는 컨테이너 객체이기 때문에
ethereum 프로토콜도 역시 서비스로 추가 된다.
초기화가 완료된 노드가 start하면서 본인에게 등록된 모든 서비스를 시작하게 되므로
그때 라이트 이더리움 프로토콜이 실행될 것이다.

우선 node가 어떤 프로토콜을 사용할 것인지는 이더리움 프로토콜을 노드에 등록하는 시점에
config파일의 sync 모드에 따라 Light Sync인지 아닌지(Full sync)를 구별한다.

RegisterEthServcie내에서 les 객체의 New function으로 부터 시작
New함수에서 체인 DB(level DB)를 설정하고(생성 혹은 연결 /eth/db/cahindata) 3초마다 모니터링할 meter를 달아둔다
db를 읽어서 캐노니컬 hash가 있는지 확인하고 없다면 제네시스 블록을 생성하고
있다면 해당 블럭의 해시를 체크한 후에 net의 config를 읽어서
main-net인지 test net인지 결정한다.

그 후에 서비스 참여자를 관리하기 위해 피어셋을 생성하고
서버풀을 가동하여 새로 생성되거나 발견된 라이트 서버 노드를 저장한다.
효율적인 검색을 위한 bloom인덱서와, 합의 엔진(ethash), 요청 분배자를 설정한다.
요청 분배자가 사용할(?) 릴레이 채널과 검색매니저를 설정하는데
검색 매니저는 request id에 대응하여 응답/재전송/타임아웃을 관리한다.

그후에 라이트 체인의 최신 state 정보를 받아 오는 과정에서
트랜젝션 풀을 생성함과 동시에 서브 프로토콜 매니저를 생성하여 이더리움 네트워크와 호환 가능한 피어들을 관리한다.

이제 start가 불리우면
LES를 시작하는데, 이때 DiscV5프로토콜을 이용해 RLPx 노드를 검색하고
내부적으로 프로토콜 매니저가 돌면서 블럭과 해시 정보를 동기화 한다.

위키를 찾아보니
이더리움은 RLPx스펙으로 kademlia프로토콜의 일부를 사용하여 노드를 찾고 관리한다고 한다(p2p 관련 부분, node discovery protocol)
http://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf

코드에서 본 프로토콜 매니져의 역할은 아래. (Ethereum Wire Protocol)
이더리움 네트워크중 불록체인 데이터를 교환하는 프로토콜이다. = 프로토콜 매니져
두개의 피어가 서로 handshake를 하고 각자의 status message를 보낸다.
status는 TD와 best block의 해시값이 저장되어 있다.
베스트 블록 = RecentBlock이란 마이닝된 마지막 블록이다.
total difficulty는 누적된 체인의 difficulty이다. 이값이 크면 longest chain이 된다.
그러므로 해당 크라이언트가 방금 해시된블럭의 풀체인 피어로서 동작하게 된다
해쉬체인은 work풀을 통해 연결되 모든 피어에게 공유된다.
https://github.com/NAKsir-melody/wiki/blob/master/Ethereum-Wire-Protocol.md
(위키도 한글화 해야겠네..왜 이렇게 동작하는지 알려면..)

일단 라이트 노드로 설정되면 라이트 이더리움 서비스로 부터 블록과 해시를 받아오고
라이트 서버 노드들을 따로 저장해서 관리한다는건 알겠다.
또한 풀체인을 싱크하지 않고 최신 state만 받아오는 것을 확인했다.

아직 눈가리 코끼리 다리만지기 형태의 소스 분석이지만,
어느정도 분석하고 공부하다보면 큰 그림이 나올것이라 생각한다.

다음엔 합의 엔진인 ethash쪽을 분석해보고자 한다..

0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

블록체인 기술

번호 제목 글쓴이 날짜 조회수
36 정보 비트코인의 원리 PART 5-1: 블록체인 원리 icon Work4Block 06-07 4,661
35 정보 게임계 암호화폐 유나의 옷장과 제도권심사 소식 icon Work4Block 06-07 4,359
34 정보 스마트 컨트랙트의 활용을 알아보자 icon Work4Block 06-07 4,895
33 정보 암호화폐 공공의 적, 51% 공격에 대해 알아볼까? icon Work4Block 05-30 4,860
32 정보 EOS 기반 방치형 RPG게임 제작 #1 icon Work4Block 05-27 4,687
31 정보 나만 몰랐던 블록체인 상식) 스팀잇 데이터는 어디에 저장될까? icon Work4Block 05-26 4,159
30 정보 KEEP!T History: 오스트리아 학파, 탈 중앙화(decentralization)를 선언하다. icon Work4Block 05-24 4,510
29 정보 KEEP!T History: EOS의 경제학적 기반을 세운 학파. icon Work4Block 05-18 3,666
28 정보 EOS(2): 채굴자원 확장문제 icon Work4Block 05-17 3,885
27 정보 EOS(1): 스팸 공격 방어방법 icon Work4Block 05-17 4,102
26 정보 쉽게 이해하는 블록체인 기술(3): 합의 알고리즘 icon Work4Block 05-17 4,448
25 정보 쉽게 이해하는 블록체인 기술(2) icon Work4Block 05-17 4,212
24 정보 쉽게 이해하는 블록체인 기술(1) icon Work4Block 05-17 4,899
23 정보 KEEP!T History: 장기적으로 볼 때 우리는 모두 죽는다 icon Work4Block 05-17 4,573
22 정보 토큰 이코노미 설계의 빅 픽쳐와 행위자(Actor)에 대해 icon Work4Block 05-16 4,279
21 정보 PoW를 다시 생각한다 icon Work4Block 05-09 4,276
20 정보 Modified Merkle Patricia Trie - ethereum이 상태를 저장하는 방법 icon Work4Block 05-08 5,336
19 정보 '스마트 계약'의 의미이론에 대해 icon Work4Block 05-08 4,722
18 정보 블록체인 진화의 방향으로서의 Blockchain inter-connection 이슈들 icon Work4Block 05-07 3,615
17 정보 KEEP!T Column: 아나키, 국가, 그리고 블록체인. icon Work4Block 05-04 3,986