Skip to content

generateOrder

The generateOrder function implements a common flow to open and track the status of an order on a SolverNet inbox contract, by combining single-purpose functions:

  1. Validating the order, using validateOrder
  2. Sending the order transaction, using sendOrder
  3. Waiting for the order to be open on the blockchain, using waitForOrderOpen
  4. Waiting for the order reach a terminal state, using waitForOrderClose

Usage

import { generateOrder } from '@omni-network/core'

import { generateOrder } from '@omni-network/core'
 
const generator = await generateOrder({
  // ... params
});

Parameters

PropTypeRequiredDescription
clientClientYesThe viem client used to send the transaction. This client must have an account attached to it.
inboxAddressAddressYesThe address of the inbox contract, retrieved using the getContracts function.
orderOrderYesOrder parameters
pollingintervalnumberNoPolling interval in milliseconds, defaults to the client polling interval.
environmentEnvironmentNoSolverNet environment to use, either mainnet (default) or testnet.

Return

generateOrder returns an AsyncGenerator of OrderState objects through the order flow.

OrderState

type OrderState =
  | { status: 'valid'; txHash?: never; order?: never }
  | { status: 'sent'; txHash: Hex; order?: never }
  | { status: 'open'; txHash: Hex; order: ResolvedOrder }
  | { status: TerminalStatus; txHash: Hex; order: ResolvedOrder }

Example

import { type OrderState, getContracts, generateOrder } from '@omni-network/core'
 
const contracts = await getContracts()
const generator = generateOrder({
  client: viemWalletClient,
  inboxAddress: contracts.inbox,
  order: orderParams,
})
 
let orderState: OrderState | undefined
for await (orderState of generator) {
  console.log('current order state', orderState)
}
console.log('terminal order state', orderState)