Implantar Seu Chaincode Usando a CLI

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 seu Chaincode em uma Rede Local do Hyperledger Fabric

Depois de criar seu projeto de chaincode, você poderá implantá-lo em uma rede local do Hyperledger Fabric. Esta rede de teste de canal único é criada para você quando você instala o Blockchain App Builder.

O comando ochain run do Blockchain App Builder inicia a rede do Hyperledger Fabric, outros serviços e instala e implanta o chaincode para você.

my-mac:GOProject myname$ ochain run -h
Usage: run [options] [...args]
Run chaincode project locally in debug mode.

Arguments :
[...args] (optional) Chaincode instantiate arguments. Arguments should be space separated.

Options:
-h, --help        output command usage information 
-D, --debug       enable debug logging
-P, --debug-port  (optional) specify debug process port
-b, --build       (optional) rebuild runtime if already exists
-p, --project     (optional) Path to Chaincode project to run. If not specified, it defaults to current directory.  

Examples :
$> ochain run   

Projetos de Token

Para projetos de chaincode de token, especifique uma lista de administradores com o comando ochain run:
ochain run <adminList array>
O array adminList é um array de informações que especifica os administradores de token. O array adminList é um parâmetro obrigatório quando você implanta um projeto de chaincode de token pela primeira vez. Se você implantar o projeto novamente, poderá informar 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. As informações do parâmetro são diferentes para tokens fungíveis e tokens não fungíveis:
  • Para tokens fungíveis que usam o padrão do Token Taxonomy Framework, os parâmetros são org_id e user_id.
  • Para todos os tokens que usam o padrão ERC-1155, os parâmetros são orgId e userId.
  • Para tokens não fungíveis que usam o padrão ERC-721 e um projeto TypeScript, os parâmetros são orgId e userId.
  • Para tokens não fungíveis que usam o padrão ERC-721 e um projeto Go, os parâmetros são OrgId e UserId.

Os exemplos a seguir são para tokens não fungíveis.

Exemplo de array adminList para TypeScript no Mac OSX e Linux:
'[{"userId":"userid", "orgId":"OrgMSPId"}]'
Exemplo de array adminList para Go no Mac OSX e Linux:
'[{"UserId":"userid", "OrgId":"OrgMSPId"}]'
Exemplo de array adminList para TypeScript no Microsoft Windows:
"[{\"userId\":\"userid\", \"orgId\":\"OrgMSPId\"}]"
Exemplo de array adminList para Ir no Microsoft Windows:
"[{\"UserId\":\"userid\", \"OrgId\":\"OrgMSPId\"}]"

Para a rede local do Hyperledger Fabric, o campo OrgMSPId é fixo ao valor Org1MSP.

Se quiser ver os logs de depuração, você poderá passar a opção --debug para o comando. No Windows, use o Prompt de Comando em vez de PowerShell se você especificar a opção --debug. Você pode executar a rede básica e implantar o chaincode em outra porta do padrão informando a opção --port para o comando.

Verificando

Os logs a seguir mostram que o chaincode foi instalado e implantado com sucesso.

my-mac:TSProject myname$ ochain run
Recreating orderer.example.com ... done
Recreating ca.example.com ... done
Recreating peer0.org1.example.com ... done
[2020-09-23T18: 04:09.132] [INFO] default -
============ Started Install Chaincode ============
[2020-09-23T18:04:09.193] [INFO] default Chaincode TSProject:l not installed.
[2020-09-23T18:04:09.317] [INFO] default - Successfully sent install Proposal and received ProposalResponse
[2020-09-23T18:04:09.317] [INFO] default - Successfully installed chaincode TSProject
[2020-09-23T18:04:09.317] [INFO] default -
============ Finished Install Chaincode ============
[2020-09-23T18:04:09.317] [INFO] default - Successfully installed chaincode TSProject
[2020-09-23T18:04:09.318] [INFO] default -
============ started instantiate Chaincode ============
[2020-09-23T18:04:09.366] [INFO] default - Successfully sent Proposal and received ProposalResponse
[2020-09-23T18:04:11.434] [INFO] default - The chaincode instantiate transaction has been committed on peer localhost:7051
[2020-09-23T18:04:11.434] [INFO] default - The chaincode instantiate transaction was valid.
[2020-09-23T18:04:11.435] [INFO] default - Successfully sent transaction to the orderer.
[2020-09-23T18:04:11.435] [INFO] default - Successfully instantiated chaincode TSProject on channel mychannel
[2020-09-23T18:04:11.435] [INFO] default - 
============ Finished instantiate Chaincode ============
[2020-09-23T18:04:11.4351 INFO] default - Successfully instantiated chaincode TSProject on channel mychannel 
INFO (Runtime): Chaincode TSProject installed and ready:
INFO (RunCommand): Chaincode TSProject deployed

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 Go chaincode na rede local, você pode ver um erro semelhante ao seguinte:
My-Mac:GoProj myname$ ochain run
Starting ca.example.com    ... done
Starting orderer.example.com ... done
Starting peer0.orgl.example.com ... done
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

