나의 이더리움 분석기 - 중간정리 - 2

in ethereum •  6 years ago  (edited)

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

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

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

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

이 그림이 기억이 나시나요?

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

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

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

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

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

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

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

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

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

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

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!