Skip to Content
Integration Guide5. Monitor Transaction

Step 5: Transaction Monitoring & Status Tracking

Poll the order status endpoint every 10 seconds until the transaction reaches a terminal state (confirmed or failed).

Order Status Polling Implementation

async function waitForConfirmation(orderId) { while (true) { const response = await fetch( `https://api.unikron.ch/api/v1/mev/orders/${orderId}`, { headers: { "X-API-Key": "YOUR_KEY" } } ); const { ok, data } = await response.json(); // Log current transaction state console.log(`ORDER_STATUS: ${data.status.toUpperCase()}`); console.log(`TIMESTAMP: ${new Date().toISOString()}`); // Terminal states if (data.status === "confirmed") { console.log(`TRANSACTION_CONFIRMED: ${data.txHash}`); console.log(`BLOCK_NUMBER: ${data.blockNumber}`); console.log(`ETHERSCAN_URL: https://etherscan.io/tx/${data.txHash}`); return { success: true, txHash: data.txHash, blockNumber: data.blockNumber, gasUsed: data.gasUsed, effectiveGasPrice: data.effectiveGasPrice, }; } if (data.status === "failed") { console.error(`TRANSACTION_FAILED: ${data.error}`); console.error(`FAILURE_REASON: ${data.revertReason || "Unknown"}`); throw new Error(`Transaction failed: ${data.error}`); } // Polling interval: 10 seconds (complies with rate limits) await new Promise((resolve) => setTimeout(resolve, 10000)); } } await waitForConfirmation(order.orderId);

Transaction Lifecycle

PhaseDurationDescription
pending0-5 secondsOrder received, awaiting submission
submitted5-15 secondsTransaction broadcast to MEV Blocker
mining15-45 secondsIncluded in block builder auction
confirmedTerminalTransaction mined and confirmed
failedTerminalTransaction reverted or rejected

Best Practice Configuration:

const POLLING_CONFIG = { interval: 10000, // 10 seconds (rate limit compliant) timeout: 300000, // 5 minutes maximum wait maxRetries: 3, // Retry failed API calls exponentialBackoff: true, };

Enterprise Monitoring Integration

// Example: DataDog/NewRelic integration async function monitorTransaction(orderId) { const startTime = Date.now(); try { const result = await waitForConfirmation(orderId); // Success metrics metrics.recordTransactionSuccess({ orderId, duration: Date.now() - startTime, gasUsed: result.gasUsed, effectiveGasPrice: result.effectiveGasPrice, }); return result; } catch (error) { // Failure metrics and alerting metrics.recordTransactionFailure({ orderId, error: error.message, duration: Date.now() - startTime, }); alerts.trigger("transaction_failed", { orderId, error }); throw error; } }

Congratulations! You’ve completed the integration guide.

Next steps:

Previous: Step 4: Sign & Submit

Last updated on