Recentemente, tenho revisado o Solidity para consolidar os detalhes e escrever uma "Introdução Simples ao Solidity" para os novatos (os mestres da programação podem procurar outros tutoriais). Serão publicadas de 1 a 3 lições por semana.
Twitter: @0xAA_Science
Comunidade: Discord | Grupo no WeChat | Website wtf.academy
Todo o código e tutoriais estão disponíveis no GitHub: github.com/AmazingAng/WTF-Solidity
Nesta lição, apresentaremos dois palavras-chave relacionadas a constantes no Solidity: constant (constante) e immutable (imutável). Quando essas palavras-chave são utilizadas na declaração de variáveis de estado, os valores não podem ser alterados após a inicialização. Isso melhora a segurança do contrato e economiza gas.
Além disso, somente variáveis numéricas podem ser declaradas como constant e immutable; string e bytes podem ser declarados como constant, mas não como immutable.
As variáveis constant devem ser inicializadas no momento da declaração e não podem mais ser modificadas. Tentar alterar essas variáveis resultará em erro de compilação.
// Variáveis constantes devem ser inicializadas no momento da declaração e não podem ser alteradas posteriormente
uint256 constant CONSTANT_NUM = 10;
string constant CONSTANT_STRING = "0xAA";
bytes constant CONSTANT_BYTES = "WTF";
address constant CONSTANT_ADDRESS = 0x0000000000000000000000000000000000000000;As variáveis immutable podem ser inicializadas durante a declaração ou no construtor, tornando-as mais flexíveis.
// Variáveis immutable podem ser inicializadas no constructor e não podem mais ser alteradas
uint256 public immutable IMMUTABLE_NUM = 9999999999;
address public immutable IMMUTABLE_ADDRESS;
uint256 public immutable IMMUTABLE_BLOCK;
uint256 public immutable IMMUTABLE_TEST;Você pode usar variáveis globais como address(this), block.number ou funções personalizadas para inicializar variáveis immutable. No exemplo abaixo, usamos a função test() para inicializar IMMUTABLE_TEST com o valor 9:
// Inicializa variáveis immutable no constructor e pode ser usado
constructor(){
IMMUTABLE_ADDRESS = address(this);
IMMUTABLE_BLOCK = block.number;
IMMUTABLE_TEST = test();
}
function test() public pure returns(uint256){
uint256 what = 9;
return(what);
}-
Após implantar o contrato, você pode obter os valores previamente inicializados das variáveis
constanteimmutableusando a funçãogetterno remix. -
Após a inicialização da variável
constant, tentar alterar seu valor resultará em erro de compilaçãoTypeError: Cannot assign to a constant variable.. -
Após a inicialização da variável
immutable, tentar alterar seu valor resultará em erro de compilaçãoTypeError: Immutable state variable already initialized..
Nesta lição, apresentamos duas palavras-chave no Solidity, constant (constante) e immutable (imutável), para manter variáveis que não devem mudar, inalteradas. Essa prática não apenas economiza gas, mas também aumenta a segurança do contrato.


