eth_getStorageAt
The eth_getStorageAt method returns the value from a storage position at a given address.
eth_getStorageAt
shell
curl --request POST \
--url https://ethereum-mainnet-geth-archive.node.coinapi.io \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'X-CoinAPI-Key: 73034021-THIS-IS-SAMPLE-KEY' \
--data '
{
"id": 1,
"jsonrpc": "2.0",
"params": [
"0xe5cB067E90D5Cd1F8052B83562Ae670bA4A211a8",
"latest"
],
"method": "eth_getCode"
}'csharp
using RestSharp; {
var options = new RestClientOptions("https://ethereum-mainnet-geth-archive.node.coinapi.io");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json","X-CoinAPI-Key: 73034021-THIS-IS-SAMPLE-KEY");
request.AddJsonBody("{\"id\":1,\"jsonrpc\":\"2.0\",\"params\":[\"0xe5cB067E90D5Cd1F8052B83562Ae670bA4A211a8\",\"latest\"],\"method\":\"eth_getCode\"}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content); }php
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://ethereum-mainnet-geth-archive.node.coinapi.io",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id' => 1,
'jsonrpc' => '2.0',
'params' => [
'0xe5cB067E90D5Cd1F8052B83562Ae670bA4A211a8',
'latest'
],
'method' => 'eth_getCode'
]),
CURLOPT_HTTPHEADER => [
"accept: application/json",
"content-type: application/json",
"X-CoinAPI-Key": "73034021-THIS-IS-SAMPLE-KEY"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
?>python
import requests
url = "https://ethereum-mainnet-geth-archive.node.coinapi.io"
payload = {
"id": 1,
"jsonrpc": "2.0",
"params": ["0xe5cB067E90D5Cd1F8052B83562Ae670bA4A211a8", "latest"],
"method": "eth_getCode"
}
headers = {
"accept": "application/json",
"content-type": "application/json",
"X-CoinAPI-Key" : "73034021-THIS-IS-SAMPLE-KEY"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)javascript
const options = {
method: 'POST',
headers: {accept: 'application/json', 'content-type': 'application/json', 'X-CoinAPI-Key': '73034021-THIS-IS-SAMPLE-KEY'},
body: JSON.stringify({
id: 1,
jsonrpc: '2.0',
params: ['0xe5cB067E90D5Cd1F8052B83562Ae670bA4A211a8', 'latest'],
method: 'eth_getCode'
})
};
fetch('https://ethereum-mainnet-geth-archive.node.coinapi.io', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));go
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://ethereum-mainnet-geth-archive.node.coinapi.io"
payload := strings.NewReader("{\"id\":1,\"jsonrpc\":\"2.0\",\"params\":[\"0xe5cB067E90D5Cd1F8052B83562Ae670bA4A211a8\",\"latest\"],\"method\":\"eth_getCode\"}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("accept", "application/json")
req.Header.Add("content-type", "application/json")
req.Header.Add("X-CoinAPI-Key", "73034021-THIS-IS-SAMPLE-KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}ruby
require 'uri'
require 'net/http'
url = URI("https://ethereum-mainnet-geth-archive.node.coinapi.io")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["accept"] = 'application/json'
request["content-type"] = 'application/json'
request["X-CoinAPI-Key"] = '73034021-THIS-IS-SAMPLE-KEY'
request.body = "{\"id\":1,\"jsonrpc\":\"2.0\",\"params\":[\"0xe5cB067E90D5Cd1F8052B83562Ae670bA4A211a8\",\"latest\"],\"method\":\"eth_getCode\"}"
response = http.request(request)
puts response.read_bodyjava
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"id\":1,\"jsonrpc\":\"2.0\",\"params\":[\"0xe5cB067E90D5Cd1F8052B83562Ae670bA4A211a8\",\"latest\"],\"method\":\"eth_getCode\"}");
Request request = new Request.Builder()
.url("https://ethereum-mainnet-geth-archive.node.coinapi.io")
.post(body)
.addHeader("accept", "application/json")
.addHeader("content-type", "application/json")
.addHeader("X-CoinAPI-Key", "73034021-THIS-IS-SAMPLE-KEY")
.build();
Response response = client.newCall(request).execute();Overview
The 'eth_getStorageAt' method returns the value from a storage position at a given address.
Request
replace 'mainnet' with any other supported network.
Request Parameters
- 'address': [ Required ] A string representing the address (20 bytes) of the storage.
- 'storage positio'n: [ Required ] A hexadecimal code of the position in the storage.
- 'block parameter': [ Required ] A hexadecimal block number, or the string 'latest', 'earliest' or 'pending'. Refer to the default block parameter section for more details.
Response
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x0000000000000000000000000000000000000000000000000000000000000000"
}- 'storage value': A hexadecimal equivalent of the integer indicating the value of the storage position at the provided address.
Notes on Storage Retrieval:
- Calculating the correct position depends on the storage to retrieve. For instance, consider the following contract deployed at '0x407d73d8a49eeb85d32cf465507dd71d507100c1' by address '0x391694e7e0b0cce554cb130d723a9d27458f9298':
contract Storage {
uint pos0;
mapping (address => uint) pos1;
function Storage() {
pos0 = 1234;
pos1[msg.sender] = 5678;
}
}Retrieving the value of 'pos0' is straightforward. However, retrieving an element of the map requires a more complex calculation. The position of an element in the map is calculated using the 'keccak' function and padding techniques. Tools like the geth console which comes with the web3 library can be used to make these calculations.
eth_getProof
The 'eth_getProof' method retrieves the account and storage values of the specified account, including the Merkle-proof.
eth_getTransactionByBlockHashAndIndex
The eth_getTransactionByBlockHashAndIndex method returns information about a transaction given block hash and transaction index position.