Tidemark is a batch auction design that decides an order’s role based upon where it is priced relative to the best bid and best ask of the prior window. Just as the tide leaves a line on the shore called a tidemark, showing how far the water reached before it went out, Tidemark uses the prior window’s best bid and best ask to show where liquidity once stood. This is where Tidemark gets its name.
Batch auctions offer many benefits, but they present a design challenge for fees. Markets generally charge the orders that take liquidity and reward the orders that provide it, which requires a way to tell the two apart. In a continuous book, arrival order does this. The order already resting provided the liquidity, and the one that arrives and fills against it takes it. In a batch auction, all orders in a window are treated as arriving at once, so there is no way to tell which arrived first.
That leaves batch auctions with two simple options. The first is to charge every order the same flat rate. While simple, this offers no reward for providing liquidity. The second is to treat every incoming order as a taker. This fails market makers who reprice constantly. A market maker that requotes each window pays the taker fee whenever a fresh quote fills, even though it was providing liquidity, not taking it. This acts as a disincentive for the maker to tighten the spread.
Tidemark offers a third option, which is to decide each order’s role from its price alone. An incoming order can then be categorized as a Maker and earn a share of the fee a Taker pays. And since the prior window’s best bid and ask are fixed before the window opens, a trader can know its order’s role before submitting it.
The piece covers how batch auctions work and why they matter, then Tidemark’s order roles, how it finds the clearing price, and how fees and fee shares fit around the roles. It closes with directions still to explore.
How Batch Auctions Work
In a batch auction:
- Orders are collected within a discrete time window. This is a fixed interval and could be 100ms, a second, a block, or whichever duration the venue chooses.
- Within that window, no priority is given to any specific order based upon its arrival time.
- At the end of the auction window, it closes. No new orders for that window are accepted. Orders for that window are matched all at once.
- The clearing price is the single price that maximizes traded volume. Every order that fills does so at that price. It can be better than an order’s own: a buy pays its limit or less, and a sell receives its limit or more.
- Orders that don’t fill, or fill only in part, carry into the next window unless cancelled.
By contrast, in a continuous limit order book (CLOB):
- Each order matches as it arrives against orders that rest. When matching occurs, the resting order is always the maker and the incoming order is always the taker.
- Each trade happens at the resting order’s price, so an order that sweeps the book fills at several prices, and a resting order never does better than its own.
Why Batch Auctions Matter
Batch auctions matter because they make the sequence of orders less important, while also lowering the cost of mispriced orders. Two features of batch auctions work together to enable this: (1) discrete time windows and (2) price improvement.
Discrete Time Windows
Batch auctions do not match orders continuously. Instead, orders are matched at the close of an auction window. This gives no priority to an order that arrived earlier in the window. In a 100ms auction cadence, orders arriving 1ms, 50ms or 99ms in are all treated the same.
This reduces the amount of racing that occurs to land an order first. While there can still be a rush to get an order in before an auction closes, it now makes up only a small fraction of the entire window. This differs from a CLOB, where this rush is present constantly.
In a CLOB, a maker whose quote has gone stale must cancel it before someone takes it. In a batch, the cancel only has to arrive before the window closes, so the quote is exposed only to price moves just before the close. A market maker should therefore face adverse selection less often.
Discrete time windows could also offer benefits to blockchains, for reasons beyond speed. On many blockchains, block producers set the order in which trades occur within a block, arranging them to extract value, known as MEV, or maximal extractable value. This can include front-running, back-running or sandwich attacks. If a blockchain were to implement a native market architecture with batch auctions at its core, much of that MEV would vanish. Block producers could still choose which transactions to include, as they can now, but they would gain nothing from arranging their order.
Price Improvement
The second important feature in batch auctions is price improvement. Any order can get a better price than its limit price, depending on the order flow within a window.
As an example, take an order book with resting bids of:
- 20 @ 100.00
- 20 @ 99.99
- 20 @ 99.98
A sell of 60 @ 99.98 arrives.
In a CLOB, it fills against each order individually, giving the sell a final average price of 99.99. Each resting bid gets its limit price.
In a batch auction, the window clears at a single price: the one that trades the most volume, here 99.98, where all 60 can trade. Each bid pays 99.98: the bid at 100.00 improves by 0.02 and the bid at 99.99 by 0.01. The improvement comes from the sell, which averages 99.99 in a CLOB but 99.98 in the batch, still at its limit.
Now suppose that, in the example above, the fair price had moved to 99.97 and the sell was sent to exploit the mispriced book. In a CLOB, the three bids lose 0.03, 0.02 and 0.01 to being picked off; in a batch, each loses 0.01.
The Impact on Makers
Combining the effects of price improvement with discrete time windows means that:
- A mispriced order gets picked off less often.
- When it does, the cost of that mispricing is reduced.
In aggregate, market makers should be able to quote more confidently and with larger size.
However, if their incoming orders are all charged as taker orders, this pulls the other way. A mechanism is needed to handle these incoming orders more precisely and so we will move on to how Tidemark tells such orders apart.
Tidemark’s Order Roles
Tidemark uses the prior best, the prior closing best bid and best ask, to assign roles to orders based upon where each order’s price sits relative to it.
In the examples that follow, Tidemark’s order role assignment will be illustrated.
Makers and Takers
For all examples, the order book will be structured as follows:
- Ask of 100.02 as the prior best ask
- Bid of 99.98 as the prior best bid
The sizes of orders are not relevant for any of these examples regarding how order roles are assigned.
Example #1: An incoming order and resting order match
In the current window, a single new order enters: a buy at 100.02. The window closes, and the buy order matches the resting ask at 100.02 and fills.
Conventional thinking in this scenario would be to categorize the resting ask at 100.02 as a maker and the incoming buy order as a taker.
Tidemark categorizes these orders in the same way. However, its reasoning for doing so is slightly different:
- The resting ask at 100.02 is set as Maker because it was priced at or behind the prior best for its side.
- The incoming buy at 100.02 is set as Taker because it was priced at or beyond the opposite prior best.
This difference in reasoning can be seen further in the next example.
Example #2: Two incoming orders at an existing level
The same buy at 100.02 enters, and so does a new sell at 100.02. The resting ask fills first, since orders from earlier windows fill first at a price, and the newly arriving sell fills the rest of the buy.
Just as before, the incoming buy is categorized as a Taker and the resting ask as a Maker. The newly arriving sell is also categorized as a Maker, since it is priced at or behind the prior best on its own side. The fact that it arrived in the same window as the Taker buy doesn’t matter; only its price does.
A few simple rules follow from these examples:
- Resting orders are Makers.
- Incoming orders that reinforce liquidity on their own side are Makers.
- Incoming orders that reach into liquidity on the other side are Takers.
Other cases
And a few more cases follow from these rules:
- A cancel can’t change another order’s role. Roles come from the prior best, which no order, cancel or change in the current window can move. A Taker stays a Taker even if the order it was aimed at is cancelled in the current window. A trader can therefore know the role of an order before submitting it.
- An order that doesn’t fill rests as a Maker. A Taker that finds nothing to fill against, perhaps because the order it was aimed at was cancelled, stays in the book. Like any resting order, it is then at or behind the prior best on its side. If it fills later, it will do so as a Maker.
- Takers can meet each other. A buy at or above the prior best ask and a sell at or below the prior best bid are both Takers. Their prices cross, so they fill against each other. Makers never can, since the prior best bid is always below the prior best ask.
Between Orders
The examples so far cover the clear cases. But what role should an order priced between the prior best bid and ask get?
There are three options to consider:
- Treat such orders as Takers. A Taker would then be any order that doesn’t reinforce its own side.
- Treat such orders as Makers. A Maker would then be any order that doesn’t reach the other side.
- Give such orders a role of their own.
The problem with treating all such orders as Takers is it produces a mechanism only slightly more precise than the usual approach. Some incoming orders could now be Maker if at or behind the prior best, but everything else would be Taker. This is problematic for active market makers. Any re-pricing to tighten the spread on either side of the book would then incur Taker fees if filled in that window.
Treating such orders as Makers faces the opposite issue. The design would then have to permit Maker orders to match each other. If Makers pay no fees, as this piece argues later, this would open the door to free wash trading.
Due to these issues, Tidemark gives these orders a third role: Between. The name describes both where the order sits, in between the spread, and what it is: somewhere between making and taking, with a price that doesn’t say which. While adding a third order role does increase the complexity of Tidemark, we think it is worth it on balance. It is the only option that avoids both problems, and it opens up fees and rewards that better support healthy market activity, as covered in Between order fees.
Between orders can match against Taker orders or against other Between orders. They cannot be matched against Maker orders since they never extend into the price levels where Maker orders reside.
Continuing with our example book with a prior best bid of 99.98 and prior best ask of 100.02, any incoming bid or ask of 99.99, 100.00 or 100.01 would be classified as Between.
Unflanked Orders
Lastly, there is a rare market scenario that needs a distinct role of its own to handle: the case where a market has no prior best or only one side of the prior best.
A market that just launched and has no prior history enters into such a scenario. Similarly, a market where one side of the book has been swept clean also creates a situation with an incomplete prior best.
Unflanked is the order role used to handle such scenarios. Unflanked orders are as they sound: a type of order that is missing a prior best on one or both sides. It is the conceptual equivalent of a Between order, but used when there are not yet enough orders in the book for it to be between something.
When there is no prior best on either side, all incoming orders are classified as Unflanked. With only one side, orders that are Makers or Takers against that side keep those roles; the rest are Unflanked.
Unflanked orders are generally rare and are covered here for completeness. For traders participating in Tidemark markets, how Unflanked orders are handled, along with their fee structure, should generally be a non-factor.
To understand how the various roles are assigned, use the following interactive lab:
Note that if a Taker, Between, or Unflanked order does not completely fill within its arrival window, it becomes a Maker order immediately at the start of the next window. The Taker, Between and Unflanked roles apply to an order for one window only.
Which Roles Can Meet
Not all of the roles can meet each other. The table below shows which can and which can’t:
| Buy \ Sell | Maker | Between | Taker | Unflanked |
|---|---|---|---|---|
| Maker | no | no | yes | no |
| Between | no | yes | yes | no |
| Taker | yes | yes | yes | yes |
| Unflanked | no | no | yes | yes |
There are six possible matchups: three from a Taker matching against each of the other distinct roles and three from same role matchups: Taker-Taker, Between-Between, and Unflanked-Unflanked.
How fees and rewards work within each matchup is covered in Fees and Fee Shares.
Finding the Clearing Price
Batch auctions clear at the price that maximizes volume. However, there can often be a whole range of prices that can each trade the same, largest volume.
As an example, take the same order book from before with a prior best bid of 99.98 and a prior best ask of 100.02. A buy of 5 at 100.05 enters and lifts the resting ask of 5 at 100.02. Any price from 100.02 to 100.05 trades those 5 lots, so which price should the window clear at?
For such situations, Tidemark utilizes its order role system for selecting the single clearing price.
When a Maker Fills
When a Maker fills vs. a Taker, the Maker sets the price.
In the example above, the range of possible prices ran from 100.02 to 100.05. Since the resting ask was a Maker, and its price was 100.02, that is the clearing price selected.
When No Maker Fills
When no Maker fills, the orders split the difference. The clearing price is the midpoint of the range, kept within the prior best. A midpoint that falls between two ticks has to be rounded one way or the other; this piece rounds down for simplicity, though a venue could round another way.
For example, a Between bid of 5 at 100.01 and a Between ask of 5 at 99.99 enter. Neither reaches the resting orders, so no Maker fills. Any price from 99.99 to 100.01 trades the 5 lots, and the window clears at the midpoint, 100.00.
Keeping the midpoint within the prior best matters when Takers meet. A Taker buy of 5 at 100.05 and a Taker sell of 5 at 99.90 fill against each other, since each is priced better than the resting order on its side. The range runs from 99.90 to 100.05, but only the part from 99.98 to 100.02 lies within the prior best, so the window clears at its midpoint, 100.00. The price never goes beyond what stood when the window opened.
A Taker meeting a Between order works the same way. A Taker buy at 100.05 and a Between ask at 100.00 clear at 100.01, the midpoint of the range’s part within the prior best, from 100.00 to 100.02. The buy pays less than the prior best ask, and the Between ask sells above its own price.
Unflanked orders clear the same way, except that a missing side of the prior best caps nothing. With only a prior best bid of 99.98, an Unflanked buy at 100.05 and an Unflanked sell at 100.01 clear at 100.03, the midpoint of their whole range.
Fees and Fee Shares
Tidemark’s order role classification system exists for one primary purpose: to enable better fees and rewards for a market. With roles that come from price, a venue can charge and reward each order for the part it actually plays. Takers pay, Makers earn a share of what Takers pay, and Between orders, a role no other market has, get fees and shares of their own. A venue can set whatever fees it wants on top of the roles, but if it treats every role the same, there is little reason to use Tidemark at all.
What follows are the values Tidemark suggests, and the settings it recommends for each: a take rate every Taker pays, shares of it paid to the orders a Taker fills, and a rate Between orders pay when they meet each other.
The Take Rate
Every Taker order pays the take rate, , whatever order it is matched against. When two Takers match, both pay and the venue keeps both fees. When a Taker matches any other role, part of its fee may go to the order it met as a fee share, covered in the next section.
A venue can set the take rate however it likes, but we recommend setting it per market and keeping it flat within each one. Each market then prices itself from its own activity, rather than following volume tiers across every market a venue lists.
Sharing the Take Rate
When a Taker meets any other role, part of its fee goes to the other order(s) it met, with the rest going to the venue itself. The part of the fee that goes to the matching order(s) is known as a fee share. Each role’s fee share may be set independently.
| Fee Share | Paid to |
|---|---|
| , the maker share | a Maker order |
| , the between share | a Between order |
| , the unflanked share | an Unflanked order |
For shares to work, a few things must hold. Firstly, they need to be paid out from what a Taker order was actually charged and not be funded from some other source. Secondly, they need to stay below 100%. If a share was set at 100%, it would open the door to free wash trading. Even worse, setting it above 100% would have the venue paying out more than it collects.
The purpose of fee shares is to reward the orders that provide liquidity, which should help a market draw in liquidity and retain it. With shares built into the market design, any order can qualify for a reward based solely on its role. This can work for both active market makers and AMMs. For the latter, fee shares are particularly important as AMMs often need to generate fee revenue to be viable.
For market makers, fee shares also offset some of the hidden cost that batch auctions can exert on them. In a batch auction, two opposite incoming Taker orders can fill against each other. In a continuous book, these orders would have filled against resting maker orders, allowing the maker to capture the spread. While a fee share doesn’t directly repay the lost flow and spread capture, it does add to what makers earn when they do fill. On balance, we expect these fee shares, along with the other benefits of batch auctions, to provide a favorable environment for market makers to do business.
In regard to setting the values of the different shares, we recommend a fixed maker share, and a between share greater than the maker share. The unflanked share should likely be equal to either of the two. As an example, with a take rate of 2bps and a maker share of 20%, a Maker filled by a Taker would receive 0.4bps.
For high-volume markets, it’s likely that lower take rates and shares should work best. For thinner, more volatile markets, higher take rates and higher shares may be more suitable.
Between Order Fees
Between orders are a new order role, not seen in other market designs, and they sit at the heart of Tidemark. Fees for the other roles are, and should be, simple. A Taker pays the same fee whoever it meets, and a Maker only ever meets Takers. A Between order can meet a Taker or another Between order, and it stands somewhere between making and taking, so its fees take more care.
In considering how to set the Between fees and fee shares, there are a few goals we have in mind:
- Don’t allow free wash trading. Two accounts should never be able to trade with each other at no cost.
- Charge Between orders less than Takers. Stepping inside the spread should cost less than crossing it.
- Reward tightening. The market’s incentive system should in itself give traders an additional reason to tighten the spread.
One balance runs through these goals. A reward for stepping inside the spread will turn some would-be Takers into Between orders, which tightens the spread. This can be net positive for a market. However, if it over-incentivizes this, it can potentially crowd out the makers who provide liquidity continually.
The fees proposed for Between orders in this piece start from a simple, flat baseline. It meets the three goals and goes part of the way toward this balance. A follow-up piece explores how varying Between fees by where an order sits inside the spread could strike the balance more finely.
With that, we will look at the two matchups a Between order can have: against a Taker, and against another Between order. For the examples, we will use a wider book than before, with prior bests of:
- Ask 100.05
- Bid 99.95
Between vs. Taker
When a Between order matches vs. a Taker order, it functions more like a Maker order given the counterparty it fills against. If no Between order(s) had been present, then the Taker order would likely have filled against a Maker order. In this way, the Between order provides a better price to the Taker order it fills against.
For this reason, we advocate for Between orders getting a fee share when matched against a Taker order.
The simplest option is to set a flat fee share. If doing so, we recommend setting the between share higher than the maker share. This can provide an additional incentive for makers to tighten the spread.
As an example, let’s revisit the same order book with a 99.95 prior best bid and a 100.05 prior best ask.
With a 2bps take rate, a 20% maker share, and a 25% between share, a Maker order would receive 0.4bps when filled whereas a Between order would receive 0.5bps. This is a relatively subtle difference. Raising the between share more would create a larger difference as compared to the maker share and should thus compel more trades to be placed between the spread.
Since Between orders can also match against other Between orders, we will explore how to structure that fee next.
Between vs. Between
Unlike Makers, Between orders can match with other order roles besides just Takers: other Between orders.
In the Between vs. Taker matchup, the Between order’s counterparty always pays a fee, which is what lets the Between order receive a fee share. For there to be a fee share in Between vs. Between, one order would have to be charged and the other rewarded. That would make every Between vs. Between matchup a disguised Maker vs. Taker matchup, undermining the need for Tidemark in the first place. Additionally, it would raise the problem of deciding which order to charge and which to reward. This does not seem like a viable path.
Instead, we propose a simple baseline fee structure that works well with two of the stated goals for Between orders: no free wash trading, and charging Between orders less than Takers. It works as follows:
- Always charge Between orders a flat base fee for matching against each other. This fee should be scaled to the take rate and should be a relatively small fraction of it.
- If a Between order receives any form of price improvement, such as a bid at 100.02 that fills at 100.00, then charge an additional improvement charge of half of the price improvement.
- Cap the total fee charged to the take rate such that no Between order ever pays more than a Taker order.
As a formula, with the between rate, the price improvement and the take rate (as the cap):
The improvement charge is novel as a fee mechanism. It is a fee, but not quite a fee, since it is only charged on improvement the order actually received, with the order still keeping close to half of that improvement. An order only reaches the cap when its improvement is large, and even then it ends up better off than its own price, so stepping inside still costs less than crossing.
As an example, two equal-sized Between orders enter our example book, with its 99.95 bid and 100.05 ask: a bid at 100.02 and an ask at 99.98. They clear at 100.00, giving each side 0.02 of price improvement, or 2bps. Each pays the between rate, 5% of the take rate or 0.1bps, plus half that improvement, 1bps, for 1.1bps in all, well under the take rate. The bid effectively clears at 100.011 and the ask at 99.989. Both are still better off for the improvement, just less so.
When neither order gets any price improvement, only the flat between rate applies. Two opposite Between orders priced at 100.00 clear at 100.00, and with a between rate of 5% and a take rate of 2bps, each pays only 0.1bps.
Unflanked Order Fees
Unflanked orders are handled the same way as Between orders, with values of their own.
When a Taker fills an Unflanked order, we recommend it receive a flat share, the unflanked share, . When two Unflanked orders meet, each pays a flat unflanked rate, , a fraction of the take rate, plus the same improvement charge as Between orders, capped at the take rate:
A venue that wants no separate values for Unflanked orders can set and equal to the between share and the between rate.
A follow-up piece explores varying Between fees by where an order sits inside the spread. Unflanked fees would stay flat under that idea, since a book missing a side of its prior best has no midpoint to measure from.
Further Areas for Exploration
Tidemark unlocks further areas for exploration, particularly in how markets are structured and can evolve. Most of the ideas below are ways fees and market settings could shape a market further, beyond the settings presented so far. The last is a use for the prior best beyond fees altogether.
Considering the Unique Needs of Each Market
Tidemark can work for any type of market with an order book: spot, perps, options, etc. Within these distinct market categories, there may be different fee and share settings that are more optimal than others. At an even more granular level, individual markets within a given category might benefit from more distinct settings of their own. Higher volume markets might do well with lower fees and lower shares, and lower volume ones might be better with a higher fee or share. Within the range of options, there is much room to explore.
This idea can be extended further to an individual market across time. What started once as a long-tail asset could become a major asset later on. Therefore, it should be possible for a market to evolve its fee settings over time. This could potentially be handled programmatically when a market reaches certain thresholds sustained over a period of time.
Tidemark invites its implementers to consider the unique needs of each individual market, where it is in its lifecycle, and then tune it to that. This is something that fees based on venue-wide volume tiers obscure as a possibility.
Incorporating AMMs
Extending upon the idea of a market having unique needs dependent upon where it is in its lifecycle, many markets would benefit from having an AMM provide liquidity, particularly when first launched. Fortunately, there is nothing structurally within Tidemark that prevents it from working with AMMs.
To incorporate an AMM into a Tidemark market, the AMM would not set the fee structure of the market. That is the role of the venue. An AMM in Tidemark is just another market participant, with the main difference being that it quotes based upon some sort of formulaic curve. Any Tidemark matching engine could be extended to handle these sorts of formulaic price curves. A generic API could support different curves: Uniswap V2-style full-range liquidity, concentrated liquidity, or even bonding curves (with some changes to work with a single clearing price). To handle any of these well, a few things should be considered:
- A logarithmic price grid. While not strictly necessary as an AMM could quote on any grid, a logarithmic price grid is generally more congruent with things like concentrated liquidity, as ranges set in bps can span the same number of ticks wherever the price is.
- Fees charged in the asset received. Having fees collected in the asset received instead of always in the quote asset makes it easier for AMMs to keep their inventory in balance.
- A spread on the curve. AMMs typically have no spread embedded within their price curve. This leaves no room for Between orders, and active market makers cannot move the book’s fair price without acting as Takers. Over time, this could make the market less efficient.
One way to give AMMs a spread is for a Tidemark venue to set a minimum AMM spread per market, which AMMs would factor into their quotes. An early market, for example, could have a 30bps take rate, a 90% maker share and a 95% between share, a favorable setup for current AMMs, along with a 4bps minimum spread. Around a price of 100, an AMM would then quote a bid of 99.98 and an ask of 100.02. As the market matures and more active participants begin to absorb flow, the market might lower its take rate and shares and widen the minimum spread. A wider AMM spread leaves more room for active makers and Between orders to quote inside it, and the AMM shifts from providing most of the market’s liquidity to providing depth behind them.
Pricing Orders by Adverse Selection
Consider fees and fee shares primarily as a mechanism to price adverse selection, with venue revenue as a secondary effect. From this angle, setting fees and shares becomes about sustaining a market with the healthiest order flow. A TWAP order, for example, is healthy flow, the type market makers want to fill, and the longer it has been running, the clearer that becomes. A venue could charge it less as it goes, and reward the counterparties that fill it less as well. Other orders can be viewed through this same lens.
Smoothing Between Fees
The fees and shares for Between orders covered earlier leave a jagged edge. A Between order one tick short of the far prior best earns the full between share, while one tick further, as a Taker, it would pay the full take rate. This is a big jump. There is likely a more gradual fee and share curve for Between orders that handles this better. It would add complexity to the basics of Tidemark, so it has been left out of this piece and is covered in a separate post.
A Simple Expressive Language for Orders
The prior best could be used as anchors for defining orders in a simple expressive language. Traders could submit orders in reference to these points in the book. Then the exchange could evaluate the orders at time of entry into the book. This could allow traders to set constraints on which order role they are willing to act as or where they want the order to land in the book relative to the prior best. This becomes particularly relevant when factoring in potential latency from the time of order submission to the time an order lands in the book.
Using our example book with a prior best of 99.95 and 100.05, such a language might look something like this:
| Expression | Price target | Notes |
|---|---|---|
buy 5 at bid |
99.95 | Joins the bid as a Maker |
buy 5 at bid+1 as between else at bid |
99.96 | Falls back to the bid when there is no room inside |
buy 5 at mid as between |
100.00 | Rests at the midpoint |
buy 5 at ask-1 as between |
100.04 | A tick short of crossing (the most aggressive Between price) |
buy 5 at ask+3 worst 100.10 |
100.08 | Crosses as a Taker, at no more than 100.10 if the ask has moved by the time it lands |
Conclusion
Tidemark started from a narrow question: how can a batch auction reward market makers whose orders arrive in the same window as the Takers they fill? Answering it meant defining roles by price, and from those roles, how to charge and reward each one. Behind all this, the deeper idea at play is that fees are not just something to raise revenue; they can be an instrument to shape a market’s structure and improve its health.
Tidemark inherits the benefits of batch auctions: their ability to reduce the frequency of adverse selection as well as its impact. While the settings presented here are our first attempt to extend upon those benefits, we believe Tidemark opens a rich design space for further market improvements that we look forward to seeing explored.