Nesse artigo iremos aprender a como gravar dados em qualquer slot do storage da blockchain através de um contrato inteligente.
Gravar dados em qualquer slot
O armazenamento do Solidity é como uma array de comprimento 2^256. Cada slot na matriz pode armazenar 32 bytes.
As variáveis de estado definem quais slots serão usados para armazenar dados.
No entanto, usando assembly, você pode gravar em qualquer slot.
// SPDX-License-Identifier: MITpragma solidity ^0.8.13;contract Storage {struct MyStruct {uint value;}// struct armazenado no slot 0MyStruct public s0 = MyStruct(123);// struct armazenado no slot 1MyStruct public s1 = MyStruct(456);// struct armazenado no slot 2MyStruct public s2 = MyStruct(789);function _get(uint i) internal pure returns (MyStruct storage s) {// obter struct armazenado no slot iassembly {s.slot := i}}/*get(0) returns 123get(1) returns 456get(2) returns 789*/function get(uint i) external view returns (uint) {// obter valor dentro do MyStruct armazenado no slot ireturn _get(i).value;}/*Podemos salvar dados em qualquer slot, incluindo o slot 999, que normalmente é inacessível.set(999) = 888*/function set(uint i, uint x) external {// defina o valor de MyStruct para x e armazene-o no slot i_get(i).value = x;}}