Eventos Solidity

Este artigo explora os fundamentos dos eventos do Solidity , como definir e emitir eventos em seu código do Solidity e algumas práticas recomendadas para implementá-los em seu código.



Eventos Solidity – o que são?

Um Evento Solidity é o mesmo que um evento em outra linguagem de programação.

O evento de um contrato é um membro herdável que armazena os argumentos passados ​​quando ele é emitido no log de transações.

Em geral, os eventos são usados ​​para informar um aplicativo chamador sobre o status atual de um contrato, usando o recurso de registro do EVM. Sempre que os contratos ou aplicativos são alterados, eles notificam os aplicativos que podem ser usados ​​para executar a lógica dependente.


Criar um evento

Um evento é definido dentro de um contrato como global e é então chamado por uma função dentro desse contrato.

A declaração de eventos envolve o uso da palavra-chave event, seguida por um identificador e uma lista de parâmetros e terminando com um ponto e vírgula.

Os valores dos parâmetros são usados ​​para registrar informações ou executar a lógica condicional.

Sintaxe

event <eventName>(parameters) ;

O programa fornecido mostra o uso básico de eventos de solidity:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
pragma solidity ^0.8.0;
contract SolidityTest{
event mrx_Event(string ample);
function get_String(string memory _mrx) public {
emit mrx_Event(_mrx);
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
<div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>

Correspondentemente, a soma de duas variáveis ​​pode ser calculada da seguinte maneira, levando em consideração os eventos de solidez:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
pragma solidity ^0.8.0;
contract SolidityTest{
event mrx_Event_Sum(uint mrx,uint ample,uint sum);
function get_Sum(uint _mrx,uint _ample) public returns(uint){
uint _sum=_mrx+_ample;
emit mrx_Event_Sum(_mrx,_ample,_sum);
return _sum;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
<div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>

Índice em eventos

Também é possível adicionar um índice ao nosso evento.

Os diferentes campos em nosso evento podem ser indexados, o que facilita o acesso a eles posteriormente, mas vai custar um pouco de gás extra.

Os exemplos dados mostram o processo de indexação de diferentes campos usados ​​em um evento :

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
pragma solidity ^0.8.0;
contract SolidityTest{
event mrx_MyTrade(
uint256 indexed mrx_data,
address sender,
address indexed receiver,
uint256 indexed transaction_amount
);
function ample_trade(address receiver, uint256 transaction_amount) external {
emit mrx_MyTrade(block.timestamp, msg.sender, receiver,transaction_amount);
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
<div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>

Exemplo de Explicação

Este código define um contrato Solidity chamado SolidityTest que inclui um evento chamado mrx_MyTrade .

O evento mrx_MyTrade possui quatro parâmetros:

  1. mrx_data é um inteiro sem sinal de 256 bits que é indexado.
  2. sender é um endereço Ethereum que representa a conta que iniciou a negociação. Não está indexado.
  3. receiver é um endereço Ethereum que representa a conta que recebeu a negociação. Está indexado.
  4. transaction_amount é um inteiro sem sinal de 256 bits que representa o valor da transação. Está indexado.

A função ample_trade é uma função pública que recebe dois parâmetros:

  1. receiver é o endereço Ethereum da conta que receberá a negociação.
  2. transaction_amount é um inteiro sem sinal de 256 bits que representa o valor da transação.

Dentro da função trade, o evento mrx_MyTrade é emitido usando a palavra-chave emit , que aciona o evento e registra os valores de seus parâmetros.

O valor block.timestamp é passado como o parâmetro mrx_data , que não é indexado.

O valor msg.sender é passado como o parâmetro sender, que não é indexado. O parâmetro do receptor é passado como parâmetro do receptor, que é indexado. O parâmetro transaction_amount é passado como o parâmetro transaction_amount, que é indexado.

Ao emitir este evento dentro da função de negociação, o contrato inteligente registrará os detalhes da negociação e os endereços e valores envolvidos para referência futura.

Os parâmetros indexados de um evento podem ser usados ​​para filtrar eventos e recuperar rapidamente dados relevantes, tornando-os uma ferramenta útil para rastrear transações e eventos na blockchain Ethereum.


Conclusão

Os eventos Solidity são parte integrante da linguagem de programação Solidity usada para desenvolver contratos inteligentes na blockchain Ethereum.

Os eventos permitem que contratos inteligentes emitam e registrem eventos, que podem ser usados ​​por aplicativos externos para rastrear o estado do blockchain e acionar ações em resposta a eventos específicos.

Existem diferentes casos de uso para eventos do Solidity, e eles podem ser customizados dependendo das necessidades dos usuários.

Além disso, eles facilitam a auditoria de transações de contratos inteligentes, o que fornece transparência e responsabilidade.

O blockchain Ethereum está cheio de aplicativos descentralizados poderosos construídos com eventos Solidity, e eles também são muito fáceis de usar.

Nós valorizamos o seu feedback.
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

Assine a nossa newsletter
Digite seu e-mail para receber um resumo semanal de nossos melhores posts. Saber mais!
ícone