⚠️Blast API (blastapi.io) ends Oct 31. Migrate to Dwellir and skip Alchemy's expensive compute units.
Switch Today →
Skip to main content

author_submitAndWatchExtrinsic

Description

Submits a signed extrinsic and subscribes to its lifecycle events (ready, in-block, finalized, dropped). Useful for wallets and services that need confirmation without polling.

Parameters

ParameterTypeRequiredDescription
extrinsicstringYesSCALE-encoded signed extrinsic

Returns

Subscription ID. Status updates are delivered over the same WebSocket connection.

Subscription Example

{
"jsonrpc": "2.0",
"method": "author_submitAndWatchExtrinsic",
"params": [
"0x280402000b60e2739f9901d4b3a0e3b88b7c25215926bbf7c733f5c31e69c0c8c4b4a86d6ec3f3f086e95d00"
],
"id": 1
}

Sample Notifications

{
"jsonrpc": "2.0",
"method": "author_extrinsicUpdate",
"params": {
"result": {
"status": "Ready"
},
"subscription": 1
}
}

{
"jsonrpc": "2.0",
"method": "author_extrinsicUpdate",
"params": {
"result": {
"status": {
"InBlock": "0x65b246e9b69a61f842104a15307ae906013c56a8bb6c942555b1a71424b4bab3"
}
},
"subscription": 1
}
}

{
"jsonrpc": "2.0",
"method": "author_extrinsicUpdate",
"params": {
"result": {
"status": {
"Finalized": "0x0783f5b163e338d4d74a1ee39a0f631bc2dffbd8862460407f6cc97c903194e1"
}
},
"subscription": 1
}
}

Code Examples

JavaScript

const unsub = await api.rpc.author.submitAndWatchExtrinsic(tx, ({ status, events }) => {
if (status.isReady) {
console.log('Submitted');
} else if (status.isInBlock) {
console.log('Included in block', status.asInBlock.toHex());
} else if (status.isFinalized) {
console.log('Finalized in block', status.asFinalized.toHex());
unsub();
}
});

Tips

  • Handle Broadcast or Dropped statuses to surface networking or validation issues to users.
  • To cancel the subscription, call the unsubscribe function returned by the library (e.g., unsub() in polkadot.js).