Registrando dados de contratos inteligentes com eventos
Em Solidity, eventos são sinais despachados que os contratos inteligentes podem disparar. 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 Ethereum, no momento em que este artigo foi escrito, é o evento Transfer, emitido por tokens ERC20 quando alguém transfere tokens.
1event 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 de transferência registra quem enviou a transferência (from), para quem (to) e quantos tokens foram transferidos (value).
Se voltarmos ao nosso contrato inteligente Counter e decidirmos registrar toda vez que o valor é alterado. Como este contrato não se destina a ser implantado, mas a servir como base para a construção de outro contrato estendendo-o: ele é chamado de contrato abstrato. No caso do nosso exemplo de contador, ficaria assim:
1pragma solidity 0.5.17;23contract Counter {45 event ValueChanged(uint oldValue, uint256 newValue);67 // Variável privada do tipo inteiro não assinado para manter o número de contagens8 uint256 private count = 0;910 // Função que incrementa nosso contador11 function increment() public {12 count += 1;13 emit ValueChanged(count - 1, count);14 }1516 // Getter para obter o valor da contagem17 function getCount() public view returns (uint256) {18 return count;19 }2021}Exibir tudoObserve 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 de contagem, emitimos o evento.
Se implantarmos o contrato agora e chamarmos a função de incremento, veremos que o Remix o 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ê constrói aplicações usadas por pessoas diferentes, o que facilita a análise para rastrear e entender como seu contrato inteligente é usado. Os logs gerados pelas transações são exibidos nos exploradores de bloco populares e você também pode, por exemplo, usá-los para criar scripts fora da cadeia para escutar eventos específicos e agir quando eles ocorrerem.
Última atualização da página: 12 de fevereiro de 2025
