13. Memory vs Storage
# 13. Memory vs Storage
# Storage
Dados que irão persistir na blockchain e serão armazenados por tempo indefinido (ou definido) dentro dos registros distribuídos entre todos os nós da rede.
Toda variável definida fora de funções será armazenada dessa forma por padrão. Variáveis dentro de funções precisam do parâmetro storage para que sejam gravadas na blockchain.
# Memory & Calldata
Esse tipo de armazenamento será temporário e somente durante tempo de execução, ou seja esse dado só irá existir enquanto a função ou instrução estiver sendo executada, dados guardados em variáveis do tipo memory ou calldata não serão armazenados. Há uma diferença relevante entre as duas operações e abaixo veremos quando usar uma ou outra.
# memory: pode ser alterado.
Quando passamos parâmetros para uma função e utilizamos memory como indicador de tipo de armazenamento nós temos permissão para alterar esse dado dentro da função caso seja do nosso interesse.
# calldata: não pode ser alterado.
Já quando utlizamos calldata não temos permissão para alterar o dado que foi passado para a função.
# Custos: Storage vs Memory vs Calldata.
Storage é o mais caro pois guarda os dados dentro da blockchain, seguido de memory que é bem mais barato pois não armazena nada mas utiliza mais OPCODES que calldata que acaba por ser o mais barato de todos os tipos de armazenamento.