Armazenamento de Dados

porMatheusem13/05/2022

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 blockchain

  • memory - é uma variável de memória, existe apenas enquanto uma função está sendo chamada

  • calldata - localização de dados especial que contém argumentos de função

// SPDX-License-Identifier: MIT
pragma 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 mapeamento
MyStruct storage myStruct = myStructs[1];
// criar uma estrutura na memória
MyStruct 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 variables
function 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
}
}

Testar no Remix