GPv2 Fee Model

One of the most frequently asked questions by the GNO community about any product we build is: How will it capture value for GNO holders? In this topic, I’d like to outline our current thoughts regarding the long-term value capture mechanism of GPv2.

Gnosis Protocol v2 will incur a fee for each traded order. Since the user is not paying any gas for executing their trades (instead so-called solvers settle users’ trades on their behalf) the fee should be lower bound by the marginal execution cost of this order. In other words, the minimum fee should be the amount of gas a solver would have to pay to settle this user’s trade individually against the most common on-chain liquidity (referred to as baseline liquidity).

If we charged on average less than this amount, in the long run solvers would have no incentive to settle the orders.

On top of this fixed minimum fee amount per order, we may add a protocol fee of a few basis points on the traded volume. Depending on the overall utility of GPv2, this protocol fee could only be charged if there was value created for the user, that is if their trade was not entirely matched with on-chain liquidity but instead at least partially filled with some “private” liquidity or a “coincidence of want” of another trader. This protocol fee will be the main mechanism to capture value for GNO holders in the long term.

To summarize: fee = absolute_minimum_fee + (percentage_protocol_fee * sell_volume) only charged on successful trades.

GPv2’s has strong positive network effects (uniform clearing prices per batch, coincidence of wants). In order to maximally benefit traders it requires adoption.Therefore, at least initially the protocol fee should be close to 0 and even the minimum fee may be significantly subsidized in order to gain traction. As we build sustainable value from a trader perspective, we shall stop subsidizing the minimum fee and start charging the protocol fee.

Consequently, the backend services have been built for a long term sustainable fee capture:

In order to estimate the minimum fee amount the orderbook API simulates a baseline trade (assuming no other user orders in the system) and returns the amount of sell token that would need to be converted into ETH in order to execute this swap at the current gas price. The orderbook will only accept orders which are signed with a reasonable fee amount. Fee quotes can be queried from the backend and are valid for about one minute after querying (the time it might take the user to double check and sign an order).

Upon settlement, the smart contract logic captures the specified fee amount from each order in the sell token and keeps it in the settlement contract (At a future stage, the DAO could require fees captured in “exotic tokens” to be converted into ETH immediately).

Tokens owned by the settlement contract can only be withdrawn by authenticated solvers (it’s part of the attack surface that malicious solvers have on the protocol and should be considered for choosing a high enough “security deposit” amount).

We expect the DAO to keep track of the acquired fees and distribute them to the solvers according to their participation as well as to penalize them for any theft of fees.

For each auction, the solver that submitted the settlement should receive the minimum fees of all trades they settled plus some fraction of the protocol fee. We also advise to reserve another fraction of the fee for the runners up in the competition. This is to ensure that even solvers that provided a good but not the best solution are incentivized to continue participating (similar to the uncle block reward on Ethereum).

In the early phases of the protocol the DAO could decide to take the risk of fluctuating fees and a 0% protocol fee. It could distribute a fixed amount (e.g. 1 GNO) to the transaction origin of each “correctly” settled batch. This might incentivize serious solver competition even if the protocol is not yet generating sufficient fees itself.


In terms of gas the protocol don’t really save much compared to directly accessing uni, right? Since even a CoW requires four transfers, from both traders to the protocol and then from the protocol to both traders, which costs in gas pretty much the same as 2 independent uniswap trades, correct?

A CoW batch with two orders costs abut 192k gas on GPv2 vs 2 times 110k gas on Uni.

When batching multiple trades in the same direction together (e.g. k orders buying DAI for WETH) we start being more gas efficient than Uni for direct hops (which happens ~30% of the trades) at k = 3, and for two+ hop paths at k = 2, so as soon as there is more than one trade in the batch.

These numbers were benchmarked against Uni v2.

Related topic: Fees of Gnosis Protocol