>백엔드 개발 >Golang >실용적인 블록체인-Hyperledger Fabric (1) 초보자를 위한 10분 소개

실용적인 블록체인-Hyperledger Fabric (1) 초보자를 위한 10분 소개

michael li
michael li원래의
2020-04-28 13:17:203929검색

소개

안녕하세요 여러분. 저는 현재 상하이에 있는 인터넷 회사에서 일하고 있는 마이클입니다. 정부가 블록체인 프로젝트를 매우 중요하게 여기면서 사람들은 2020년이 블록체인 개발의 원년이 될 것이라고 말하기 시작했습니다. 저도 친구들과 블록체인에 대해 여러번 이야기하고 직접 실천해보고 싶어서 이더리움, EOS, NEO 등 여러 옵션을 조사한 끝에 오늘의 주인공인 얼라이언스 체인인 하이퍼레저 패브릭을 선택했습니다.

기사 구조

이 기사 시리즈는 세 부분으로 나누어집니다. 세 기사는 Hyperledger Fabric 개발을 시작하고 자신만의 컨소시엄 체인 프로젝트를 구축하는 데 도움이 됩니다.

1 기본 소개

2. 환경 구축

3. 애플리케이션 배포 및 시작

기본 소개

Hyperledger 패브릭 - 블록체인 세계의 새로운 희망

2015년 12월, 오픈소스의 주력 조직 world - Linux Foundation 협회가 주도하여 30개 초기 기업 회원(IBM, Accenture, Intel, J.P. Morgan, R3, DAH, DTCC, FUJITSU, HITACHI, SWIFT, Cisco 등 포함)과 함께 Hyperledger 공동 프로젝트 설립을 발표했습니다. .). Hyperledger 프로젝트는 투명하고 개방적이며 분산된 기업 수준의 분산 원장 기술을 위한 오픈 소스 참조 구현을 제공하고 블록체인 및 분산 원장 관련 프로토콜, 사양 및 표준의 개발을 촉진하는 데 전념하고 있습니다. 프로젝트의 공식 웹사이트는 hyperledger.org이며 Hyperledger 패브릭은 중요한 프로젝트 중 하나입니다.

많은 신입생들이 블록체인의 특정 용어에 대해 잘 알지 못할 수 있으므로 첫 번째 섹션에서는 Hyperledger 패브릭과 관련된 용어를 소개하겠습니다.

명사 소개:

앵커 피어 – 앵커 노드 앵커 노드는 채널의 모든 피어 노드에서 감지할 수 있고 통신할 수 있는 피어 노드입니다. 채널의 각 구성원에는 하나 이상의 앵커 노드(단일 실패 지점의 경우)가 있으므로 구성원이 다른 노드가 채널에 있는 다른 노드를 검색할 수 있습니다.

블록 – 블록은 채널에서 주문된 거래의 모음입니다. 블록은 암호화 수단(해시 값)을 통해 이전 블록과 연결되는 경우가 많습니다.

Zhu Jiang: 블록은 채널에서 암호화(해시 암호화)되고 이전 블록에 연결된 주문된 트랜잭션 집합입니다.

Chain – 체인은 블록 간 해시 연결로 구성된 트랜잭션 로그입니다. 피어는 주문 서비스로부터 트랜잭션 블록을 수신하고 보증 정책 및 동시성 충돌을 기반으로 블록의 트랜잭션이 유효한지 여부를 표시한 다음 해당 블록을 피어 파일 시스템의 해시 체인에 추가합니다. Z

hu Jiang: 원장의 체인은 거래 블록의 "해시 연결"로 구성된 거래 로그입니다. 피어 노드는 주문 서비스로부터 트랜잭션 블록을 수신하고 보증 정책 및 동시성 충돌을 기반으로 블록의 트랜잭션을 유효 또는 유효하지 않은 것으로 표시하고 해당 블록을 피어 노드 파일 시스템의 해시 체인에 추가합니다.

