Log de dados de contratos inteligentes com eventos
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:
pragma solidity 0.5.17;
contract Counter {
event ValueChanged(uint oldValue, uint256 newValue);
// Variável privada do tipo unsigned int para manter o número de contagens
uint256 private count = 0;
// Função que incrementa nosso contador
function increment() public {
count += 1;
emit ValueChanged(count - 1, count);
}
// Getter para obter o valor da contagem
function getCount() public view returns (uint256) {
return count;
}
}
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.
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
