🖥️Compile Seu Contrato

Execute o seguinte comando no diretório flipper para compilar seu smart contract:

cargo contract build

Este comando irá gerar o seguinte para o seu contrato: um binário Wasm, um arquivo de metadados (que contém a ABI do contrato) e um arquivo .contract que agrupa ambos. Este arquivo .contract pode ser usado para implantar seu contrato em uma rede. Se tudo correr bem, você verá uma pasta chamada "target" que contém esses arquivos:

target
  └─ ink
    └─ flipper.contract
    └─ flipper.wasm
    └─ flipper.json

Vamos dar uma olhada na estrutura do flipper.json:

{
  "source": {...},
  "contract": {...},
  "spec": {
    "constructors": [...],
    "docs": [],
    "events": [],
    "messages": [...],
  },
  "storage": {...},
  "types": [...],
  "version": "4"
}

Este arquivo descreve todas as interfaces que podem ser usadas para interagir com o seu contrato:

  • types fornece os tipos de dados personalizados usados em todo o restante do JSON.

  • storage define todos os itens de armazenamento gerenciados pelo seu contrato e como acessá-los.

  • spec descreve informações sobre as funções chamáveis, como constructors (construtores) e mensagens que um usuário pode chamar para interagir com o contrato. Também contém informações úteis, como os events (eventos) emitidos pelo contrato ou qualquer docs (documentação) relacionada.

Se você observar atentamente os construtores e mensagens, também notará um seletor que contém um hash de 4 bytes do nome da função e é usado para encaminhar as chamadas do contrato para as funções corretas.

Na próxima seção, iniciaremos um nó de Contratos Inteligentes da Lunes e configuraremos a interface de Contratos para interagir com ele.

Debug vs. Release Build

Por padrão, o cargo-contract compila o contrato no modo de depuração. Isso significa que o contrato, por exemplo, imprimirá declarações como:

ink::env::debug_println!("magic number: {}", value);

para o console do nó, se a depuração estiver ativada no nó (instruções aqui). Para oferecer suporte a funcionalidades como essa, a compilação de depuração de um contrato inclui alguma lógica pesada.

Para contratos que devem ser executados em produção, você sempre deve compilar o contrato com --release:

cargo contract build --release

Isso garantirá que nada desnecessário seja compilado no blob Wasm, tornando seu contrato mais rápido e mais barato de implantar e executar.

INFORMAÇÃO

Com esse comportamento, o cargo-contract espelha o comportamento do cargo para programas Rust: a flag --release deve ser passada explicitamente para o cargo build.

Last updated

Was this helpful?