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
constant
eimmutable
usando a funçãogetter
no 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.