chain_getBlock - JSON-RPC Method
Description#
Retrieves complete block information from Bridge Hub on Polkadot, including the block header, extrinsics, and justifications. When called without parameters, returns the latest block.
Parameters#
| Parameter | Type | Required | Description |
|---|---|---|---|
blockHash | string | No | Hex-encoded block hash. If omitted, returns the latest block |
Returns#
| Field | Type | Description |
|---|---|---|
block | object | Complete block data |
block.header | object | Block header information |
block.header.parentHash | string | Hash of the parent block |
block.header.number | string | Block number (hex-encoded) |
block.header.stateRoot | string | Root of the state trie |
block.header.extrinsicsRoot | string | Root of the extrinsics trie |
block.header.digest | object | Block digest items |
block.extrinsics | array | Array of extrinsics in the block |
justifications | array | Block justifications (if available) |
Request Example#
{
"jsonrpc": "2.0",
"method": "chain_getBlock",
"params": [
"0x9314b38bdbb6643dea0a0b07d429125bbee36a06d1f3cd27dd355034b4d216df"
],
"id": 1
}
Response Example#
{
"jsonrpc": "2.0",
"result": {
"block": {
"header": {
"parentHash": "0x41296ba787b1471e7beebabc08c378c64d75a0f193b43015365821f8eb447a7c",
"number": "0x5db7cf",
"stateRoot": "0x8f675b6fa599121e9e0ebec5f851810b2e8eef6014970d88fc8625371ae1c143",
"extrinsicsRoot": "0xccfb9fa9a36137396b7862426296fb80a06c4bd00638ef63f9e1624b2cc5c215",
"digest": {
"logs": [
"0x06617572612074b0bd0800000000",
"0x04525053529064b2aa67a8d06301616a65997cbfe8355ca9c74128a13b61e403ebef5a79232f8e28b206",
"0x0561757261010180c0dceb7d001a7b74e39896b026c88b5e4745fcc967e66268966b545c8e0450098d06ea73464994a1e0e5f7637dcd9891ea3d6962e6a1016395b153b474d68e"
]
}
},
"extrinsics": [
"0x39b40501009103a3b5b1745c4a01e96ed5ce66aa6246c78741aa5817fc07dd83a266060d38c0553adf7601bf1431b7f7ead1d1aba3545a35fd6e622b7c2016f5868d84131cbc13e5a76ad65fb4b45b4d5ed9261391af6b4190e914fa9d82b4d95424ec7f8016d91e183c5f0c06617572612073b0bd08000000000452505352902c35df432aadd9685757791f0be0eb95a891627699dd09b589f04bdb87341abf8628b20605617572610101d4820e4f7a8e031a1b9f6376629d1baf160400cf717144398fe2275c20a9a02fd4abb1e5874582e54e72b6c21fb14727cdeb310433bfa833ccad97fcd946e28a238aac0164b2aa67a8d06301616a65997cbfe8355ca9c74128a13b61e403ebef5a79232f0000a000fcb9030000300000500000aaaa020000001000fbff0000100000000a000000403800005802000003000000020000000000a00000c800008000000000e8764817000000000000000000000000e87648170000000000000000000000190000000090010080000000009001000c01002000000600c4090000000000000601983a0000000000004038000000060000005802000003000000d5000000000000001e00000006000000020000001400000002000000100b060000000a0000000a0000000105000000030000006400000000000000f401000080b2e60e80c3c90180b2e60e000000000000000000000000050000008401fd7194e3416a6090d1917f5661657d07d52165a77611df03abcced475083ca4bb036b032492225337bea03000071fbfbb918bacf227953c8567eba8869d613841fd79f720fd8897578d9f7c881c03d001d9a75043f08e9030000ea03000023328f6edc674d6a3fd5e369152db3b221bab99d3ca4e90eccb1cc01daa71a71c03d04824480100ffdea030000ee070000beb5856a65ca950504a12ffe9e803548be62bc2a7d840e4beaed4779d2549a6cc03d08d9e5128d9722ee070000ea030000beb5856a65ca950504a12ffe9e803548be62bc2a7d840e4beaed4779d2549a6cc03e7417395fc0bddfea030000e80300004ecfabc3720895133e2a90958ee1a3b1d073c693a168c401f172898606724257c03e77dfdb8adb10f78f10a5df8742c5458518b15a075a99ee56bb8438e4f2ff34b9b8d64dca0083e3d25c2288318e8576c03e7d99738139957de8030000ea030000741da300d0ac0d10f2849630af4568c92e4e826ea40d351e6979ede1690db2f3c03ea19074328a8894ea030000e9030000d9ea4c6046178c856ba46c0e96555ab270ac5a44dd5218b7fec86f7ba9dd9eb5c83f0004b49d95320d9021994c850f25b8e38502cda302d8b532d84c30a8fc5ca9b8f01502c3db9fc2435ea7be77cff4dd9a2fb456b032492225337bea030000804974b1283194b62bb964242080c5491aecdc1ab52ad020df87fe9df80bf21704c45e414cb008e0e61e46722aa60abdd672802063c75de2dcd40259f11498fa37aa66a31ea4c6cce4eea6cee696e5418084aec45ee678799d3eff024253b90e84927cc68075f728134986ad104de48288fb0ce6bdbdfc90ac133a4a950636ce57e862f45b150180000a8014189be206978184f669566a2a5de7667e91b813f2a5d1268130e35d08a4f9ed80d20babbebba347d5b5ed67e6f3687d044109bc19ea454cc8994721930f0f0eb41501800014803da2a34fa60f0105a78f07450f996aec35df05420b1bbbc1e526a7d0728fffe2805a58387986ece2c036e78be12e2d11f62ff85eacc787e0906e1b578860f710a515018000818001319274ff1dd99c50ddee9a8c7a20ff36339617f472cad76e2f5b9655b29e4380089e9d1fe4ad1960df04a16ef373dbf9d901558488d27d2d7abb7e5ec60cbaefd48000c0787694c040f5e73d9b7addd6cb603d15d3b0021d9da3ceafbd080d00000401485e4993f016e2d2f8e5f43be7bb2594860400150180011080471957f5c3c09f3a55dac9e2eabaf0b99467684324164803d192ba22a9d8045c800ebe650369ce0e3ce85b22816181f598cc6ecf7a3b22314357ab4181b9ccb867150180011080829812850c473f13d1646e55a85a620b32f365a468aad0ea2613f67befad56718005380504217e5d2988fa4b8aa2bfb3b5d43462aad8f36dcf32edfeb785ee80f61501800404806f7479d6cfab18237866c6bd2af256dd844785fb57145637062066fede579dc2800fe6b03639ff2739e42b263a64b97458bbb7b04a7f13a7dd10b77ba5c3d3940edc80082080d720e5cc6b8e898df5a1491459cee4b653608cc5de64dc656b77e8ec9ac8c674485ead6eef5c4b1c68eaa71ea17a02d9de040055028008f7344607000020aaaa020000001000344603000020aaaa02000000100078810088003044000020aaaa0200000010003044000020aaaa02000000100078810088003044000020aaaa0200000010003044000020aaaa020000001000344603000020aaaa020000001000344603000020aaaa020000001000344607000020aaaa020000001000344607000020aaaa020000001000a102800aa480d6271a4c2a039dde0fa546dc399ed48e95a8fb69893042beeea184dd1d9f3b488066e3dedbe0e6a857e5554b85a2eee637431f536c4bbca535c614c0914a54f7bf8047c4488c6ec74d2060fc2b18e817f36cf3112d665bb3bbdbc24368790488fe808029a0f9925675371da422f596c454659a4fcb428f241282acd883638a4c83317580fe322d9ed6c2098a52e247d87839fc11d034b84abb68382756bb84dc4106d6c3a102800b2280485b85907e2140bacc12c4328a1137f813314749fa2454f75ea3a4e8c686db7a806b21fa820679a04beb27d0dd646fbc251352cd5a960da5d135c6c58a7f1c74fa80563e04bd9329fd6fc66e34dc10f1a3e505981ef64489609c9ff72cb79c159f3b80d457252c61dd1b8536300143c532bc0e0e6c71a391025553b36f354e9c5ea08c80594f552040e1f582ab7219d6bc714b263af07f6b72e84c539b434a67eacab2a3a10280101780f00e5e1e880bae5dd5d10738a07f4dcf9d17390627f41c90ab83277a305954a1802add2859e49f7706414cad5873c7ae6fc7cd78a7f1589f95c4c22579f7c29bc6809736e4028d336c849ddc802"]
]
},
"justifications": null
},
"id": 1
}
Tip: The example uses finalized Bridge Hub block
0x5db7cf(decimal 6,141,903). Replace the hash with a newer finalized head when you need the latest state.
Code Examples#
- cURL
- Python
- JavaScript
- TypeScript (@polkadot/api)
# Get latest block
curl https://api-bridge-hub-polkadot.n.dwellir.com/YOUR_API_KEY \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "chain_getBlock",
"params": [],
"id": 1
}'
# Get specific block
curl https://api-bridge-hub-polkadot.n.dwellir.com/YOUR_API_KEY \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "chain_getBlock",
"params": ["0x9314b38bdbb6643dea0a0b07d429125bbee36a06d1f3cd27dd355034b4d216df"],
"id": 1
}'
import requests
import json
def get_block(block_hash=None):
url = "https://api-bridge-hub-polkadot.n.dwellir.com/YOUR_API_KEY"
headers = {
"Content-Type": "application/json"
}
params = [block_hash] if block_hash else []
payload = {
"jsonrpc": "2.0",
"method": "chain_getBlock",
"params": params,
"id": 1
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
data = response.json()
if "error" in data:
raise Exception(f"RPC Error: {data['error']}")
return data["result"]
# Get latest block
latest_block = get_block()
block_number = int(latest_block["block"]["header"]["number"], 16)
print(f"Latest block number: {block_number}")
# Get specific block
specific_block = get_block("0x9314b38bdbb6643dea0a0b07d429125bbee36a06d1f3cd27dd355034b4d216df")
print(f"Extrinsics count: {len(specific_block['block']['extrinsics'])}")
const getBlock = async (blockHash = null) => {
const params = blockHash ? [blockHash] : [];
const response = await fetch('https://api-bridge-hub-polkadot.n.dwellir.com/YOUR_API_KEY', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
jsonrpc: '2.0',
method: 'chain_getBlock',
params: params,
id: 1
})
});
const data = await response.json();
return data.result;
};
// Get latest block
const latestBlock = await getBlock();
console.log('Latest block number:', parseInt(latestBlock.block.header.number, 16));
// Get specific block
const specificBlock = await getBlock('0x9314b38bdbb6643dea0a0b07d429125bbee36a06d1f3cd27dd355034b4d216df');
console.log('Block extrinsics:', specificBlock.block.extrinsics);
import { ApiPromise, WsProvider } from '@polkadot/api';
async function getBlockData() {
const provider = new WsProvider('wss://api-bridge-hub-polkadot.n.dwellir.com/YOUR_API_KEY');
const api = await ApiPromise.create({ provider });
// Get latest block
const latestHash = await api.rpc.chain.getBlockHash();
const latestBlock = await api.rpc.chain.getBlock(latestHash);
console.log('Latest block:', {
number: latestBlock.block.header.number.toNumber(),
hash: latestHash.toHex(),
extrinsicsCount: latestBlock.block.extrinsics.length
});
// Get block at specific height
const blockHash = await api.rpc.chain.getBlockHash(1000000);
const block = await api.rpc.chain.getBlock(blockHash);
// Parse extrinsics
block.block.extrinsics.forEach((ex, index) => {
console.log(`Extrinsic ${index}:`, ex.toHuman());
});
await api.disconnect();
}
Use Cases#
- Block Explorers: Display block details and transaction history
- Chain Analysis: Analyze block production patterns and extrinsic distribution
- Transaction Verification: Confirm transaction inclusion in specific blocks
- Network Monitoring: Track block production and finalization
- Data Indexing: Build databases of historical blockchain data
Block Structure Details#
Header Fields#
- parentHash: Links blocks in the chain
- number: Sequential block identifier
- stateRoot: Merkle root of all account states
- extrinsicsRoot: Merkle root of all extrinsics
- digest: Contains consensus-related data (BABE, GRANDPA)
Extrinsics#
Each extrinsic in the array is hex-encoded and contains:
- Signature (for signed extrinsics)
- Method call data
- Additional parameters (nonce, tip, mortality)
Related Methods#
chain_getBlockHash- Get block hash by numberstate_getStorage- Query state at specific blockstate_getMetadata- Get runtime metadatasystem_health- Check node sync status
Notes#
- Block numbers are hex-encoded in responses
- Extrinsics are returned as hex-encoded SCALE data
- Justifications are only present for finalized blocks with GRANDPA proofs
- Latest block may not be finalized - use
chain_getFinalizedHeadfor finalized blocks - Block data can be large - consider using
chain_getHeaderif only header is needed