Implantar seu Chaincode Usando o Visual Studio Code

Depois que seu projeto de chaincode for criado, você poderá implantá-lo localmente na rede Hyperledger Fabric gerada automaticamente ou remotamente em seu Oracle Blockchain Platform Cloud ou Enterprise Edition. Você também pode empacotar o projeto chaincode para implementação manual no Oracle Blockchain Platform.

Implantar o Chaincode em uma Rede Local do Hyperledger Fabric

Depois de criar seu projeto de chaincode, você poderá testá-lo em uma rede básica local do Hyperledger Fabric.

Quando você instala a extensão Blockchain App Builder para VS Code, ela cria automaticamente uma rede Hyperledger Fabric com um único canal. Isso será listado como Local Environment no painel Ambientes. Não é possível excluir ou modificar este ambiente; basta implantar códigos de cadeia nele e recriá-lo se ele parar de funcionar corretamente.

A implantação de chaincode do Blockchain App Builder inicia a rede básica do Hyperledger Fabric, outros serviços e instala e implanta o chaincode para você.

  1. No painel Detalhes do Codigo, selecione Implantar.
  2. No assistente de implantação:
    • Certifique-se de que o nome correto do chaincode esteja selecionado.
    • Selecione seu ambiente de destino - para implantação local, escolha Ambiente Local.
    • Selecione o canal no qual deseja implantar. Um canal chamado "mychannel" é criado por padrão com a instalação da extensão e pode ser usado para teste.
    • Opcionalmente, informe quaisquer parâmetros iniciais que possam ser necessários.
    • Para projetos de token, na primeira vez que você implantar, informe uma lista de administradores de token como um parâmetro. A lista é um array de informações {user_id, org_id} que especifica os administradores de token. Para a rede local Hyperledger Fabric, use o valor Org1MSP para o campo org_id. Para chaincodes NFT, as chaves do parâmetro adminList são userId e orgId para TypeScript e UserId e OrgId para Go. Após a primeira vez que você implantar, poderá fornecer um array vazio para o parâmetro adminList ou poderá usar o parâmetro adminList para adicionar administradores de token. Outros implantadores que não são o implantador pela primeira vez devem fornecer um array vazio para o parâmetro adminList. Para fazer isso, abra a lista de parâmetros Init no painel de implantação e clique no botão sinal de menos (–) ao lado do parâmetro adminList, que selecionará um array vazio.
  3. Clique em Disponibilizar.

Quando a implantação do chaincode terminar, a console de Saída informará que ele foi instalado e implantado com sucesso no canal fornecido.

Diagnosticando e Solucionando Problemas

Você pode encontrar os seguintes problemas ao executar seu projeto de chaincode em uma rede local.

Permissões Go ausentes
Ao instalar o projeto de código de cadeia Go na rede local, talvez você veja um erro semelhante ao seguinte na console de Saída:
INFO (Runtime): 2020/06/22 22:57:09 build started

INFO (Runtime): Building ....

INFO (Runtime): go build runtime/cgo: copying /Users/myname/Library/Caches/go-build/f8/.….….d: open /usr/local/go/pkg/darwin_amd64/runtine/ 
cgo.a: permission denied

ERROR (Runtime): go build runtine/cgo: copying /Users/myname/Library/Caches/go-build/f8/.….….d: open /usr/local/go/pkg/darwin_amd64/runtime/
cgo.a: permission denied

INFO (Runtime): An error occurred while building: exit status 1
Isso ocorre porque faltam permissões para Ir. Este erro foi visto apenas no Mac OS. Esse é um problema conhecido:
Solução: altere as permissões do seu $GOROOT e tente implantar novamente:
sudo chmod -R 777 /usr/local/go
Falha na implantação
Devido à falha na implantação, à implantação corrompida, a um contêiner de pareamento do Docker cheio ou a um pareamento do Docker morto na rede local, você poderá ver um erro semelhante a:
============ Started instantiate Chaincode ============
[2028-19-01T19:25:lO.372] [ERROR] default - Error instantiating Chaincode GollGl on channel mychannel, detailed 
error: Error: error starting container: error starting container: Failed to generate platform-specific docker 
build: Failed to pull hyperledger/fabric-ccenv:latest : API error (404): manifest for hyperledger/ 
fabric-ccenv:latest not found: manifest unknown: manifest unknown [2020-19-01T19:25:10.372] (INFO) default -
============ Finished instantiate Chaincode ============
[2020-19-01119:25:10.372] [ERROR] default - Error: Error instantiating Chaincode Goll01 on channel mychannel, 
detailed error: Error: error starting container: error starting container: Failed to generate platfom-specific 
docker build: Failed to pull hyperledger/fabric-ccenv: latest : API error (404): manifest for hyperledger/ 
fabric-ccenv:lalest not found: manifest unknown: manifest unknown exited: signal: terminated 
INFO: exited: signal: terminated

ERROR: Error in Chaincode deployment
Isso ocorre porque um contêiner de pareamento não pode ser iniciado corretamente novamente.
Solução: Recrie seu runtime selecionando seu ambiente local no painel Ambientes, clicando com o botão direito do mouse e selecionando Recriar Ambiente Local. Tente implantar novamente.
Recriação de Ambiente Obrigatória
Você poderá ver um erro semelhante a:
Starting ca.example.com ... 
Starting orderer.example.com ... 
Starting orderer.example.com ... error
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: 
error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Starting ca.example.com... error
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Encountered errors while bringing up the project.
ERROR: Starting ca.example.com ... 
Starting orderer.example.com ... 
Starting orderer.example.com ... error
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Starting ca.example.com ... error
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Encountered errors while bringing up the project.
ERROR: Error in Chaincode deployment
Você precisa reconstruir seu ambiente local. No painel Ambientes do App Builder, clique com o botão direito do mouse em seu ambiente local e selecione Recriar Ambiente Local.

