13. Memory vs Storage

Há certas formas de manipular os dados dentro das blockchains e cada uma é feita de formas diferentes pelo minerador que vai executar o contrato, isso implica em diferentes custos de gás.

# 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 utilizamos 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.

Last Updated: 08/10/2022 22:55:37