Stopping peer0.orgl.exmple.com ... done 
Stopping ca.example.com	... done
Stopping orderer.example.con ... done
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 ochain run novamente:
sudo chmod -R 777 /usr/local/go
Falha na implantação
Devido à falha na implantação, à implantação corrompida, ao contêiner de pareamento do Docker cheio ou ao pareamento do Docker morto na rede local, talvez você veja 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: tente o comando ochain run novamente, mas com a opção -b. Esta opção recria o tempo de execução para você.
ochain run -b
Reconstrução de Ambiente Obrigatória
Recrie seu ambiente se vir um erro de canal não encontrado ou um erro semelhante ao seguinte texto:
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
Para reconstruir seu ambiente local, execute o seguinte comando:
ochain run -b

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.

Implante seu Chaincode

Uso: ochain deploy [options] [...args]

Os seguintes argumentos e opções podem ser usados com o comando ochain deploy:

my-mac:TSProject myname$ ochain deploy -h 
Usage: deploy [options] [...args]
Deploy chaincode project to Oracle Blockchain Platform

Arguments:
     [...args]    (optional) Chaincode instantiate arguments. Arguments should be space separated.
 
Options :
    -h, --help                      output command usage information
    -D, --debug                     enable debug logging
    -P, --project <project>         (optional) Path to Chaincode project to deploy. If not specified, it defaults to current directory.
    -c, --channel <channel>         (optional) Blockchain Channel to deploy chaincode to. If not specified, it defaults to the 'default' channel.
    -u, --username <username>       (required) A user name that has install chaincode privileges. Contact your administrator for more details.
    -v, --userversion <userversion> (optional) A user-specified chaincode version.
                             If a version isn't specified, for a new chaincode it will start at v1 and then increment to v2, v3, and so on.
                             For an existing chaincode, v1.a will increment to v1.a1, v1 will increment to v2, and v1.0 will increment to v1.1.
    -s --sign <password>            (required) Password to authenticate user.
    -r --url <url>                  (required) URL of the remote OBP instance. Example: https://<blockchain-instance-url>:7443/

Examples:
$> ochain deploy -u <username> -s <password> -r <url of the remote OBP instance> -c <name of the channel>

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 obter mais informações sobre usuários e atribuições, consulte Configurar Usuários e Atribuições de Aplicativo.

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.

Depois que o chaincode tiver sido implantado com sucesso no Oracle Blockchain Platform remoto, 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.
  • 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, chame o comando ochain deploy novamente, que fará upgrade automático do projeto para você. Quando você executar o comando ochain deploy novamente, especifique um array vazio para o parâmetro adminList ou use 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.

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.

Uso: ochain package

O comando package cria um arquivo compactado que contém apenas os arquivos de build 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.

Devido a alterações nos pré-requisitos de software, quando você executa o comando ochain package 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.

my-mac:~ myname$ ochain package -h 
Usage: package [options]
Package and archive an Ochain chaincode project 
Options :
    -h, --help             output command usage information
    -D, --debug            enable debug logging
    -p, --project <path>   Path to the Ochain chaincode project to be packaged. If not specified, it defaults to current directory.
    -o, --out <path>       Path to the generated chaincode archive file. If not specified, it defaults to current directory.
About:
This CLI command packages and archives an existing chaincode project 
Examples:
$> ochain package --project <Path to the Ochain chaicode project> —out <Path to the generated chaincode archive file>

Quando o comando é concluído com sucesso, o local do pacote é retornado.

Esse comando usa dois argumentos opcionais:
  • --project

    Esta opção define o local do projeto de chaincode do Blockchain App Builder para empacotar. Se não for especificado, o local assumirá como padrão o diretório atual.

  • --out

    Esta opção pode ser utilizada para fornecer o caminho de saída do arquivo gerado. Se não estiver especificado, ele assumirá como padrão o diretório atual.

Exemplo:
ochain package -p /Blockchain/DevTools/bp1/CC -o /Blockchain/DevTools/bp1/output

"Your chaincode project has been packaged at /Blockchain/DevTools/bp1/output/CC.zip"