Implante seu Chaincode em uma Rede Remota do Oracle Blockchain Platform

Depois de implantar e testar seu projeto de chaincode em uma rede local para garantir que ele esteja funcionando conforme projetado, você poderá implantá-lo no Oracle Blockchain Platform.

Criar uma Configuração de Conexão com uma Instância do Oracle Blockchain Platform

Você deve ter uma instância do Blockchain Platform ativa e em execução para concluir esta etapa.

  1. No painel Ambientes do Visual Studio Code, clique no ícone Criar Ambiente.
  2. No assistente Detalhes dos Ambientes:
    • Informe o nome do seu ambiente remoto.
    • Digite uma descrição.
    • Em URL Remoto, digite o URL da instância remota do Oracle Blockchain Platform.
    • Informe o nome de usuário e a senha do Oracle Identity Cloud Service para um usuário do Oracle Blockchain Platform com as atribuições ADMIN ou REST_CLIENT. Para chamar o chaincode, somente a atribuição REST_CLIENT é necessária. Para implantar ou fazer upgrade do chaincode, o usuário do IDCS também deve receber a atribuição ADMIN. Para obter mais informações sobre usuários e atribuições, consulte Configurar Usuários e Atribuições de Aplicativo.
  3. Clique em Criar para salvar o ambiente. O nome de usuário e a senha são salvos temporariamente na sessão local do Visual Studio Code. Se você fechar o Visual Studio Code e, em seguida, iniciar uma nova sessão do Visual Studio Code, deverá informar o nome de usuário e a senha novamente.

Implante seu Chaincode

  1. Selecione o projeto de chaincode que você deseja implantar no painel Chaincodes.
  2. No painel Detalhes do Codigo, selecione Implantar.
  3. No assistente de implantação, o nome do projeto de chaincode deve ser pré-preenchido.
    • Selecione seu ambiente de destino - para implantação remota, escolha o ambiente do Oracle Blockchain Platform configurado anteriormente.
    • Informe o nome do canal no qual você deseja implantar.
    • Opcionalmente, defina quaisquer parâmetros iniciais obrigatórios.
  4. Clique em Disponibilizar.
Depois que o chaincode for implantado com sucesso no Oracle Blockchain Platform remoto, o log da console mostrará que os seguintes eventos ocorreram:
  • Os detalhes do Oracle Blockchain Platform foram extraídos com sucesso.
  • A lista de pares foi extraída com sucesso.
  • O projeto de chaincode foi instalado com sucesso.
  • O projeto de chaincode foi aprovado e confirmado com sucesso.
  • O chaincode foi implantado com sucesso em cada par e no canal.

Em um ambiente com várias organizações, para reimplantar o chaincode no mesmo canal por meio de uma instância do participante, use a console para implantar o chaincode.

Atualizando o Projeto Chaincode

O upgrade do chaincode é tratado automaticamente pelo Blockchain App Builder. Depois de fazer alterações no seu chaincode, basta implantar novamente, o que atualizará automaticamente o projeto para você. Ao executar o processo de upgrade, você pode informar um array vazio para o parâmetro adminList ou usar o parâmetro adminList para adicionar administradores de token. Se você não for o implantador pela primeira vez, forneça um array vazio para o parâmetro adminList. Para informar um array vazio para o parâmetro adminList, abra a lista de parâmetros Init no painel de implantação e clique no botão sinal de menos (–) ao lado do parâmetro adminList, que selecionará um array vazio.

Se o upgrade for bem-sucedido, o log mostrará que os seguintes eventos ocorreram:
  • Os detalhes do Oracle Blockchain Platform foram extraídos com sucesso.
  • A lista de pares foi extraída com sucesso.
  • Foi feita uma verificação para determinar se o projeto de chaincode já está instalado e, em caso afirmativo, a versão foi extraída.
  • A versão do chaincode foi atualizada com sucesso (por exemplo, da versão 1.0 para 2.0).

Em um ambiente com várias organizações, para atualizar o chaincode, use o console e aprove manualmente o chaincode dos participantes.

Empacote seu Projeto Chaincode para Implantação Manual no Oracle Blockchain Platform

Você pode empacotar seus projetos de chaincode para implantação manual no Oracle Blockchain Platform Cloud ou Enterprise Edition.

A função Pacote cria um arquivo que contém somente os arquivos de compilação e distribuição. As pastas binary, libs, node_modules e test do seu projeto de chaincode não estão incluídas. Esse arquivo compactado pode ser submetido a upload manualmente no Oracle Blockchain Platform para implantação.

  1. Selecione seu projeto de chaincode no painel Chaincodes.
  2. Clique com o botão direito e selecione Pacote.
  3. Selecione um local no qual salvar o pacote e clique em Selecionar Pasta de Saída.

Devido a alterações nos pré-requisitos de software, quando você executa a função Pacote para o chaincode TypeScript, é solicitado que você informe a data de provisionamento da instância do Oracle Blockchain Platform para a qual deseja criar o pacote. O chaincode TypeScript criado no Blockchain App Builder não é compatível com versões anteriores do Oracle Blockchain Platform sem alterações na infraestrutura subjacente. O Blockchain App Builder empacota a infraestrutura de chaincode de acordo com sua seleção.

Quando o comando for concluído com sucesso, a localização do pacote será retornada.