# Hyplerledger-fabric

## Hyperledger-fabric

<div align="left"><img src="https://547124030-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MkUpye9Jjn66rpY2jZz%2F-MlOttkh7DWcQuChyRu5%2F-MlOz_PuZ5CB6Qeu5Sch%2Fimage.png?alt=media&#x26;token=b65283b9-d0bd-4d72-be43-f2889067d7a5" alt=""></div>

### 하이퍼레저 패브릭이란   &#x20;

* **허가형 프라이빗 블록체인**\
  누구나 자유롭게 참여할 수 있는 기존의 블록체인과는 다르게 자체 인증 시스템에 의해 허가된 사용자만이 블록체인 네트워크에 참여할 수 있다.
* **별도의 원장 생성 가능**\
  기존의 블록체인은 블록체인 네트워크에 참여한 모든 참여자가 모든 정보에 대한 원장을 가지고 있었다. 하지만 하이퍼레저에서는 채널을 이용해 해당 정보를 공유하고자하는 노드 간에만 별도의 원장을 생성하는 것이 가능하다.

### 왜 하이퍼레저 패브릭인가     &#x20;

* **국방 데이터의 기밀성**\
  기존의 블록체인으로는 국방 데이터의 특성인 '기밀성'을 보장할 수 없다. 하이퍼레저는 허가된 사용자만 블록체인 네트워크에 참여할 수 있기때문에 군 외부로의 정보 유출을 방지할 수 있다.
* **국방 데이터의 보안성**\
  모든 국방 데이터가 같은 보안 등급을 가진 것은 아니다. 3급 기밀, 2급 기밀 등 정보의 보안 등급에 차이가 있고, 이러한 경우 모든 장병이 같은 장부를 가지게 하는 것이 제한된다. 하이퍼레저에서 제공하는 채널을 사용해 이러한 문제를 쉽게 해결할 수 있다. &#x20;
* **플랫폼의 완성도**   \
  자체적인 네트워크를 개발하면 예상치 못한 버그, 네트워크 보안성 문제 등의 문제가 발생할 수 있다. 이미 검증된 오픈소스 프로젝트인 하이퍼레저 패브릭을 사용함으로써 블록체인 네트워크 구조의 완성도를 높일 수 있다.

## 블록체인 네트워크 구현    &#x20;

### Json 데이터 흐름        &#x20;

아래 그림은 유저가 '총기 소유자 변경' 기능을 사용했을 때의 플로우 차트이다.&#x20;

1. 유저가 front-end에서 기능을 사용한다.
2. front-end가 back-end에 데이터를 업데이트 하기 위한 json을 넘긴다. 해당 json에는 함수명과 업데이트된 내역들이 담겨있다.
3. back-end는 받은 json을 DB에 저장한다.\
   3-1. 간부가 데이터를 승인하기 전까지 1\~3의 활동만 이루어진다.
4. 간부가 데이터를 승인하면 front-end는 back-end로 approve request를 준다.
5. back-end가 DB에서 데이터를 가져온 후 Hyplerledger-fabric에게 json 데이터를 넘긴다.
6. Hyplerledger-fabric은 SDK를 이용해 받아온 json의 내용 invoke한다.<br>

![](https://547124030-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MkUpye9Jjn66rpY2jZz%2F-Ml821oS6hKjJ5_kAw_p%2F-Ml83hCy6aw3hZ9RsaYf%2Fimage.png?alt=media\&token=fb2ae70a-c2f6-4dd0-bc50-29f138a95016)

### Hyperledger-fabric을 활용한 데이터 생성    <a href="#hyperledger-fabric" id="hyperledger-fabric"></a>

1. 클라이언트 어플리케이션은 wallet으로 부터 private key를 받고 권한 인증과정을 거친다.
2. 이후 어플리케이션은 인증된 총기교체 요청을 Hyperledger Fabric 공식 SDK에서 제공하는 gateway를 이용해 peer와 연결하고 API를 통해 블록체인 네트워크 쪽으로 넘긴다.
3. API로 하이퍼레저 transaction proposal형식으로 변환된 요청을 peer가 받아 validate하고 smart contract를 실행시켜 결과값을 read-write set으로 데이터화 한다. 그리고 이를 endorse해서 다시 gateway로 넘긴다.
4. gateway는 이제 endorse된 transaction을 Orderer로 넘긴다. Order는 transaction을 순서대로 모아 불변성을 가진 블록을 형성한다.
5. 이후 이 블록을 자신에게 연결된 모든 peer들에게 중개한다. 이로인해 장부의 일관성은 네트워크 전체에서 유지된다.

   5.1. 블록을 받은 peer는 이 블록을 장부에 입력하고 transactions를 드디어 실행시켜 장부를 업데이트한다. 이때 정해진 peer들한테 endorsement를 받았는지 확인하고, valid할 경우 CouchDB에 있는 world state도 업데이트가 된다.
6. 7\.  요청의 결과는 다시 gateway를 거쳐, 마지막으로 어플리케이션으로 넘어간다.

.

![Hyperledger-fabric 내부 작동 방식](https://547124030-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MkUpye9Jjn66rpY2jZz%2F-MlDqVsrvX70YQZX6Jcw%2F-MlDtkiSlpB_taAdPdLa%2Fimage.png?alt=media\&token=036fe614-e30e-428f-9cda-507d631f19a0)

![Hyperledger-fabric의 데이터 관리 방식](https://547124030-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MkUpye9Jjn66rpY2jZz%2F-MlDvfVk7KWG5urQsCmF%2F-MlDvrKZGjP2gVDOWqdK%2Fimage.png?alt=media\&token=59108531-cb46-4896-8e3a-0670d49470f1)
