Authors: Benedikt Bünz, Ben Fisch, Ellie Davidson
We thank Justin Drake, Maryam Bahrani, Tim Roughgarden, Scott Kominers, Davide Crapis, Christoph Schlegl, Bruno Mazorra, Philipp Strack, and others for helpful discussions and feedback on our design. Thanks to Ed Felten for pointing out a mistake in the analysis section of a previous version.
Espresso proposes a marketplace for sequencing. For high-level motivation and background, please read our previous post Based Espresso: ad-hoc shared sequencing. In this post, we present the detailed marketplace design along with justifications for our design decisions.
Espresso can provide the following separate but complimentary services:
The marketplace has several advantages, including the benefit of outsourcing the sequencing to specialized parties. The most significant benefit, however, is that sequencers that buy the sequencing rights for multiple rollups can guarantee atomic execution between these rollups. Atomic execution allows sequencers to satisfy cross-rollup user intents and give strong preconfirmations for cross-rollup transactions. We discuss the benefits of this ad-hoc shared sequencing in this article.
In this post, we lay out the design and analyze the properties of the Espresso marketplace. The HotShot finality gadget, which you can read more about here and here, is independent of the marketplace, but serves multiple essential functions:
Our marketplace has two primary goals:
Additionally, the marketplace should have the following properties:
To achieve the above goals and properties, we use a combinatorial lottery mechanism to assign sequencers to particular rollup blocks. Potential sequencers act as buyers in the lottery by purchasing lottery tickets for bundles of rollups. Rollups act as sellers, selling their sequencing rights on a per-slot basis. If a potential sequencer has a winning ticket for a particular bundle of rollups for a specific slot, they become the shared sequencer for those rollups during that slot.
First, we specify how the sequencer assignment mechanism can be run as a combinatorial auction. Then, we show how to transform it into a lottery and discuss the advantages of a lottery versus an auction.
The combinatorial auction can be viewed as a first-price combinatorial pay-as-you-bid auction that consists of three phases: the bidding phase, assignment phase, and sequencing phase.
We make several assumptions before we further discuss the auction:
High level schematic of the mechanism and sequencing design:
During the bidding phase, each potential sequencer submits bids to the marketplace for the bundles they want to sequence. Sequencers can submit bids on any bundle they wish. All bids are public, and potential sequencers can submit as many bids as they'd like before the end of this phase. Potential sequencers pay their bids upfront when submitting their bid, like in pay-as-bid auctions. Paying bids up front serves two purposes: First, it ensures sequencers have adequate funds to cover their bid. If bids were paid at the time of the block proposal, a malicious sequencer could submit an adequately funded bid and win the auction but drain their funds before the bid is executed, resulting in gaining sequencing rights for free. Secondly, pay-as-bid auctions have advantageous economic incentives, which we will discuss later. Note that non-winning bids will always be refunded.
The bidding phase takes place well before the sequencing slot. This is necessary to allow the marketplace time to calculate the auction winners and make them known to the HotShot finality gadget.
The assignment phase (also sometimes reffered to as closing phase) determines the auction's outcome and assigns sequencers according to that outcome. The auction outcome is determined by selecting the set of bundles such that:
More specifically, let there be rollups, and denote the reserve price for the th rollup. For every bundle , let denote the value of the highest bid submitted for bundle . For each singleton bundle let . This definition implicitly interprets rollup reserve prices as bids for singleton bundles. For all other bundles (of size at least 2), let . For any partition of [n] into disjoint subsets let . The auction finds the partition that maximizes auction revenue. Sequencing rights for every bundle in are then allocated to the sequencer that submitted the highest bid. In the case of singleton bundles, if the reserve price were the highest bid, the rollup itself would be allocated sequencing rights for the singleton bundle. See the figure below for an example.
Note that since bundles can consist of any combination of rollups in , finding the revenue-maximizing set of bundles is potentially an exponentially difficult problem that could take an intractable amount of time to solve:
Real-world bundles will likely be a small subset of all possible bundles since not all bundle possibilities will make economic sense to bid on. Thus, the marketplace will likely only have to solve across a few combinations of bundles.
We can optionally timebox solving for the winning set . At the end of this timebox, the solver will publish the most revenue-maximizing solution they've found thus far.
There is a challenge period during which anyone can submit a more optimal solution. Since all bids are public, any party can submit a solution.
Since a solution is the sum of bids across all bundles in the set, it is easy to verify that one solution is more revenue-maximizing than another by simply comparing the sums of their bundle values.
At the end of this phase, the finality gadget finalizes the auction outcome.
The auction winner of each bundle inside the winning set earns the sequencing rights for that bundle during the specified slot. These winners are now the sequencers for the individual rollups in their bundle; they will propose the next block for each rollup in the bundle and submit the proposal to the HotShot finality gadget. Each sequencer proposes its blocks to the network when the slot arrives in the finality gadget. The network verifies that proposals come from each bundle's correct auction winners and finalizes the results. Finally, losing bidders for said slot are refunded their bid.
Recall that one of our primary goals was to ensure rollups are always better off participating in the marketplace than sequencing alone. Therefore, given a particular auction outcome, we must split the revenue amongst the rollups. If the winning set contained only singleton bundles, then the marketplace could give each rollup revenue equal to the bid on their singleton bundle. However, to enable shared sequencing, we sell rollups as bundles. Therefore, we need a mechanism to split the remaining revenue generated from bundling rollups. The core idea is that each rollup receives revenue proportional to the maximum bid on the singleton bundle that only includes the rollup. We specify the mechanism in more detail below. It has the following parameters:
That is, the rollup receives an amount of the shared sequencing revenue proportional to the highest singleton bundle bid, which signifies the revenue a rollup could have made on its own.
The marketplace charges a small fee. That fee is burned and designed to disincentivize, setting a dishonestly high reserve price. The fee consists of two components: a fee proportional to the reserve price and a fee proportional to the shared sequencing revenue.
The marketplace does not touch rollup's execution fees (i.e., gas fees). These remain as they are today. Additionally, sequencers submit their blocks to the HotShot finality gadget. HotShot ensures that after submission, no one can change the order of transactions for a rollup. This allows the next sequencer to build on the previous block safely and also enables faster bridging.
The combinatorial auction fairly splits the revenue among rollups and ensures that sequencers that value rollups the most earn sequencing rights. One concern with auctions, however, is that the same party will win too often.
Recall that the auction is run before the block data is known. This means sequencers bid based on the expected value of bundles instead of their real value (this is different from the current PBS in Ethereum). This expected value should remain the same over time. Therefore, the same sequencer may win the same rollup in every instance of the auction.
We convert the combinatorial auction into a combinatorial lottery to mitigate this concern. Our design has similarities to the recently proposed execution tickets idea. We describe the core changes below:
We propose a possible ticket price adjustment algorithm below. We model the design after EIP1559 and the difficulty adjustment of PoW. We invite the community to analyze this proposal and suggest other approaches.
There is a target amount of tickets that we want to sell. We will, at most, sell tickets. The price for the first is constant, and then it increases linearly from to . This ensures that if the demand does not massively change, everyone pays the same ticket price, but buying all tickets becomes increasingly more expensive. This ensures that a single bidder can only price out all other bidders by increasing its ticket price.
Ticket price: The x-axis is the percentile of the ticket sold. The y-axis is the price assuming . Price is fixed and then grows linearly for the last quarter of the tickets
In the second plot, we show how to compute the ticket price for the next lottery iteration. It is adjusted based on whether there was an over or under-demand for tickets in the previous iteration. We ensure the ticket price at most doubles or halves between any two iterations.
Plot for update function, with in the x-axis and
As we laid out in our Based Espresso post, the Espresso marketplace and finality gadget are most powerful when the L1 proposer is the sequencer for one or multiple rollups. The reason is that the L1 proposer can simultaneously build the L1 block along with the rollup blocks, allowing it to satisfy user intents and enable interoperability across both the rollups and the L1. This design satisfies the definition of based sequencing.
If we run the marketplace lottery within the lookup time of the L1 proposer, then the L1 proposer can participate in the lottery like any other potential sequencer. However, this still does not guarantee that the L1 proposer will win the sequencing rights, as it might get unlucky in the lottery. To alleviate this problem, we use a simple idea: give the L1 proposer a right-of-first-refusal. After all the lottery tickets have been purchased for a particular slot, the L1 proposer can opt to buy out all the tickets for a winning bundle (or multiple bundles). This gives it the exclusive rights to build the L1 block and the rollup blocks for rollups within that bundle. The right-of-first-refusal does not require any changes to the L1. Only that the L1 proposer optionally takes this so-called right of first refusal. The L1 proposer would reimburse the owners of the winning tickets for their tickets plus an optional surcharge.
We now analyze the different properties of the marketplace and whether they achieve the desired goals laid out earlier. We give informal arguments, but the analysis of each property deserves further study and research.
Optionality ensures that an honestly reporting rollup will receive more revenue from the marketplace than it could have generated on its own. This is achieved by the rollups' ability to set a reserve price. The rollup is not allocated to a marketplace sequencer if no bid clears the reserve price.
The marketplace is efficient if it allocates the sequencing rights of a rollup to the sequencer that values it the most (perhaps as part of a bundle). This guarantees that if two rollups have shared sequencing complementarities, they will necessarily be allocated together. We make the simplifying assumption that all bidders in the marketplace view all goods, i.e., all rollup sequencing rights, as complements. The justification is that a sequencer controlling multiple rollups can always resell the individual sequencing rights.
We first analyze the efficiency of the auction variant of the marketplace. The combinatorial auction picks the allocation that maximizes the auction revenue. This winner determination is equivalent to the efficient allocation if all marketplace participants are honest. While we do not claim that the marketplace is entirely incentive-compatible, we postulate that the combinatorial auction still delivers a highly efficient outcome in equilibrium. Testing this hypothesis requires an equilibrium analysis. However, it was shown that in a wide range of domains and under almost any payment rule, combinatorial auctions are highly efficient in equilibrium.
Additionally, we do not run a combinatorial auction but a lottery. A lottery is isomorphic to a pay-as-bid auction where multiple bidders (who buy lottery tickets) pool their funds together to form a single bid with a proportional allocation. Note that while this can lead to lower revenue it does increase the diversity of winners. As a simple example consider an infinitely divisible good being sold, where both bidders have value for the good. In a second price auction one bidder would win every unit and pay , i.e. its value. In a pay-as-bid auction with proportional allocation (i.e. a lottery) each bidder would get units and pay . The reason is that the bidder makes in profit. If they were to bid they would win of the good and pay for a profit of . This is maximized for . This shows that bidding is an equilibrium (it is the best response to the other bidder's best response) and that in equilibrium a) both bidders win half of the time and that the revenue is lower than in the winner takes all auction.
The marketplace is run as a repeated game, selling essentially the same good each round. This should significantly improve stability, as whenever the equilibrium is reached, the pricing of bundle lottery tickets should stay constant, as both the goods and the bidders remain essentially identical.
The marketplace inherently helps decentralization as it enables rollups, which today almost entirely use centralized sequencers to pass off the sequencing rights without having to relinquish the sequencing revenue. Additionally, we designed the mechanism to be a lottery instead of an auction. The key motivation is that multiple bidders can buy lottery tickets for the same rollup (or rollup bundle). The sequencing rights will be randomly split between all the lottery tickets. However, this begs an obvious question:
Why wouldn't the bidder with the highest value buy all the lottery tickets for a particular rollup?
We answer this question with multiple arguments:
Overall, this question deserves significantly more investigation, but point 4 is likely the strongest argument. The same issue arises in execution tickets and is discussed under multi-slot MEV here. Execution tickets use a simplified version of this design, where only a single sequencing right is sold.
We do not claim that this mechanism is incentive-compatible.
The unique incentive-compatible and efficient mechanism is the famous VCG mechanism. However, there are many practical and theoretical reasons why the VCG mechanism is often not the best choice in practice. The VCG mechanism does not even guarantee that the market is balanced, i.e., the sellers (in our case, the rollups) receive at most as much as the buyers (sequencers) bid.
Despite this, we hope that the repeated nature of the mechanism will enable participants to execute a winning strategy efficiently. To aid the repeated nature of the auction, we propose a smooth price update rule, which smoothly adjusts the lottery ticket price from round to round if there is over or under demand. This update rule aims to aid in price discovery and equilibrium finding.
Rollups may also sell restricted sequencing rights (e.g., that are subject to an ordering policy, inclusion list, etc, but that is beyond the scope of this article). ↩︎