Lesson 3

Técnicas de Optimização de Gás com Remix

É fundamental praticar agora que dominou algumas abordagens fundamentais de otimização de armazenamento. Envolva com os exemplos oferecidos e experimente criar o seu próprio. Na sessão seguinte, vamos aprofundar-nos 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 a experimentar!

Optimizar o armazenamento

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

Porque é que o armazenamento é caro?

A cadeia de blocos Ethereum fornece armazenamento permanente. Tudo o que é poupado na cadeia de blocos estará disponível enquanto o blockchain sobreviver, mas esta permanência tem um custo. A otimização do armazenamento não só reduz os custos mas também garante que o estado global do Ethereum seja utilizado de forma eficiente.

Embalagem de Variáveis de Armazenamento

Introdução

Solidity armazena variáveis em slots. Cada slot é de 32 bytes. Quando as variáveis podem caber num único slot, podem ser lidas ou atualizadas com uma única operação SLOAD ou SSTORE, respectivamente.

Exemplo

Considere dois contratos:

Solidez
//Sem Optimização
solidez do pragma ^0.8.9;

contrato UnOptimizedStorage {
    uint256 public value1;
    uint256 public value2;
}
Solidez
//Com Optimização
solidez do pragma ^0.8.9;

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

  2. Na versão otimizada, tanto o valor1 como o valor2 partilham um único slot de 32 bytes.

Reutilizar ranhuras de armazenamento

Introdução

Quando terminar com um slot de armazenamento, especialmente o armazenamento temporário de dados, pode eliminar ou zerar o slot para obter um reembolso de gás.

Exemplo

Solidez
solidez do pragma ^0.8.9;

contrato refundeExemplo {
 uint256 dados temporários públicos;

 função StoreTemporaryData (uint256 data) public {
        temporaryData = data;
    }

    função clearTemporaryData () public {
        delete temporaryData;
    }
}
  1. Implemente este contrato no Remix.

  2. Armazene alguns dados temporários e depois limpe.

  3. Verifique o custo do gás. Observe o reembolso do gás que recebe pela operação de exclusão.

Utilizar eventos em vez de armazenamento para dados históricos

Introdução

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

Exemplo

Solidez
solidez do pragma ^0.8.9;

exemplo de evento de contrato {
 dados de eventos armazenados (dados uint256);

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

  2. Note os custos de gás mais baratos em comparação com o armazenamento.

Olhando para o futuro

É fundamental praticar agora que dominou algumas abordagens fundamentais de otimização de armazenamento. Envolva com os exemplos oferecidos e experimente criar o seu próprio. Na sessão seguinte, vamos aprofundar-nos 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 a experimentar!

Disclaimer
* Crypto investment involves significant risks. Please proceed with caution. The course is not intended as investment advice.
* The course is created by the author who has joined Gate Learn. Any opinion shared by the author does not represent Gate Learn.
Catalog
Lesson 3

Técnicas de Optimização de Gás com Remix

É fundamental praticar agora que dominou algumas abordagens fundamentais de otimização de armazenamento. Envolva com os exemplos oferecidos e experimente criar o seu próprio. Na sessão seguinte, vamos aprofundar-nos 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 a experimentar!

Optimizar o armazenamento

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

Porque é que o armazenamento é caro?

A cadeia de blocos Ethereum fornece armazenamento permanente. Tudo o que é poupado na cadeia de blocos estará disponível enquanto o blockchain sobreviver, mas esta permanência tem um custo. A otimização do armazenamento não só reduz os custos mas também garante que o estado global do Ethereum seja utilizado de forma eficiente.

Embalagem de Variáveis de Armazenamento

Introdução

Solidity armazena variáveis em slots. Cada slot é de 32 bytes. Quando as variáveis podem caber num único slot, podem ser lidas ou atualizadas com uma única operação SLOAD ou SSTORE, respectivamente.

Exemplo

Considere dois contratos:

Solidez
//Sem Optimização
solidez do pragma ^0.8.9;

contrato UnOptimizedStorage {
    uint256 public value1;
    uint256 public value2;
}
Solidez
//Com Optimização
solidez do pragma ^0.8.9;

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

  2. Na versão otimizada, tanto o valor1 como o valor2 partilham um único slot de 32 bytes.

Reutilizar ranhuras de armazenamento

Introdução

Quando terminar com um slot de armazenamento, especialmente o armazenamento temporário de dados, pode eliminar ou zerar o slot para obter um reembolso de gás.

Exemplo

Solidez
solidez do pragma ^0.8.9;

contrato refundeExemplo {
 uint256 dados temporários públicos;

 função StoreTemporaryData (uint256 data) public {
        temporaryData = data;
    }

    função clearTemporaryData () public {
        delete temporaryData;
    }
}
  1. Implemente este contrato no Remix.

  2. Armazene alguns dados temporários e depois limpe.

  3. Verifique o custo do gás. Observe o reembolso do gás que recebe pela operação de exclusão.

Utilizar eventos em vez de armazenamento para dados históricos

Introdução

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

Exemplo

Solidez
solidez do pragma ^0.8.9;

exemplo de evento de contrato {
 dados de eventos armazenados (dados uint256);

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

  2. Note os custos de gás mais baratos em comparação com o armazenamento.

Olhando para o futuro

É fundamental praticar agora que dominou algumas abordagens fundamentais de otimização de armazenamento. Envolva com os exemplos oferecidos e experimente criar o seu próprio. Na sessão seguinte, vamos aprofundar-nos 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 a experimentar!

Disclaimer
* Crypto investment involves significant risks. Please proceed with caution. The course is not intended as investment advice.
* The course is created by the author who has joined Gate Learn. Any opinion shared by the author does not represent Gate Learn.