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 documentation를 참조하십시오.
- 이 탭의 링크를 사용하여 Hyperledger Fabric Node.js SDK를 설치할 수 있습니다.
- (Hyperledger Fabric v1.4.7) 이전에 설치한 경우 Oracle Blockchain Platform에서 Update the Hyperledger Fabric v1.4.7 SDKs to Work with Oracle Blockchain Platform의 지침에 따라 작동하도록 수정해야 합니다.
Java용 Hyperledger Fabric SDK 설치
Java용 Fabric SDK 사용 방법에 대한 정보는 Hyperledger Fabric SDK for Java 설명서에서 확인할 수 있습니다.
- 이 탭의 링크를 사용하여 Hyperledger Fabric Java SDK를 설치할 수 있습니다.
- (Hyperledger Fabric v2.x) 이전에 설치한 경우 Oracle Blockchain Platform에서 Update the Hyperledger Fabric v2.x SDKs to Work with Oracle Blockchain Platform의 지침에 따라 작동하도록 수정해야 합니다.
- (Hyperledger Fabric v1.4.7) 이전에 설치한 경우 Oracle Blockchain Platform에서 Update the Hyperledger Fabric v1.4.7 SDKs to Work with Oracle Blockchain Platform의 지침에 따라 작동하도록 수정해야 합니다.
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 콘솔에서 원장을 확인하여 변경사항을 확인할 수 있습니다.
- 콘솔의 채널 탭으로 이동하여 블록체인을 실행하는 채널의 이름을 찾아 클릭합니다.
- 채널의 원장 창에서 체인코드의 원장 요약을 봅니다.
Oracle Blockchain Platform에서 작동하도록 Hyperledger Fabric v2.x SDK 업데이트
OCI 인프라 구성요소와 Hyperledger Fabric v2.x에서 제공되는 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
의 하위 프로젝트입니다.
-
프로젝트 종속성 설치:
mvn install
-
grpc-java
소스 코드를 다운로드합니다.git clone https://github.com/grpc/grpc-java.git
fabric-sdk-java
에서 사용하는grpc
버전을 찾아 코드를 확인합니다.grpc-java
디렉토리에서fabric-sdk-java
가 사용하는grpc
의 버전을 확인합니다.cd grpc-java && git checkout v1.38.0
-
서버측에서
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);
-
패치를 적용합니다:
git apply grpc-java.patch
-
프로젝트를 작성하여 대상 패치된 패키지를 생성합니다. gradle을 사용하여
grpc-java-shaded
프로젝트 빌드:cd netty/shaded gradle build -PskipAndroid=true -PskipCodegen=true
빌드가 완료되면
grpc-java/netty/build/libs/grpc-netty-shaded-1.38.0.jar
에서 대상 패치.jar
패키지를 사용할 수 있습니다. -
패치된 패키지를 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
,artifactid
및version
대상은 바꿀 패키지와 동일하게 유지해야 합니다. -
수동으로 패키지를 교체합니다. 로컬 Maven 저장소로 이동하여 대상 패키지가 있는 디렉토리를 찾고 패키지를 패치된 패키지로 바꿉니다.
-
-
프로젝트를 실행합니다.
Oracle Blockchain Platform에서 작동하도록 Hyperledger Fabric v1.4.7 SDK 업데이트
Hyperledger Fabric v1.4.7과 함께 제공되는 OCI 인프라 구성요소와 Node.js 및 Java SDK 간에는 비호환성이 있습니다. 이 문제를 해결하려면 이 항목의 단계를 따르십시오.
Hyperledger Fabric SDK를 업데이트하는 방법
SDK를 업데이트하는 방법은 두 가지가 있습니다.
- Oracle 스크립트를 사용하여 설치 시 코드를 패치할 Node.js SDK 또는 Java SDK를 다운로드하고 설치합니다.
- 이 항목에 설명된 대로 수동으로 수행합니다.
스크립트를 사용하려면 콘솔의 개발자 툴 탭에서 애플리케이션 개발 창을 선택합니다. Node.js SDK와 Java SDK를 모두 다운로드할 수 있는 링크에는 설치 시 코드를 패치할 업데이트가 내장되어 있습니다.
- Fabric Java SDK: 수정이 필요한 Java SDK에서 참조하는 모듈인 업데이트된
grpc-netty-1.23.0.jar
파일을 만들었습니다. - Fabric Node.js SDK: 사용자가 Node.js Fabric 클라이언트 패키지를 다운로드하고 설치하기 위해 수행할 표준 Fabric
npm install
작업을 대체하기 위해npm_bcs_client.sh
스크립트를 만들었습니다. 이 스크립트는 동일한 npm 명령을 실행하지만 필요한 구성 요소를 패치하고 재구축합니다.
Fabric Node.js SDK 수동 업데이트
grpc-node
모듈을 재구축하려면 다음을 수행합니다.
-
grpc 모듈의 빌드 스크립트를 실행하지 않고
fabric-client
를 설치합니다.npm install --ignore-scripts fabric-client
-
Windows에서는 ALPN을 명시적으로 비활성화해야 합니다.
- 다음을 변경하여
node_modules/grpc/binding.gyp
업데이트:
to'_WIN32_WINNT=0x0600'
'_WIN32_WINNT=0x0600','TSI_OPENSSL_ALPN_SUPPORT=0'
- https://github.com/nodejs/node/issues/4932에 설명된 문제로 인해 Windows에서
grpc-node
를 빌드하려면 먼저<node_root_dir>/include/node/openssl/
를 제거해야 합니다. 다음을 실행하여<node_root_dir>
를 찾습니다.node-gyp configure
- 다음을 변경하여
-
재구축
grpc
npm rebuild --unsafe-perm --build-from-source
수동으로 Fabric Java SDK 업데이트
fabric-sdk-java
의 경우 다음 단계를 수행하여 피어 및 주문자를 grpcs 클라이언트(tls를 통해)와 연결하도록 grpc-netty
패키지를 재구축합니다. grpc-netty
는 grpc-java
의 하위 프로젝트입니다.
-
프로젝트 종속성 설치:
mvn install
-
grpc-java 소스 코드 다운로드:
git clone https://github.com/grpc/grpc-java.git
fabric-sdk-java
에서 사용하는grpc
버전을 찾아 코드를 체크아웃합니다.fabric-sdk-java
버전마다 다른 버전의grpc
를 사용할 수 있습니다.pom.xml
에서fabric-sdk-java
가 사용하는grpc
버전을 확인합니다. 예를 들어,fabric-sdk-java 1.4.11
는pom.xml
에 있는grpc-java 1.23.0
(https://github.com/hyperledger/fabric-sdk-java/blob/v1.4.11/pom.xml)를 사용합니다.grpc-java
디렉토리에서fabric-sdk-java
가 사용하는grpc
의 버전을 체크아웃합니다.git checkout -b v1.23.0
-
서버측에서
alpn
오류가 발생하지 않도록 코드를 변경합니다.grpc-java_root/netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java
의 대상 코드 변경userEventTriggered0
함수에서 다음을 변경합니다.
toif (NEXT_PROTOCOL_VERSIONS.contains(handler.applicationProtocol())) {
코드는 다음과 같습니다.if (handler.applicationProtocol() == null || NEXT_PROTOCOL_VERSIONS.contains(handler.applicationProtocol())) {
@Override protected void userEventTriggered0(ChannelHandlerContext ctx, Object evt) throws Exception { ... if (handler.applicationProtocol() == null || NEXT_PROTOCOL_VERSIONS.contains(handler.applicationProtocol())) { // Successfully negotiated the protocol. logSslEngineDetails(Level.FINER, ctx, "TLS negotiation succeeded.", null); ... }
-
프로젝트를 작성하여 대상 패치된 패키지를 생성합니다. gradle을 사용하여
grpc-java
프로젝트 빌드 또는 grpc netty 디렉토리gradle build
에서grpc-netty
하위 프로젝트만 재구축할 수 있습니다.빌드가 완료되면 대상 패치 jar 패키지를
grpc-java\netty\build\libs\grpc-netty-1.23.0.jar
디렉토리에 가져올 수 있습니다. -
패치된 패키지를 Maven 로컬 저장소에 추가합니다.
다음 두 가지 방법 중 하나로 공식grpc-netty
jar 패키지를 패치된 패키지로 바꿉니다.-
Maven을 사용하여 로컬 파일로 패키지를 설치합니다.
mvn install:install-file -Dfile=local_patched_grpc_netty_package_root/grpc-netty-1.23.0.jar -DgroupId=io.grpc -DartifactId=grpc-netty -Dversion=1.23.0 -Dpackaging=jar
groupid
,artifactid
및version
대상은 바꿀 패키지와 동일하게 유지해야 합니다. -
수동으로 패키지를 교체합니다. 로컬 Maven 저장소로 이동하여 대상 패키지가 있는 디렉토리를 찾고 패키지를 패치된 패키지로 바꿉니다.
-
-
프로젝트를 실행합니다.