Returns the value from a storage position at a given address.
Parameters
ADDRESS
[required] a string representing the address (20 bytes) of the storage
STORAGE-POSITION
[required] a hex code of the position in the storage
BLOCK-NUMBER
[required] a hexadecimal block number, or the string latest
, earliest
or pending
, See the default block parameter .
Request
curl Postman
Copy curl https: //eth-mainnet.solarpath.io/v1/YOUR-API-KEY \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"]}'
Copy URL: https: //eth-mainnet.solarpath.io/v1/YOUR-API-KEY
Request_Type: POST
Body:
{
"jsonrpc" : "2.0" ,
"method" : "eth_getStorageAt" ,
"params" : [
"0x295a70b2de5e3953354a6a8344e616ed314d7251" ,
"0x0" ,
"latest"
] ,
"id" : 1
}
Response
Copy {
"jsonrpc" : "2.0" ,
"id" : 1 ,
"result" : "0x0000000000000000000000000000000000000000000000000000000000000000"
}
Example
Calculating the correct position depends on the storage to retrieve. Consider the following contract deployed at 0x295a70b2de5e3953354a6a8344e616ed314d7251
by address 0x391694e7e0b0cce554cb130d723a9d27458f9298
,
Copy contract Storage {
uint pos0;
mapping ( address => uint ) pos1;
function Storage () {
pos0 = 1234 ;
pos1[msg.sender] = 5678 ;
}
}
Retrieving the value of pos0 is straight forward:
Copy curl https: //eth-mainnet.solarpath.io/v1/YOUR-API-KEY \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"]}'
Retrieving an element of the map is harder. The position of an element in the map is calculated with:
Copy keccack ( LeftPad32 (key , 0 ) , LeftPad32 (map position , 0 ))
This means to retrieve the storage on pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"]
we need to calculate the position with:
Copy keccak (
decodeHex (
"000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" +
"0000000000000000000000000000000000000000000000000000000000000001"
)
)
The geth console which comes with the web3 library can be used to make the calculation:
Copy > var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001"
undefined
> web3. sha3 (key , { "encoding" : "hex" })
"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9"
Now to fetch the storage:
Copy curl https: //eth-mainnet.solarpath.io/v1/YOUR-API-KEY \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"]}'
Copy {
"id" : 1 ,
"jsonrpc" : "2.0" ,
"result" : "0x000000000000000000000000000000000000000000000000000000000000162e"
}