Use this file to discover all available pages before exploring further.
Order tracking is essential for monitoring the progress of cross-chain swaps and ensuring secrets are submitted at the right time. This guide covers the order lifecycle, status checking, and secret management.
Once escrows are deployed, submit the corresponding secrets:
for (const { idx } of secretsToShare.fills) { // Verify escrow details before submitting await sdk.submitSecret(orderHash, secrets[idx]) console.log(`Submitted secret ${idx}`)}
Always verify escrow addresses and parameters before submitting secrets. The getReadyToAcceptSecretFills() response includes escrow details for verification.
Here’s a complete example of monitoring an order and submitting secrets:
import { SDK, OrderStatus } from '@1inch/cross-chain-sdk'async function monitorOrder( sdk: SDK, orderHash: string, secrets: string[]): Promise<void> { const alreadyShared = new Set<number>() while (true) { // Check for ready escrows const secretsToShare = await sdk.getReadyToAcceptSecretFills(orderHash) // Submit new secrets if (secretsToShare.fills.length) { for (const { idx } of secretsToShare.fills) { if (!alreadyShared.has(idx)) { // It is your responsibility to verify escrow addresses await sdk.submitSecret(orderHash, secrets[idx]) alreadyShared.add(idx) console.log(`Submitted secret ${idx}`) } } } // Check order status const { status } = await sdk.getOrderStatus(orderHash) console.log('Current status:', status) // Exit when order is complete if ( status === OrderStatus.Executed || status === OrderStatus.Expired || status === OrderStatus.Refunded ) { console.log('Order completed with status:', status) break } // Wait before next check await new Promise(resolve => setTimeout(resolve, 1000)) }}// Usageawait monitorOrder(sdk, orderHash, secrets)
try { await sdk.submitSecret(orderHash, secrets[idx])} catch (error) { if (error.code === 'ALREADY_SUBMITTED') { console.log('Secret already submitted, skipping') } else if (error.code === 'ESCROW_NOT_READY') { console.log('Escrow not ready yet, will retry') } else { console.error('Failed to submit secret:', error) // Decide whether to retry or abort }}
Track submitted secrets to avoid duplicates:
const alreadyShared = new Set<number>()// Before submittingif (!alreadyShared.has(idx)) { await sdk.submitSecret(orderHash, secrets[idx]) alreadyShared.add(idx) // Mark as submitted}// Or use a more detailed tracking structureconst secretStatus = new Map<number, { submitted: boolean submittedAt?: Date retries: number}>()
Orders expire if not completed within the time limit:
const { status } = await sdk.getOrderStatus(orderHash)if (status === OrderStatus.Expired) { console.log('Order expired - checking for refund') // Check if source funds were refunded // Notify user to retry the swap}