블록체인

Hyperledger Fabric SDK를 활용한 트랜잭션 수행

쩨이호 2022. 9. 4. 22:01

Hyperledger Fabric

Fabric Gateway SDK란

Fabric Gateway는 서비스로, Fabric 네트워크와 상호작용하기 위한 간단하고 최소화된 API를 제공한다.

Fabric Gateway의 역할

  • 트랜잭션 제안을 검토하여 스마트 컨트랙트(체인코드)를 호출하고 결과를 클라이언트에 반환한다.
    • 게이트웨이는 게이트웨이 피어와 동일한 조직의 보증 피어를 선택하고 블록 높이가 가장 높은 피어를 선택한다.
  • 서명 정책에 필요한 보증 응답들을 수집하고 서명이 필요한 트랜잭션 봉투를 클라이언트에 반환한다.
  • Ordering Service에 서명된 트랜잭션 봉투를 제출한다.
  • 클라이언트에게 ledger에 커밋 되었는지에 대한 결과와 커밋 상태 코드를 제공한다.
  • 체인코드에서 발생하는 이벤트를 수신한다.
    • 이에 따라 클라이언트에서 스마트 컨트랙트에서 발생하는 이벤트에 응답할 수 있다.

=> Endorse / Submit / CommitStatus / SubmitTransaction 기능

Gateway가 트랜잭션 제안을 승인받는 방법

트랜잭션이 ledger에 커밋되기 위해서 보증 정책을 충족하기 위해 충분한 수의 보증이 필요하다.

조직에서 승인을 얻으려면 피어 중 하나에 연결하고 트랜잭션에 대한 시뮬레이션을 실행한다.

  • 체인코드 승인 정책 : 체인 코드 정의를 승인할 때 동의한 정책
  • Private Data Collection 승인 정책 : 체인 코드 함수가 Private Data Collection에 쓰는 경우 정책
  • 상태 기반 보증 정책(State-Based Endorsement Policy,SBE) : key-value 서명 정책이라고도 불리며 개별 상태에 적용할 수 있다.

보증 관리

  • 가장 높은 블록 높이를 가진 피어를 식별하여 gateway 피어의 조직에서 보증피어를 선택한다.
  • 트랜잭션 제안은 보증 피어에서 시뮬레이션 된다. 시뮬레이션을 통해 필요한 보증 정책에 대한 정보를 캡처 한다.
  • gateway는 계획의 모든 정책을 충족하는 데 필요한 조직의 승인을 요청하여 승인 계획을 적용한다.

Fabric SDK VS Fabric Gateway SDK

Fabric SDK는 low-level SDK로 많은 양의 코드와 복잡성을 가지며 애플리케이션 개발자가 보증 및 트랜잭션이 작동하는 방식에 대해 많은 이해를 필요로 한다.

Fabric Gateway SDK는 high-level api를 포함하고 있어 애플리케이션 개발자의 부담을 줄일 수 있다.

Fabric Gateway SDK

CLI를 통한 UpdateAsset 수행

transaction test

API를 구현하여 UpdateAsset 수행

React-Gin(golang)-elasticsearch-fabric 프로젝트에 트랜잭션 적용

실제 구현 코드

  • ordererIP, ordererName, ordererCertPath, networkPath(네트워크 환경에서의 경로)
  • CORE_PEER_TLS_ENABLED,CORE_PEER_LOCALMSPID,CORE_PEER_TLS_ROOTCERT_FILE, CORE_PEER_MSPCONFIGPATH
  • channelName, chaincodeName 의 정보가 필요함.

gateway를 사용하지 않고 백엔드 서버에 연결한 CLI로만 트랜잭션 수행

Fabric Gateway SDK를 활용한 구현

  • mspId,networkPath,certPath,keyPath,tlsCertPath,peerEndpoint,gatewayPeer,channelName,chaincodeName → Orderer에 대한 정보 필요없음.
  • 위 정보를 통해 gateway와 gRPC연결하면 해당 변수값을 통해 지속적으로 스마트 컨트랙트의 함수를 실행할 수 있다.

전역변수 선언 - 노드 정보 및 암호 자료 경로
네트워크 연결 및 초기 Asset 생성
InitLedger 함수 내부 ⇒ asset-transfer-basic(스마트 컨트랙트)에 존재하는 InitLedger 함수를 사용
라우터
TransferAsset을 하기 위한 UI
Update Asset 함수 ⇒ 존재하는 Asset을 업데이트 시킴 TransferAsset 함수 ⇒AssetId와 newOwner로 Asset 소유자를 변경

Gateway 연결 및 초기 설정

newGrpcConnection ⇒ gateway서버와 gRPC 연결
loadCertificate ⇒ tlsCertfile을 읽음
newIdentity ⇒ X.509 인증서를 사용하여 gateway에 연결하기 위한 client identity를 만듦
newSign ⇒ private key를 통해 디지털 서명을 생성