eth_getStorageAt
方法返回给定智能合约地址的特定存储位置存储的值。这个低级方法允许直接访问合约的状态变量,对合约分析和调试至关重要。
此方法提供对合约存储中任何存储槽的原始访问。
智能合约的地址
存储位置的整数(十六进制字符串)
十六进制格式的区块号或区块标签
指定存储位置的值(32 字节,十六进制编码)
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x000000000000000000000000000000000000000000000000000000000000000a"
}
Solidity 的存储布局遵循特定规则:
// 存储槽 0
uint256 firstVariable;
// 存储槽 1
address secondVariable;
// 存储槽 2(空)
mapping(address => uint256) balances;
// 值存储在 keccak256(abi.encode(userAddress, 2))
keccak256(slot)
开始// 存储槽 3 存储长度
uint256[] myArray;
// 值存储在 keccak256(3) + index
// 都在存储槽 4
uint128 a;
uint64 b;
uint64 c;
0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc
对于复杂合约,考虑使用专用工具: