⚠️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 - JSON-RPC Method

Description

Sends a signed extrinsic to the Enjin Matrix transaction pool and establishes a subscription that streams status updates (e.g., Ready, InBlock, Finalized). This method is useful for client-side UX, backend job orchestration, or exchange integrations that must confirm inclusion and finality.

Parameters

ParameterTypeRequiredDescription
extrinsicstringYesSigned, SCALE-encoded extrinsic

Returns

The subscription ID is returned immediately. Subsequent notifications carry status updates.

Request Example

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

Sample Notifications

{
"jsonrpc": "2.0",
"method": "author_extrinsicUpdate",
"params": {
"subscription": "0x0000000000000001",
"result": { "status": "Ready" }
}
}
{
"jsonrpc": "2.0",
"method": "author_extrinsicUpdate",
"params": {
"subscription": "0x0000000000000001",
"result": {
"status": {
"InBlock": "0x1873093eade39aa409f64537dd972c27156e4691fc0fda227a06d50c52ad5fef"
}
}
}
}
{
"jsonrpc": "2.0",
"method": "author_extrinsicUpdate",
"params": {
"subscription": "0x0000000000000001",
"result": {
"status": {
"Finalized": "0x1873093eade39aa409f64537dd972c27156e4691fc0fda227a06d50c52ad5fef"
}
}
}
}

To stop receiving updates, call author_unwatchExtrinsic with the subscription ID.

Code Examples

JavaScript (Polkadot.js)

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

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

const unsub = await api.tx.balances
.transfer('efS1ZdvCHHviX7qnTGZEZQX9Uz3qpibG9L5RpF9niM8ne5RBn', 10 ** 18)
.signAndSend(signer, ({ status }) => {
if (status.isInBlock) {
console.log('Included at', status.asInBlock.toHex());
} else if (status.isFinalized) {
console.log('Finalized at', status.asFinalized.toHex());
unsub();
}
});

WebSocket Flow

ws.send(JSON.stringify({
jsonrpc: '2.0',
id: 1,
method: 'author_submitAndWatchExtrinsic',
params: ['0xSIGNED_EXTRINSIC']
}));

// ...process notifications...

ws.send(JSON.stringify({
jsonrpc: '2.0',
id: 2,
method: 'author_unwatchExtrinsic',
params: ['0x0000000000000001']
}));

Best Practices

  • Always unsubscribe after finality to prevent resource leaks.
  • Combine with payment_queryInfo and feeMultiplier monitoring to surface fee information alongside status updates.
  • Retry submissions with exponential backoff when the subscription returns an error payload.