EthereumMethods

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_body

java

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.

Service StatusGitHub SDK