Docs

state_getMetadata - Mythos RPC Method

Get runtime metadata on Mythos. Essential for decoding storage, building extrinsics, and discovering available pallets and calls on the gaming blockchain powering FIFA Rivals and NFL Rivals with World ID verification.

Returns the runtime metadata for Mythos 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 Mythos? Build on the gaming blockchain powering FIFA Rivals and NFL Rivals with World ID verification with World ID proof-of-humanity, Polkadot security, Snowbridge cross-chain bridge, and 1M+ downloads per title.

When to Use This Method

state_getMetadata is essential for game studios, player-driven economy builders, and teams requiring verified human-only gameplay:

  • Runtime Introspection — Discover available pallets, calls, and storage items on Mythos
  • Extrinsic Building — Get call signatures and type information for constructing transactions for AAA gaming (FIFA Rivals, NFL Rivals, Pudgy Party), player-owned economies, and bot-resistant matchmaking
  • 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 Mythos:

JavaScript
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:

JavaScript
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 Mythos:

JavaScript
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 CodeDescriptionSolution
-32603Internal errorNode may be syncing — retry with backoff
-32602Invalid paramsVerify block hash is valid hex with 0x prefix
-32601Method not foundVerify the node supports this RPC method
-32005Rate limit exceededCache metadata locally — it only changes on runtime upgrades