state_getMetadata - Astar RPC Method
Get runtime metadata on Astar. Essential for decoding storage, building extrinsics, and discovering available pallets and calls on Polkadot's leading dApp hub supporting EVM, WASM, and upcoming PolkaVM environments.
Returns the runtime metadata for Astar as a SCALE-encoded hex string. Metadata describes all available pallets, storage items, calls, events, errors, and type definitions — everything needed to interact with the chain programmatically.
Why Astar? Build on Polkadot's leading dApp hub supporting EVM, WASM, and upcoming PolkaVM environments with EVM + WASM + PolkaVM support, Build2Earn developer rewards, dApp Staking, and Soneium cross-layer integration.
When to Use This Method
state_getMetadata is essential for multi-chain dApp developers, DeFi builders, and teams leveraging Polkadot + Ethereum ecosystems:
- Runtime Introspection — Discover available pallets, calls, and storage items on Astar
- Extrinsic Building — Get call signatures and type information for constructing transactions for cross-chain DeFi, multi-VM smart contracts, and XCM-enabled interoperability with Ethereum and Cosmos
- Storage Key Generation — Build correct storage keys from metadata type definitions
- Client Generation — Auto-generate typed APIs and SDKs from the runtime metadata
- Upgrade Awareness — Detect metadata changes after runtime upgrades
Code Examples
Common Use Cases
1. Discover Available Pallets and Calls
Explore what functionality is available on Astar:
async function explorePallets(api) {
const metadata = await api.rpc.state.getMetadata();
const pallets = metadata.asLatest.pallets;
for (const pallet of pallets) {
const name = pallet.name.toString();
const hasCalls = pallet.calls.isSome;
const hasStorage = pallet.storage.isSome;
const hasEvents = pallet.events.isSome;
console.log(`${name}: calls=${hasCalls} storage=${hasStorage} events=${hasEvents}`);
}
}2. Build Storage Keys from Metadata
Generate correct storage keys for querying chain state:
import { xxhashAsHex } from '@polkadot/util-crypto';
function buildStorageKey(palletName, storageName) {
const palletHash = xxhashAsHex(palletName, 128);
const storageHash = xxhashAsHex(storageName, 128);
return palletHash + storageHash.slice(2); // Concatenate without duplicate 0x
}
// Example: Build key for System.Account storage
const key = buildStorageKey('System', 'Account');
console.log('Storage prefix key:', key);3. Metadata Version Tracking
Track metadata changes across runtime upgrades on Astar:
async function compareMetadataVersions(api, blockA, blockB) {
const hashA = await api.rpc.chain.getBlockHash(blockA);
const hashB = await api.rpc.chain.getBlockHash(blockB);
const metaA = await api.rpc.state.getMetadata(hashA);
const metaB = await api.rpc.state.getMetadata(hashB);
const palletsA = new Set(metaA.asLatest.pallets.map(p => p.name.toString()));
const palletsB = new Set(metaB.asLatest.pallets.map(p => p.name.toString()));
const added = [...palletsB].filter(p => !palletsA.has(p));
const removed = [...palletsA].filter(p => !palletsB.has(p));
console.log('Added pallets:', added);
console.log('Removed pallets:', removed);
}Error Handling
| Error Code | Description | Solution |
|---|---|---|
| -32603 | Internal error | Node may be syncing — retry with backoff |
| -32602 | Invalid params | Verify block hash is valid hex with 0x prefix |
| -32601 | Method not found | Verify the node supports this RPC method |
| -32005 | Rate limit exceeded | Cache metadata locally — it only changes on runtime upgrades |
Related Methods
state_getRuntimeVersion— Get runtime version (check before re-fetching metadata)state_getStorage— Query storage using keys derived from metadatastate_call— Call runtime APIs described in metadata
state_getStorage
Read a storage value by key on Astar. Query account balances, pallet state, and any on-chain data using SCALE-encoded storage keys for cross-chain DeFi, multi-VM smart contracts, and XCM-enabled interoperability with Ethereum and Cosmos.
state_getRuntimeVersion
Get the runtime version on Astar. Essential for compatibility checking, upgrade detection, and transaction construction on Polkadot's leading dApp hub supporting EVM, WASM, and upcoming PolkaVM environments.