Polkadot - Getting Extrinsics from a Block
Getting the Extrinsics from a block requires a few steps
Steps
Step_1: Get Block Hash
RPC call. We need the block number to pass it as a parameter.
Example request:
curl --location 'https://polkadot-mainnet.gateway.tatum.io' \
--header 'Content-Type: application/json' \
--header 'x-api-key: {YOUR_API_KEY}' \
--data '{
"jsonrpc": "2.0",
"method": "chain_getBlockHash",
"params": [21453172],
"id": 1
}'
//Response:
{
"jsonrpc": "2.0",
"result": "0xe45599f512e6487668031b0ef0d1df79ccdfc3eea4f7b6987eb2e64cb5acd5e1",
"id": 1
}
Step_2: Get Block
RPC call. Take the block hash from Step_1 and pass it as a parameter
Example request:
curl --location 'https://polkadot-mainnet.gateway.tatum.io' \
--header 'Content-Type: application/json' \
--header 'x-api-key: {YOUR_API_KEY}' \
--data '{
"jsonrpc": "2.0",
"method": "chain_getBlock",
"params": ["0xe45599f512e6487668031b0ef0d1df79ccdfc3eea4f7b6987eb2e64cb5acd5e1"],
"id": 1
}'
//Response:
{
"jsonrpc": "2.0",
"result": {
"block": {
"header": {
"parentHash": "0x49cec4687315e7aa0b3e20926dfb5b4103fcd66678de5a0e2774b5250974c85e",
"number": "0x1475974",
"stateRoot": "0x20eea15eacd5b52af0398b5894eb40c02d44c94aae2e918c6b821cfdbffbe56f",
"extrinsicsRoot": "0x480781608d53a81287a876ca2ea57e013764f786c31f8606cbeb212b146d14aa",
"digest": {
"logs": [
"0x0642414245b501030b0000008eb6151100000000e65b7d0b72ef8b189d0215e158dd5c76588e474b82a17e51f24ec581deed764313f0531a714c511935b34d3c54df07e67d346a60ef59f117f6ce77125cf0bf0eee40269abadc70052796c7259a9f7f9fd64996c0a9affd2ff1709f5324909909",
"0x044245454684039950151e4e3cf24d3059738b0dfd470a702030dbac21eab570475746b8b38043",
"0x0542414245010136b35069302a31e006977220857f48cadb93a8722df8a106336a2b1d2003ed3ad11b0624a907c2bfa6300f7a97b6bfaef55cc9918f9af27a4067d1557256d385"
]
}
},
"extrinsics": [
"0x280403000b20a0e66c9001",
"0x228402000
...
Step_3: Automatize data gathering
Here's an example code file in Python that can help you out.
Tatum staff does not troubleshoot 3rd party code.
Example code:
import os
import requests
# --- Config ---
API_KEY = os.getenv("YOUR_API_KEY")
API_URL = "https://polkadot-mainnet.gateway.tatum.io"
TIMEOUT = 15 # seconds
HEADERS = {
"Content-Type": "application/json",
"x-api-key": API_KEY, # Required
}
def rpc(method, params=None, req_id=1):
payload = {
"jsonrpc": "2.0",
"method": method,
"params": params or [],
"id": req_id,
}
resp = requests.post(API_URL, json=payload, headers=HEADERS, timeout=TIMEOUT)
resp.raise_for_status()
data = resp.json()
if "error" in data and data["error"]:
raise RuntimeError(f"RPC error: {data['error']}")
return data.get("result")
def get_block_hash(block_number: int | None):
# Polkadot accepts a block number (int) or None for the latest finalized block
return rpc("chain_getBlockHash", [block_number] if block_number is not None else [])
def get_block_extrinsics(block_hash: str):
result = rpc("chain_getBlock", [block_hash]) or {}
return (result.get("block") or {}).get("extrinsics", [])
def main():
block_number = 21_453_172
extrinsic_index = 2
try:
block_hash = get_block_hash(block_number)
print(f"Block hash for block {block_number}: {block_hash}")
if not block_hash:
print(f"Block hash for block {block_number} not found")
return
extrinsics = get_block_extrinsics(block_hash)
if not extrinsics:
print(f"No extrinsics found for block {block_number} ({block_hash})")
return
if 0 <= extrinsic_index < len(extrinsics):
print(f"Extrinsic[{extrinsic_index}]: {extrinsics[extrinsic_index]}")
else:
print(f"Extrinsic index {extrinsic_index} out of range (len={len(extrinsics)})")
except requests.exceptions.Timeout:
print("Timeout contacting Gateway. Consider retry/backoff.")
except requests.exceptions.HTTPError as e:
print(f"HTTP error {e.response.status_code}: {e.response.text}")
except Exception as e:
print(f"Unhandled error: {e}")
if __name__ == "__main__":
main()
Updated 24 days ago