Docs

author_pendingExtrinsics - Kusama RPC Method

Get pending extrinsics in the transaction pool on Kusama. Monitor mempool activity, verify transaction submission, and analyze network congestion.

Returns all pending extrinsics currently in the transaction pool on Kusama. These are signed extrinsics that have been submitted but not yet included in a finalized block.

Why Kusama? Build on Polkadot's canary network for real-world testing with live economic conditions with 7-day governance cycles (vs 1 month on Polkadot), lower bonding requirements, live KSM token economy, and first-to-market feature testing.

When to Use This Method

author_pendingExtrinsics is essential for experimental dApp developers, parachain teams, and early adopters validating new features:

  • Transaction Confirmation -- Verify whether a submitted extrinsic is still pending or has been included in a block on Kusama
  • Mempool Monitoring -- Monitor the transaction pool size and activity for parachain experimentation, early feature deployment, and production-grade testing with real value
  • Network Congestion Analysis -- Gauge current network load by inspecting the number and type of pending extrinsics
  • Validator Tooling -- Build block authoring tools that inspect the ready queue before producing blocks

Code Examples

Common Use Cases

1. Transaction Pool Monitor

Continuously monitor the Kusama transaction pool and alert on unusual activity:

JavaScript
import { ApiPromise, WsProvider } from '@polkadot/api';

async function monitorPool(api, interval = 6000) {
  let previousCount = 0;

  setInterval(async () => {
    const pending = await api.rpc.author.pendingExtrinsics();
    const count = pending.length;

    if (count !== previousCount) {
      console.log(`Pool size changed: ${previousCount} -> ${count}`);

      if (count > 100) {
        console.warn('High pool activity detected!');
      }
    }

    // Analyze pending extrinsic types
    const byPallet = {};
    pending.forEach((ext) => {
      const key = `${ext.method.section}.${ext.method.method}`;
      byPallet[key] = (byPallet[key] || 0) + 1;
    });

    if (Object.keys(byPallet).length > 0) {
      console.log('Pending by type:', byPallet);
    }

    previousCount = count;
  }, interval);
}

2. Verify Transaction Submission

Check that a submitted extrinsic appears in the pool:

JavaScript
async function verifyInPool(api, txHash) {
  const pending = await api.rpc.author.pendingExtrinsics();

  const found = pending.find((ext) => ext.hash.toHex() === txHash);

  if (found) {
    console.log(`Transaction ${txHash} is in the pool`);
    console.log(`  Call: ${found.method.section}.${found.method.method}`);
    return true;
  }

  console.log(`Transaction ${txHash} not found in pool (may already be included)`);
  return false;
}

3. Pool Congestion Analysis

Analyze network congestion to decide on tip amounts:

JavaScript
async function analyzeCongestion(api) {
  const pending = await api.rpc.author.pendingExtrinsics();

  const tips = pending.map((ext) => ext.tip.toBigInt());
  const totalTips = tips.reduce((sum, tip) => sum + tip, 0n);
  const avgTip = tips.length > 0 ? totalTips / BigInt(tips.length) : 0n;
  const maxTip = tips.length > 0 ? tips.reduce((a, b) => (a > b ? a : b), 0n) : 0n;

  return {
    poolSize: pending.length,
    averageTip: avgTip.toString(),
    maxTip: maxTip.toString(),
    congested: pending.length > 50
  };
}

Error Handling

Common errors and solutions:

Error CodeDescriptionSolution
-32603Internal errorNode may be starting up -- retry after delay
-32005Rate limit exceededReduce polling frequency; the pool changes only each block
Connection refusedNode unreachableVerify the RPC endpoint URL and that the node is running
Empty arrayNo pending extrinsicsNormal when the pool is idle -- not an error