[가상화폐] 이더리움 프로토콜 매니져로부터 insertChain함수 호출 까지(Fetcher)
- Work4Block
- 0
- 2,781
- 0
- 0
- 글주소
- 06-18
이더리움 트렌젝션의 실행 (https://steemit.com/ethereum/@sigmoid/4mtmow) 을 통해
이더리움 트렌젝션이 insertChain이라는 함수에서 시작하며, 트렌젝션의 실행은
결국 어카운트의 잔고를 업데이트하는 것임을 확인하였습니다.
이번엔 insertChain함수는 언제 호출되는지를 분석해 보았습니다.
우선 이더리움 프로토콜 매니져의 생성과 실행은 간단하게 아래 그림에서 확인가능합니다.
geth가 실행되면 NewProtocolManager함수와 manager.Start함수가 실행됩니다
- NewProtocolManager함수에서 이더리움 프로토콜 매니져를 생성하면서 노드간의 데이터를 동기화 하기 위해 Fetcher를 생성하고 자신의 블록체인의 insertChain함수를 등록해둡니다.
- 프로토콜 매니져가 시작되면 아래의 그림처럼 총 4개의 go루틴이 시작됩니다 그중 syncer루틴에서 Fetcher를 실행하게 됩니다.
- fetcher의 loop루틴에서 priority queue로 부터 블록을 가지고와 등록된 insertChain함수를 호출합니다.
하나더, 그럼 큐에는 블록을 누가 넣지?? 라는 생각이 들어 찾아보니,
p2p 노드의 핸들러에서, 등록된 채널을 통해 큐로 블록을 넣어줍니다.
p2p 노드로 블록을 전달하는 것은 마이닝 - 트렌젝션이 풀에서 블록에 포함되기까지(https://steemit.com/ethereum/@sigmoid/2mnkfg) 에서 다룬적이 있었습니다.
이제 조금씩 글들이 연결고리를 가지게 되는것 같습니다.
지극히 개인적으로 이더리움 주석 한글화 프로젝트를 진행하고 있습니다.
https://github.com/NAKsir-melody/go-ethereum