Comenzando con TheRPC
Referencia de API
API de Ethereum
Core API
Guías
Ethereum/Core API/eth_getStorageAt

eth_getStorageAt

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.

Casos de Uso

  • Depuración y análisis de contratos inteligentes
  • Verificación de saldo de tokens
  • Inspección de gobernanza de protocolos
  • Verificación de implementación de proxy
  • Auditoría de estado de contratos
  • Validación de diseño de almacenamiento
  • Verificación de estado de propuestas de DAO
  • Verificación de actualización de contratos

Detalles del Método

Este método proporciona acceso en bruto a cualquier slot de almacenamiento en el almacenamiento de un contrato.

Parámetros:

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

Devuelve:

El valor en la posición de almacenamiento especificada (32 bytes, codificado en hex)

Ejemplo de Respuesta

{
	"jsonrpc": "2.0",
	"id": 1,
	"result": "0x000000000000000000000000000000000000000000000000000000000000000a"
}

Entendiendo el Diseño de Almacenamiento de Solidity

El diseño de almacenamiento de Solidity sigue reglas específicas:

  1. Variables de Estado: Almacenadas secuencialmente comenzando desde el slot 0
// Slot de almacenamiento 0
uint256 firstVariable;
// Slot de almacenamiento 1
address secondVariable;
  1. Mappings: El slot en sí no contiene datos, pero sirve como semilla para calcular posiciones
// Slot de almacenamiento 2 (vacío)
mapping(address => uint256) balances;
// Valor almacenado en keccak256(abi.encode(userAddress, 2))
  1. Arrays Dinámicos: El slot contiene la longitud del array, los datos comienzan en keccak256(slot)
// El slot de almacenamiento 3 tiene la longitud
uint256[] myArray;
// Valores almacenados en keccak256(3) + índice
  1. Variables Empaquetadas: Múltiples variables menores a 32 bytes se empaquetan juntas
// Todas en el slot de almacenamiento 4
uint128 a;
uint64 b;
uint64 c;

Slots de Almacenamiento Comunes

  • Suministro Total ERC20: A menudo almacenado en el slot 0 o 2
  • Mapping de Saldos ERC20: A menudo en el slot 1 o 3
  • Mapping de Permisos ERC20: A menudo en el slot 2 o 4
  • Dirección de Implementación del Proxy: Para proxies EIP-1967 en 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc

Herramientas de Inspección de Almacenamiento

Para contratos complejos, considere usar herramientas dedicadas:

  • Slither: Analizador estático que puede generar diseños de almacenamiento
  • Tenderly: Depurador visual con inspección de almacenamiento
  • Hardhat: Depuración por consola con acceso a almacenamiento
  • Etherscan: A veces proporciona diseños de almacenamiento de contratos verificados

Ver también

  • eth_getCode - Obtener el bytecode desplegado en una dirección específica
  • eth_getProof - Recuperar pruebas criptográficas para valores de cuenta y almacenamiento
¡Ayúdanos a Mejorar!
Comparte esta página y ayúdanos a crear un producto aún mejor para ti.