하이퍼레저 패브릭 공식 홈페이지에서 가지고 온 이미지이다. 이 그림을 완벽하게 이해한다면 하이퍼레저 패브릭의 개요에 대해서는 완벽하게 이해를 했다고 봐도 무방하다.
오늘의 목표는 하이퍼레저 패브릭에서의 transaction flow에 대해 공부하고 위 그림을 완벽하게 이해하는 것이다.
< 정답 미리 보기 >
이전 포스팅을 보고 이 포스팅을 봤는데도 위의 과정이 이해가 안되고 모르겠으면... 어쩔 수 있나? 그냥 통째로 외우자 먼저 외운 다음 이해를 하는 방법도 상당히 괜찮다고 생각한다.
유저와 Peer가 연결 (인터넷에 연결), 유저(App, Client)가 거래를 만든다. (Transaction Proposal)
거래를 Peer에게 보낸다. (Transaction Proposal)
위 그림에서의 1.proposals ,(거래 제안) 에 해당한다.
피어는 이 거래를 가지고 시뮬레이팅을 한다. (스마트 컨트랙트를 실행해보고, 체인코드를 실행해보고, ~~ )
합의를 통해 OK(합의, 허락)를 떨궈준다. (Proposal Response)
(투표, BFT-비잔티움 장애 허용, 3명 중에 2명이 합의를 해야한다~ 4명 중에 3명이 okay 해야한다~ )
이 때 피어들에게 허락을 받는 과정을 Check endorsement policies 라고 한다.
피어1, 피어2, 피어3 여러가지의 피어들이 있다. 그 중에서 허락을 받은 트랜잭션(거래)들만 패키지로 모아서 Orderer에게 보낸다.
=> 위 그림에서의 2.Proposal Package에 해당한다.
Orderers 한테 보낼 수 있다.
=> "이것들은 검증을 받은 트랜잭션들(거래)이니까~~" Orderer 한테 보내서 "이제 블럭에 넣어줘!!" 한다.
Orderer는 거래들을 계속 모은다. OK를 확인해보고 Block을 생성한다.
=> 받은 거래들은 피어들한테 허락을 받았는지만 검증을 한다. 스마트 컨트랙트가 어떤 내용으로 실행되었는지!? 어떻게 어떤 방식으로 검증이 되었는지!? 그 안에 어떤 내용이 있는지는 검증하지 않는다.
Orderer는 만든 블럭을 Peer들에게 준다.
=> 3. Block 전파에 해당한다.
Peer는 블럭을 받아서 자기 블럭체인에 연결하고 자기의 월드 스테이트를 업데이트한다. (Ledger Update)
App(유저)이 거래를 만들어 Peer에 보내면(proposals) 블록에 바로 들어가는게 아니라 시뮬레이팅을 하게 된다.
이 때 거래를 승인하게되면 시뮬레이팅을 하게되고 OK 사인을 App(유저)에게 보낸다. 이 OK 사인이 패브릭에서의 합의 방식 BFT이다. 간단하게는 3명중 2명이 투표를 하면 된다. 위처럼 App이 Peer들에게 허락을 받는걸 endorsement policies라고 한다.
합의를 통해 검증을 받은 트랜잭션은 Orderer에게 블록에 넣어달라고 요청된다.(proposal package)
Orderer는 트랜잭션(거래)들을 계속 모아서 Peer들에게 허락을 받았는지만 검증한다. 스마트컨트랙트가 어떤 내용으로 실행되었는지, 어떤 내용이 있는지는 검증하지 않는다.
트랜잭션을 계속 모아서 블럭을 생성한다. 만든 블록을 Peer들에게 전달한다. (Block 전파)
Peer는 블록을 받아서 블록체인에 연결하고 자신의 world state를 업데이트하게 된다.
비트, 이더에서는 하나의 노드가 거래를 모으고, 블록도 만들고 모든 일을 다하는데 반면, Fabric은 Peer와 Orderer로 나뉘어져 각자의 역할을 수행한다.
하이퍼레저 패브릭에서의 트랜잭션 흐름이 완벽하게 이해가 됐다면 위의 플로우 다이어그램을 이해하는 것도 큰 무리는 없을 것이다.