Construir, testar e implantar um aplicativo TypeScript e JavaScript
Este guia mostra as etapas para desenvolver um aplicativo TypeScript e JavaScript direcionado ao CCF, depurá-lo localmente e implantá-lo em um recurso CCF gerenciado na nuvem.
Pré-requisitos
- Instalar o CCF
- Node.js
- npm
-
- Python 3+.
- Instale a versão mais recente do pacote CCF Python.
Este guia usa o Visual Studio Code como o IDE. Mas, qualquer IDE com suporte para desenvolvimento de aplicativos Node.js, JavaScript e TypeScript pode ser usado.
Configuração do projeto
- Siga as instruções na documentação do CCF para inicializar o projeto e configurar a estrutura de pastas necessária.
Desenvolver o aplicativo
- Desenvolva o aplicativo TypeScript seguindo a documentação aqui. Consulte a documentação do armazenamento de chave-valor CCF para saber mais sobre os padrões de nomenclatura e a semântica de transação a serem usados no código. Para obter exemplos e práticas recomendadas, consulte os aplicativos de exemplo publicados no GitHub.
Criar o pacote de aplicativos
O formato nativo para aplicativos JavaScript no CCF é um pacote de aplicativos JavaScript ou pacote de aplicativos curto. Um pacote pode ser encapsulado diretamente em uma proposta de governança para implantação. Siga as instruções em criar um pacote de aplicativos na documentação do CCF para criar um pacote de aplicativos e se preparar para a implantação.
Construa o aplicativo. O pacote de aplicativos é criado na pasta dist. O pacote de aplicativos é colocado em um arquivo chamado set_js_app.json.
npm run build
> build
> del-cli -f dist/ && rollup --config && cp app.json dist/ && node build_bundle.js dist/
src/endpoints/all.ts → dist/src...
created dist/src in 1.3s
Writing bundle containing 8 modules to dist/bundle.json
ls -ltr dist
total 40
drwxr-xr-x 4 settiy settiy 4096 Sep 11 10:20 src
-rw-r--r-- 1 settiy settiy 3393 Sep 11 10:20 app.json
-rw-r--r-- 1 settiy settiy 16146 Sep 11 10:20 set_js_app.json
-rw-r--r-- 1 settiy settiy 16061 Sep 11 10:20 bundle.json
Registrando em log
- O CCF fornece macros para adicionar suas próprias linhas à saída do nó. Siga as instruções disponíveis em adicionar log a um aplicativo na documentação do CCF.
Implantar uma rede CCF de 1 nó
- Execute o script /opt/ccf_virtual/bin/sandbox.sh para iniciar uma rede CCF de 1 nó e implantar o pacote de aplicativos.
sudo /opt/ccf_virtual/bin/sandbox.sh --js-app-bundle ~/ccf-app-samples/banking-app/dist/
Setting up Python environment...
Python environment successfully setup
[10:40:37.516] Virtual mode enabled
[10:40:37.517] Starting 1 CCF node...
[10:40:41.488] Started CCF network with the following nodes:
[10:40:41.488] Node [0] = https://127.0.0.1:8000
[10:40:41.489] You can now issue business transactions to the libjs_generic application
[10:40:41.489] Loaded JS application: /home/demouser/ccf-app-samples/banking-app/dist/
[10:40:41.489] Keys and certificates have been copied to the common folder: /home/demouser/ccf-app-samples/banking-app/workspace/sandbox_common
[10:40:41.489] See https://microsoft.github.io/CCF/main/use_apps/issue_commands.html for more information
[10:40:41.490] Press Ctrl+C to shutdown the network
- O certificado de membro e a chave privada estão disponíveis em /workspace/sandbox_0. O log do aplicativo está disponível em /workspace/sandbox_0/out.
- Neste ponto, criamos uma rede CCF local com um membro e implantamos o aplicativo. O ponto de extremidade de rede é
https://127.0.0.1:8000
. O membro pode participar de operações de governança, como atualizar o aplicativo ou adicionar mais membros enviando uma proposta.
curl -k --silent https://127.0.0.1:8000/node/version | jq
{
"ccf_version": "ccf-4.0.7",
"quickjs_version": "2021-03-27",
"unsafe": false
}
- Baixe o certificado de serviço da rede.
curl -k https://127.0.0.1:8000/node/network | jq -r .service_certificate > service_certificate.pem
Atualizar o aplicativo
O desenvolvimento de aplicativos é um processo iterativo. Quando novos recursos são adicionados ou bugs são corrigidos, o aplicativo deve ser reimplantado na rede de 1 nó, o que pode ser feito com uma proposta set_js_app.
Recrie o aplicativo para criar um novo arquivo set_js_app.json na pasta dist.
Crie uma proposta para enviar a candidatura. Depois que a proposta é aceita, o novo aplicativo é implantado na rede de 1 nó.
Observação
Em uma rede local de 1 nó, uma proposta é aceita imediatamente após ser enviada. Não há necessidade de apresentar um voto para aceitar ou rejeitar a proposta. A lógica por trás disso é feita para tornar o processo de desenvolvimento rápido. No entanto, isso é diferente de como a governança funciona no CCF gerenciado do Azure, onde os membros devem enviar um voto para aceitar ou rejeitar uma proposta.
$ ccf_cose_sign1 --content dist/set_js_app.json --signing-cert workspace/sandbox_common/member0_cert.pem --signing-key workspace/sandbox_common/member0_privk.pem --ccf-gov-msg-type proposal --ccf-gov-msg-created_at `date -Is` | curl https://127.0.0.1:8000/gov/proposals -H 'Content-Type: application/cose' --data-binary @- --cacert service_cert.pem
Implantar o aplicativo em um recurso CCF gerenciado
A próxima etapa é criar um recurso CCF gerenciado e implantar o aplicativo seguindo as instruções em implantar um aplicativo JavaScript.