Hyperledger Fabric SDK를 사용하여 애플리케이션 개발

애플리케이션은 소프트웨어 개발 키트(SDK)를 사용하여 원장에 대한 쿼리 및 업데이트를 허용하는 API에 액세스합니다.Hyperledger Fabric SDK를 설치 및 사용하여 Oracle Blockchain Platform용 애플리케이션을 개발할 수 있습니다.

Oracle Blockchain Platform에서 제공하는 REST API는 최대한의 유연성을 염두에 두고 생성되었습니다. 트랜잭션을 호출하거나 쿼리를 호출하거나 트랜잭션 상태를 볼 수 있습니다. Oracle Blockchain Platform용 REST API를 참조하십시오.

그러나 이러한 유연성은 객체 레벨 제어를 제공하기 위해 애플리케이션의 기존 API 엔드포인트를 래핑할 수 있음을 의미합니다. 응용 프로그램에는 훨씬 더 세분화된 작업이 포함될 수 있습니다.

SDK 버전

Hyperledger Fabric SDK의 여러 버전을 사용할 수 있습니다. 인스턴스의 기반이 되는 Hyperledger Fabric 버전과 일치하는 SDK 버전을 사용합니다.

Node.js용 Hyperledger Fabric SDK 설치

Node.js용 Fabric SDK를 사용하는 방법에 대한 자세한 내용은 Hyperledger Fabric SDK for Node.js 설명서를 참조하십시오.

개발자 툴 탭에서 애플리케이션 개발 창을 엽니다. 이 탭의 링크를 사용하여 Hyperledger Fabric Node.js SDK를 설치할 수 있습니다.

Java용 Hyperledger Fabric SDK 설치

Java용 Fabric SDK를 사용하는 방법에 대한 자세한 내용은 Hyperledger Fabric SDK for Java 설명서를 참조하십시오.

개발자 툴 탭에서 애플리케이션 개발 창을 엽니다.

Apache Maven과 같은 빌드 툴을 설치합니다.

애플리케이션 구성

다음 예제와 유사하게 Java 응용 프로그램을 구조화합니다.

/Application
  /artifacts
    /cypto
      /orderer
        Contains the certificates required for the application to act on the orderer node
        In participant instances only contains TLS certificates
      /peer
        Contains the certificates required for the application to act on the peer node
    /src
      chaincode.go if installing and deploying chaincode to the blockchain
  /java
    pom.xml or other build configuration files
    /resources
      Any resources used by the Java code, including artifacts such as the endorsement policy yaml file and blockchain configuration properties
    /src
      Java source files

다음 예제와 유사하게 Node.js 응용 프로그램을 구성합니다.

/Application
  /artifacts
    /cypto
      /orderer
        Contains the certificates required for the application to act on the orderer node
        In participant instances only contains TLS certificates
      /peer
        Contains the certificates required for the application to act on the peer node
    /src
      chaincode.go if installing and deploying chaincode to the blockchain
  /node
    package.json file
    application.js
    /app
      Any javascript files called by the application
      /tools

애플리케이션 실행

이제 응용 프로그램을 실행하고 테스트할 준비가 되었습니다. 애플리케이션에서 반환된 상태 메시지 외에도 Oracle Blockchain Platform 콘솔에서 원장을 확인하여 변경사항을 확인할 수 있습니다.

  1. 콘솔의 Channels(채널) 탭으로 이동한 다음 체인 코드를 실행하는 채널의 이름을 찾아 누릅니다.
  2. 채널의 원장 창에서 체인코드의 원장 요약을 봅니다.

Hyperledger Fabric v2.x SDK가 Oracle Blockchain Platform과 연동되도록 업데이트

Hyperledger Fabric v2.x와 함께 제공되는 OCI 인프라 구성요소와 Java SDK 간에는 비호환성이 있습니다. 이 문제를 해결하려면 이 항목의 단계를 수행하십시오.

