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 설명서를 참조하십시오.
- 이 탭의 링크를 사용하여 Hyperledger Fabric Java SDK를 설치할 수 있습니다.
- (Hyperledger Fabric v2.x) 이전에 SDK를 설치한 경우 Oracle Blockchain Platform에서 작동하도록 Update the Hyperledger Fabric v2.x SDKs to Work with Oracle Blockchain Platform의 지침에 따라 SDK를 수정해야 합니다.
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 콘솔에서 원장을 확인하여 변경사항을 확인할 수 있습니다.
- 콘솔의 Channels(채널) 탭으로 이동한 다음 체인 코드를 실행하는 채널의 이름을 찾아 누릅니다.
- 채널의 원장 창에서 체인코드의 원장 요약을 봅니다.
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
의 하위 프로젝트입니다.
-
프로젝트 종속성 설치:
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
빌드가 완료되면 패치된 대상
.jar
패키지를grpc-java/netty/build/libs/grpc-netty-shaded-1.38.0.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 저장소로 이동하여 대상 패키지가 있는 디렉토리를 찾고 패키지가 패치된 패키지로 바꿉니다.
-
-
프로젝트를 실행합니다.