Implantar seu Chaincode Usando a CLI
Depois de criar um projeto de chaincode, você pode 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 chaincode para implantação manual no Oracle Blockchain Platform.
Implante seu Chaincode em uma rede local do Hyperledger Fabric
Depois de criar seu projeto chaincode, você pode implantá-lo em uma rede local do Hyperledger Fabric. Essa 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ê.
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
A rede de teste criada quando você instala o Blockchain App Builder executa o Hyperledger Fabric v2.5.7 e o Hyperledger Fabric CA v1.5.9.
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á especificar 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 qualquer token que use 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 em macOS e Linux:'[{"userId":"userid", "orgId":"OrgMSPId"}]'
adminList
para Go em macOS e Linux:'[{"UserId":"userid", "OrgId":"OrgMSPId"}]'
adminList
para TypeScript no Microsoft Windows:"[{\"userId\":\"userid\", \"orgId\":\"OrgMSPId\"}]"
adminList
para Go no Microsoft Windows:"[{\"UserId\":\"userid\", \"OrgId\":\"OrgMSPId\"}]"
Para a rede local do Hyperledger Fabric, o campo OrgMSPId
é fixado ao valor Org1MSP
.
Para ver os logs de depuração, passe 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 uma porta diferente da padrão, passando 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 problemas a seguir ao executar seu projeto chaincode em uma rede local.
- Permissões de Ir ausentes
- Ao instalar o projeto Go chaincode na rede local, você poderá ver um erro semelhante ao seguinte texto:
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
- Em decorrência de falha na implantação, implantação corrompida, um contêiner de mesmo nível do Docker completo ou um par do Docker que foi interrompido na rede local, você poderá ver um erro semelhante ao seguinte texto:
============ 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
:
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) Restproxy Url of the remote OBP instance.
For example,
OBP Cloud Services: https://test-xyz-abc.blockchain.ocp.oraclecloud.com:7443/restproxy
OBP Enterprise Edition: https://restproxy.test-xyz-abc.blockchain.platform.com:443/restproxy
Examples:
$> ochain deploy -u <username> -s <password> -r <REST proxy URL of the remote 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 em Administrando o Oracle Blockchain Platform.
Para chamar o chaincode, é necessário apenas a atribuição REST_CLIENT
. Para implantar ou fazer upgrade do chaincode, o usuário do Identity Cloud Service 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 chaincode foi instalado com sucesso.
- O projeto chaincode foi aprovado e confirmado com êxito.
- O chaincode foi implantado com sucesso em cada par e canal.
Em um ambiente com várias organizações, para implantar o chaincode novamente no mesmo canal por meio de uma instância do participante, use o console para implantar o chaincode.
Atualizando o Projeto Chaincode
O upgrade do chaincode é tratado automaticamente pelo Blockchain App Builder. Depois de fazer alterações em seu chaincode, chame o comando ochain deploy
novamente, o 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 primeiro implantador, deverá fornecer 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 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 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 Enterprise Edition.
Uso: ochain package
O comando package
cria um arquivo compactado 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 são incluídas. Este arquivo compactado pode ser submetido a upload manualmente no Oracle Blockchain Platform para implantação.
Devido a alterações nos pré-requisitos do software, quando você executa o comando ochain package
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 código de cadeia TypeScript criado no Blockchain App Builder não é compatível com as versões anteriores do Oracle Blockchain Platform sem alterações na infraestrutura subjacente. O Blockchain App Builder embala a infraestrutura chaincode de acordo com sua seleção.
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 êxito, o local do pacote é retornado.
--project
Esta opção define a localização do projeto chaincode do Blockchain App Builder a ser empacotado. 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 for especificado, o padrão será 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"