Skip to main content

author_submitAndWatchExtrinsic

Submit a signed extrinsic to and subscribe to status updates. This WebSocket method provides real-time feedback on transaction progress from submission through finalization.

Use Cases#

  • Transaction tracking - Monitor extrinsic lifecycle for decentralized AI inference, subnet-specific AI models, TAO staking, and cross-subnet AI collaboration
  • UI feedback - Show users real-time transaction status
  • Confirmation workflows - Wait for specific finality level before proceeding

Parameters#

ParameterTypeRequiredDescription
extrinsicBytesYesSCALE-encoded signed extrinsic

Returns#

Returns a subscription that emits ExtrinsicStatus updates:

StatusDescription
futureIn future queue (nonce too high)
readyIn ready queue, waiting for block
broadcastBroadcast to peers
inBlockIncluded in block (hash provided)
retractedBlock retracted (reorg)
finalityTimeoutFinality timeout
finalizedFinalized in block (hash provided)
usurpedReplaced by another extrinsic
droppedDropped from pool
invalidInvalid extrinsic

Code Examples#

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

const provider = new WsProvider('wss://api-bittensor-mainnet.n.dwellir.com/YOUR_API_KEY');
const api = await ApiPromise.create({ provider });
const keyring = new Keyring({ type: 'sr25519' });

// Create and sign a transfer
const sender = keyring.addFromUri('//Alice');
const transfer = api.tx.balances.transferKeepAlive(
'5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty',
1000000000000n
);

// Submit and watch
const unsub = await transfer.signAndSend(sender, ({ status, events }) => {
console.log(`Status: ${status.type}`);

if (status.isInBlock) {
console.log(`Included in block: ${status.asInBlock.toHex()}`);
}

if (status.isFinalized) {
console.log(`Finalized in block: ${status.asFinalized.toHex()}`);
unsub();
}
});

Status Flow#

ready → broadcast → inBlock → finalized
↘ retracted (if reorg)