Storage x Memory
Storage e Memory
Entender a diferença entre storage
e memory
em Solidity é fundamental para a manipulação correta dos tipos stateful (com estado) e stateless (sem estado) dentro de contratos inteligentes.
Storage: Refere-se à área de armazenamento permanente na blockchain. Variáveis de estado e arrays são armazenados em
storage
. Qualquer modificação em variáveis destorage
é gravada permanentemente na blockchain e consome gasolina (taxas de transação).MemoryÉ uma área temporária de armazenamento utilizada para armazenar dados durante a execução de uma função. Variáveis locais e parâmetros de função são armazenados em
memory
. Os dados armazenados emmemory
são removidos assim que a execução da função é concluída e não são persistidos na blockchain.
**Storage vs memory **
**storage** **memory** Armazena dados entre chamadas de função Armazena dados temporariamente Os dados previamente colocados na área de armazenamento são acessíveis a cada execução do contrato inteligente. A memória é completamente apagada assim que o código é executado. Consome mais gás Tem menos consumo de gás e é melhor para cálculos intermediários. Armazena arrays, variáveis de estado e locais de estruturas. Armazena os argumentos das funções.
Manipulação dos Tipos Stateful e Stateless:
Stateful: Tipos stateful referem-se a dados que são armazenados permanentemente na blockchain, geralmente como variáveis de estado (
storage
). Exemplos incluem saldo de uma conta, registro de propriedade de tokens, etc. Manipular dados stateful requer cuidado devido ao custo de gasolina associado à leitura e gravação de dados emstorage
.Stateless: Tipos stateless são aqueles que não são armazenados permanentemente na blockchain e existem apenas durante a execução de uma função, geralmente armazenados em
memory
. Exemplos incluem parâmetros de função, variáveis locais e resultados temporários de cálculos. Manipular dados stateless é mais eficiente em termos de consumo de gasolina, pois não envolve gravação nastorage
.
Exemplo:
No exemplo acima, statefulVar
é uma variável stateful armazenada em storage
. A função manipularStateful
modifica esta variável, o que resulta em uma transação na blockchain.
Por outro lado, na função manipularStateless
, resultado
é uma variável stateless temporária armazenada em memory
. Como a função é marcada como pure
, ela não interage com storage
e não resulta em transações na blockchain.