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 no Oracle Blockchain Platform Cloud ou Enterprise Edition. Você também pode empacotar o projeto de chaincode para implantaçã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 chaincodes nele e recriá-lo se ele parar de funcionar corretamente.

A implantação do 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 Código de Cadeia, selecione Implantar.
  2. No assistente de implantação:
    • Certifique-se de que o nome do chaincode correto 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 do Hyperledger Fabric, use o valor Org1MSP para o campo org_id. Para códigos de cadeia 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 implantar, você 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 primeiro implantador 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 de sinal de menos (-) ao lado do parâmetro adminList, que selecionará um array vazio.
  3. Clique em Disponibilizar.

Quando o chaincode terminar de ser implantado, a console de Saída informará que ele o instalou e implantou 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 chaincode 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 se deve à falta de permissões para Go. 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
Em decorrência de falha na implantação, implantação corrompida, um contêiner de pareamento do Docker que está cheio ou um par do Docker que está sendo eliminado na rede local, você pode 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 mesmo nível 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.
Reconstrução de Ambiente Obrigatória
Você pode 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 de 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 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 Código de Cadeia, selecione Implantar.
  3. No assistente de implantação, o nome do projeto do 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 necessá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 do chaincode foi instalado com sucesso.
  • O projeto do chaincode foi aprovado e confirmado com sucesso.
  • O chaincode foi implantado com sucesso em cada par e 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 fará upgrade automático do 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 de 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 do chaincode já está instalado e, em caso afirmativo, a versão foi extraída.
  • O upgrade da versão do chaincode foi bem-sucedido (por exemplo, da versão 1.0 para a 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 na Enterprise Edition.

A função Pacote cria um arquivo que contém apenas 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 para o 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 para 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, é solicitada 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 é concluído com sucesso, o local do pacote é retornado.