author_submitAndWatchExtrinsic - JSON-RPC Method
Description#
Submits a signed extrinsic to the Acala network and establishes a WebSocket subscription to receive real-time status updates throughout the extrinsic's lifecycle. This method combines transaction submission with continuous monitoring, allowing applications to track the extrinsic from initial submission through validation, pool inclusion, block incorporation, and final finalization. The subscription remains active until the transaction is finalized or dropped, providing comprehensive visibility into transaction processing.
Connection Requirements#
This method requires a WebSocket connection to function properly. Standard HTTP requests cannot be used as the method needs to maintain a persistent connection for delivering status updates. Ensure your application establishes a WebSocket connection before calling this method.
Code Example#
const unsub = await api.rpc.author.submitAndWatchExtrinsic(signed, (status) => {
console.log('Status:', status.toJSON());
if (status.isFinalized) {
console.log('Finalized in block:', status.asFinalized.toHex());
unsub(); // Unsubscribe after finalization
}
});
Parameters#
| Parameter | Type | Description |
|---|---|---|
| extrinsic | string | SCALE-encoded signed extrinsic in hexadecimal format |
Status Updates#
The subscription callback receives status objects indicating the extrinsic's current state:
- Ready: Extrinsic is in the transaction pool and ready for inclusion
- Broadcast: Extrinsic has been broadcast to peer nodes
- InBlock: Extrinsic is included in a block (not yet finalized)
- Finalized: Extrinsic is in a finalized block (irreversible)
- Invalid: Extrinsic validation failed
- Dropped: Extrinsic was removed from the pool
- Usurped: A newer extrinsic with the same nonce replaced this one
Use Cases#
- Transaction Tracking: Provide real-time transaction status updates in user interfaces
- Confirmation Waiting: Wait for transaction finalization before executing dependent operations
- Error Handling: Detect and respond to transaction failures or drops immediately
- Analytics: Monitor transaction processing times and success rates
- Smart Contract Interactions: Track multi-step contract operations with accurate status reporting
Best Practices#
Always implement proper cleanup by calling the unsubscribe function when you no longer need status updates, especially after finalization. This prevents memory leaks and unnecessary WebSocket traffic. Handle all possible status types in your callback to ensure robust error handling. Consider implementing timeout logic to handle cases where transactions remain stuck in the pool.
Related Methods#
author_submitExtrinsic- Submit an extrinsic without watching (fire and forget)author_pendingExtrinsics- Query current transaction pool statechain_getFinalizedHead- Get latest finalized block