Nesse artigo iremos abordar as diversas maneiras de armazenar dados na blockchain com Solidity.
Falaremos sobre os tipos storage
, memory
e calldata
.
Storage, memory e calldata
storage
- é uma variável de estado, armazena os dados na blockchainmemory
- é uma variável de memória, existe apenas enquanto uma função está sendo chamadacalldata
- localização de dados especial que contém argumentos de função
// SPDX-License-Identifier: MITpragma solidity ^0.8.13;contract DataLocations {uint[] public arr;mapping(uint => address) map;struct MyStruct {uint foo;}mapping(uint => MyStruct) myStructs;function f() public {// chama _f com variáveis de estado_f(arr, map, myStructs[1]);// obter uma estrutura de um mapeamentoMyStruct storage myStruct = myStructs[1];// criar uma estrutura na memóriaMyStruct memory myMemStruct = MyStruct(0);}function _f(uint[] storage _arr,mapping(uint => address) storage _map,MyStruct storage _myStruct) internal {// fazer algo com variáveis de armazenamento}// You can return memory variablesfunction g(uint[] memory _arr) public returns (uint[] memory) {// fazer algo com array de memória}function h(uint[] calldata _arr) external {// fazer algo com array de calldata}}