batch.ordofi.network · Robinhood Chain

Opposite trades meet before they touch the pool.

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.

Batcher
checking…
Settlements
on-chain, since deploy
Orders filled
— met a counterparty
Window
300 ms3 blocks of flow per batch

What happens to an order

01

Sign, don't send

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.

02

Net, then route

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.

03

One price, checked on-chain

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.

Recent settlements

From this host's own ledger. netted means at least one order met a counterparty instead of the pool.

WhenPairOrdersNettedResidualTx
loading…

Integrate

Three calls. The order shape is the contract's Order struct; the domain is OrdoBatch v1 on chain 4663 at the contract address.

Contract0xb6e2c8d1f3d15018d295fd7744fdb487bc76232d
Post an orderPOST /order{ order, signature }; empty signature for a deposited order
StatusGET /order/:hash → pending · settling · filled · rejected · expired
HealthGET /health · /stats · /batches
Ether indepositOrder(order){ value } with sellToken = WETH; refund after validTo
Ether outbuyToken = 0x0
ApprovalERC-20 sells: approve the contract once

From code

// 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