체인코드 - 체인코드 체인코드는 원장에서 실행되는 소프트웨어로 자산을 인코딩할 수 있으며, 거래 지침(또는 비즈니스 로직)을 사용하여 자산을 수정할 수도 있습니다.

채널 - 채널은 데이터 격리 및 기밀성을 달성하는 "Fabric" 네트워크에 구축된 프라이빗 블록체인입니다. 채널별 원장은 채널의 모든 피어와 공유되며 거래 당사자는 원장과 상호 작용하려면 채널에서 적절하게 인증되어야 합니다. 채널은 "구성 블록"에 의해 정의됩니다.

Commitment – ​​​​Commitment 채널의 각 피어는 주문된 트랜잭션 블록을 확인한 다음 해당 블록을 채널의 각 원장 사본에 커밋(쓰기 또는 추가)합니다. 피어는 또한 각 블록의 각 트랜잭션 상태를 유효 또는 무효로 표시합니다.

동시성 제어 버전 확인 – 동시성 제어 버전 확인(CCVC) CCVC는 채널의 피어 간에 상태를 동기화된 상태로 유지하는 방법입니다. 피어 노드는 트랜잭션을 병렬로 실행합니다. 트랜잭션이 원장에 제출되기 전에 피어 노드는 트랜잭션 실행 중에 읽은 데이터가 수정되었는지 확인합니다. 실행과 커밋 사이에 읽은 데이터가 변경되면 CCVC 충돌이 발생하고 해당 트랜잭션은 원장에서 유효하지 않은 것으로 표시되며 상태 데이터베이스에서 값이 업데이트되지 않습니다.

구성 블록 – 구성 블록에는 시스템 체인(주문 서비스) 또는 채널에 대한 구성원 및 정책을 정의하는 구성 데이터가 포함되어 있습니다. 채널이나 전체 네트워크에 대한 구성 수정(예: 멤버 탈퇴 또는 합류)으로 인해 새로운 구성 블록이 생성되어 적절한 체인에 추가됩니다. 이 구성 블록에는 생성 블록의 내용과 증분 내용이 포함됩니다.

합의 – 합의는 합의된 주문을 생성하고 블록을 구성하는 일련의 거래의 정확성을 확인하기 위해 전체 거래 프로세스에서 사용되는 광범위한 용어입니다.

현재 상태 - 원장의 현재 상태는 체인 트랜잭션 로그에 있는 모든 키의 최신 값을 나타냅니다. 피어는 처리된 블록의 각 트랜잭션에 해당하는 수정된 값을 원장의 현재 상태에 제출합니다. 현재 상태는 채널에 알려진 모든 최신 k-v를 나타내므로 현재 상태를 World State라고도 합니다. 체인코드는 현재 상태에 대해 트랜잭션 제안을 실행합니다.

동적 멤버십 - 동적 구성원 Fabric은 전체 네트워크의 운영성에 영향을 주지 않고 구성원, 피어 및 주문 서비스 노드의 동적 추가 및 제거를 지원합니다. 동적 멤버십은 비즈니스 관계가 조정되거나 다양한 이유로 엔터티를 추가 또는 제거해야 하는 경우 매우 중요합니다.

보증 - 보증은 피어가 트랜잭션을 실행하고 트랜잭션 제안을 생성한 클라이언트 앱에 YES-NO를 반환하는 프로세스를 의미합니다. 체인코드에는 보증 피어가 지정되는 해당 보증 정책이 있습니다.

보증 정책 – ​​보증 정책은 트랜잭션을 실행하기 위해 특정 체인코드를 사용하는 채널에서 피어 및 응답 결과(보증)의 필요한 조합을 정의합니다(예: 예 또는 아니요 반환 조건).

보증 정책은 특정 체인코드에 대한 트랜잭션을 보증할 수 있는 보증 노드의 최소 수 또는 보증 노드의 최소 비율을 지정할 수 있습니다. 보증 정책은 애플리케이션과 불량 행위에 대한 원하는 보호 수준을 기반으로 보증 노드를 통해 구성 및 관리됩니다. 체인코드를 설치하고 인스턴스화(tx 배포)할 때 보증 정책을 지정해야 합니다.