Hyperledger Fabric SDK 업데이트 방법

SDK를 업데이트하는 방법은 두 가지가 있습니다.

  • 콘솔에서 수정된 패키지를 다운로드합니다. 수정이 필요한 Java SDK에서 참조하는 모듈인 업데이트된 grpc-netty-shaded-1.38.0.jar 파일을 생성했습니다.
  • 이 항목에 설명된 대로 패키지를 수동으로 작성합니다.

grpc-netty-shaded-1.38.0.jar 파일을 다운로드하려면 콘솔의 개발자 툴 탭을 누른 다음 애플리케이션 개발 창을 선택합니다.

수동으로 패키지 작성

fabric-sdk-java 프로젝트의 경우 다음 단계를 완료하여 피어 및 주문자를 TLS를 통해 grpcs 클라이언트에 연결하도록 grpc-netty-shaded 패키지를 재구축합니다. grpc-netty-shaded 패키지는 grpc-java의 하위 프로젝트입니다.

  1. 프로젝트 종속성 설치:
    mvn install
  2. grpc-java 소스 코드를 다운로드하세요:

    git clone https://github.com/grpc/grpc-java.git
  3. fabric-sdk-java에서 사용하는 grpc 버전을 찾아 코드를 체크아웃합니다.
    grpc-java 디렉토리에서 fabric-sdk-java가 사용하는 grpc 버전을 확인합니다.
    cd grpc-java && git checkout v1.38.0
  4. 서버측에서 alpn 오류가 발생하지 않도록 코드를 변경합니다. 다음 내용으로 grpc-java-patch 패치 파일을 생성합니다.
    diff --git a/netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java b/netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java
    index 19d3e01b7..ebc4786a3 100644
    — a/netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java
    +++ b/netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java
    @@ -611,7 +611,8 @@ final class ProtocolNegotiators {
    SslHandshakeCompletionEvent handshakeEvent = (SslHandshakeCompletionEvent) evt;
    if (handshakeEvent.isSuccess()) {
    SslHandler handler = ctx.pipeline().get(SslHandler.class);
    
        if (sslContext.applicationProtocolNegotiator().protocols()
        + if (handler.applicationProtocol() == null
        + || sslContext.applicationProtocolNegotiator().protocols()
        .contains(handler.applicationProtocol())) {
        // Successfully negotiated the protocol.
        logSslEngineDetails(Level.FINER, ctx, "TLS negotiation succeeded.", null);
  5. 패치를 적용합니다:

    git apply grpc-java.patch
  6. 대상 패치 패키지를 생성할 프로젝트를 빌드합니다. Gradle을 사용하여 grpc-java-shaded 프로젝트를 빌드합니다.

    cd netty/shaded
    gradle build -PskipAndroid=true -PskipCodegen=true

    빌드가 완료되면 패치된 대상 .jar 패키지를 grpc-java/netty/build/libs/grpc-netty-shaded-1.38.0.jar에서 사용할 수 있습니다.

  7. 패치된 패키지를 Maven 로컬 저장소에 추가합니다.

    다음 두 가지 방법 중 하나로 원래 grpc-netty-shaded .jar 패키지를 패치된 패키지로 바꿉니다.
    • Maven을 사용하여 로컬 파일로 패키지를 설치합니다.
      mvn install:install-file -Dfile=grpc-netty-shaded-build/grpc-netty-shaded-1.38.0.jar -DgroupId=io.grpc -DartifactId=grpc-netty-shaded -Dversion=1.38.0 -Dpackaging=jar
      대상 groupid, artifactidversion를 교체할 패키지와 동일하게 유지해야 합니다.
    • 패키지를 수동으로 교체합니다. 로컬 Maven 저장소로 이동하여 대상 패키지가 있는 디렉토리를 찾고 패키지가 패치된 패키지로 바꿉니다.

  8. 프로젝트를 실행합니다.