[가상화폐] 나의 이더리움 분석기 - 중간정리 - 2

중간정리 1에서 언급했던 4개의 루프중 남은 3개의 흐름과 geth의 마지막인 startmining까지 정리해봅니다.

중간정리 1( https://steemit.com/ethereum/@sigmoid/1) 에서 아래의 그림의 우하단 4개의 루프중 초록색 루프인 싱커에서 트렌젝션을 처리하는 것을 확인하였습니다.

image.png

이제 보라색 루프부터 시작합니다.
보라색 루프는 트렌젝션을 공유하는 루프 입니다.
txsCh 채널에서 이벤트가 발생하면, 해당 트렌젝션을 p2p레이어를 통해 전달하는 역할을 합니다.
txsCh 채널은 tx_pool의 SubscribeNewTxsEvents함수를 통해 구독한 채널이고,
이 채널에 데이터가 써지는 시점은 트렌젝션 풀에 새로운 트렌젝션이 추가되거나,
pending큐에서 excutable큐로 트렌젝션이 옮겨지는 순간 불리워 지게 됩니다.
아래그림의 이더리움 노드 안쪽의 SendTransaction이 그것이고요. 플로우 차트도 함께 추가합니다.
image.png
image.png

주황색 루프는 블록이 마이닝 되었을때, 해당 블록을 피어들에게 전파하는 역할을 담당합니다.

이 그림이 기억이 나시나요?
image.png
지난 번 syncer그림에서 누가 큐에 블록을 푸시하는지 아래와 같이 그린적이 있었습니다.
여기서 사용된 메시지를 발생시키는 곳이 주황색루프입니다.

image.png

이제 마지막으로 파란색 루프는 TxsyncCh 채널에서 이벤트가 발생했을때 트렌젝션을 동기화하는 역할을 합니다.
위에 이미 동기화하는 보라색 루프가 있었는데, 이게 왜 또있나 하실텐데, 이루프에서 하는 동기화는
노드가 처음에 연결되었을때 딱 한번,
대기중인 트렌젝션을 상대 노드와 동기화 하는 용도로 사용됩니다.
그 이후엔 다시 보라색 루프를 사용해서 동기화가 됩니다.
이그림에서 p2p연결사이의 SendTransaction이 이 루프에서 발생되는 것이죠.
플로우 차트도 함께 추가합니다.
image.png
image.png

geth는 노드를 만들고 시작한 후, 마지막으로 어카운트를 언락한뒤 마이닝을 시작합니다.
마이닝은 크게 두개의 고루틴 호출로 이뤄지는데
첫번째 고루틴에서 마이너는 에이전트를 여러개(논리적cpu갯수)만들어서 일을 시킵니다.
에이전트들의 일이란, 하시모토풀을 동작시키고, 논스를 찾는 것이고요, 한 에이전트라도 논스를 찾는다면 found 채널로 마이너에게 블록을 전송합니다.
그럼, workCh채널을 사용해 나머지 동작중인 에이전트들을 모두 중지시킵니다.

image.png

두번째 고루틴인 cimmit new work에서는 블록을 생성하게됩니다. 트렌젝션풀에서 현재 처리가능한 트렌젝션을 가져와서 가격을 기준으로 정렬합니다. 이유는 블록에 포함시킬 트렌젝션들이 비싸야 채굴했을때 수익을 더 크게 가져갈수 있기 때문이고요. 트렌젝션을 하나하나 실행하고, 그에 따른 스테이트를 DB에 업데이트 합니다. 그리고 영수증을 만듭니다.
헤더의 루트를 완성하고 주어진 헤더 + 트렌젝션 + 엉클정보 + 영수증으로블록을 만들어 마이너 에이전트에게 전달합니다.

이렇게 nonce가 찾아지고 블록이 완성되면 NewMinedBlockEvent가 발생합니다.
이 이벤트는 이제 익숙하시죠? 주황색 루프에서 처리되서
queue에 들어가고 insertchain호출이였죠

마지막으로 다음 블록에 대한 nonce를 찾기 위해 Agent 들에게 새 work를 할당하면서 루프처럼 동작하게 됩니다.
image.png

이렇게 이더리움의 노드의 큰 동작을 한번 훑어볼수 있게되서 참 기쁩니다.

이더리움 공부하면서 재미있는 것이
p2p 네트워크치고는 통신량이 거의 없어보인다는 점입니다.
트렌젝션을 하나 만들었을때, 연결된 피어들이 이 트렌젝션을 이미 안다, 모른다를 내가 이미 관리하고 있어서 필요한 노드에만 공유하도록 해놨죠.
블록이나 트렌젝션의 변화된 부분만을 공유함으로서 상대 노드의 업데이트를 유도해서 나와같은 상태로 유지되게 만든다는것이 참 매력적인 디자인인것 같습니다.

다음부터는 요즘 해킹등으로 핫한 스마트 컨트렉트 공부를 해봐야겠습니다. 부족한 글 읽어주셔서 감사합니다.

지극히 개인적으로 이더리움 주석 한글화 프로젝트를 진행하고 있습니다.
https://github.com/NAKsir-melody/go-ethereum

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

블록체인 기술

번호 제목 글쓴이 날짜 조회수
103 정보 KEEP!T 블록체인 뉴스:6/23 - 비트코인의 학술적 유래 (2) icon Work4Block 07-05 2,108
102 정보 KEEP!T 블록체인 뉴스:6/16 - 비트코인의 학술적 유래 (1) icon Work4Block 07-05 2,640
101 정보 토큰 락업(Lock-up)은 스캠 ICO의 완전한 방지책일까? - (경제학으로 읽는 비트코인 이야기 - 7) icon Work4Block 06-28 4,646
100 정보 문과생, 블록체인업체에 취직하다 - (5) 블록체인 번역자들이 종종 범하는 실수 icon Work4Block 06-28 2,555
99 정보 문과생, 블록체인업체에 취직하다 - (4) "그집 아들, 다단계 회사 다닌다면서요?" icon Work4Block 06-28 2,723
98 가상화폐 문과생, 블록체인업체에 취직하기 - (3) 저도 블록체인 업계에서 일하고 싶어요! icon Work4Block 06-28 2,970
97 정보 문과생, 블록체인업체에 적응하기 - (2) 기자간담회 냐 밋업이냐? icon Work4Block 06-28 2,176
96 정보 문과생, 블록체인업체에 취직하다! - (1) icon Work4Block 06-28 2,342
95 가상화폐 고장난 웹2.0, 패러다임 전환의 시기 icon Work4Block 06-27 3,080
94 가상화폐 Qx, QDex 및 Qrypto라는 3 개의 새로운 프로젝트 icon Work4Block 06-26 2,865
93 가상화폐 [Ethereum] Ethernaut 풀이 - 3.Coin Flip icon Work4Block 06-25 2,476
92 가상화폐 [Ethereum] Ethernaut 풀이 - 2.Fallout icon Work4Block 06-25 3,436
91 가상화폐 [Ethereum] Ethernaut 풀이 - 1.Fallback icon Work4Block 06-25 2,720
90 가상화폐 Overall Analysis of IOTA (아이오타 포괄적 분석) icon Work4Block 06-22 2,524
89 가상화폐 [Ethereum] Ethernaut 풀이 - 0.Hello Ethenaut icon Work4Block 06-21 2,487
88 가상화폐 [Ethereum] Ethernaut 소개 icon Work4Block 06-21 3,243
87 정보 [개념 정리] 온 체인(Onchain), 오프 체인(Offchain)이 무엇인가? icon Work4Block 06-21 3,575
86 가상화폐 나의 이더리움 분석기 - 중간정리 - 2 icon Work4Block 06-21 3,121
85 가상화폐 이더리움이 go를 사용하는 이유(개인적인 생각) icon Work4Block 06-21 2,317
84 가상화폐 [Ethereum] Smart Contract 개발을 위한 환경 세팅 (Remix, Ganache) icon Work4Block 06-19 7,569