Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/cowprotocol/solver-rewards/llms.txt

Use this file to discover all available pages before exploring further.

Before any multisig transaction is signed or executed, the computed transfers must be manually validated. This page describes the full validation workflow.
If any solver’s slippage exceeds their ETH payout, do not proceed with the payout until the root cause is understood. Contact the project maintainers to investigate. Proceeding in this state can result in incorrect or harmful payouts.

Validation workflow

1

Wait for data to finalize

Do not run the payout script immediately after the accounting period ends. Several data sources need time to settle:
  • prices.usd — token price feeds
  • ethereum.transactions — on-chain transaction data
  • CoW Protocol event data
Wait a reasonable interval (typically several hours) after the period closes before generating transfers.
2

Run the script and read the console output

Run the payout script for the relevant period:
python -m src.fetch.transfer_file --start 2023-03-14
The console prints two things immediately:
  1. The Dune dashboard URL — pre-filtered to the exact accounting period.
  2. The transfer summary — total native token and COW funds required.
The summary format is:
Total Native Token Funds needed: X.XXXX
Total COW Funds needed: X.XXXX
This is produced by Transfer.summarize() across all COW and native transfers combined.
3

Cross-check against the Dune dashboard

Open the dashboard URL printed to the console. It follows this pattern:
https://dune.com/cowprotocol/cow-solver-rewards?start_time=YYYY-MM-DD&end_time=YYYY-MM-DD&blockchain=<chain>&quote_reward=<value>&quote_cap_native_token=<value>
Verify that the per-solver amounts shown on the dashboard match what the script computed. Discrepancies may indicate stale data, incorrect period bounds, or an edge case in reward computation.
4

Check for overdraft cases

An overdraft occurs when a solver’s negative slippage exceeds their native token payout for the period — meaning the protocol effectively owes the solver less than their slippage cost. The script handles this by recording the shortfall in the overdrafts contract (0x8Fd67Ea651329fD142D7Cfd8e90406F133F26E8a) rather than generating a negative transfer.Review the console output and any overdraft entries before proceeding. If the overdraft is unexpectedly large, investigate whether the slippage data is correct.
If a solver’s slippage is larger than their ETH payout, do not proceed until the root cause is confirmed. Reach out to the project maintainers.
5

Post the transaction to Safe

Once the numbers are verified, post the multisend to Safe. You can do this in two ways:Automatically (recommended for routine runs):
python -m src.fetch.transfer_file --start 2023-03-14 --post-tx
This posts three separate Safe transactions:
TransactionSafeNetwork
COW token transfersPAYOUTS_SAFE_ADDRESS_MAINNETMainnet
Native token transfersPAYOUTS_SAFE_ADDRESSTarget network
Overdrafts updatePAYOUTS_SAFE_ADDRESSTarget network
The proposer account that should submit is:
0xd8Ca5FE380b68171155C7069B8df166db28befdd
Manually (via Safe CSV import):Import the generated CSV files from out/ directly into the Safe airdrop app. The COW CSV goes to the mainnet Safe, the native CSV to the network Safe.
6

Review the Safe transaction queue

After posting, verify the pending transactions in the Safe UI:
  • COW transfers (mainnet):
    https://app.safe.global/transactions/queue?safe=eth:<PAYOUTS_SAFE_ADDRESS_MAINNET>
    
  • Native transfers and overdrafts:
    https://app.safe.global/transactions/queue?safe=<network_short>:<PAYOUTS_SAFE_ADDRESS>
    
Confirm the transaction data (recipients, amounts, token addresses) matches your computed output before signing.
7

Notify the team and collect signatures

Post in the #dev-multisig Slack channel with a link to the pending transaction queue. When --post-tx is used (without --dry-run), the script sends this notification automatically:
Solver Rewards transactions for network <chain> pending signatures:
COW transfers on mainnet with nonce <N>, see <safe_queue_url_cow>.
Native transfers on <chain> with nonce <N>, see <safe_queue_url_native>.
Overdrafts on <chain> with nonce <N>, see <safe_queue_url_native>.
Follow up to ensure all required signers execute the transaction. The preferred execution account is 0xd8Ca5FE380b68171155C7069B8df166db28befdd.

Summary of transactions

Every payout week results in up to three multisend transactions:

COW transfers

ERC-20 COW token transfers to solvers. Always posted on mainnet regardless of the target network, since COW is an Ethereum mainnet token.

Native transfers

Native token (ETH, xDAI, etc.) reimbursements posted on the target network.

Overdrafts update

Calls addOverdraft on the overdrafts management contract (0x8Fd67Ea651329fD142D7Cfd8e90406F133F26E8a) for any solver whose slippage exceeded their payout.

Build docs developers (and LLMs) love