WEB3DEV

Cover image for Canisters e código - Internet Computer
Fatima Lima
Fatima Lima

Posted on • Atualizado em

Canisters e código - Internet Computer

Um dos princípios mais importantes para se ter em mente é que a Internet Computer é uma blockchain que permite executar software de forma distribuída e replicada.

Quando você escreve o código fonte para um dapp que roda na Internet Computer, você compila o código fonte em um módulo WebAssembly. Quando você implanta o módulo WebAssembly que contém seu programa na blockchain Internet Computer, o programa é executado dentro de uma unidade conceitual computacional chamada canister, ou seja, abreviadamente, canister.

Uma vez implantado, os usuários finais podem interagir com o canister acessando as funções de ponto de entrada que você definiu para aquele canister através de um cliente frontend, como um navegador.


Sumário

1 . Canisters compreendem tanto programa quanto estado

2 . Como desenvolver DApps para a Internet Computer​

3 . Atores e o código que voce cria​

4 . Por que seu código é compilado em WebAssembly​

5 . Identidades e autenticação

6 . Consumo de recursos e ciclos​

7 . Quer aprender mais


Canisters compreendem tanto programa quanto estado

Um canister é semelhante a um recipiente em que ambos são implantados como uma unidade de software que contém código compilado e dependências para uma aplicação ou serviço.

A contentorização (ato de estar em contêiner) permite que as aplicações sejam desacopladas do ambiente, possibilitando uma implantação fácil e confiável. O canister difere de um contêiner, porém, na medida em que também armazena informações sobre o estado atual do software.

Embora uma aplicação contentorizada possa incluir informações sobre o estado do ambiente em que a aplicação é executada, um canister é capaz de persistir em um registro de mudanças de estado que resultem de suas funções terem sido chamadas.
Métodos de consulta e atualização​

Este conceito de um canister consistir de programa e estado é um conceito importante. Em particular, ele está relacionado ao comportamento que se deve esperar ao chamar um end-point do canister. Há apenas dois tipos de chamadas: chamadas de consulta sem compromisso (qualquer mudança de estado é descartada) e chamadas de atualização com compromisso (as mudanças de estado persistem).

Como desenvolvedor, é importante reconhecer esta relação entre as chamadas que consultam o canister e as chamadas que mudam o estado do canister. Em particular, você deve ter em mente o tradeoff que existe entre segurança e desempenho.

Como desenvolver dapps para a Internet Computer​

Para programadores e desenvolvedores de software, a blockchain Internet Computer fornece capacidades e oportunidades únicas dentro de uma estrutura que simplifica o projeto, a criação e a implementação das dapps. Uma parte fundamental desta estrutura é uma nova linguagem de programação de propósito geral, Motoko. Motoko é uma linguagem de programação que foi especificamente projetada para tirar o máximo proveito das características únicas que a blockchain Internet Computer fornece, incluindo:

  • A capacidade de definir programas diretamente usando objetos e classes actor.

  • O uso de sintaxe async e de await para permitir a programação de mensagens assíncronas como se fosse um processamento síncrono.

  • Suporte automático para serialização e desserialização de mensagens.

  • A capacidade de aproveitar a persistência ortogonal utilizando estruturas de dados sem bancos de dados externos ou volumes de armazenamento.

Como uma linguagem de programação moderna e de alto nível, Motoko fornece algumas características-chave próprias, inclusive:

  • Suporte para grandes operações inteiras e proteção contra overflow.

  • Um sistema de tipo sonoro que verifica estaticamente cada programa para garantir que ele possa executar sem erros de tipo em todos os inputs possíveis.

  • Suporte para abstrações de funções, definições de tipo definidas pelo usuário e atores definidos pelo usuário.

Para informações mais detalhadas sobre a linguagem de programação Motoko em si, incluindo convenções sintáticas e recursos suportados, veja o Guia de Linguagem de Programação Motoko.

O diagrama a seguir fornece uma visão simplificada de detalhamento do ambiente de desenvolvimento como parte do ecossistema da Internet Computer.

Image description

Atores e o código que você cria​

Um dos princípios mais importantes para se ter em mente ao se preparar para escrever programas usando a linguagem de programação Motoko é que a Motoko utiliza um modelo de programação baseado em atores.

Um ator é um tipo especial de objeto que processa mensagens em um estado isolado, permitindo que as mensagens sejam tratadas de forma remota e assíncrona.

