Pular para o conteúdo principal

Registrando dados de contratos inteligentes com eventos

contratos inteligentesremixsolidityeventos
Intermediário
jdourlens
EthereumDev(opens in a new tab)
3 de abril de 2020
2 minutos de leitura minute read
comp-tutorial-metadata-tip-author 0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE

No Solidity, eventos são sinais enviados que os contratos inteligentes podem disparar. Dapps, ou qualquer coisa conectada à API Ethereum JSON-RPC, podem reconhecer esses eventos e agir em conformidade. 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 da redação deste artigo é o evento Transfer, que é emitido por tokens ERC20 quando alguém transfere tokens.

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

A assinatura do evento é declarada dentro do código do contrato e pode ser emitida com a palavra-chave de emissão. Por exemplo, os registros de eventos de transferência que enviaram a transferência (from), para quem foram transferidos (to) e quantos tokens foram transferidos (value).

Se voltarmos ao nosso contrato inteligente Contador e decidirmos registrar toda vez que o valor for alterado. Como este contrato não é para ser usado, mas serve como uma base para a construção de outro contrato, estendendo-o: é chamado de contrato abstrato. No caso de nosso exemplo de contador, ele ficaria assim:

1pragma solidity 0.5.17;
2
3contract Counter {
4
5 event ValueChanged(uint oldValue, uint256 newValue);
6
7 // Private variable of type unsigned int to keep the number of counts
8 uint256 private count = 0;
9
10 // Function that increments our counter
11 function increment() public {
12 count += 1;
13 emit ValueChanged(count - 1, count);
14 }
15
16 // Getter to get the count value
17 function getCount() public view returns (uint256) {
18 return count;
19 }
20
21}
Exibir tudo
Copiar

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 de contagem, emitimos o evento.

Se implementarmos o contrato e chamarmos a função de incremento, veremos que o Remix será exibido automaticamente se você clicar na nova transação dentro de um array de logs nomeados.

Captura de tela Remix

Os logs são muito úteis para depurar seus contratos inteligentes, mas também são importantes se você criar aplicativos usados por diferentes pessoas e tornar mais fácil fazer análises para rastrear e entender como seu contrato inteligente é usado. Os registros gerados pelas transações são exibidos em exploradores de blocos populares e você também pode, por exemplo, usá-los para criar 'scripts' fora da cadeia para ver eventos específicos e agir quando eles ocorrerem.

Última edição: @joserrbv(opens in a new tab), 19 de janeiro de 2024

Este tutorial foi útil?