Fabric-caFabric-ca는 네트워크 구성원과 해당 사용자에게 PKI 기반 인증서를 발급하는 기본 인증서 관리 구성 요소입니다. CA는 각 구성원에 대해 루트 인증서(rootCert), 권한이 부여된 각 사용자에 대해 등록 인증서(eCert), 각 등록 인증서에 대해 다수의 트랜잭션 인증서(tCert)를 발급합니다.

제네시스 블록 - 초기 블록 제네시스 블록은 블록체인 네트워크나 채널을 초기화하는 구성 블록이자 체인의 첫 번째 블록이기도 합니다.

Gossip 프로토콜 - Gossip 데이터 전송 프로토콜에는 세 가지 기능이 있습니다.

1) 피어 검색 및 채널 구성원 관리

2) 채널의 모든 피어 간에 원장 데이터 방송

3) 채널의 모든 피어 동기화 원장 데이터.

Initialize – 체인코드 프로그램을 초기화하는 메서드를 초기화합니다.

설치 – 피어의 파일 시스템에 체인코드를 설치하는 프로세스입니다. (주석: ChaincodeDeploymentSpec 정보는 chaincodeInstallPath-chaincodeName.chainVersion 파일에 저장됩니다.)

Instantiate – 체인코드 컨테이너를 인스턴스화하고 시작하는 프로세스입니다. (주석: ChaincodeData를 lccc에 저장한 다음 Chaincode를 배포하고 Init 메서드를 실행합니다.) Invoke – 체인코드에서 함수를 호출하기 위해 호출합니다.

체인코드 호출은 거래 제안이며 모듈식 프로세스(승인, 합의, 검증, 제출)를 실행합니다. Invoke의 구조는 함수와 매개변수 배열입니다.

리딩 피어 - 각 회원은 구독하는 채널에 여러 피어를 가질 수 있습니다. 피어 중 하나는 회원을 대신하여 주문 서비스와 통신하는 채널의 주요 피어 역할을 합니다. 주문 서비스는 블록을 선두 피어에게 전달한 다음 동일한 구성원 아래의 다른 피어에게 블록을 배포합니다.

원장 - 원장은 채널의 각 피어가 유지 관리하는 채널의 체인 및 현재 상태 데이터입니다. 원장은 채널의 각 피어가 유지 관리하는 채널의 체인 및 세계 상태입니다. (이 설명은 좀 이상합니다.)

회원 – 회원이 네트워크의 고유한 루트 인증서를 소유한 법적으로 독립된 개체입니다. 피어 노드 및 앱 클라이언트와 같은 네트워크 구성 요소는 구성원에 연결됩니다.

멤버십 서비스 공급자 – MSPMSP는 클라이언트와 피어에게 인증서를 제공하는 시스템 추상 구성 요소를 나타냅니다.

클라이언트는 인증서를 사용하여 거래를 인증하고, 피어는 인증서를 사용하여 거래 승인을 인증합니다. 이 인터페이스는 시스템의 트랜잭션 처리 구성 요소와 밀접하게 관련되어 있으며 시스템의 트랜잭션 처리 구성 요소의 핵심을 수정하지 않고도 정의된 멤버십 서비스 구성 요소가 이러한 방식으로 원활하게 연결될 수 있도록 설계되었습니다.

멤버십 서비스 – 멤버십 서비스는 허가된 블록체인 네트워크에서 신원을 인증, 승인 및 관리합니다.

Peer and Order에서 실행되는 회원 서비스 코드는 블록체인 운영을 인증하고 승인합니다. PKI를 기반으로 한 MSP 구현입니다. fabric-ca 구성 요소는 ID를 관리하기 위해 멤버십 서비스를 구현합니다. 특히 ECert 및 TCert의 발급 및 취소를 처리합니다. ECert는 장기 신원 자격 증명이고, TCert는 익명이며 연결이 불가능한 단기 신원 자격 증명입니다.

