state_call
Description#
Invokes a runtime API method directly. This is required for advanced features such as Frontier EVM tracing, node benchmarking, or parachain host queries.
Parameters#
| Position | Type | Description |
|---|---|---|
| 0 | string | Runtime API function name (e.g., TransactionPaymentApi_queryInfo) |
| 1 | string | SCALE-encoded parameters |
| 2 (optional) | string | Block hash to execute against |
Example: Query transaction payment info via runtime API#
The runtime exposes TransactionPaymentApi_queryInfo. The first parameter is the encoded extrinsic, the second is the length (u32). The helper below shows how to build the payload using polkadot.js.
import { ApiPromise, WsProvider } from '@polkadot/api';
import { u32 } from '@polkadot/types';
const api = await ApiPromise.create({ provider: new WsProvider('wss://api-astar.n.dwellir.com/YOUR_API_KEY') });
const tx = api.tx.balances.transferKeepAlive(dest, amount);
const encoded = tx.toHex();
const len = api.createType('u32', encoded.slice(2).length / 2).toHex();
const result = await api.rpc.state.call('TransactionPaymentApi_queryInfo', encoded + len.slice(2));
console.log(result.toHuman());
Pitfalls#
- Arguments must be SCALE-encoded and concatenated; use type helpers from polkadot.js or subxt.
- Names are case-sensitive and must match metadata. Enumerate available APIs through
state_getRuntimeVersion().apis. - Public RPC providers may limit heavy runtime calls—run self-hosted nodes for profiling.