Pular para o conteúdo principal

Log de dados de contratos inteligentes com eventos

contratos inteligentes
Remix
Solidity
eventos
Intermediário
jdourlens
3 de abril de 2020
2 minutos de leitura

Na Solidity, eventos são sinais despachados que os contratos inteligentes podem disparar. Aplicativos descentralizados (dapps), ou qualquer coisa conectada à API JSON-RPC do Ethereum, podem escutar esses eventos e agir de acordo. Um evento também pode ser indexado para que o histórico de eventos seja pesquisável posteriormente.

Eventos

O evento mais comum na blockchain do Ethereum no momento em que este artigo foi escrito é o evento Transfer, que é emitido por tokens ERC-20 quando alguém transfere tokens.

event Transfer(address indexed from, address indexed to, uint256 value);

A assinatura do evento é declarada dentro do código do contrato e pode ser emitida com a palavra-chave emit. Por exemplo, o evento transfer faz o log de quem enviou a transferência (from), para quem (to) e quantos tokens foram transferidos (value).

Se voltarmos ao nosso contrato inteligente Counter e decidirmos fazer um log toda vez que o valor for alterado. Como este contrato não se destina a ser implantado, mas sim a servir como base para a construção de outro contrato ao estendê-lo: ele é chamado de contrato abstrato. No caso do nosso exemplo de contador, ficaria assim:

Observe que:

  • Linha 5: declaramos nosso evento e o que ele contém, o valor antigo e o novo valor.

  • Linha 13: Quando incrementamos nossa variável count, emitimos o evento.

Se agora implantarmos o contrato e chamarmos a função increment, veremos que o Remix a exibirá automaticamente se você clicar na nova transação dentro de um array chamado logs.

Remix screenshot

Os logs são muito úteis para depurar seus contratos inteligentes, mas também são importantes se você criar aplicativos usados por pessoas diferentes e facilitam a criação de análises para rastrear e entender como seu contrato inteligente é usado. Os logs gerados por transações são exibidos em exploradores de blocos populares e você também pode, por exemplo, usá-los para criar scripts offchain para escutar eventos específicos e tomar medidas quando eles ocorrerem.

Última atualização da página: 3 de março de 2026