🕵️‍♂️Depuração de Contratos

Existem três maneiras de depurar seu contrato ink! atualmente:

  • Você pode escrever testes usando um dos mecanismos descritos na página de Testes de Contratosarrow-up-right.

  • Você pode interagir com seu contrato por meio de uma interface de usuário (UI) ou linha de comando. Isso é descrito na página de Chamada do Contratoarrow-up-right.

  • Você pode imprimir declarações de depuração em seu contrato. Elas aparecerão na saída padrão (stdout) do nó Substrate. Isso é descrito nesta página.

Como faço para imprimir no console do terminal a partir do ink!?

Você pode usar essas duas macros:

Há coisas que você pode fazer para habilitar mensagens de depuração no console do cliente:

  1. Habilitar o recurso ink-debug para o crate ink_env. cargo-contract faz isso automaticamente para você (for versions >= 0.13.0), exceto se você compilar um contrato no modo --release.

  2. Defina o nível de log do seu nó para runtime::contracts=debug. Por exemplo, para exibir apenas erros e saída de depuração para o lunes-contracts-node:

substrate-contracts-node -lerror,runtime::contracts=debug
  1. __Defina o nível de log do seu nó para runtime::contracts::strace para rastrear chamadas de função do host. Esses registros de chamadas de função também serão exibidos no painel de Debug message Contracts UIarrow-up-right. Por exemplo, para visualizar esses rastreamentos, além dos logs descritos acima:

substrate-contracts-node -lerror,runtime::contracts=debug,runtime::contracts::strace=trace

O código a seguir ilustra como imprimir declarações de depuração a partir de uma mensagem ou construtor.

#[ink(constructor)]
fn new() -> Self {
    ink::env::debug_println!("created new instance at {}", Self::env().block_number());
    Self { }
}

#[ink(message)]
fn print(&self) {
   let caller = self.env().caller();
   let message = ink_prelude::format!("got a call from {:?}", caller);
   ink::env::debug_println!(&message);
}

NOTA: A saída de depuração não é impressa para transações! Ela é impressa apenas para chamadas RPC ou testes fora da cadeia.

Last updated