Front-end_dev

블록체인에서 합의과정중 더 긴 체인을 선택할때 본문

blockchain

블록체인에서 합의과정중 더 긴 체인을 선택할때

Eat2go 2018. 12. 26. 05:26


* 노드옆에 문서같이 생긴것을 각 노드가 가지고있는 체인이라고가정한다.





그림은 5번노드가 블록체인 네트워크에 이제 막 합류한 그림이다. 


이때 5번은 3,4노드와 P2P로 통신할수있다. 그래서 5번노드는 블록동기화를 위해서 3,4번 노드에게 쿼리를 던진다 "마지막 블록이뭐야?" 

3번노드에게서 먼저 답장이왔다고가정하고, 3번노드가 알려줬지만 이미 3번노드는 이제막 합류한 5번노드(제네시스블록만가지고있는상태)와 체인길이가 상당히 차이난다. 그래서 아에 체인을 바꿔야하는 상황이다.

5번노드는 체인을 3번노드가가지고있는 체인으로 바꿨다.

그리고 4번노드에게서 답장이왔는데 4번노드도 3번이랑 길이가같기때문에 특별히 취할 조치는없다.

그럼 여기서끝이난다.


엥??? 위 그림의 블록체인네트워크상에서 가장긴 체인을 갖고있는건 1번노드와 2번노드가아닌가??


맞다.


근데왜 1번노드와 2번노드에게 쿼리를하지않을까?

사실 위 그림은 잘못됬다.


아래그림이 정답이다.






애초에 5번노드가 합류하기전, 3번노드와 4번노드가 블록체인네트워크에 합류했을때 5번노드가 위에서했던 방식과 마찬가지로 동기화작업을 마쳤으므로 5번노드가 합류하기전 1,2,3,4번 모든 노드는 이미 블록동기화가 완료되있는 상태다.



그럼 마지막 최종그림(5번노드까지 동기화가완료된 블록체인 네트워크)





* 오류수정 : 모든그림에서 1번과2번노드는 선으로연결되어있어야함. 2번노드가 합류할떄 1번노드로 붙기(attach)때문임.

만약 2번노드가 1번노드와 P2P 연결을 안맺으면 P2P가아니라 그냥 peer, peer라서 서로동기화가불가능

그림다시그리는건 귀찮으니 패스..