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
ochain run
:
ochain run <adminList 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
euser_id
. - Para todos os tokens que usam o padrão ERC-1155, os parâmetros são
orgId
euserId
. - Para tokens não fungíveis que usam o padrão ERC-721 e um projeto TypeScript, os parâmetros são
orgId
euserId
. - Para tokens não fungíveis que usam o padrão ERC-721 e um projeto Go, os parâmetros são
OrgId
eUserId
.
Os exemplos a seguir são para tokens não fungíveis.
adminList
para TypeScript no Mac OSX e Linux:'[{"userId":"userid", "orgId":"OrgMSPId"}]'
adminList
para Go no Mac OSX e Linux:'[{"UserId":"userid", "OrgId":"OrgMSPId"}]'
adminList
para TypeScript no Microsoft Windows:"[{\"userId\":\"userid\", \"orgId\":\"OrgMSPId\"}]"
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
- 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
- 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
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
.
- 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
.
- 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.
--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.
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"