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
Parameter | Type | Required | Description |
---|---|---|---|
extrinsic | string | Yes | Signed, 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
andfeeMultiplier
monitoring to surface fee information alongside status updates. - Retry submissions with exponential backoff when the subscription returns an error payload.