Skip to content

Document zero fee for correlated assets - #689

Merged
ropusaurio merged 3 commits into
mainfrom
diego/correlated-asset-volume-fee-to-zero
Nov 13, 2026
Merged

ropusaurio merged 3 commits into
mainfrom
diego/correlated-asset-volume-fee-to-zero

Conversation

@ropusaurio

Copy link
Copy Markdown
Contributor

Description

The protocol volume fee on orders between correlated assets is now 0 bps, down from 0.3 bps. This PR updates the fees page so it shows the fee that is actually charged. It also corrects a sentence in the auction schema reference that said orders without a volume-based fee are rare.

The volume fee on all other orders is still 2 bps.

Changes

  • docs/governance/fees/fees.md: the volume fee for correlated assets is now 0 bps, and the fee calculation reads "no fee" instead of Volume * 0.00003. Under eligible orders, the page now says that orders between correlated assets are currently not charged a volume fee.
  • docs/cow-protocol/reference/core/auctions/schema.md: the explanation of buyAmount/sellAmount vs. fullBuyAmount/fullSellAmount said orders without a volume-based fee are rare. That's no longer true for correlated pairs, so it now gives an order between correlated tokens with no partner fee as an example where the two match.

@ropusaurio
ropusaurio requested a review from a team as a code owner November 13, 2026 13:35
@vercel

vercel Bot commented Nov 13, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
docs Ready Ready Preview Nov 13, 2026 4:30pm UTC

Request Review

@coderabbitai

coderabbitai Bot commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

Important

  • Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 1ff0a2f0-b957-4bf0-b904-d025cb510130
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

```

The above entry should be interpreted as follows. It is a Fill-or-Kill order since the flag `partiallyFillable` is set to `false`. Moreover, it is a sell order since its `kind` is set to `sell`. Finally, this is a `limit` order, meaning that it has a zero-signed fee, which implies that the solver is free to choose an appropriate fee to cover its execution cost. This means that, if executed, the user will send a total of 1000000000000000000000 COW atoms to the settlement contract, and the user has signed for a minimum of 284138335 USDC atoms (`fullBuyAmount`). The order also carries a 2 bps volume fee, which the driver will deduct from the buy side once the trade settles. Since the order has not been partially filled, `sellAmount` still equals `fullSellAmount`, but `buyAmount` is scaled up from `fullBuyAmount` to net out that fee: `buyAmount` = `fullBuyAmount` / (1 - 0.0002) = 284138335 / 0.9998 ≈ 284195174.03, rounded down to 284195174. Solvers can then route on `sellAmount`/`buyAmount` while ignoring fees entirely, and once the driver charges its 2 bps cut of the 284195174 USDC bought (≈56839 USDC atoms), the user is left with exactly the signed minimum of 284138335 USDC atoms — so the original limit is never violated. This is the usual case in practice: on most chains essentially every order carries some volume-based protocol or partner fee, so `buyAmount`/`sellAmount` differ from `fullBuyAmount`/`fullSellAmount` even without any partial fill; the two only coincide when there is no such fee, which is rare.
The above entry should be interpreted as follows. It is a Fill-or-Kill order since the flag `partiallyFillable` is set to `false`. Moreover, it is a sell order since its `kind` is set to `sell`. Finally, this is a `limit` order, meaning that it has a zero-signed fee, which implies that the solver is free to choose an appropriate fee to cover its execution cost. This means that, if executed, the user will send a total of 1000000000000000000000 COW atoms to the settlement contract, and the user has signed for a minimum of 284138335 USDC atoms (`fullBuyAmount`). The order also carries a 2 bps volume fee, which the driver will deduct from the buy side once the trade settles. Since the order has not been partially filled, `sellAmount` still equals `fullSellAmount`, but `buyAmount` is scaled up from `fullBuyAmount` to net out that fee: `buyAmount` = `fullBuyAmount` / (1 - 0.0002) = 284138335 / 0.9998 ≈ 284195174.03, rounded down to 284195174. Solvers can then route on `sellAmount`/`buyAmount` while ignoring fees entirely, and once the driver charges its 2 bps cut of the 284195174 USDC bought (≈56839 USDC atoms), the user is left with exactly the signed minimum of 284138335 USDC atoms — so the original limit is never violated. This is the usual case in practice: on most chains, orders between uncorrelated tokens carry a volume-based protocol fee and many orders carry a partner fee, so `buyAmount`/`sellAmount` differ from `fullBuyAmount`/`fullSellAmount` even without any partial fill; the two only coincide when there is no such fee, e.g. for an order between correlated tokens (which are not charged a protocol volume fee) without a partner fee.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a perfect example, of why we should always have 1 line per sentence in MD files. Otherwise reading a diff can become really hard for straightforward changes.

@ropusaurio
ropusaurio merged commit cb225ed into main Nov 13, 2026
5 checks passed
@ropusaurio
ropusaurio deleted the diego/correlated-asset-volume-fee-to-zero branch November 13, 2026 17:16
@github-actions github-actions Bot locked and limited conversation to collaborators Nov 13, 2026

This branch was successfully deployed

1 active deployment
Preview — bd310549 Deployed Nov 13, 2026 by vercel[bot]
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants