Skip to content

Conversation

@tamir-cow
Copy link
Contributor

@tamir-cow tamir-cow commented Oct 16, 2025

Added comprehensive onboarding guide for joining the CoW Protocol Solver Competition, covering essential information, development, competitions, KYC checks, and rewards.

Summary by CodeRabbit

  • Documentation
    • Added a comprehensive solver onboarding guide covering joining and operating in the bonding-pool competition: prerequisites, local development, shadow/testing, KYC onboarding, staging and production rollouts, mainnet participation, weekly rewards and competitions, slippage accounting, cross-network moves, quoting competitions, examples, FAQs, and resource links.
    • Updated rewards reference to include CIP-72 and clarified rewards eligibility.

Added comprehensive onboarding guide for joining the CoW Protocol Solver Competition, covering essential information, development, competitions, KYC checks, and rewards.
@tamir-cow tamir-cow requested a review from a team as a code owner October 16, 2025 12:32
@vercel
Copy link

vercel bot commented Oct 16, 2025

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

Project Deployment Preview Updated (UTC)
docs Ready Ready Preview Oct 20, 2025 3:18pm

💡 Enable Vercel Agent with $100 free credit for automated AI reviews

@github-actions
Copy link

github-actions bot commented Oct 16, 2025

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Oct 16, 2025

Warning

Rate limit exceeded

@harisang has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 17 minutes and 4 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between e1ef8ec and c011078.

📒 Files selected for processing (1)
  • docs/cow-protocol/tutorials/solvers/onboard.md (1 hunks)

Walkthrough

Adds a new solver onboarding tutorial (end-to-end guide) and updates the auctions rewards reference to include CIP-72 and expanded reward eligibility wording. All changes are documentation-only; no code or public API declarations were modified.

Changes

Cohort / File(s) Summary
Solver Onboarding Guide
docs/cow-protocol/tutorials/solvers/onboard.md
New documentation: end-to-end onboarding and operations guide for participating as a solver in the CoW Protocol competition, covering prerequisites, local development, shadow/testing, KYC/onboarding, staging/production, rewards, accounting, slippage, cross-network moves, competitions, and FAQs.
Auctions Rewards Reference
docs/cow-protocol/reference/core/auctions/rewards.md
Updated header and prose to add explicit reference to CIP-72 (now "CIPs 27, 57, 72") and expanded description of price-estimation competition reward eligibility aligned with CIP-72.

Sequence Diagram(s)

Not applicable — documentation-only changes; no control-flow or runtime behavior modified.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~2 minutes

Possibly related PRs

  • Update rewards.md #528 — Edits to docs/cow-protocol/reference/core/auctions/rewards.md concerning CIP-72 wording (directly related).
  • Update rewards.md #499 — Prior updates to the auctions rewards documentation and CIP references (related).

Suggested reviewers

  • pretf00d
  • fhenneke

Poem

🐇 I hopped through pages, lantern bright,
Guided solvers from shadow to light.
KYC, rewards, staging in view,
Docs stitched neat — a carrot or two.
Onward we bind, code-free delight. 🥕

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Description Check ⚠️ Warning The pull request description does not follow the required template structure. The repository template explicitly requires a "Description" section with context about why changes are needed, followed by a "Changes" section with detailed checkboxes listing each change. The provided description is a single sentence that offers only a high-level summary without the structured sections, context, or detailed change list mandated by the template. This represents a largely incomplete description that fails to meet the repository's documentation requirements.
✅ Passed checks (2 passed)
Check name Status Explanation
Title Check ✅ Passed The pull request title "Create onboarding guide for CoW Protocol Solver Competition" clearly and concisely describes the primary change in the changeset—the addition of a new comprehensive onboarding guide for solver competition participants. While the PR also includes a secondary update to the rewards documentation file (adding CIP-72 reference), the title appropriately focuses on the main contribution. The title is specific and avoids vague terminology, making it clear to reviewers what the primary purpose of the PR is.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

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

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (1)
docs/cow-protocol/tutorials/solvers/onboard.md (1)

6-18: Optional: Turn the Index into clickable section links.

Improves navigation and readability.

Example:

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 28d6b39 and b57d05e.

📒 Files selected for processing (1)
  • docs/cow-protocol/tutorials/solvers/onboard.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
docs/cow-protocol/tutorials/solvers/onboard.md

[grammar] ~6-~6: There might be a mistake here.
Context: ...solver_onboarding_process.jpg) ## Index 1. Essential information 2. Locally develop...

(QB_NEW_EN)


[grammar] ~7-~7: There might be a mistake here.
Context: ....jpg) ## Index 1. Essential information 2. Locally developing your solver 3. Joinin...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ...mation 2. Locally developing your solver 3. Joining the shadow competition 4. KYC ch...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...solver 3. Joining the shadow competition 4. KYC checks and onboarding call 5. Joinin...

(QB_NEW_EN)


[grammar] ~10-~10: There might be a mistake here.
Context: ...tition 4. KYC checks and onboarding call 5. Joining the staging competition 6. Movin...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ... call 5. Joining the staging competition 6. Moving to production 7. Weekly rewards 8...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...ging competition 6. Moving to production 7. Weekly rewards 8. Slippage accounting 9....

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: .... Moving to production 7. Weekly rewards 8. Slippage accounting 9. Moving to other n...

(QB_NEW_EN)


[grammar] ~14-~14: There might be a mistake here.
Context: ...7. Weekly rewards 8. Slippage accounting 9. Moving to other networks 10. Joining the...

(QB_NEW_EN)


[grammar] ~15-~15: There might be a mistake here.
Context: ...e accounting 9. Moving to other networks 10. Joining the mainnet competition 11. Join...

(QB_NEW_EN)


[grammar] ~16-~16: There might be a mistake here.
Context: ...orks 10. Joining the mainnet competition 11. Joining the quoting competition 12. F.A....

(QB_NEW_EN)


[grammar] ~17-~17: There might be a mistake here.
Context: ...tion 11. Joining the quoting competition 12. F.A.Q. ## 1. Essential information for ...

(QB_NEW_EN)


[locale-violation] ~23-~23: In American English, ‘afterward’ is the preferred variant. ‘Afterwards’ is more commonly used in British English and other dialects.
Context: ...ting so that you can send the documents afterwards. Given the risk that will be carried b...

(AFTERWARDS_US)


[grammar] ~27-~27: There might be a mistake here.
Context: ...me of solving on L2's. ### Service fees As specified in [CIP-48](https://snapsho...

(QB_NEW_EN)


[grammar] ~31-~31: Use a hyphen to join words.
Context: ...up a solver locally. There are also open source example solvers available in the ...

(QB_NEW_EN_HYPHEN)


[grammar] ~40-~40: There might be a mistake here.
Context: ...you can whitelist. ### Exposed Endpoint The exposed endpoint provided must be of...

(QB_NEW_EN)


[grammar] ~43-~43: There might be a mistake here.
Context: ...### Driver configuration for your solver There are various configurations we can ...

(QB_NEW_EN)


[grammar] ~46-~46: There might be a mistake here.
Context: ...## - Wrapping / unwrapping native tokens The default behaviour for the driver is ...

(QB_NEW_EN)


[style] ~50-~50: ‘In the event that’ might be wordy. Consider a shorter alternative.
Context: ...ble liquidity fetching for your solver. In the event that this is enabled, the driver will search...

(EN_WORDINESS_PREMIUM_IN_THE_EVENT_THAT)


