submitAndWaitForFinalization

abstract suspend fun submitAndWaitForFinalization(serializedTxHex: String, timeoutMs: Long, onStage: suspend (NodeRpcClient.SubmissionStage) -> Unit? = null): TransactionFinalizationResult

Submit a transaction and wait for it to be finalized on-chain.

This is the correct method for transaction submission. Uses WebSocket subscription to wait for the node's finalized status.

Process:

  1. Connect to node via WebSocket

  2. Send author_submitAndWatchExtrinsic request

  3. Subscribe to transaction status events

  4. Wait for finalized status from node

  5. Return finalization result

Transaction Status Flow:

ready → broadcast → inBlock → finalized

Why this is important:

  • submitTransaction returns immediately (fire-and-forget)

  • The transaction may not yet be in a block

  • Only finalized status guarantees the transaction is permanent

  • Prevents race conditions with UTXO state management

Return

Finalization result with block info

Parameters

serializedTxHex

Hex-encoded serialized transaction (without "0x" prefix)

timeoutMs

Maximum time to wait for finalization (default 60s)

Throws

if network connectivity fails

if finalization times out

if node returns JSON-RPC error

if transaction is invalid (error 115 = stale UTXO)

if response is malformed