나의 이더리움 분석기 - 노드 간 연결

in #ethereum8 years ago (edited)

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

geth는 main에서 크게 2개의 함수를 실행한다.

  1. MakeFullNode
  2. StartNode

p2p노드간 연결은 아래와 같다.

MakeFullNode에서 이더리움 프로토콜 매니져를 생성하면서
서브프로토콜로 P2P를 등록함(이때 p2p 핸들러로 Run함수를 저장)

StartNode에서 p2pServer가 스타트하게 되며 동시에 2가지 고루틴을 생성

  1. Peer connection에 대한 Listening
  2. dial(discovery:udp, transport: tcp)

새로운 노드의 dial이 성공하면 상대노드의 listning loop에서 accept를 하게 되고
양쪽 모두 setupConn 함수를 호출하게 된다
(dial과 accept는 net 패키지에 있으며, sockect의 connect와 accept에 해당함)

setupConn함수에서
서로 상대에 해당하는 peer를 생성하면서 프로토콜 매니저 생성때 등록해 두었던
Run함수를 호출하게 되며 이 함수 내부는
HandleMsg의 루프로 구성되어져 있고, ethereum 프로토콜 메시지를 처리하게 된다

// eth protocol message codes
(
// Protocol messages belonging to eth/62
StatusMsg = 0x00
NewBlockHashesMsg = 0x01
TxMsg = 0x02
GetBlockHeadersMsg = 0x03
BlockHeadersMsg = 0x04
GetBlockBodiesMsg = 0x05
BlockBodiesMsg = 0x06
NewBlockMsg = 0x07
//Protocol messages belonging to eth/63
GetNodeDataMsg = 0x0d
NodeDataMsg = 0x0e
GetReceiptsMsg = 0x0f
ReceiptsMsg = 0x10
)

Coin Marketplace

STEEM 0.04
TRX 0.33
JST 0.081
BTC 60877.22
ETH 1611.90
USDT 1.00
SBD 0.42