[grammar] ~50-~50: Use a hyphen to join words.
Context: ...s enabled, the driver will search for on chain liquidity sources for your solver ...

(QB_NEW_EN_HYPHEN)


[grammar] ~52-~52: There might be a mistake here.
Context: ...uidity) #### - Fairness checks for EBBO To ensure a fair execution for the users...

(QB_NEW_EN)


[style] ~80-~80: Consider a more expressive alternative.
Context: ...he submission keys on your behalf. To do this, the team will generate keys for y...

(DO_ACHIEVE)


[style] ~80-~80: Consider a more concise word here.
Context: ...sting those for the solver competition. In order to do this you will need to send a `reward...

(IN_ORDER_TO_PREMIUM)


[style] ~80-~80: Consider a more expressive alternative.
Context: ...for the solver competition. In order to do this you will need to send a `rewards a...

(DO_ACHIEVE)


[style] ~80-~80: Consider using a different verb to strengthen your wording.
Context: ...address on the Arbitrum network. Please make sure that your address is ready to receive f...

(MAKE_SURE_ENSURE)


[grammar] ~82-~82: Use a hyphen to join words.
Context: ...ur solver will use to settle auctions on chain. While this is managed by the CoW ...

(QB_NEW_EN_HYPHEN)


[grammar] ~84-~84: There might be a mistake here.
Context: ...ironment | Recommended initial balance | |---|---|---| | Mainnet | Staging | 0.2 ...

(QB_NEW_EN)


[grammar] ~85-~85: There might be a mistake here.
Context: ...ommended initial balance | |---|---|---| | Mainnet | Staging | 0.2 ETH | | Mainne...

(QB_NEW_EN)


[grammar] ~86-~86: There might be a mistake here.
Context: ...---|---| | Mainnet | Staging | 0.2 ETH | | Mainnet | Production | 1 ETH | | Arbit...

(QB_NEW_EN)


[grammar] ~87-~87: There might be a mistake here.
Context: ...2 ETH | | Mainnet | Production | 1 ETH | | Arbitrum | Staging | 0.05 ETH | | Arbi...

(QB_NEW_EN)


[grammar] ~88-~88: There might be a mistake here.
Context: ... ETH | | Arbitrum | Staging | 0.05 ETH | | Arbitrum | Production | 0.2 ETH | | Ba...

(QB_NEW_EN)


[grammar] ~89-~89: There might be a mistake here.
Context: ...TH | | Arbitrum | Production | 0.2 ETH | | Base | Staging | 0.05 ETH | | Base | P...

(QB_NEW_EN)


[grammar] ~90-~90: There might be a mistake here.
Context: ... 0.2 ETH | | Base | Staging | 0.05 ETH | | Base | Production | 0.2 ETH | | Gnosis...

(QB_NEW_EN)


[grammar] ~91-~91: There might be a mistake here.
Context: ...05 ETH | | Base | Production | 0.2 ETH | | Gnosis | Staging | 15 xDAI | | Gnosis ...

(QB_NEW_EN)


[grammar] ~92-~92: There might be a mistake here.
Context: ...0.2 ETH | | Gnosis | Staging | 15 xDAI | | Gnosis | Production | 100 xDAI | > **...

(QB_NEW_EN)


[style] ~98-~98: Consider a more concise word here.
Context: ...tle transactions for winning auctions. In order to create some volume to test your solver,...

(IN_ORDER_TO_PREMIUM)


[grammar] ~102-~102: Use a hyphen to join words.
Context: ... solver by settling some transactions on chain before going live on production. ...

(QB_NEW_EN_HYPHEN)


[grammar] ~104-~104: There might be a mistake here.
Context: ...ive on production. ## 7. Weekly rewards Every week on Tuesday your solver will r...

(QB_NEW_EN)


[style] ~112-~112: As a shorter alternative for ‘able to’, consider using “can”.
Context: ...rds) ## 8. Slippage accounting Solvers are able to use the settlement contract's buffers w...

(BE_ABLE_TO)


[grammar] ~125-~125: There might be a mistake here.
Context: ...n on Arbitrum we can enable your solver on Gnosis chain and Base network relativel...

(QB_NEW_EN)


[grammar] ~127-~127: There might be a mistake here.
Context: ...COW rewards associated with that network - An endpoint that you would like to use f...

(QB_NEW_EN)


[grammar] ~136-~136: Use a hyphen to join words.
Context: ...hen leads to an order that is settled on chain. Then your solver will receive a f...

(QB_NEW_EN_HYPHEN)


[grammar] ~136-~136: Use a hyphen to join words.
Context: ...ociated auction and settled the order on chain. [More information about the quot...

(QB_NEW_EN_HYPHEN)


[grammar] ~140-~140: There might be a mistake here.
Context: ...ition-rewards-cips-27-57) ## 12. F.A.Q. ### Can we get access to the orderbook API? ...

(QB_NEW_EN)


[grammar] ~141-~141: There might be a mistake here.
Context: ... Can we get access to the orderbook API? Yes, we can whitelist solvers so that th...

(QB_NEW_EN)


[grammar] ~142-~142: Use a hyphen to join words.
Context: ...ur solver is live and settling orders on chain. ### How do we integrate CoW AMM'...

(QB_NEW_EN_HYPHEN)


[grammar] ~154-~154: Use a hyphen to join words.
Context: ...is tested by actually settling orders on chain. Finally, production is where the...

(QB_NEW_EN_HYPHEN)


[grammar] ~159-~159: There might be a mistake here.
Context: ...rerequisites (other than KYC if solving on Cow bonding pool) but its recommended t...

(QB_NEW_EN)


[grammar] ~159-~159: There might be a mistake here.
Context: ...ttle solutions on shadow before staging.

(QB_NEW_EN)

🪛 markdownlint-cli2 (0.18.1)
docs/cow-protocol/tutorials/solvers/onboard.md

33-33: Bare URL used

(MD034, no-bare-urls)


41-41: Bare URL used

(MD034, no-bare-urls)


148-148: Bare URL used

(MD034, no-bare-urls)

