Bài học 3

Técnicas de otimização de gás com Remix

É fundamental praticar agora que você domina algumas abordagens fundamentais de otimização de armazenamento. Envolva-se com os exemplos oferecidos e experimente criar os seus próprios. Na sessão a seguir, nos aprofundaremos na otimização da visibilidade da função e na reutilização de código com bibliotecas. Tenha em mente que a otimização é uma arte e uma ciência. Continue experimentando!

Otimizando o armazenamento

A maioria dos gastos com gás da Ethereum concentra-se no armazenamento. Cada operação que altera o estado (armazenamento) da rede Ethereum normalmente é cara. Como resultado, concentrar-se na forma como os dados são mantidos e acessíveis pode resultar em reduções de custos significativas. Nesta sessão, veremos algumas maneiras de otimizar o armazenamento com o Remix.

Por que o armazenamento é caro?

A blockchain Ethereum fornece armazenamento permanente. Tudo o que for salvo no blockchain estará disponível enquanto o blockchain sobreviver, mas essa permanência tem um custo. A otimização do armazenamento não apenas reduz os custos, mas também garante que o estado global do Ethereum seja usado de forma eficiente.

Variáveis de armazenamento de embalagem

Introdução

O Solidity armazena variáveis em slots. Cada slot tem 32 bytes. Quando as variáveis cabem em um único slot, elas podem ser lidas ou atualizadas com uma única operação SLOAD ou SSTORE, respectivamente.

Exemplo

Considere dois contratos:

Solidez 
 // Sem Otimização 
 pragma solidez ^0.8.9; 

 contratos UnoptimizedStorage {
    uint256 public value1;
    uint256 public value2;
}
Solidez 
 // Com Otimização 
 pragma solidez ^0.8.9; 

 contratos OptimizedStorage {
    uint128 public value1;
    uint128 public value2;
}
  1. Implante ambos os contratos no Remix e observe as diferenças de gás ao interagir com suas variáveis.

  2. Na versão otimizada, value1 e value2 compartilham um único slot de 32 bytes.

Reutilizando slots de armazenamento

Introdução

Quando terminar de usar um slot de armazenamento, especialmente o armazenamento temporário de dados, você pode excluir ou zerar o slot para obter um reembolso de gás.

Exemplo

Solidez 
 pragma solidez ^0,8,9; 

 contratos RefundExample { 
 uint256 public temporárioData; 

 função storeTemporaryData (dados uint256) público {
        temporaryData = data;
    }

    função clearTemporaryData() público {
        delete temporaryData;
    }
}
  1. Implante este contrato no Remix.

  2. Armazene alguns dados temporários e limpe-os.

  3. Verifique o custo do gás. Observe o reembolso do gás que você recebe pela operação delete .

Usando eventos em vez de armazenamento para dados históricos

Introdução

Se os dados não precisarem ser acessados na cadeia, considere registrá-los como um evento em vez de armazená-los. Os eventos são muito mais baratos que as operações de armazenamento.

Exemplo

Solidez 
 pragma solidez ^0,8,9; 

 contratos EventExample { 
 eventos DataStored (dados uint256); 

 função storeData (dados uint256) público {
        emit DataStored(data);
    }
}
  1. Implante e interaja com o contrato no Remix.

  2. Observe os custos mais baratos do gás quando comparado ao armazenamento.

Olhando para o futuro

É fundamental praticar agora que você domina algumas abordagens fundamentais de otimização de armazenamento. Envolva-se com os exemplos oferecidos e experimente criar os seus próprios. Na sessão a seguir, nos aprofundaremos na otimização da visibilidade da função e na reutilização de código com bibliotecas. Tenha em mente que a otimização é uma arte e uma ciência. Continue experimentando!

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.
Danh mục
Bài học 3

Técnicas de otimização de gás com Remix

É fundamental praticar agora que você domina algumas abordagens fundamentais de otimização de armazenamento. Envolva-se com os exemplos oferecidos e experimente criar os seus próprios. Na sessão a seguir, nos aprofundaremos na otimização da visibilidade da função e na reutilização de código com bibliotecas. Tenha em mente que a otimização é uma arte e uma ciência. Continue experimentando!

Otimizando o armazenamento

A maioria dos gastos com gás da Ethereum concentra-se no armazenamento. Cada operação que altera o estado (armazenamento) da rede Ethereum normalmente é cara. Como resultado, concentrar-se na forma como os dados são mantidos e acessíveis pode resultar em reduções de custos significativas. Nesta sessão, veremos algumas maneiras de otimizar o armazenamento com o Remix.

Por que o armazenamento é caro?

A blockchain Ethereum fornece armazenamento permanente. Tudo o que for salvo no blockchain estará disponível enquanto o blockchain sobreviver, mas essa permanência tem um custo. A otimização do armazenamento não apenas reduz os custos, mas também garante que o estado global do Ethereum seja usado de forma eficiente.

Variáveis de armazenamento de embalagem

Introdução

O Solidity armazena variáveis em slots. Cada slot tem 32 bytes. Quando as variáveis cabem em um único slot, elas podem ser lidas ou atualizadas com uma única operação SLOAD ou SSTORE, respectivamente.

Exemplo

Considere dois contratos:

Solidez 
 // Sem Otimização 
 pragma solidez ^0.8.9; 

 contratos UnoptimizedStorage {
    uint256 public value1;
    uint256 public value2;
}
Solidez 
 // Com Otimização 
 pragma solidez ^0.8.9; 

 contratos OptimizedStorage {
    uint128 public value1;
    uint128 public value2;
}
  1. Implante ambos os contratos no Remix e observe as diferenças de gás ao interagir com suas variáveis.

  2. Na versão otimizada, value1 e value2 compartilham um único slot de 32 bytes.

Reutilizando slots de armazenamento

Introdução

Quando terminar de usar um slot de armazenamento, especialmente o armazenamento temporário de dados, você pode excluir ou zerar o slot para obter um reembolso de gás.

Exemplo

Solidez 
 pragma solidez ^0,8,9; 

 contratos RefundExample { 
 uint256 public temporárioData; 

 função storeTemporaryData (dados uint256) público {
        temporaryData = data;
    }

    função clearTemporaryData() público {
        delete temporaryData;
    }
}
  1. Implante este contrato no Remix.

  2. Armazene alguns dados temporários e limpe-os.

  3. Verifique o custo do gás. Observe o reembolso do gás que você recebe pela operação delete .

Usando eventos em vez de armazenamento para dados históricos

Introdução

Se os dados não precisarem ser acessados na cadeia, considere registrá-los como um evento em vez de armazená-los. Os eventos são muito mais baratos que as operações de armazenamento.

Exemplo

Solidez 
 pragma solidez ^0,8,9; 

 contratos EventExample { 
 eventos DataStored (dados uint256); 

 função storeData (dados uint256) público {
        emit DataStored(data);
    }
}
  1. Implante e interaja com o contrato no Remix.

  2. Observe os custos mais baratos do gás quando comparado ao armazenamento.

Olhando para o futuro

É fundamental praticar agora que você domina algumas abordagens fundamentais de otimização de armazenamento. Envolva-se com os exemplos oferecidos e experimente criar os seus próprios. Na sessão a seguir, nos aprofundaremos na otimização da visibilidade da função e na reutilização de código com bibliotecas. Tenha em mente que a otimização é uma arte e uma ciência. Continue experimentando!

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.