> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chainstack.com/llms.txt
> Use this file to discover all available pages before exploring further.

# eth_getStorageAt | Fantom

> Fantom API method that returns the data stored at a specific storage slot within a smart contract. Use it on Fantom via Chainstack.

Fantom API method that returns the data stored at a specific storage slot within a smart contract. It can help developers read a smart contract's internal state, like user data or balances, to inform decisions and build more advanced applications that interact with smart contracts on the blockchain.

<Note>
  When called against a block older than the latest \~128 blocks, this method is treated as an archive request (2 RUs instead of 1 RU). See [request units](/docs/request-units#archive-state-methods).
</Note>

<Check>
  **Get your own node endpoint today**

  [Start for free](https://console.chainstack.com/) and get your app to production levels immediately. No credit card required.

  You can sign up with your GitHub, X, Google, or Microsoft account.
</Check>

## Parameters

* `address` — the address of the smart contract to query
* `quantity` — the index of the storage position to retrieve the data from
* `quantity or tag` — the integer of a block encoded as hexadecimal or the string with:

  * `latest` — the most recent block in the blockchain and the current state of the blockchain at the most recent block. A chain reorganization is to be expected.
  * `safe` — the block that received justification from the beacon chain. Although this block could be involved in a chain reorganization, it would necessitate either a coordinated attack by the majority of validators or an instance of severe propagation latency.
  * `finalized` — the block accepted as canonical by more than 2/3 of the validators. A chain reorganization is extremely unlikely, and it would require at least 1/3 of the staked amount to be burned.
  * `earliest` — the earliest available or genesis block.
  * `pending` — the pending state and transactions block. The current state of transactions that have been broadcast to the network but have not yet been included in a block.

<Note>
  See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block) and [How The Merge Impacts Ethereum’s Application Layer](https://blog.ethereum.org/2021/11/29/how-the-merge-impacts-app-layer).
</Note>

## Response

`data` — the data stored in the storage slot. Returned as a hexadecimal string.

## `eth_getStorageAt` code examples

The following example returns the storage value at slot `2` from the [WFTM Token on the Fantom mainnet](https://ftmscan.com/token/0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83#readContract). In this case, this is the total supply value.

This method can retrieve the different storage values in time by querying different blocks in the past. Note that to query a state in the past, you need an [archive node](https://chainstack.com/evm-nodes-a-dive-into-the-full-vs-archive-mode).

<Note>
  cURL needs a `HEX String` starting with `0x` to identify the block if you want to use a hex integer block number as a parameter.\
  For example, block number `14000000` will be `0xD59F80`. Use the [Chainstack EVM Knife](https://web3tools.chainstacklabs.com/hexadecimal-decimal) to make those conversions.
</Note>

<CodeGroup>
  ```javascript web3.js theme={"system"}
  const { Web3 } = require("web3");
  const NODE_URL = "CHAINSTACK_NODE_URL";
  const web3 = new Web3(NODE_URL);

  async function getstorage(address, slot, block) {
    const storage = await web3.eth.getStorageAt(address, slot, block)
    console.log(storage)
   }
   
   getstorage("0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83", 2, "latest" )
  ```

  ```javascript ethers.js theme={"system"}
  const ethers = require('ethers');
  const NODE_URL = "CHAINSTACK_NODE_URL";
  const provider = new ethers.JsonRpcProvider(NODE_URL);

  const getstorage = async (address, slot, block) => {
      const storage = await provider.send("eth_getStorageAt", [address, slot, block]);
      console.log(storage);
    };

  getstorage("0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83", "2", "latest" )
  ```

  ```python web3.py theme={"system"}
  from web3 import Web3  
  node_url = "CHAINSTACK_NODE_URL" 

  storage = web3.eth.get_storage_at("0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83", 2, "latest")
  print(web3.to_hex(storage))
  ```
</CodeGroup>

## Use case

One use case for `eth_getStorageAt` is analyzing how the value stored at a specific storage slot of a smart contract changes over time. For example, a developer may want to track the change in a specific variable of a smart contract, such as the total supply of a token, and perform some analysis on it.


## OpenAPI

````yaml /openapi/fantom_node_api/eth_getStorageAt.json POST /4ab982aa70a7baead515ffdb5915df3f
openapi: 3.0.0
info:
  title: Fantom Node API
  version: 1.0.0
  description: This is an API for interacting with a Fantom node.
servers:
  - url: https://fantom-mainnet.core.chainstack.com
security: []
paths:
  /4ab982aa70a7baead515ffdb5915df3f:
    post:
      tags:
        - upload
      summary: eth_getStorageAt
      operationId: getStorageAt
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                method:
                  type: string
                  default: eth_getStorageAt
                params:
                  type: array
                  items:
                    anyOf:
                      - type: string
                        title: Smart contract address
                        description: The address of the contract to query.
                      - type: string
                        title: Slot index
                        description: The index of the storage position to query.
                      - type: string
                        title: Block ID
                        description: The block number or tag to use as a reference.
                  default:
                    - '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83'
                    - '0x2'
                    - latest
                id:
                  type: integer
                  default: 1
                jsonrpc:
                  type: string
                  default: '2.0'
      responses:
        '200':
          description: The value stored at the specified position.
          content:
            application/json:
              schema:
                type: object
                properties:
                  jsonrpc:
                    type: string
                  id:
                    type: integer
                  result:
                    type: string

````