하이퍼레저 프로젝트란?
하이퍼레저 프로젝트는 리눅스 재단에서 주관하는 블록체인 오픈소스 프로젝트로 금융, IoT, 물류, 제조 등 여러 산업에 걸쳐 응용 가능한 블록체인 기술을 만드는 것이 목표다.
하이퍼레저 프로젝트는 여러 기업들이 공동으로 참여하는 범산업용 분산원장 표준화 프로젝트(Cross-Industry open standard for distributed ledgers)다.
현재 분산원장을 위한 6개의 프레임워크가 존재한다.
하이퍼레저 패브릭이란
![](https://velog.velcdn.com/images%2Fdsunni%2Fpost%2F51c6c0b3-04b8-4a05-acbb-f3c86cd014a7%2Fimages%20(1).png)
- 플러그앤 플레이 방식 : 꽂으면 실행된다는 뜻으로, 컴퓨터 실행 중에 주변 장치를 부착해도 별다른 설정 없이 작동한다.
- 모듈러 아키텍처 : 컨센서스 알고리즘, 멤버십 서비스 등의 모듈을 필요에 따라 교체 가능
하이퍼레저 패브릭은 모듈러 아키텍처를 따르는 프레임워크로 컨센서스 알고리즘(합의 알고리즘)이나 멤버쉽 서비스 등 핵심 기술 요소를 플러그앤 플레이 방식으로 구현할 수 있도록 지원한다.
하이퍼레저 패브릭은 컨테이너 기술을 활용해 시스템 로직 구성을 위한 체인코드 서비스를 제공한다.
하이퍼레저 패브릭 목표
- 허가된 참여자를 대상으로하는 비즈니스 환경에 맞는 블록체인
- 다양한 요구사항을 지원
- 모듈러 아키텍처 기반 분산 응용 플랫폼
하이퍼레저 패브릭 특징
- 퍼미션드 블록체인
- MSP (Membership Service Provider)를 통해 허가된 참여자만 접근을 허용하고, 접근 권한을 제어할 수 있다.
- 프라이빗 블록체인 구성에 최적화됨
- 일반 프로그래밍 언어 사용 가능
- Go, Java 사용 가능하다.
- 이더리움의 스마트컨트랙트와 달리 하이퍼레저 패브릭은 비 결정적 프로그래밍 언어를 사용한다.
- 결정적 프로그래밍 언어 : 이더리움의 솔리디티를 사용해 모든 컨트랙트 결과를 항상 동일하게 보장함
- 하이퍼레저 패브릭은 내부 키의 상태 변환 값으로 비 결정적 오류를 해결한다.
- 높은 성능
- 하이퍼레저 패브릭은 피어 노드에게 체인코드를 실행시키도록 할 수 있다.
- 이 과정에서 키에 대한 버전 관리를 통해 동시 처리에 따른 비 결정적 실행 문제점을 해결할 수 있다.
- 교체 가능한 모듈러 아키텍처
- 3가지 컨센서스 알고리즘 선택이 가능하다. (Solo, 카프카, PBFT)
- 멀티 블록체인 지원
- 채널이라는 분할된 네트워크로 멀티 블록체인을 지원한다.
하이퍼레저 패브릭 아키텍처
아키텍처는 크게 4가지 컴포넌트로 분류되어있다
- 신원확인
- 분산 원장
- 트랜잭션
- 체인코드
![](https://velog.velcdn.com/images%2Fdsunni%2Fpost%2Ff4f8152a-6b5b-4db1-9b06-953021f8c78d%2F644df7d73a0a4b7086f98c4a885cdf3b.jpg)
신원확인
사용자는 하이퍼레저 패브릭 네트워크에 접속하려면 우선 신원확인부터 해야한다.
신원확인은 MSP(Membership Service Provider)에 의해 이루어진다.
원장 (Ledger)
원장은 블록에 트랜잭션(거래) 정보가 저장되는 공간이다.
하이퍼레저 패브릭은 월드 스테이트(World State)라는 저장소에 원장을 저장한다.
한 채널이 한 원장을 가지고 한 채널 안의 모든 피어노드들은 동일한 원장의 복사본을 가진다.
트랜잭션
트랜잭션은 스마트 컨트랙트인 체인코드의 실행을 의미한다.
- 엔도싱(Endorsing) 피어 노드
- 보증 검증 (Endorsement Validation)
- 트랜잭션 배치 처리
- 오더링 서비스(Ordering Service) 노드
- private blockchain내 모든 피어 노드들에 분기함
체인코드
체인코드는 하이퍼레저 패브릭의 스마트 컨트랙트이다.
- 스마트 컨트랙트 : 일정한 조건을 만족하는 경우 거래가 자동으로 실행될 수 있도록 프로그래밍된 자동화 계약 시스템
하이퍼레저 패브릭 핵심 용어
하이퍼레저 패브릭 네트워크 구성요소
- 채널(Channel)
- 네트워크에서 트랜잭션의 그룹 권한을 그룹별로 설정하고 관리하는 기술요소
- 조직 (Organization)
- 네트워크 조직별 피어노드 권한 관리
- 클라이언트 (네트워크 참여자) 접근 권한 관리
- 피어 노드 (Peer Node) : 블록체인 네트워크를 유지하며, 트랜잭션을 처리하고, 원장과 체인코드를 관리하고 저장한다.
- 엔도싱(Endorsing) 피어 노드 : 보증 정책(Endorsing Policy)에 따라 요청된 트랜잭션을 먼저 수행해 검토를 하고 보증 사인을 첨부
- 커미팅(Committing) 피어 노드 : 엔도싱이 실행한 트랜잭션 결과에 검증 문제가 없다면 트랜잭션을 확정하고 내용을 블록체인에 업데이트함
- 앵커(Anchor) 피어 노드 : 채널 내에서 대표 역할을 수행
- 리더(Leader) 피어 노드 : 조직에서 대표 역할을 수행
오더링 서비스 노드
노드란 블록체인 네트워크를 구성하는 서버를 뜻한다.
오더링 서비스 노드(오더러 Orderer)는 네트워크 내의 채널에 대한 구성 정보를 소유하고, 이를 기반으로 전체 시스템의 관리자 역할을 수행한다.
오더링 서비스 노드는 트랜잭션을 피어노드에 전달하고, 네트워크에 참여하고 있는 모든 피어 노드의 분기 및 정렬 역할을 한다.
오더링 서비스 알고리즘
- Solo 오더링 서비스
- 가장 기본적, 하나의 중앙 오더링 서비스가 모든 트랜잭션의 순서를 결정
- 싱글 프로세스로 구성돼 only 테스트 용도로 적합
- 카프카 기반 오더링 서비스
- 피어노드가 멈췄을 때 다른 분산 오더링 서비스 제공 가능
- RAFT(Reliable, Replicated, Redundant And Fault-Tolerant) 오더링 서비스
- H.F 1.4.1버전부터 추가된 CFT(Crash Fault Tolerant) 알고리즘 기반 오더링 서비스다.
- 리더 및 팔로워 모델 기반
- 채널의 리더 노드가 모든 트랜잭션을 처리하고 결과가 나머지 노드게게 복제됨
멤버십 서비스 제공
- MSP : 블록체인 네트워크에 인증 서비스를 제공
- 네트워크에 참여하는 피어 노드, 오더링 서비스 노드 등 각 노드의 신원, 역할, 소속, 권한을 관리하고 조직 구조를 설계함
- 네트워크에 접속하려는 클라이언트의 신원을 확인, 접근 권한 제공
- CA (Certification Authority) : MSP에서 암호화 인증을 위해 필요한 인증기관
- 공개 키 인증서 및 개인키 발급
- 구성조직 : 루트 인증서(Root Certificate)
- 사용자 : 신원등록 인증서(Enrollment Cerificate, Ecert)
- Identity Mixer 추가로 익명성 보장하고 신원 증명 가능
하이퍼레저 패브릭 시스템 플로우
![](https://velog.velcdn.com/images%2Fdsunni%2Fpost%2Fee88be5d-de79-4e5e-8ed9-fae3c92ed311%2FHyperledger-Fabric-high-level-transaction-flow.png)
MSP로부터 접근 승인을 받은 클라이언트 애플리케이션은 하이퍼레저 패브릭 네트워크에 트랜잭션을 발생시킬 수 있다.
위 그림은 네트워크에서 트랜잭션이 원장에 기록되는 과정이다.
① Transaction Proposal
Application은 먼저 트랜잭션 제안서를 엔도싱 피어 노드에게 보낸다.
트랜잭션 제안서 : 클라이언트의 ID, 클라이언트의 서명 등이 포함됨
② Execute Chaincode
제안을 받은 엔도싱 피어 노드는 보증 정책에 따라 트랜잭션 제안서가 잘 구성되어있는지 확인하고
서명이 유효한지 체크한 뒤 체인코드를 실행한다.
③ Proposal Response
이후 RW(Read & Write data sets) 세트를 포함하는 트랜잭션 결과를 생성해 반환한다.
- Read set : 시뮬레이션 중에 트랜잭션이 읽는 고유 키, 커밋된 버전의 목록
- Write set : 고유 키 목록, 트랜잭션에 작성하는 새 value 목록
④ Submit Transaction
결과 값들이 동일함을 확인해 해당 트랜잭션의 신뢰성을 확보하면
Application은 트랜잭션 + RW Set + 엔도싱 피어노드들의 서명, 채널 ID를 오더링 서비스 노드에 전송한다.
⑤ Order Transaction
오더링 서비스 노드는 검증은 이미 마루리되었기에 트랜잭션이 들어오는 순서만 정리한다.
트랜잭션 블록을 엔도싱 피어 노드와 커미팅 피어 노드에게 전달한다.
⑥ Validate Transaction
각 피어 노드는 보증 정책이 충족되었는지 확인한 후에 원장 상태가 변경되었는지 확인한다.
- RW 세트가 현재 월드 스테이트 상태와 일치한지 확인 → 트랜잭션 유효성 검사
- if 검사 실패
- 피어노드는 RW세트가 월드스테이트 상태와 일치하지 않는다는것을 알림
- 트랜잭션 무효 처리
- 월드스테이트 업데이트 X
⑦ Ledger Commit
유효성 검증된 트랜잭션은 모든 피어노드의 데이터베이스에 기록됨
이후 트랜잭션 성공/실패 여부를 Application에게 알림
하이퍼레저 패브릭 시스템 체인코드
트랜잭션은 체인코드의 실행이며, 체인코드는 개발자가 특정 기능을 구현해 채널 안의 피어 노드에 설치된다.
체인코드
- 사용자 체인코드
- 시스템 체인코드
- 사용자 체인코드가 실제로 동작할 수 있도록 처리흐름을 제어하는 체인코드
- 개발자가 다루지 않고 하이퍼레저 패브릭 자체에서 제공
시스템 체인코드는 피어 노드 프로세스 내에서 실행된다.
따라서 시스템 체인코드는 피어 노드의 자원에 더 많은 접근을 할 수 있고 다양한 기능을 제공한다.
하이퍼레저 패브릭 제공 시스템 체인코드
- LSCC (Lifecycle System Chaincode) : 체인코드의 라이프사이클 관리에 사용됨
- CSCC (Configuration System Chaincode) : 피어 노드 및 프로세스 채널 구성, 트랜잭션에 대한 채널 정보 관리에 사용됨
- QSCC(Query System Chaincode) : 블록 저장소에 저장된 블록, 트랜잭션 조회에 사용됨
- ESCC(Endorser System Chaincode) : 트랜잭션 실행 후 트랜잭션 상태, 체인코드 이벤트, read/write set 등 트랜잭션 결과를 포함한 응답 메시지에 서명을 넣기 위해 엔도싱 피어 노드에 의해 호출됨
- VSCC(Validation System Chaincode) : 커미팅 피어 노드에 의해 호출돼 트랜잭션 유효성 검사 수행