DFlow is a decentralized, on-chain marketplace for order flow. Order flow sources tranche orders into order flow auctions (OFAs) that run on the DFlow Chain. Market makers bid into OFAs to receive the right to fill order flow.
DFlow OFAs are blind auctions that run in a parallel, sequential manner.
Parallel: Order flow sources can run multiple OFAs at the same time, where each auction has a set of predetermined specs that indicate qualities about the order flow.
Sequential: Each auction is sold repeatedly – an epoch number is automatically incremented to identify the vintage of the auction. The length of an epoch is determined by the speed at which orders are delivered. The faster orders are delivered, the quicker the epochs increment. An auction only requires a one-time setup and will last as long as it's not canceled by the user.
Each auction is comprised of sequential epochs and at any point in time, there are two active epochs. The current epoch will be delivering orders in the Delivery Period and the next epoch will be accepting bids from market makers in the Auctioning Period.
Auction winners are determined in a bid-reveal scheme during the Auctioning Period. The bid-reveal scheme works by first allowing market makers to submit blind bids and later having them reveal their bids. At the end of this period, the highest bidder will be the auction winner and will begin receiving order flow. All other bid amounts are returned to respective market makers.
Note the Auctioning Period always takes places ahead of the Delivery Period (for the same epoch). In other words, market makers are bidding to fill order flow from the future. This ensures a low latency trading experience and eliminates the speculation that market makers can see order details before paying for order flow. Market makers price OFAs based on the predetermined specs and external factors like where these order flow came from.
The length of an epoch's Auctioning Period is determined by length of previous epoch's Delivery Period.
Note from diagram and by design, epoch 0 does not have an Auctioning Period. Therefore, there will be no auction winner.
The epoch in the Delivery Period will be delivering order flow to the winning market maker for order execution.
Users will set the maximum length of the Delivery Period during auction creation. The realized length of the Delivery Period may be shorter because it's the shorter of (1) the user-defined Delivery Period and (2) time Notional Size is fully delivered.
Despite epoch 0 not having an auction winner, the order flow source can still deliver orders by setting up a backup liquidity provider (LP). The order flow source does not receive payments for routing to a backup LP.