주문 서비스 – 주문 서비스 또는 합의 서비스는 트랜잭션을 블록의 노드 모음으로 정렬합니다.

주문 서비스는 피어 프로세스와 독립적이며 선착순으로 네트워크의 모든 채널에 대한 거래를 정렬합니다. 주문 서비스는 플러그형 구현을 지원하며 현재 SOLO 및 Kafka가 기본적으로 구현됩니다. 주문 서비스는 전체 네트워크에 대한 공통 바인딩이며 각 회원과 관련된 암호화 자료를 포함합니다. 피어 – 원장을 유지하고 체인코드 컨테이너를 실행하여 원장에서 읽기-쓰기 작업을 수행하는 네트워크 엔터티입니다. 피어는 회원이 소유하고 유지 관리합니다.

정책 – 전략에는 보증 전략, 검증 전략, 블록 제출 전략, 체인코드 관리 전략 및 네트워크 채널 관리 전략이 포함됩니다.

제안 – 채널의 피어에 대한 보증 요청을 제안합니다. 각 제안은 체인코드 인스턴스화 또는 체인코드 호출입니다.

Query – 현재 상태의 키 값에 대한 쿼리 요청입니다.

소프트웨어 개발 키트 – SDK SDK는 개발자에게 체인코드 애플리케이션을 작성하고 테스트하기 위한 구조화된 라이브러리 환경을 제공합니다.

SDK는 표준 인터페이스를 통해 완벽하게 구성 및 확장할 수 있으며, 서명된 암호화 알고리즘, 로깅 프레임워크, 상태 저장소와 같은 구성 요소를 쉽게 교체할 수 있습니다. SDK API는 트랜잭션 처리를 위해 gRPC를 사용하며 멤버 서비스, 노드 탐색 및 이벤트 처리는 모두 패브릭과 통신하는 데 사용됩니다. 현재 SDK는 Node.js, Java 및 Python을 지원합니다.

상태 데이터베이스 – stateDB 체인코드에서 효율적으로 읽고 쓰기 위해 현재 상태 데이터는 levelDB 및 CouchDB를 포함한 stateDB에 저장됩니다.

시스템 체인 – 시스템 체인에는 시스템 수준에서 네트워크를 정의하는 구성 블록이 포함되어 있습니다.

시스템 체인은 주문 서비스에 존재하며 채널과 유사하게 MSP 정보, 정책 및 정보 구성을 포함하는 초기 구성을 갖습니다. 전체 네트워크에 대한 변경 사항(예: 새 조직 가입 또는 새 Ordering 노드 추가)으로 인해 시스템 체인에 새 구성 블록이 추가됩니다.

시스템 체인은 채널 또는 채널 그룹의 공통 바인딩으로 간주될 수 있습니다. 예를 들어 금융 기관의 집합체는 컨소시엄(시스템 체인으로 표시)을 구성한 다음 동일하거나 다른 비즈니스를 기반으로 채널을 만들 수 있습니다.

트랜잭션 – 트랜잭션 체인코드의 호출 또는 인스턴스화 작업입니다. Invoke는 원장에서 읽기-쓰기 세트를 요청합니다. 인스턴스화는 피어에서 Chaincode 컨테이너를 시작하도록 요청합니다.

요약:

위 내용은 첫 번째 섹션에서 소개한 블록체인의 기본 지식입니다. 지루할 수도 있지만, 이러한 용어와 내용에 대한 사전 이해가 필요합니다. 코드를 작성할 때 이해해야 합니다. 함수 이름은 키워드와 동일합니다. 이를 숙지해야만 작업을 더 잘 시작할 수 있습니다.

위 내용은 실용적인 블록체인-Hyperledger Fabric (1) 초보자를 위한 10분 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.