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
| Phase | Duration | Description |
|---|---|---|
pending | 0-5 seconds | Order received, awaiting submission |
submitted | 5-15 seconds | Transaction broadcast to MEV Blocker |
mining | 15-45 seconds | Included in block builder auction |
confirmed | Terminal | Transaction mined and confirmed |
failed | Terminal | Transaction reverted or rejected |
Recommended Polling Configuration
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:
- Explore the API Endpoints documentation
- Test your integration with our wrap endpoints
- Review Essential Concepts for advanced features
Previous: Step 4: Sign & Submit
Last updated on