eth_getProof

Returns the account and storage values of the specified account including the Merkle-proof. This call can be used to verify that the data you are pulling from is not tampered with.

Don’t have an API key?

Start using this API in your app today.

📘

NOTE

The live code example will not work, please refer to the examples below instead. For context, this has to do with OpenAPI compatibility with JSON-RPC requests. We're working on a solution here but in the meantime, check out the composer tool to make requests from the browser.

Parameters

  1. DATA, 20 Bytes - address of the account.
  2. ARRAY, 32 Bytes - an array of storage-keys that should be proofed and included. See eth_getStorageAt
  3. QUANTITY|TAG - integer block number, or the string "latest" or "earliest", see the default block parameter

Returns

Object - A account object:

  • balance: QUANTITY - the balance of the account. Seeeth_getBalance
  • codeHash: DATA, 32 Bytes - hash of the code of the account. For a simple Account without code it will return "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"
  • nonce: QUANTITY, - nonce of the account. See eth_getTransactionCount
  • storageHash: DATA, 32 Bytes - SHA3 of the StorageRoot. All storage will deliver a MerkleProof starting with this rootHash.
  • accountProof: ARRAY - Array of rlp-serialized MerkleTree-Nodes, starting with the stateRoot-Node, following the path of the SHA3 (address) as key.
  • storageProof: ARRAY - Array of storage-entries as requested. Each entry is an object with these properties:
    • key: QUANTITY - the requested storage key
    • value: QUANTITY - the storage value
    • proof: ARRAY - Array of rlp-serialized MerkleTree-Nodes, starting with the storageHash-Node, following the path of the SHA3 (key) as path.

Example

Request

// Installation instructions: https://github.com/alchemyplatform/alchemy-web3

async function main() {
    // Import the AlchemyWeb3 library. Filepath to functions: 
    // /@alch/alchemy-web3/dist/alchemyWeb3.js
    const { createAlchemyWeb3 } = require("@alch/alchemy-web3");

    // Replace with your Alchemy API key:
    const apiKey = "demo";
    
    // Initialize an alchemy-web3 instance:
    const web3 = createAlchemyWeb3(
      `https://eth-mainnet.g.alchemy.com/v2/${apiKey}`);
    
    // Query the blockchain (replace example parameters)
        const account = await web3.eth.getProof({
        address: '0x7e5814a',
        keys: ["0x56e81f,0x283s34"],
        tag: 'latest',
      }); 
    
    // Print the output to console
    console.log(account);
   }

main();
// Installation instructions: https://docs.ethers.io/v5/getting-started/#installing

async function main() {
   const { ethers } = require("ethers");
   
    // Replace with your Alchemy API key:
    const apiKey = "demo";

    // Initialize an ethers instance
    const provider = new ethers.providers.AlchemyProvider("homestead", apiKey);

    // Query the blockchain (replace example parameters)
    const account = await provider.getProof({
        address: '0x7e5814a',
        keys: ["0x56e81f,0x283s34"],
        tag: 'latest',
      }); 
    
    // Print the output to console
    console.log(account);
   }

main()
# Installation Instructions: https://web3py.readthedocs.io/en/latest/quickstart.html#installation

from web3 import Web3, HTTPProvider

#Replace with your Alchemy API key:
apiKey = "demo"

# Initialize a Web3.py instance
web3 = Web3(Web3.HTTPProvider('https://eth-mainnet.g.alchemy.com/v2/'+apiKey))

# Query the blockchain (replace example parameters)
account = web3.eth.get_proof({
        account: "0x7e581", #can be a checksum address or ENS
        positions: ['0']
        block_identifier: '3391'
      }) 

# Print the output to console
print(account)
curl https://eth-mainnet.g.alchemy.com/v2/your-api-key \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_getProof","params":["0x7F0d15C7FAae65896648C8273B6d7E43f58Fa842",["0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"],"latest"],"id":1}'
URL: https://eth-mainnet.g.alchemy.com/v2/your-api-key
RequestType: POST
Body: 
{
    "jsonrpc":"2.0",
    "method":"eth_getProof",
    "params":["0x7F0d15C7FAae65896648C8273B6d7E43f58Fa842",["0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"],"latest"],
    "id":1
}

Result

{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "accountProof": [
      "0xf90211a...0701bc80",
      "0xf90211a...0d832380",
      "0xf90211a...5fb20c80",
      "0xf90211a...0675b80",
      "0xf90151a0...ca08080"
    ],
    "balance": "0x0",
    "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
    "nonce": "0x0",
    "storageHash": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
    "storageProof": [
      {
        "key": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
        "proof": [
          "0xf90211a...0701bc80",
          "0xf90211a...0d832380"
        ],
        "value": "0x1"
      }
    ]
  }
}
Language
Click Try It! to start a request and see the response here!