author_submitAndWatchExtrinsic - Asset Hub RPC Method
Submit extrinsic and watch for status updates on Asset Hub. Track transaction lifecycle from submission to finalization.
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 native stablecoin transfers (USDC, USDT), DOT staking and governance, and cross-chain asset management via XCM
- UI feedback - Show users real-time transaction status
- Confirmation workflows - Wait for specific finality level before proceeding
Request Parameters
SCALE-encoded signed extrinsic
Response Body
In future queue (nonce too high)
In ready queue, waiting for block
Broadcast to peers
Included in block (hash provided)
Block retracted (reorg)
Finality timeout
Finalized in block (hash provided)
Replaced by another extrinsic
Dropped from pool
Invalid extrinsic
Code Examples
import { ApiPromise, WsProvider, Keyring } from '@polkadot/api';
const provider = new WsProvider('wss://api-asset-hub-polkadot.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();
}
});import asyncio
import websockets
import json
async def submit_and_watch(signed_extrinsic_hex):
uri = 'wss://api-asset-hub-polkadot.n.dwellir.com/YOUR_API_KEY'
async with websockets.connect(uri) as ws:
# Submit and subscribe
await ws.send(json.dumps({
'jsonrpc': '2.0',
'method': 'author_submitAndWatchExtrinsic',
'params': [signed_extrinsic_hex],
'id': 1
}))
# Get subscription ID
response = json.loads(await ws.recv())
if 'error' in response:
print(f"Error: {response['error']}")
return
sub_id = response['result']
print(f'Watching with subscription: {sub_id}')
# Listen for status updates
while True:
message = json.loads(await ws.recv())
if 'params' in message:
status = message['params']['result']
print(f"Status: {status}")
# Check for finalization
if isinstance(status, dict) and 'finalized' in status:
print(f"Finalized in: {status['finalized']}")
break
# asyncio.run(submit_and_watch('0x...'))Status Flow
ready → broadcast → inBlock → finalized
↘ retracted (if reorg)Related Methods
author_submitExtrinsic- Submit without watching (fire-and-forget)author_pendingExtrinsics- View transaction poolpayment_queryInfo- Estimate fees before submission