Em geral, cada canister inclui o código compilado para um objeto de um ator. Cada canister também pode incluir algumas informações adicionais, tais como descrições de interface ou ativos de frontend. Você pode criar projetos que incluem vários canisters, mas cada canister só pode incluir um ator.

Por que seu código é compilado em WebAssembly​

Quando você compila o código Motoko, o resultado é um módulo WebAssembly. WebAssembly é um formato de instrução de computador de baixo nível que é portátil e abstrai a execução do programa de forma limpa sobre a maioria dos modernos equipamentos de computação. É amplamente suportado para programas que rodam na Internet e possui adaptação natural para a implantação de dapps que são destinados a rodar na Internet Computer.

Com a Motoko, os desenvolvedores podem compilar para o WebAssembly portátil enquanto ainda fornecem dapps seguros usando uma linguagem simples e de alto nível.

A linguagem Motoko oferece muitas das características que são comuns a outras linguagens modernas de nível superior, como a segurança do tipo e a correspondência de padrões. Além disso, a Motoko oferece suporte integrado para definir serviços de mensagens usando atores de uma maneira especialmente adequada à Internet Computer e é fácil de aprender se você é um programador novo ou experiente.

Este guia fornece uma introdução às características básicas da linguagem de programação Motoko no contexto da escrita de programas usando o SDK. Para informações mais detalhadas sobre a linguagem de programação Motoko em si, veja o Guia de Linguagem de Programação Motoko.

Identidades e autenticação

Uma das principais diferenças entre uma operação de canister iniciada pelo usuário e uma operação de canister para canister é que os canisters têm uma identidade registrada explicitamente na Internet Computer.

Não há um registro central para as entidades usuários, mas os usuários podem optar por se identificar usando uma (ou mais) chave de assinatura digital. A chave privada do usuário é usada para assinar mensagens, que são enviadas junto com sua chave pública para a Internet Computer. A Internet Computer autentica o usuário e passa a entidade para o canister - o canister pode optar por implementar as políticas de autorização que desejar com base nas entidades.

Em um nível elevado, os usuários que chegam pela primeira vez geram um par de chaves sem assinatura e obtêm seu principal identificador a partir da chave pública durante sua primeira interação com a Internet Computer. Os usuários que retornam são autenticados usando a chave privada (ou chaves) que foi armazenada com segurança pelo agente do usuário. Os usuários com acesso a vários canisters podem gerenciar as chaves e dispositivos usados para autenticação associados a cada canister.

Um único usuário pode ter vários pares de chaves públicas-privadas para acessar canisters de diferentes dispositivos - como navegadores rodando em diferentes computadores, telefones celulares ou tablets - mas essas chaves derivadas mapeiam todas para um identificador primário.

Consumo de recursos e ciclos​

Todos os canisters consomem recursos, sendo ciclos de CPU para execução, largura de banda para roteamento de mensagens e armazenamento para dados persistentes. Estes recursos são pagos por utilizar uma unidade de custo chamada ciclos. Os ciclos podem ser obtidos através da conversão de tokens ICP e são armazenados por cada canister em um saldo local.

  • Os canisters devem ser capazes de pagar pela execução completa (tudo ou nada), mas o custo associado a uma unidade de ciclos tornará os programas eficientes e econômicos.

  • Ao estabelecer limites para quantos ciclos um canister pode consumir, a plataforma pode evitar que códigos maliciosos assumam completamente os recursos.

  • Os ciclos são destinados a refletir o custo real das operações de forma estável ou deflacionária, de modo que o custo de execução do programa permaneça o mesmo ou diminua com a eficiência operacional. Como tal, a taxa de conversão do ICP em ciclos é ajustada adequadamente, com base no valor de mercado atual do ICP. A relativa estabilidade dos custos operacionais facilita a previsão dos ciclos necessários para processar, por exemplo, um milhão de mensagens.

Quer aprender mais

Se você estiver procurando mais informações sobre canisters, confira os seguintes recursos relacionados:

Apresentando os Canisters - Uma evolução dos Contratos Inteligentes (vídeo)
O que é o DFINITY Canister SDK? (vídeo)
Implantando sua primeira aplicação (vídeo)

Este artigo foi traduzido por Fátima Lima e o seu original pode ser lido aqui.

Top comments (0)