Dual Flow Batch Auction. CEX-quality execution, Canton-native settlement.
Every batch runs two parallel auctions. Orders collect inside a time window. When it closes, the engine splits orders by role (makers never cross makers, takers never cross takers) and runs a bid auction and an ask auction side-by-side. Each finds its own clearing price.
A batch is the window of collected orders. Inside it, the bid auction matches maker buys with taker sells; the ask auction matches maker sells with taker buys. Two auctions, two clearing prices, one batch. Windows are configurable per auction. Duration ranges from sub-second for HF pairs to hours or longer for treasury auctions and RWA tenders.
On-chain venues today match orders one at a time. The fastest bot wins, the retail trader pays the spread. Batch auctions fix both.
Bots see your order hit the mempool, buy ahead of it, and sell it back to you a few bps higher. You pay the latency tax.
Constant-product curves quote you a worse price the bigger your size. Liquidity providers take adverse selection every block.
Add orders tagged with role (maker / taker) and side (buy / sell). Watch them route into the bid auction or the ask auction. Each auction clears at the price that maximizes matched volume with no unmatched orders at better prices — typically landing at a marginal maker's price, giving the taker side price improvement.
Toxic flow: scalpers with the fastest pipe, exploiting maker quotes before makers can update. Continuous order books reward it by design. DFBA clears the whole batch at one price simultaneously, so there's no asymmetry to exploit. Makers quote tighter because they're no longer subsidizing latency arbitrage with adverse selection. The remaining flow is natural flow: hedgers, treasuries, rebalancers trading for real economic reasons.
Your limit is a cap, not the fill. A maker quoting a $0.16 ask that clears at $0.155 pockets the improvement. A taker bidding $0.16 fills at $0.155 and pays less. Both sides share the spread. Larger makers get proportionally larger allocations via pro-rata. Size is rewarded, not speed.
Every fill in a batch executes at the same uniform price, regardless of who submitted first or who has the faster pipe. The same rules apply to a retail ticket and a million-dollar order.
The "dual" in Dual Flow Batch Auction means every batch runs two independent auctions, segregated by role. Makers never cross makers. Takers never cross takers. This segregation is what protects liquidity providers from toxic flow and lets them quote tighter.
Maker buys ↔ Taker sells. Resting maker bids meet incoming taker sell flow. Clears at a single uniform bid price for everyone in this auction.
Maker sells ↔ Taker buys. Resting maker asks meet incoming taker buy flow. Clears at a single uniform ask price, independent of the bid auction.
The trade and the asset movement are one atomic step. When the batch clears, an on-chain MatchRecord is created, locked assets transfer, and a permanent Settlement contract is written. No T+1. No custodian in the middle. Both parties observe the same contract.
A real walkthrough of a single auction. Six orders, one batch window, oracle reference $0.15. Step through it. (This example shows the bid auction. The ask auction runs in parallel with its own clearing price.)
You get the better price. Buy limit orders execute at the clearing price or lower. Sell limit orders execute at the clearing price or higher. You never pay more, and never receive less, than the clearing price.
No. Matching is price-first, pro-rata by size second. A buyer at $0.16 matches before a buyer at $0.15 regardless of submission order. Among orders at the same price, fills are allocated pro-rata by size — not FIFO — so larger orders get a proportionally larger share.
Submission time within the batch window doesn't matter. Whether you submit at second 1 or second 14, your order goes into the same batch and competes on price and size, not speed.
The clearing rule is robust against manipulation. Clearing price is the price that maximizes matched volume with no better unmatched orders remaining. It can only sit inside the range bounded by real crossing orders. Artificial high-priced wash orders that don't actually cross any counter-order don't move the clearing price, because they add no matched volume at that level. The algorithm naturally anchors to where real supply meets real demand.
At the moment you submit your order, not at settlement. Buy orders lock USDCx equal to amount × limit_price. Sell orders lock the asset. At settlement, locked funds transfer to the counterparty. On cancellation or expiry, they're released back to you.
Unmatched orders roll over to the next batch automatically. Your order stays active until it fills, expires at valid_until, or you cancel it. Cancellation unlocks your funds immediately.
Partial fills also roll over. The matched portion settles at the clearing price; the unfilled remainder stays locked and competes in the next batch. You don't need to resubmit.
Not always. At the clearing price, fills are allocated pro-rata by size among orders at that price. If total qualifying counter-flow is less than total qualifying size on your side, each order on your side fills proportionally. Any unfilled remainder rolls to the next batch automatically. Your order stays active without you resubmitting.
A CEX book matches continuously, every trade at a different price, with the fastest order winning. DFBA batches into fixed windows and clears each auction at one uniform price — one price for the bid auction, one for the ask auction. Submission order inside the window doesn't matter. Front-running bots lose their edge. Settlement is on-chain, so the audit trail isn't exchange-controlled.
Three differences. First, two parallel auctions segregated by role. Most batch auctions run a single clearing across all orders, mixing maker and taker flow. Second, continuous liquidity via automatic rollover. Unmatched and partial-fill remainders stay live across batches without a new signed order. Third, on-chain deterministic matching. No external solver network, no off-chain auctioneer. The matching engine's rules are published; the settlement writes to Canton.
By default you trade as a taker. Submit an order and it routes into the auction opposite the maker side. Maker designation is granted to counterparties with a market-making relationship with AVRO. If you'd like to be designated a maker, reach out to discuss onboarding.
Competitive maker and taker fees apply. Because role is structurally determined by which auction you're in (not by who submitted first), there's no gaming where a fast trader routes to the cheaper side of the book. Full fee schedule coming soon.
Yes, structurally. Maker-to-maker matches are impossible in DFBA, so volume can't be inflated by inter-dealer rebalancing that pumps CLOB numbers. What prints on the tape is capital moving between economic agents: natural flow on one side, market-makers on the other.
On testnet: CC/USDCx. Additional pairs on mainnet opening May 2026. Please reach out for market-maker onboarding.
RPC and WebSockets coming soon.