Ensuring orders are routed from identifiable sources

Wallets sell order flow to market makers via order flow auctions. Order flow endorsement is required to ensure all orders routed via a wallet's auctions originated from its users, and not an impersonating third-party's.

Endorsements guarantee the source of orders, meaning market makers can provide more precise prices for order flow. The reason there is higher pricing precision is a result of external factors like being able to identify who is sending orders.

Where users trade can say a few things about who they are and why they trade. Every trading venue markets towards a specific type of users and uses UI/UX or authentication to target that group of people. In stocks, the intent behind trading activity on Robinhood is drastically different from that on Charles Schwab or Interactive Brokers etc.

How to endorse orders

A wallet that is integrated via the fully-managed service must run its own endorsement server. The wallet will make requests to its endorsement server for endorsements, which authorize retail traders on its platform to request quotes from market makers. A wallet that is integrated via the self-managed service does not need to run its own endorsement server although order endorsements still happen in the backend.

An endorsement request returns an endorsement object which contains a Ed25519 signature that covers the UTF-8 encoded message "{id},{expirationTime},{data}", where data contains optional parameters that can be used to specify a number of restrictions for the endorsement. See /endorsement for more information on what can be included inside the data object.

Endorsement Flow

An endorsement object is returned from the wallet's endorsement server (if integrated via self-managed) or DFlow's endorsement server (if integrated via fully-managed).