Usar os SDKs do Hyperledger Fabric para Desenvolver Aplicativos
Os aplicativos usam um kit de desenvolvimento de software (SDK) para acessar as APIs que permitem consultas e atualizações no razão.Você pode instalar e usar os SDKs do Hyperledger Fabric para desenvolver aplicativos para o Oracle Blockchain Platform.
As APIs REST fornecidas pelo Oracle Blockchain Platform foram criadas com a máxima flexibilidade em mente; você pode chamar uma transação, chamar uma consulta ou exibir o status de uma transação. Consulte API REST para o Oracle Blockchain Platform.
No entanto, isso significa que você provavelmente desejará encapsular os pontos finais de API existentes em um aplicativo para fornecer controle no nível do objeto. Os aplicativos podem conter operações muito mais refinadas.
Versões do SDK
Várias versões dos SDKs do Hyperledger Fabric estão disponíveis. Use a versão do SDK que corresponde à versão do Hyperledger Fabric na qual sua instância se baseia.
Instalação do SDK do Hyperledger Fabric para Node.js
Informações sobre como usar o Fabric SDK para Node.js podem ser encontradas aqui: Documentação do Hyperledger Fabric SDK para Node.js
- Você pode instalar o SDK Node.js do Hyperledger Fabric usando o link nesta guia.
- (Hyperledger Fabric v1.4.7) Se você tiver instalado anteriormente, deverá modificá-lo para funcionar com o Oracle Blockchain Platform seguindo as instruções em Atualizar os SDKs do Hyperledger Fabric v1.4.7 para Trabalhar com o Oracle Blockchain Platform.
Instalação do SDK do Hyperledger Fabric para Java
Informações sobre como usar o Fabric SDK para Java podem ser encontradas aqui: Documentação do Hyperledger Fabric SDK para Java
- Você pode instalar o SDK Java do Hyperledger Fabric usando o link nesta guia.
- (Hyperledger Fabric v2.x) Se você tiver instalado anteriormente, deverá modificá-lo para funcionar com o Oracle Blockchain Platform seguindo as instruções em Atualizar os SDKs v2.x do Hyperledger Fabric para Trabalhar com o Oracle Blockchain Platform.
- (Hyperledger Fabric v1.4.7) Se você tiver instalado anteriormente, deverá modificá-lo para funcionar com o Oracle Blockchain Platform seguindo as instruções em Atualizar os SDKs do Hyperledger Fabric v1.4.7 para Trabalhar com o Oracle Blockchain Platform.
Instale uma ferramenta de compilação, como Apache Maven.
Estruturando seu Aplicativo
Seu aplicativo Java deve ser estruturado da seguinte forma:
/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
Seu aplicativo Node.js deve ser estruturado de forma semelhante à seguinte:
/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
Executando a aplicação
Agora você está pronto para executar e testar o aplicativo. Além de quaisquer mensagens de status retornadas pelo seu aplicativo, você pode verificar o razão na console do Oracle Blockchain Platform para ver suas alterações:
- Vá para a guia Canais na console e localize e clique no nome do canal que está executando o blockchain.
- No painel Razão do canal, exiba o resumo do razão do chaincode.
Atualize os SDKs do Hyperledger Fabric v2.x para Trabalhar com o Oracle Blockchain Platform
Há uma incompatibilidade entre um componente de infraestrutura do OCI e o SDK Java fornecido com o Hyperledger Fabric v2.x. Siga as etapas deste tópico para corrigir esse problema.
Métodos de atualização do SDK do Hyperledger Fabric
Há duas maneiras de atualizar o SDK:
- Faça download do pacote modificado a partir do console. Criamos um arquivo
grpc-netty-shaded-1.38.0.jar
atualizado, que é o módulo referenciado pelo Java SDK que requer modificações. - Crie o pacote manualmente, conforme descrito neste tópico.
Para fazer download do arquivo grpc-netty-shaded-1.38.0.jar
, clique na guia Ferramentas do Desenvolvedor da console e selecione o painel Desenvolvimento de Aplicativos.
Criando o pacote manualmente
Para o projeto fabric-sdk-java
, conclua as etapas a seguir para reconstruir o pacote grpc-netty-shaded
para conectar os pares e os solicitantes ao cliente grpcs
(via TLS). O pacote grpc-netty-shaded
é um subprojeto de grpc-java
.
-
Instalar dependências do projeto:
mvn install
-
Faça download do código-fonte
grpc-java
:git clone https://github.com/grpc/grpc-java.git
- Localize a versão
grpc
que seufabric-sdk-java
usa e verifique o código.No diretóriogrpc-java
, verifique a versão dogrpc
que ofabric-sdk-java
usa:cd grpc-java && git checkout v1.38.0
-
Altere o código para evitar um erro
alpn
do lado do servidor. Crie um arquivo de patchgrpc-java-patch
com o seguinte conteúdo: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);
-
Aplicar o patch:
git apply grpc-java.patch
-
Crie o projeto para gerar o pacote com patch de destino. Use o gradle para criar o projeto
grpc-java-shaded
:cd netty/shaded gradle build -PskipAndroid=true -PskipCodegen=true
Depois que a compilação for concluída, o pacote
.jar
de destino com patch estará disponível emgrpc-java/netty/build/libs/grpc-netty-shaded-1.38.0.jar
. -
Adicione o pacote com patch ao seu repositório local do Maven.
Substitua o pacotegrpc-netty-shaded
.jar
original pelo pacote com patch em uma das duas formas a seguir:-
Use o Maven para instalar o pacote por arquivo local:
Você deve manter o destinomvn 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
eversion
igual ao pacote que deseja substituir. -
Substitua manualmente o pacote. Vá para o repositório Maven local, localize o diretório onde o pacote de destino está localizado e substitua o pacote pelo pacote com patch.
-
-
Execute o projeto.
Atualize os SDKs do Hyperledger Fabric v1.4.7 para Trabalhar com o Oracle Blockchain Platform
Há uma incompatibilidade entre um componente de infraestrutura do OCI e os SDKs Node.js e Java fornecidos com o Hyperledger Fabric v1.4.7. Siga as etapas deste tópico para corrigir esse problema.
Métodos de atualização dos SDKs do Hyperledger Fabric
Há duas maneiras de atualizar o SDK:
- Usando scripts Oracle para fazer download e instalar o SDK Node.js ou o SDK Java que aplicará patch no código à medida que ele for instalado.
- Manualmente, conforme descrito neste tópico.
Para usar os scripts, na guia Ferramentas do Desenvolvedor da console, selecione o painel Desenvolvimento de Aplicativos. Os links para fazer download do SDK Node.js e do SDK Java têm atualizações incorporadas que aplicarão patch no código à medida que ele for instalado.
- Fabric Java SDK: Criamos um arquivo
grpc-netty-1.23.0.jar
atualizado, que é o módulo referenciado pelo Java SDK que requer modificações. - SDK do Fabric Node.js: Criamos o script
npm_bcs_client.sh
para substituir as operações padrão do Fabricnpm install
que os usuários executariam para fazer download e instalar o pacote cliente do Fabric Node.js. O script executa o mesmo comando npm, mas também corrigiu o componente necessário e o recria.
Atualização manual do Fabric Node.js SDK
grpc-node
para conectar os pares e solicitantes com o cliente grpcs (via TLS).
-
Instale
fabric-client
sem executar o script de compilação do módulo grpc:npm install --ignore-scripts fabric-client
-
No Windows, você precisa desativar o ALPN explicitamente
- Atualize
node_modules/grpc/binding.gyp
alterando:
para'_WIN32_WINNT=0x0600'
'_WIN32_WINNT=0x0600','TSI_OPENSSL_ALPN_SUPPORT=0'
- Devido ao problema descrito em https://github.com/nodejs/node/issues/4932, para criar
grpc-node
no Windows, primeiro você deve remover<node_root_dir>/include/node/openssl/
. Execute o seguinte para localizar seu<node_root_dir>
:node-gyp configure
- Atualize
-
Recriar
grpc
npm rebuild --unsafe-perm --build-from-source
Atualização manual do Fabric Java SDK
Para fabric-sdk-java
, execute as etapas a seguir para reconstruir o pacote grpc-netty
para conectar os pares e os solicitantes com o cliente grpcs (via tls). grpc-netty
é um subprojeto de grpc-java
.
-
Instalar dependências do projeto:
mvn install
-
Faça download do código-fonte grpc-java:
git clone https://github.com/grpc/grpc-java.git
- Localize a versão
grpc
que seufabric-sdk-java
usa e faça check-out do código.Versões diferentes de
fabric-sdk-java
podem usar uma versão diferente degrpc
. Verifiquepom.xml
para descobrir qual versão dogrpc
ofabric-sdk-java
usa. Por exemplo,fabric-sdk-java 1.4.11
usagrpc-java 1.23.0
conforme encontrado em seupom.xml
: https://github.com/hyperledger/fabric-sdk-java/blob/v1.4.11/pom.xml.No diretóriogrpc-java
, faça check-out da versão dogrpc
que ofabric-sdk-java
usa:git checkout -b v1.23.0
-
Altere o código para evitar um erro
alpn
do lado do servidor.- Altere o código de destino de
grpc-java_root/netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java
- Na função
userEventTriggered0
, altere:
paraif (NEXT_PROTOCOL_VERSIONS.contains(handler.applicationProtocol())) {
O código será semelhante a: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); ... }
- Altere o código de destino de
-
Crie o projeto para gerar o pacote com patch de destino. Use o gradle para criar o projeto
grpc-java
. Ou você pode apenas recriar o subprojetogrpc-netty
no diretório grpc nettygradle build
.Depois que a compilação for concluída, você poderá obter o pacote jar com patch de destino no diretório
grpc-java\netty\build\libs\grpc-netty-1.23.0.jar
. -
Adicione o pacote com patch ao seu repositório local do Maven.
Substitua o pacote jargrpc-netty
oficial pelo pacote com patch em uma das duas formas a seguir:-
Use o Maven para instalar o pacote por arquivo local:
Você deve manter o destinomvn 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
eversion
igual ao pacote que deseja substituir. -
Substitua manualmente o pacote. Vá para o repositório Maven local, localize o diretório onde o pacote de destino está localizado e substitua o pacote pelo pacote com patch.
-
-
Execute o projeto.