El método eth_getStorageAt
devuelve el valor almacenado en una posición específica de almacenamiento para una dirección de contrato inteligente dada. Este método de bajo nivel permite el acceso directo a las variables de estado del contrato y es crucial para el análisis y depuración de contratos.
Este método proporciona acceso en bruto a cualquier slot de almacenamiento en el almacenamiento de un contrato.
La dirección del contrato inteligente
El entero de la posición de almacenamiento (cadena hex)
Número de bloque en formato hex o etiqueta de bloque
El valor en la posición de almacenamiento especificada (32 bytes, codificado en hex)
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x000000000000000000000000000000000000000000000000000000000000000a"
}
El diseño de almacenamiento de Solidity sigue reglas específicas:
// Slot de almacenamiento 0
uint256 firstVariable;
// Slot de almacenamiento 1
address secondVariable;
// Slot de almacenamiento 2 (vacío)
mapping(address => uint256) balances;
// Valor almacenado en keccak256(abi.encode(userAddress, 2))
keccak256(slot)
// El slot de almacenamiento 3 tiene la longitud
uint256[] myArray;
// Valores almacenados en keccak256(3) + índice
// Todas en el slot de almacenamiento 4
uint128 a;
uint64 b;
uint64 c;
0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
Para contratos complejos, considere usar herramientas dedicadas: