On a thin pool a $500 buy moves the price 38%, and the seller one block later moves it back. Both paid for the round trip. Ordo Batch holds orders for 300 ms, nets buyers against sellers of the same token, and sends only the difference to the AMM. Everyone in a batch clears at one price.
An order is an EIP-712 intent: sell exactly this much of one token for at least that much of another, valid for a few seconds. No transaction, no gas. Paying in ether? depositOrder escrows it in the contract and the deposit itself is the authorisation.
Every 300 ms the batcher takes each pair's orders together. Buyers and sellers cancel out peer-to-peer; the residual is priced against the real AMM by simulating the settlement, and the clearing price is set from that answer. Nothing is guessed.
The contract pays every order at the same rate per token, enforces every limit, and then checks per token that it neither lost funds nor kept more than 30 bps of what passed through. The batcher takes 10 bps of what the AMM delivered; a perfect net pays nothing.
From this host's own ledger. netted means at least one order met a counterparty instead of the pool.
| When | Pair | Orders | Netted | Residual | Tx |
|---|---|---|---|---|---|
| loading… | |||||
Three calls. The order shape is the contract's Order struct; the domain is OrdoBatch v1 on chain 4663 at the contract address.
| Contract | 0xb6e2c8d1f3d15018d295fd7744fdb487bc76232d |
|---|---|
| Post an order | POST /order — { order, signature }; empty signature for a deposited order |
| Status | GET /order/:hash → pending · settling · filled · rejected · expired |
| Health | GET /health · /stats · /batches |
| Ether in | depositOrder(order){ value } with sellToken = WETH; refund after validTo |
| Ether out | buyToken = 0x0 |
| Approval | ERC-20 sells: approve the contract once |
// viem — sign an intent and post it const order = { owner, receiver: "0x0000000000000000000000000000000000000000", sellToken: WETH, buyToken: TOKEN, sellAmount: "2000000000000000", // 0.002 ETH, as WETH minBuyAmount: "0", // your slippage floor validTo: now + 30, nonce: Date.now(), appData: "0x…", // your app id, 32 bytes }; const signature = await wallet.signTypedData({ domain: { name: "OrdoBatch", version: "1", chainId: 4663, verifyingContract: "0xb6e2c8d1f3d15018d295fd7744fdb487bc76232d" }, types: { Order: [ …owner, receiver, sellToken, buyToken, sellAmount, minBuyAmount, validTo(uint32), nonce, appData(bytes32) ] }, primaryType: "Order", message: order, }); const { orderHash } = await fetch("https://batch.ordofi.network/order", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ order, signature }), }).then(r => r.json()); // then poll /order/{orderHash} — filled in about a window