# Joining The CoW Protocol Solver Competition
> **_NOTE:_** Most of this document assumes that you will be joining the solver competition under the CoW Bonding pool. If you were to set up your own bonding pool then most of the information in this document is either optional or irrelevant. To join the solver competition under your own bonding pool refer to [this document](https://docs.cow.fi/cow-protocol/reference/core/auctions/bonding-pools) to set up the bonding pool and reach out to help set up the bonding pool and whitelist your solver's address.

![General process for joining the solver competition](./images/solver_onboarding_process.jpg)
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify links (incl. Snapshot CIP-48) and image path; fix any 404s. Script included.

Please validate all external/internal links and the image reference. Snapshot domain looks unusual; confirm it’s correct.

Also applies to: 28-28, 31-31, 33-33, 41-41, 50-51, 52-56, 58-59, 80-83, 84-94, 99-99, 104-110, 112-123, 124-129, 130-139, 145-146, 148-148


🏁 Script executed:

#!/bin/bash
set -euo pipefail

FILE="docs/cow-protocol/tutorials/solvers/onboard.md"

echo "Checking image existence..."
IMG_PATH="docs/cow-protocol/tutorials/solvers/images/solver_onboarding_process.jpg"
if [[ -f "$IMG_PATH" ]]; then
  echo "OK: Image exists at $IMG_PATH"
else
  echo "MISSING: $IMG_PATH"
fi

echo
echo "Extracting and checking URLs (HEAD with follow redirects)..."
# Extract http(s) URLs (bare and markdown)
URLS=$(gawk '
  match($0, /(https?:\/\/[A-Za-z0-9._~:\/?#\[\]@!$&'"'"'()*+,;=%-]+)/, m) {
    print m[1]
  }' "$FILE" | sort -u)

i=0
while IFS= read -r url; do
  ((i++))
  echo "[$i] $url"
  # Some sites reject HEAD; try GET on failure
  code=$(curl -sIL -o /dev/null -w '%{http_code}' "$url" || true)
  if [[ "$code" -ge 200 && "$code" -lt 400 ]]; then
    echo "  OK (HEAD): $code"
  else
    code_get=$(curl -sL -o /dev/null -w '%{http_code}' "$url" || true)
    echo "  GET status: $code_get"
    if [[ "$code_get" -lt 200 || "$code_get" -ge 400 ]]; then
      echo "  ERROR: Non-2xx/3xx for $url"
    fi
  fi
done <<< "$URLS"

echo
echo "Done."

Length of output: 171


🏁 Script executed:

#!/bin/bash
set -euo pipefail
echo "Searching for solver_onboarding_process asset..."
fd solver_onboarding_process docs/cow-protocol/tutorials/solvers/images

Length of output: 178


🏁 Script executed:

#!/bin/bash
set -euo pipefail

FILE="docs/cow-protocol/tutorials/solvers/onboard.md"

echo "=== First 50 lines of $FILE ==="
sed -n '1,50p' "$FILE"
echo

echo "=== Markdown links in $FILE ==="
grep -Eo '\[.*?\]\([^\)]+\)' "$FILE" | sort -u

Length of output: 5760


Fix missing image and confirm Snapshot CIP-48 link

  • docs/cow-protocol/tutorials/solvers/images/solver_onboarding_process.jpg is missing (onboard.md line 4); add the file or correct its path.
  • Verify that the CIP-48 link (https://snapshot.box/#/s:cow.eth/proposal/0x563ab9a66265ad72c47a8e55f620f927685dd07d4d49f6d1812905c683f05805) resolves correctly—or update to the proper Snapshot domain if needed.
🤖 Prompt for AI Agents
In docs/cow-protocol/tutorials/solvers/onboard.md around line 4, the embedded
image path ./images/solver_onboarding_process.jpg is broken because the file is
missing or the path is incorrect; add the image file to
docs/cow-protocol/tutorials/solvers/images/ with the exact filename or update
the path to the correct location, and verify the image renders; additionally
check the CIP-48 Snapshot URL
(https://snapshot.box/#/s:cow.eth/proposal/0x563ab9a66265ad72c47a8e55f620f927685dd07d4d49f6d1812905c683f05805)
and replace it with the correct Snapshot domain (e.g., snapshot.org or the valid
current Snapshot host) if the link does not resolve.

@tamir-cow
Copy link
Contributor Author

I have read the CLA Document and I hereby sign the CLA

github-actions bot added a commit that referenced this pull request Oct 16, 2025
@@ -0,0 +1,159 @@
# Joining The CoW Protocol Solver Competition
> **_NOTE:_** Most of this document assumes that you will be joining the solver competition under the CoW Bonding pool. If you were to set up your own bonding pool then most of the information in this document is either optional or irrelevant. To join the solver competition under your own bonding pool refer to [this document](https://docs.cow.fi/cow-protocol/reference/core/auctions/bonding-pools) to set up the bonding pool and reach out to help set up the bonding pool and whitelist your solver's address.
Copy link
Contributor

@harisang harisang Oct 20, 2025

Choose a reason for hiding this comment

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

Suggested change
> **_NOTE:_** Most of this document assumes that you will be joining the solver competition under the CoW Bonding pool. If you were to set up your own bonding pool then most of the information in this document is either optional or irrelevant. To join the solver competition under your own bonding pool refer to [this document](https://docs.cow.fi/cow-protocol/reference/core/auctions/bonding-pools) to set up the bonding pool and reach out to help set up the bonding pool and whitelist your solver's address.
> **_NOTE:_** Most of this document assumes that you will be joining the solver competition under the CoW DAO bonding pool. If you were to set up your own bonding pool then most of the information in this document is either optional or irrelevant. To join the solver competition under your own bonding pool refer to [this document](https://docs.cow.fi/cow-protocol/reference/core/auctions/bonding-pools) to set up the bonding pool and reach out to help set up the bonding pool and whitelist your solver's address.

If you would like to secure your solver, you can set up a firewall and only accept requests from IP addresses that you whitelist beforehand. Contact us for the IP addresses that we use to send requests to your solver that you can whitelist.

### Exposed Endpoint
The exposed endpoint provided must be of the following format: {base_url}/${envName}/${network} - for example: https://api.mysolver.io/staging/mainnet
Copy link
Contributor

Choose a reason for hiding this comment

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

We should explain here what are the options for envName

tamir-cow and others added 3 commits October 20, 2025 12:01
Co-authored-by: Haris Angelidakis <64154020+harisang@users.noreply.github.com>
Co-authored-by: Haris Angelidakis <64154020+harisang@users.noreply.github.com>
Co-authored-by: Haris Angelidakis <64154020+harisang@users.noreply.github.com>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

♻️ Duplicate comments (18)
docs/cow-protocol/tutorials/solvers/onboard.md (18)

28-28: Change Snapshot URL domain from snapshot.box to snapshot.org.

The CIP-48 link uses the non-canonical domain snapshot.box. Per past reviewer feedback and verification, the correct public Snapshot domain is snapshot.org. Update the URL path format as well (from #/s:cow.eth/... to #/cow.eth/...).


141-141: Fix hyphenation: "on chain" → "on-chain".

Line 141 uses incorrect hyphenation for the compound modifier.

- Yes, we can whitelist solvers so that they can have access to the orderbook API. Although we generally wait with this until your solver is live and settling orders on chain.
+ Yes, we can whitelist solvers so that they can have access to the orderbook API. Although we generally wait with this until your solver is live and settling orders on-chain.

48-48: Fix US English spelling: "behaviour" → "behavior".

Line 48 uses British spelling "behaviour"; align with US English "behavior".

- The default behaviour for the driver is to set the native token address to `0xeee` and to insert interactions into your solution to unwrap the native token. It's also possible to configure this to either send the wrapped token address (WETH) and unwrap the native token, or send the wrapped token address and not unwrap the native token.
+ The default behavior for the driver is to set the native token address to `0xeee` and to insert interactions into your solution to unwrap the native token. It's also possible to configure this to either send the wrapped token address (WETH) and unwrap the native token, or send the wrapped token address and not unwrap the native token.

153-153: Fix hyphenation: "on chain" → "on-chain".

Line 153 uses incorrect hyphenation for the compound modifier.

- In the staging (barn) competition settling happens on-chain but the volume is much lower. That way the solver is tested by actually settling orders on chain.
+ In the staging (barn) competition settling happens on-chain but the volume is much lower. That way the solver is tested by actually settling orders on-chain.

59-59: Fix grammar: "merge disjoint solutions in to" → "into".

Line 59 incorrectly splits "into" as two words "in to".

- It is possible for your solver to submit multiple solutions for a single auction and let the driver select the solution with the highest score to submit to the auction. It is possible to enable the driver to merge disjoint solutions in to a single solution for the auction. [Docs](https://docs.cow.fi/cow-protocol/tutorials/arbitrate/solver/driver#postprocessing-solutions)
+ It is possible for your solver to submit multiple solutions for a single auction and let the driver select the solution with the highest score to submit to the auction. It is possible to enable the driver to merge disjoint solutions into a single solution for the auction. [Docs](https://docs.cow.fi/cow-protocol/tutorials/arbitrate/solver/driver#postprocessing-solutions)

143-143: Fix possessive: "CoW AMM's" → "CoW AMMs".

Line 143 uses an incorrect possessive apostrophe; the plural form of "AMM" does not require an apostrophe.

- ### How do we integrate CoW AMM's?
+ ### How do we integrate CoW AMMs?

51-51: Simplify wordy phrasing and fix hyphenation: "In the event that" → "If", "on chain" → "on-chain".

Line 51 uses unnecessarily wordy "In the event that" and incorrect hyphenation "on chain".

- It is possible to enable or disable liquidity fetching for your solver. In the event that this is enabled, the driver will search for on chain liquidity sources for your solver to use and send them to your solver. [Docs](https://docs.cow.fi/cow-protocol/tutorials/arbitrate/solver/driver#fetching-liquidity)
+ It is possible to enable or disable liquidity fetching for your solver. If this is enabled, the driver will search for on-chain liquidity sources for your solver to use and send them to your solver. [Docs](https://docs.cow.fi/cow-protocol/tutorials/arbitrate/solver/driver#fetching-liquidity)

151-151: Clarify that chain list is not exhaustive and capitalize "Arbitrum".

Line 151 says "only arbitrum and mainnet now", which implies a fixed list and lowercases "Arbitrum". Per past reviewer feedback, clarify that other chains may be added and use proper capitalization.

- In the shadow competition (only arbitrum and mainnet now) the solver is tested using production order flow but without settling any orders. This is for testing the integration of the solver. It is possible to simulate the solver's solutions and see how it does.
+ In the shadow competition (currently on Arbitrum and Ethereum Mainnet, among others) the solver is tested using production order flow but without settling any orders. This is for testing the integration of the solver. It is possible to simulate the solver's solutions and see how it performs.

83-83: Fix hyphenation and grammar: "on chain" → "on-chain", fix typo "is holds" → "it holds".

Line 83 has incorrect hyphenation and a typo ("is holds" should be "it holds").

- After this process is done, the team will send you the submission addresses that your solver will use to settle auctions on chain. While this is managed by the CoW team, it will be your responsibility to monitor this and make sure that is holds enough funds to cover gas fees. The driver has a minimum threshold for gas that it applies to make sure that the address holds (more than) enough funds to pay the required gas fees. Therefore we recommend these balances:
+ After this process is done, the team will send you the submission addresses that your solver will use to settle auctions on-chain. While this is managed by the CoW team, it will be your responsibility to monitor these addresses and ensure they hold enough funds to cover gas fees. The driver has a minimum gas threshold to ensure the address holds sufficient funds to pay required gas fees. Therefore, we recommend these balances:

113-113: Simplify: "are able to" → "can".

Line 113 uses unnecessarily wordy phrasing; use the simpler "can".

- Solvers are able to use the settlement contract's buffers when settling auctions. This can often result in one of two situations when prices move during an auction:
+ Solvers can use the settlement contract's buffers when settling auctions. This can often result in one of two situations when prices move during an auction:

23-23: Fix US English spelling: "afterwards" → "afterward".

Line 23 uses "afterwards" (British English); for consistency with US English conventions used elsewhere, change to "afterward".

- Do not send this before the meeting, we will explain the process during the meeting so that you can send the documents afterwards.
+ Do not send this before the meeting, we will explain the process during the meeting so that you can send the documents afterward.

134-137: Simplify quoting competition section to avoid inaccurate description.

Per past reviewer feedback, the current description conflates concepts and is inaccurate. Replace the verbose explanation with a concise pointer to the authoritative documentation.

- ## 11. Joining the quoting competition
- Besides the solving competition, there is also a quoting competition. This involves responding to a single order batch with a proposed execution for the order and a price that could be delivered to the user. 
- 
- [More information about the quoting competition can be found here.](https://docs.cow.fi/cow-protocol/reference/core/auctions/rewards#price-estimation-competition-rewards-cips-27-57)
+ ## 11. Joining the quoting competition
+ Besides the solving competition, there is also a quoting competition. For details on how to participate and the reward structure, see the [Price Estimation Competition Rewards documentation](https://docs.cow.fi/cow-protocol/reference/core/auctions/rewards#price-estimation-competition-rewards-cips-27-57).

103-103: Fix hyphenation: "on chain" → "on-chain".

Line 103 uses incorrect hyphenation for the compound modifier.

- Once your solver has moved to staging we can deploy your solver on production. Usually the team will schedule your solver to go live with the next release (on Tuesday) after you are deployed on staging. This gives your team a few days to test your solver by settling some transactions on chain before going live on production.
+ Once your solver has moved to staging we can deploy your solver on production. Usually the team will schedule your solver to go live with the next release (on Tuesday) after you are deployed on staging. This gives your team a few days to test your solver by settling some transactions on-chain before going live on production.

41-42: Clarify endpoint format with concrete parameter definitions.

Line 41 shows the format but lines 41–42 lack clear explanation of what envName and network values should be. Past reviewer feedback requests documenting these parameter options.

- The exposed endpoint provided must be of the following format: {base_url}/\${envName}/\${network} - for example: https://api.mysolver.io/staging/mainnet
- envName values: shadow, staging, prod
+ The exposed endpoint must follow this format: `{base_url}/${envName}/${network}`
+ 
+ For example: `https://api.mysolver.io/staging/mainnet`
+ 
+ where `envName` is one of: `shadow`, `staging`, or `prod`, and `network` is the blockchain identifier (e.g., `mainnet`, `arbitrum`).

129-129: Fix typo: "staging ad production" → "staging and production".

Line 129 contains a typo: "ad" should be "and".

- - An endpoint that you would like to use for staging ad production
+ - An endpoint that you would like to use for staging and production

56-56: Add comma for readability: "In the event of an EBBO violation..."

Line 56 starts an independent clause after dependent context; add a comma for clarity.

- In the event of an EBBO violation the team will reach out and ask you to reimburse the user. [Docs](https://docs.cow.fi/cow-protocol/reference/core/auctions/ebbo-rules)
+ In the event of an EBBO violation, the team will reach out and ask you to reimburse the user. [Docs](https://docs.cow.fi/cow-protocol/reference/core/auctions/ebbo-rules)

33-33: Format bare URL as a markdown link.

Line 33 contains a bare URL; convert it to a properly formatted link for consistency with the rest of the document.

- API specification: https://github.com/cowprotocol/services/blob/main/crates/solvers/openapi.yml
+ API specification: [OpenAPI spec](https://github.com/cowprotocol/services/blob/main/crates/solvers/openapi.yml)

81-82: Clarify rewards address requirements for multi-chain setup and fix wordiness.

Line 81 says "In order to do this you will need to send a rewards address..." but lacks critical clarity per past reviewer feedback. The rewards address must be controlled on both the solving chain AND mainnet, as native tokens go to the solving chain while COW rewards always go to mainnet. This is partially addressed in line 81, but the wording is confusing.

- To do this, the team will generate keys for your solver to use for settling auctions on-chain and whitelisting those for the solver competition. In order to do this you will need to send a `rewards address` that you would like to use to receive weekly rewards on the chain that you are solving on. The rewards address needs to be controlled by the relevant solver team on both chain X and mainnet, as we send native token transfers to chain X while we send COW rewards to the mainnet address always
+ To do this, the team will generate keys for your solver to use for settling auctions on-chain and whitelisting those for the solver competition. To submit these, you will need to provide a `rewards address` that you control on both the solving chain and mainnet. Native token rewards and slippage will be sent to this address on the solving chain (e.g., Arbitrum), while COW token rewards are always sent to the address on mainnet.
🧹 Nitpick comments (1)
docs/cow-protocol/tutorials/solvers/onboard.md (1)

112-123: Consider condensing or removing the "Slippage accounting" section to avoid duplication.

Per past reviewer feedback (harisang), this section largely reiterates content from the dedicated accounting documentation at https://docs.cow.fi/cow-protocol/reference/core/auctions/accounting. Consider replacing the full section with a brief summary (1–2 sentences) and a link to the detailed docs.

- ## 8. Slippage accounting
- Solvers can use the settlement contract's buffers when settling auctions. This can often result in one of two situations when prices move during an auction:
- 
- 1. The settlement contract receives more tokens than what was promised to the user.
- 
- In this situation, some extra tokens will be left in the settlement contract after the auction is finished.
- 
- 2. The settlement contract receives less tokens than what was promised to the user.
- 
- In this situation, if the settlement contract has enough of the tokens in its buffers, then the user will still receive the amount of tokens that they were promised. But, some of the funds will have been borrowed from the settlement contract's buffers.
- 
- These will be converted to native currencies (ETH or xDAI) and transferred to your solver at the end of the week. If the settlement contract received more tokens in total over the week than what was borrowed, then you will receive this amount to your rewards address. But if more was borrowed from the settlement contract than what was returned, then your solver will be asked to reimburse the difference.
+ ## 8. Slippage accounting
+ Solvers can use the settlement contract's buffers when settling auctions. When prices move during an auction, the settlement contract may receive more tokens than promised (creating a surplus) or fewer tokens (requiring a buffer loan). These differences are reconciled weekly: surpluses are sent to your rewards address, and any net borrowing must be reimbursed. For detailed mechanics, see the [Accounting documentation](https://docs.cow.fi/cow-protocol/reference/core/auctions/accounting).
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0b425ee and 767618d.

📒 Files selected for processing (1)
  • docs/cow-protocol/tutorials/solvers/onboard.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
docs/cow-protocol/tutorials/solvers/onboard.md

[locale-violation] ~23-~23: In American English, ‘afterward’ is the preferred variant. ‘Afterwards’ is more commonly used in British English and other dialects.
Context: ...ting so that you can send the documents afterwards. Given the risk that will be carried b...

(AFTERWARDS_US)


[grammar] ~31-~31: Use a hyphen to join words.
Context: ...up a solver locally. There are also open source example solvers available in the ...

(QB_NEW_EN_HYPHEN)


[style] ~51-~51: ‘In the event that’ might be wordy. Consider a shorter alternative.
Context: ...ble liquidity fetching for your solver. In the event that this is enabled, the driver will search...

(EN_WORDINESS_PREMIUM_IN_THE_EVENT_THAT)


[grammar] ~51-~51: Use a hyphen to join words.
Context: ...s enabled, the driver will search for on chain liquidity sources for your solver ...

(QB_NEW_EN_HYPHEN)


[style] ~81-~81: Consider a more expressive alternative.
Context: ...he submission keys on your behalf. To do this, the team will generate keys for y...

(DO_ACHIEVE)


[style] ~81-~81: Consider a more concise word here.
Context: ...sting those for the solver competition. In order to do this you will need to send a `reward...

(IN_ORDER_TO_PREMIUM)


[style] ~81-~81: Consider a more expressive alternative.
Context: ...for the solver competition. In order to do this you will need to send a `rewards a...

(DO_ACHIEVE)


[grammar] ~83-~83: Use a hyphen to join words.
Context: ...ur solver will use to settle auctions on chain. While this is managed by the CoW ...

(QB_NEW_EN_HYPHEN)


[style] ~99-~99: Consider a more concise word here.
Context: ...tle transactions for winning auctions. In order to create some volume to test your solver,...

(IN_ORDER_TO_PREMIUM)


[grammar] ~103-~103: Use a hyphen to join words.
Context: ... solver by settling some transactions on chain before going live on production. ...

(QB_NEW_EN_HYPHEN)


[style] ~113-~113: As a shorter alternative for ‘able to’, consider using “can”.
Context: ...rds) ## 8. Slippage accounting Solvers are able to use the settlement contract's buffers w...

(BE_ABLE_TO)


[grammar] ~141-~141: Use a hyphen to join words.
Context: ...ur solver is live and settling orders on chain. ### How do we integrate CoW AMM'...

(QB_NEW_EN_HYPHEN)


[grammar] ~153-~153: Use a hyphen to join words.
Context: ...is tested by actually settling orders on chain. Finally, production is where the...

(QB_NEW_EN_HYPHEN)

🪛 markdownlint-cli2 (0.18.1)
docs/cow-protocol/tutorials/solvers/onboard.md

33-33: Bare URL used

(MD034, no-bare-urls)


41-41: Bare URL used

(MD034, no-bare-urls)

🔇 Additional comments (1)
docs/cow-protocol/tutorials/solvers/onboard.md (1)

4-4: Image file exists and path reference is correct.

The image solver_onboarding_process.jpg is present at docs/cow-protocol/tutorials/solvers/solver_onboarding_process.jpg. Since the markdown file (onboard.md) and the image file are in the same directory, the relative reference ![...](solver_onboarding_process.jpg) correctly resolves to the image. No changes needed.

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

♻️ Duplicate comments (2)
docs/cow-protocol/tutorials/solvers/onboard.md (2)

23-23: Fix British English spelling to American English: "afterwards" → "afterward".

-The general KYC requirements are to send us documentation proving that you are the beneficial owners of the company behind the solver and 1-2 passports of some of the main developers of the solver. Do not send this before the meeting, we will explain the process during the meeting so that you can send the documents afterwards.
+The general KYC requirements are to send us documentation proving that you are the beneficial owners of the company behind the solver and 1-2 passports of some of the main developers of the solver. Do not send this before the meeting, we will explain the process during the meeting so that you can send the documents afterward.

83-83: Fix hyphenation: "on chain" → "on-chain" and clean up ambiguous grammar.

Line 83 contains "on chain" (should be "on-chain"), and the phrase "make sure that is holds" appears to be a typo.

-After this process is done, the team will send you the submission addresses that your solver will use to settle auctions on chain. While this is managed by the CoW team, it will be your responsibility to monitor this and make sure that is holds enough funds to cover gas fees. The driver has a minimum threshold for gas that it applies to make sure that the address holds (more than) enough funds to pay the required gas fees. Therefore we recommend these balances:
+After this process is done, the team will send you the submission addresses that your solver will use to settle auctions on-chain. While this is managed by the CoW team, it will be your responsibility to monitor these addresses and ensure they hold enough funds to cover gas fees. The driver has a minimum gas threshold to ensure the address holds sufficient funds to pay required gas fees. Therefore, we recommend these balances:
🧹 Nitpick comments (10)
docs/cow-protocol/tutorials/solvers/onboard.md (10)

41-42: Clarify the endpoint format documentation by explaining envName values.

Currently, only an example is given. Add explicit documentation that envName should be one of: shadow, staging, or prod.

-The exposed endpoint provided must be of the following format: {base_url}/\${envName}/\${network} - for example: https://api.mysolver.io/staging/mainnet
-envName values: shadow, staging, prod
+The exposed endpoint provided must be of the following format: `{base_url}/${envName}/${network}`  
+For example: `https://api.mysolver.io/staging/mainnet`  
+where `envName` is one of: `shadow`, `staging`, or `prod`, and `network` is the target blockchain (e.g., `mainnet`, `arbitrum`).

99-100: Simplify "In order to" → "To" and format the barn interface link.

-In order to create some volume to test your solver, you can create orders on staging by using our barn swap interface ([https://barn.cow.fi](https://barn.cow.fi)).
+To create some volume to test your solver, you can create orders on staging by using our [barn swap interface](https://barn.cow.fi).

103-103: Fix hyphenation: "on chain" → "on-chain".

-Once your solver has moved to staging we can deploy your solver on production. Usually the team will schedule your solver to go live with the next release (on Tuesday) after you are deployed on staging. This gives your team a few days to test your solver by settling some transactions on chain before going live on production.
+Once your solver has moved to staging we can deploy your solver on production. Usually the team will schedule your solver to go live with the next release (on Tuesday) after you are deployed on staging. This gives your team a few days to test your solver by settling some transactions on-chain before going live on production.

112-123: Consider removing or condensing the "Slippage accounting" section (duplicates existing docs).

Per past reviewer feedback (harisang), this section largely duplicates the dedicated documentation at https://docs.cow.fi/cow-protocol/reference/core/auctions/accounting. Consider either removing this section or replacing it with a brief 2–3 sentence summary with a link to the detailed docs.


113-113: Simplify "are able to" → "can".

-Solvers are able to use the settlement contract's buffers when settling auctions.
+Solvers can use the settlement contract's buffers when settling auctions.

134-137: Remove inaccurate quoting competition description; simplify to link only.

Per past reviewer feedback (harisang), the description conflates concepts and is inaccurate. Remove the explanatory sentence and keep only the link to detailed documentation.

-## 11. Joining the quoting competition
-Besides the solving competition, there is also a quoting competition. This involves responding to a single order batch with a proposed execution for the order and a price that could be delivered to the user. 
-
-[More information about the quoting competition can be found here.](https://docs.cow.fi/cow-protocol/reference/core/auctions/rewards#price-estimation-competition-rewards-cips-27-57)
+## 11. Joining the quoting competition
+Besides the solving competition, there is also a quoting competition. For details on how to participate and the rewards structure, see the [Price Estimation Competition Rewards documentation](https://docs.cow.fi/cow-protocol/reference/core/auctions/rewards#price-estimation-competition-rewards-cips-27-57).

141-141: Fix hyphenation: "on chain" → "on-chain".

-Yes, we can whitelist solvers so that they can have access to the orderbook API. Although we generally wait with this until your solver is live and settling orders on chain.
+Yes, we can whitelist solvers so that they can have access to the orderbook API. Although we generally wait with this until your solver is live and settling orders on-chain.

146-147: Update FAQ question phrasing and link formatting for clarity.

-- ### Is there a way to find out the COW reward in real time immediately after the trade?
-[This table](https://dune.com/queries/5270914) contains reward data per solver and per auction (denominated in the native token of the chain). Note that data is updated every 2 hours.
+### Is there a way to find out COW rewards in real time immediately after a trade?
+[This Dune query](https://dune.com/queries/5270914) contains reward data per solver and per auction (denominated in the native token of the chain). Data is updated every 2 hours.

151-151: Avoid implying a fixed chain list; clarify "Arbitrum" capitalization.

Per past reviewer feedback (harisang), avoid stating "only arbitrum and mainnet" as it implies a closed set of chains. Also, capitalize "Arbitrum".

-In the shadow competition (only arbitrum and mainnet now) the solver is tested using production order flow but without settling any orders. This is for testing the integration of the solver. It is possible to simulate the solver's solutions and see how it does.
+In the shadow competition (currently on Arbitrum and Mainnet, among others) the solver is tested using production order flow but without settling any orders. This is for testing the integration of the solver. It is possible to simulate the solver's solutions and see how it performs.

153-153: Fix hyphenation: "on chain" → "on-chain".

-In the staging (barn) competition settling happens on-chain but the volume is much lower. That way the solver is tested by actually settling orders on chain.
+In the staging (barn) competition settling happens on-chain but the volume is much lower. That way the solver is tested by actually settling orders on-chain.
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 767618d and 63f3eaf.

📒 Files selected for processing (1)
  • docs/cow-protocol/tutorials/solvers/onboard.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
docs/cow-protocol/tutorials/solvers/onboard.md

[locale-violation] ~23-~23: In American English, ‘afterward’ is the preferred variant. ‘Afterwards’ is more commonly used in British English and other dialects.
Context: ...ting so that you can send the documents afterwards. Given the risk that will be carried b...

(AFTERWARDS_US)


[style] ~81-~81: Consider a more expressive alternative.
Context: ...he submission keys on your behalf. To do this, the team will generate keys for y...

(DO_ACHIEVE)


[style] ~81-~81: Consider a more concise word here.
Context: ...sting those for the solver competition. In order to do this you will need to send a `reward...

(IN_ORDER_TO_PREMIUM)


[style] ~81-~81: Consider a more expressive alternative.
Context: ...for the solver competition. In order to do this you will need to send a `rewards a...

(DO_ACHIEVE)


[grammar] ~83-~83: Use a hyphen to join words.
Context: ...ur solver will use to settle auctions on chain. While this is managed by the CoW ...

(QB_NEW_EN_HYPHEN)


[style] ~99-~99: Consider a more concise word here.
Context: ...tle transactions for winning auctions. In order to create some volume to test your solver,...

(IN_ORDER_TO_PREMIUM)


[grammar] ~103-~103: Use a hyphen to join words.
Context: ... solver by settling some transactions on chain before going live on production. ...

(QB_NEW_EN_HYPHEN)


[style] ~113-~113: As a shorter alternative for ‘able to’, consider using “can”.
Context: ...rds) ## 8. Slippage accounting Solvers are able to use the settlement contract's buffers w...

(BE_ABLE_TO)


[grammar] ~141-~141: Use a hyphen to join words.
Context: ...ur solver is live and settling orders on chain. ### How do we integrate CoW AMM'...

(QB_NEW_EN_HYPHEN)


[grammar] ~153-~153: Use a hyphen to join words.
Context: ...is tested by actually settling orders on chain. Finally, production is where the...

(QB_NEW_EN_HYPHEN)

🪛 markdownlint-cli2 (0.18.1)
docs/cow-protocol/tutorials/solvers/onboard.md

33-33: Bare URL used

(MD034, no-bare-urls)


41-41: Bare URL used

(MD034, no-bare-urls)

🔇 Additional comments (1)
docs/cow-protocol/tutorials/solvers/onboard.md (1)

4-4: No changes needed—image path is correct.

The image file solver_onboarding_process.jpg exists in the same directory as onboard.md (docs/cow-protocol/tutorials/solvers/). The relative path reference is correct and will resolve properly in the rendered documentation.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

♻️ Duplicate comments (4)
docs/cow-protocol/tutorials/solvers/onboard.md (4)

24-24: Fix capitalization: "CoW DAO Bonding pool" → "CoW DAO bonding pool".

The bonding pool name uses inconsistent capitalization. Use lowercase 'b' in "bonding pool" for consistency throughout the document.

- Given the risk that will be carried by the CoW DAO bonding pool we also ask that solvers who join the solver competition through the CoW DAO Bonding pool start solving on Arbitrum first.
+ Given the risk that will be carried by the CoW DAO bonding pool we also ask that solvers who join the solver competition through the CoW DAO bonding pool start solving on Arbitrum first.

120-123: Major: Simplify or remove inaccurate quoting competition description.

Per past reviewer feedback, the description of how the quoting competition works conflates concepts and is inaccurate. Consider removing the descriptive sentence and keeping only the reference link to the detailed documentation.

  ## 10. Joining the quoting competition
- Besides the solving competition, there is also a quoting competition. This involves responding to a single order batch with a proposed execution for the order and a price that could be delivered to the user. 
+ Besides the solving competition, there is also a quoting competition.
  
- [More information about the quoting competition can be found here.](https://docs.cow.fi/cow-protocol/reference/core/auctions/rewards#price-estimation-competition-rewards-cips-27-57)
+ For details on how to participate and the rewards structure, see the [Price Estimation Competition Rewards documentation](https://docs.cow.fi/cow-protocol/reference/core/auctions/rewards#price-estimation-competition-rewards-cips-27-57).

80-82: Major: Clarify and correct the rewards address requirement.

The current explanation is confusing and mixes concepts. Per past reviewer feedback, clarify that the rewards address must be controlled on both the solving chain AND mainnet because native token payouts go to the solving chain while COW rewards always go to mainnet. Also fix the typo "is holds" → "it holds" and hyphenation "on chain" → "on-chain".

- To do this, the team will generate keys for your solver to use for settling auctions on-chain and whitelisting those for the solver competition. In order to do this you will need to send a `rewards address` that you would like to use to receive weekly rewards on the chain that you are solving on. The rewards address needs to be controlled by the relevant solver team on both chain X and mainnet, as we send native token transfers to chain X while we send COW rewards to the mainnet address always
-
- After this process is done, the team will send you the submission addresses that your solver will use to settle auctions on chain. While this is managed by the CoW team, it will be your responsibility to monitor this and make sure that is holds enough funds to cover gas fees. The driver has a minimum threshold for gas that it applies to make sure that the address holds (more than) enough funds to pay the required gas fees. Therefore we recommend these balances:
+ To do this, the team will generate keys for your solver to use for settling auctions on-chain and whitelisting those for the solver competition. You will need to provide a `rewards address` that you control on both the solving chain and mainnet. Native token rewards and slippage will be sent to this address on the solving chain (e.g., Arbitrum), while COW token rewards are always sent to this address on mainnet. Ensure your address is ready to receive funds on both networks.
+
+ After this process is done, the team will send you the submission addresses that your solver will use to settle auctions on-chain. While this is managed by the CoW team, it will be your responsibility to monitor these addresses and ensure they hold enough funds to cover gas fees. The driver has a minimum gas threshold to ensure sufficient funds to pay required gas fees. Therefore, we recommend these balances:

27-27: Critical: Update Snapshot URL domain and path format for CIP-48.

The link uses the outdated snapshot.box domain and incorrect path format s:cow.eth. Update to the public snapshot.org domain with the correct space format cow.eth, and standardize terminology to match the rest of the document.

- As specified in [CIP-48](https://snapshot.box/#/s:cow.eth/proposal/0x563ab9a66265ad72c47a8e55f620f927685dd07d4d49f6d1812905c683f05805) solvers that are part of the CoW DAO bonding pool will be charged a service fee that is withheld from their weekly rewards. This fee will begin six months after the solver has joined the CoW Bonding pool and will encompass 15% of the weekly COW rewards that the solver would have received.
+ As specified in [CIP-48](https://snapshot.org/#/cow.eth/proposal/0x563ab9a66265ad72c47a8e55f620f927685dd07d4d49f6d1812905c683f05805) solvers that are part of the CoW DAO bonding pool will be charged a service fee that is withheld from their weekly rewards. This fee will begin six months after the solver has joined the CoW DAO bonding pool and will encompass 15% of the weekly COW rewards that the solver would have received.
🧹 Nitpick comments (16)
docs/cow-protocol/tutorials/solvers/onboard.md (16)

22-22: Minor: Use US English "afterward" instead of "afterwards".

- Do not send this before the meeting, we will explain the process during the meeting so that you can send the documents afterwards.
+ Do not send this before the meeting, we will explain the process during the meeting so that you can send the documents afterward.

32-32: Minor: Wrap bare URL in Markdown link format.

- API specification: https://github.com/cowprotocol/services/blob/main/crates/solvers/openapi.yml
+ API specification: [OpenAPI spec](https://github.com/cowprotocol/services/blob/main/crates/solvers/openapi.yml)

40-41: Minor: Format endpoint example and clarify envName values.

Line 40 contains a bare URL and the endpoint format could be clearer. Wrap it in inline code and explain the allowed values for envName.

- The exposed endpoint provided must be of the following format: {base_url}/\${envName}/\${network} - for example: https://api.mysolver.io/staging/mainnet
+ The exposed endpoint must follow the format: `{base_url}/${envName}/${network}`  
+ For example: `https://api.mysolver.io/staging/mainnet`  
+ where `envName` is one of: `shadow`, `staging`, or `prod`, and `network` is the target blockchain (e.g., `mainnet`, `arbitrum`).
-envName values: shadow, staging, prod

47-47: Minor: Use US English "behavior" instead of "behaviour".

- The default behaviour for the driver is to set the native token address to `0xeee` and to insert interactions into your solution to unwrap the native token.
+ The default behavior for the driver is to set the native token address to `0xeee` and to insert interactions into your solution to unwrap the native token.

50-50: Minor: Fix hyphenation "on chain" → "on-chain" and simplify "In the event that" → "If".

- It is possible to enable or disable liquidity fetching for your solver. In the event that this is enabled, the driver will search for on chain liquidity sources for your solver to use and send them to your solver. [Docs](https://docs.cow.fi/cow-protocol/tutorials/arbitrate/solver/driver#fetching-liquidity)
+ It is possible to enable or disable liquidity fetching for your solver. If this is enabled, the driver will search for on-chain liquidity sources for your solver to use and send them to your solver. [Docs](https://docs.cow.fi/cow-protocol/tutorials/arbitrate/solver/driver#fetching-liquidity)

55-55: Minor: Replace wordy "In the event of" with "If".

- In the event of an EBBO violation the team will reach out and ask you to reimburse the user. [Docs](https://docs.cow.fi/cow-protocol/reference/core/auctions/ebbo-rules)
+ If there is an EBBO violation, the team will reach out and ask you to reimburse the user. [Docs](https://docs.cow.fi/cow-protocol/reference/core/auctions/ebbo-rules)

58-58: Minor: Fix word order "in to" → "into".

- It is possible for your solver to submit multiple solutions for a single auction and let the driver select the solution with the highest score to submit to the auction. It is possible to enable the driver to merge disjoint solutions in to a single solution for the auction. [Docs](https://docs.cow.fi/cow-protocol/tutorials/arbitrate/solver/driver#postprocessing-solutions)
+ It is possible for your solver to submit multiple solutions for a single auction and let the driver select the solution with the highest score to submit to the auction. It is possible to enable the driver to merge disjoint solutions into a single solution for the auction. [Docs](https://docs.cow.fi/cow-protocol/tutorials/arbitrate/solver/driver#postprocessing-solutions)

99-99: Minor: Simplify "In order to" → "To" and fix URL wrapping.

- In order to create some volume to test your solver, you can create orders on staging by using our barn swap interface ([https://barn.cow.fi](https://barn.cow.fi)).
+ To create some volume to test your solver, you can create orders on staging by using our [barn swap interface](https://barn.cow.fi).

102-102: Minor: Fix hyphenation "on chain" → "on-chain".

- Once your solver has moved to staging we can deploy your solver on production. Usually the team will schedule your solver to go live with the next release (on Tuesday) after you are deployed on staging. This gives your team a few days to test your solver by settling some transactions on chain before going live on production.
+ Once your solver has moved to staging we can deploy your solver on production. Usually the team will schedule your solver to go live with the next release (on Tuesday) after you are deployed on staging. This gives your team a few days to test your solver by settling some transactions on-chain before going live on production.

105-109: Minor: Improve link descriptiveness and consider clarifying rewards distribution.

The current link text at line 109 ("You can find more information...") is not very descriptive. Consider using more specific link text. Additionally, line 107 ("use a single rewards address that is available on all networks") may need clarification given the earlier requirement that the address be controlled on both the solving chain and mainnet for receiving native and COW rewards respectively.

- Every week on Tuesday your solver will receive rewards for settling auctions. These are distributed in COW tokens to the rewards address you provided. Rewards in COW will be sent to that address on mainnet, and reimbursements for slippage will be distributed on the same network as where the solving took place.
+ Every week on Tuesday your solver will receive COW token rewards and reimbursements for slippage. COW rewards are sent to your rewards address on mainnet, while network fees and slippage reimbursements are sent on the same network where solving took place.

  We advise using a single rewards address that is available on all networks.

- [You can find more information about how we calculate and distribute rewards here.](https://docs.cow.fi/cow-protocol/reference/core/auctions/rewards). The accounting process is documented in detail [here](https://docs.cow.fi/cow-protocol/reference/core/auctions/accounting).
+ For details on how rewards are calculated and distributed, see the [rewards documentation](https://docs.cow.fi/cow-protocol/reference/core/auctions/rewards). The accounting process is documented in detail in the [accounting guide](https://docs.cow.fi/cow-protocol/reference/core/auctions/accounting).

115-115: Minor: Fix typo "ad" → "and".

- - An endpoint that you would like to use for staging ad production
+ - An endpoint that you would like to use for staging and production

127-127: Minor: Fix hyphenation "on chain" → "on-chain".

- Yes, we can whitelist solvers so that they can have access to the orderbook API. Although we generally wait with this until your solver is live and settling orders on chain.
+ Yes, we can whitelist solvers so that they can have access to the orderbook API. Although we generally wait with this until your solver is live and settling orders on-chain.

129-129: Minor: Fix plural form "CoW AMM's" → "CoW AMMs".

- ### How do we integrate CoW AMM's?
+ ### How do we integrate CoW AMMs?

137-137: Minor: Capitalize "Arbitrum", clarify chain list is not exhaustive, and improve wording.

- In the shadow competition (only arbitrum and mainnet now) the solver is tested using production order flow but without settling any orders. This is for testing the integration of the solver. It is possible to simulate the solver's solutions and see how it does.
+ In the shadow competition (currently on Arbitrum and Mainnet, among other networks) the solver is tested using production order flow but without settling any orders. This is for testing the integration of the solver. It is possible to simulate the solver's solutions and see how it performs.

139-139: Minor: Fix hyphenation "on chain" → "on-chain".

- In the staging (barn) competition settling happens on-chain but the volume is much lower. That way the solver is tested by actually settling orders on chain.
+ In the staging (barn) competition settling happens on-chain but the volume is much lower. That way the solver is tested by actually settling orders on-chain.

144-144: Minor: Standardize bonding pool terminology "Cow DAO" → "CoW DAO".

- No, there are no prerequisites (other than KYC if joining the Cow DAO bonding pool) but it is recommended that the solver manages to submit and win solutions on shadow before staging.
+ No, there are no prerequisites (other than KYC if joining the CoW DAO bonding pool) but it is recommended that the solver manages to submit and win solutions on shadow before staging.
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 63f3eaf and e1ef8ec.

📒 Files selected for processing (2)
  • docs/cow-protocol/reference/core/auctions/rewards.md (1 hunks)
  • docs/cow-protocol/tutorials/solvers/onboard.md (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • docs/cow-protocol/reference/core/auctions/rewards.md
🧰 Additional context used
🪛 LanguageTool
docs/cow-protocol/tutorials/solvers/onboard.md

[locale-violation] ~22-~22: In American English, ‘afterward’ is the preferred variant. ‘Afterwards’ is more commonly used in British English and other dialects.
Context: ...ting so that you can send the documents afterwards. Given the risk that will be carried b...

(AFTERWARDS_US)


[style] ~80-~80: Consider a more expressive alternative.
Context: ...he submission keys on your behalf. To do this, the team will generate keys for y...

(DO_ACHIEVE)


[style] ~80-~80: Consider a more concise word here.
Context: ...sting those for the solver competition. In order to do this you will need to send a `reward...

(IN_ORDER_TO_PREMIUM)


[style] ~80-~80: Consider a more expressive alternative.
Context: ...for the solver competition. In order to do this you will need to send a `rewards a...

(DO_ACHIEVE)


[grammar] ~82-~82: Use a hyphen to join words.
Context: ...ur solver will use to settle auctions on chain. While this is managed by the CoW ...

(QB_NEW_EN_HYPHEN)


[style] ~98-~98: Consider a more concise word here.
Context: ...tle transactions for winning auctions. In order to create some volume to test your solver,...

(IN_ORDER_TO_PREMIUM)


[grammar] ~102-~102: Use a hyphen to join words.
Context: ... solver by settling some transactions on chain before going live on production. ...

(QB_NEW_EN_HYPHEN)


[grammar] ~127-~127: Use a hyphen to join words.
Context: ...ur solver is live and settling orders on chain. ### How do we integrate CoW AMM'...

(QB_NEW_EN_HYPHEN)


[grammar] ~139-~139: Use a hyphen to join words.
Context: ...is tested by actually settling orders on chain. Finally, production is where the...

(QB_NEW_EN_HYPHEN)

🪛 markdownlint-cli2 (0.18.1)
docs/cow-protocol/tutorials/solvers/onboard.md

32-32: Bare URL used

(MD034, no-bare-urls)


40-40: Bare URL used

(MD034, no-bare-urls)


109-109: Link text should be descriptive

(MD059, descriptive-link-text)

🔇 Additional comments (1)
docs/cow-protocol/tutorials/solvers/onboard.md (1)

4-4: The image path is correct; no changes needed.

The image file solver_onboarding_process.jpg exists in the same directory as onboard.md (docs/cow-protocol/tutorials/solvers/), and the relative reference on line 4 correctly resolves to it. The original concern was incorrect—there is no images/ subdirectory, and using ./images/solver_onboarding_process.jpg would break the reference.

Likely an incorrect or invalid review comment.

@harisang harisang merged commit c1c99ed into main Oct 20, 2025
5 checks passed
@harisang harisang deleted the onboard-solver-guide branch October 20, 2025 15:21
@github-actions github-actions bot locked and limited conversation to collaborators Oct 20, 2025
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.

4 participants