Web3 & DApp Development Fundamentals · Aula

Eventos versus armazenamento

Compensações de gas

Aula 4 de 413 etapas

Eventos versus armazenamento é uma aula grátis de Web3 & DApp Development Fundamentals no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Web3 & DApp Development Fundamentals, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Web3 & DApp Development Fundamentals inclui 4 aulas no total.

Duas formas de registrar dados

Quando algo acontece em um contrato, você pode registrá-lo no armazenamento ou em um log de evento. Escolher corretamente é uma habilidade essencial de otimização de gas.

Esta lição compara as vantagens e desvantagens para que você saiba quando usar cada opção.

Recapitulação do armazenamento

O armazenamento é o estado permanente do contrato. É o único dado que o próprio contrato pode ler novamente mais tarde, mas gravar nele é muito caro.

<code>mapping(address => uint256) public balances; // contract can read this</code>

Recapitulação dos eventos

Os eventos gravam no log da transação. São muito mais baratos, mas o contrato não pode lê-los novamente na cadeia — apenas clientes fora da cadeia podem fazer isso.

<code>event BalanceChanged(address indexed who, uint256 newBalance);
// off-chain apps read this; the contract cannot</code>

Diferença de custo de gas

Gravar uma posição de armazenamento nova (um SSTORE a partir de zero) custa cerca de 20.000 gas. Emitir um tópico ou uma palavra no log custa apenas algumas centenas de unidades de gas. Os eventos podem ser uma ordem de grandeza mais baratos.

A regra de ouro

Uma orientação simples:

  • Armazene os dados que o contrato precisa ler ou usar em lógicas futuras
  • Emita apenas os dados de que o mundo externo precisa (histórico, interface, análise)

Não armazene dados apenas para exibição — emita-os.

O que deve ser armazenado

Saldos, propriedade, permissões e qualquer valor usado em verificações com require ou em cálculos futuros devem ficar no armazenamento, pois o contrato os lê.

<code>function transfer(address to, uint256 amt) public {
    require(balances[msg.sender] >= amt); // needs storage
    balances[msg.sender] -= amt;
    balances[to] += amt;
}</code>

O que pode ser apenas evento

O histórico de transações, a trilha de auditoria ou o fluxo de notificações são usos perfeitos para eventos. O contrato nunca precisa consultar esses registros novamente, portanto armazená-los desperdiçaria gás.

<code>event Logged(address indexed user, string action, uint256 time);

function act(string memory a) public {
    emit Logged(msg.sender, a, block.timestamp); // no storage
}</code>

Use os dois juntos

O padrão mais comum é armazenar o novo estado e emitir um evento descrevendo a alteração. O valor armazenado orienta a lógica; o evento mantém a interface sincronizada.

<code>function deposit() public payable {
    balances[msg.sender] += msg.value; // storage for logic
    emit BalanceChanged(msg.sender, balances[msg.sender]); // event for UI
}</code>

Os registros não podem ser consultados na cadeia

Uma limitação importante: outro contrato não pode ler os registros emitidos por seu contrato. Se o contrato B precisar de um valor, o contrato A deverá disponibilizá-lo por meio do armazenamento ou de um valor de retorno, nunca por meio de um evento.

Evite armazenar para criar histórico

Um erro comum de iniciantes é inserir cada ação em uma matriz armazenada para criar um histórico. Isso cresce sem limite e se torna extremamente caro. Emita eventos e deixe que um indexador externo à cadeia reconstrua o histórico.

<code>// Anti-pattern: unbounded, costly
// historyArray.push(record);

// Better:
emit ActionRecorded(msg.sender, block.timestamp);</code>

Lista de verificação para decisões

Pergunte: Algum código na cadeia lerá este valor mais tarde?

  • Sim — armazenamento (e, opcionalmente, emissão também)
  • Não, ele serve apenas para exibição ou auditoria — apenas evento

Essa única pergunta resolve a maioria das decisões de projeto.

Verificação rápida

Teste sua compreensão sobre eventos e armazenamento.

Recapitulação

Você aprendeu a diferença entre armazenamento e eventos:

  • O armazenamento pode ser lido na cadeia, mas é caro (~20 mil unidades de gás por espaço novo)
  • Os eventos são baratos, mas apenas clientes externos à cadeia podem lê-los
  • Armazene o que o contrato precisa; emita o que somente o mundo externo precisa
  • O padrão comum: atualizar o armazenamento E emitir um evento

Nunca armazene dados apenas para histórico ou exibição.

Grátis para começar

Aprenda Web3 & DApp Development Fundamentals com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
29
Aulas
105

Perguntas Frequentes

A aula “Eventos versus armazenamento” é grátis?

Sim — o texto completo de “Eventos versus armazenamento” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Web3 & DApp Development Fundamentals, atualize para CoddyKit PRO. O curso de Web3 & DApp Development Fundamentals inclui 4 aulas no total.

O que vou aprender em “Eventos versus armazenamento”?

Compensações de gas Você pratica Web3 & DApp Development Fundamentals com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Web3 & DApp Development Fundamentals?

Nenhuma experiência prévia é necessária. Web3 & DApp Development Fundamentals no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Eventos versus armazenamento”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Web3 & DApp Development Fundamentals?

Sim. Cada aula de Web3 & DApp Development Fundamentals inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Declaração de eventos
  2. Parâmetros indexados
  3. Escuta de eventos
  4. Eventos versus armazenamento
← Voltar para Web3 & DApp Development Fundamentals