Cash back
A quarter of every trading fee comes back to the wallet that paid it — as ETH, or as any token on the chain you nominate.
Every trade routed through the terminal pays a 1% platform fee. 25% of that fee comes straight back to the wallet that paid it, as an ETH balance you can claim whenever you like. There is nothing to opt into, no points, no season, and no lockup — it accrues on the trades you were making anyway.
And it does not have to stay ETH. Nominate any token on this chain as your payout asset and the claim buys it for you on the way out — so ordinary trading quietly accumulates ETH, a tokenized equity, or whatever else you picked. It is configured in Portfolio, on the Cash back card.
#How it accrues
The trade manager has always pushed each trade’s platform fee to a fee receiver, as native ETH, with the trader’s address attached. Cash back is a new receiver that uses that address: it credits your share to you and banks the rest as protocol revenue. Nothing in the trading path changed to make this work — same manager, same fee, same approval.
platform fee 1% 0.010000 ETH
referral carve-out (if any) -0.001000 ETH -> the referrer
arrives at the receiver 0.009000 ETH
your cash back (25%) 0.002250 ETH -> credited to YOUR wallet
protocol revenue the remainder
no referrer on the trade:
arrives at the receiver 0.010000 ETH
your cash back (25%) 0.002500 ETH- It is a share of the fee, not a share of the trade. 25% of a 1% fee is 0.25% of the trade — which is the honest way to read it: your effective platform fee is 0.75%, not 1%.
- Buys and sells both count. The fee is charged on the ETH side either way, so the cash back is denominated in ETH either way.
- A referral is taken first. The referrer’s cut is carved out of the fee before the receiver sees it, so cash back applies to what actually lands there. Being referred does not cost you cash back so much as slightly reduce the base it is figured on.
- It is credited per trade, immediately. There is no epoch to wait for and no snapshot to be present for. The balance is live contract storage the moment your trade confirms.
#Getting paid in any token
Your balance always accrues in ETH — that is what the fee is. What you choose is what it turns into on the way out. Nominate an asset and the claim routes your whole balance through the same trade manager your trades use, buying it in the same transaction and sending it to you.
preferredAsset). It is a transaction, not a setting on our server — nobody can change your payout asset but you.#Claiming
- Pull-only, and always full-balance. There are no partial claims — the contract zeroes your balance and pays it out in one move, which is what keeps its solvency arithmetic trivial.
- Three payout paths, always open: your nominated asset, plain ETH, or WETH. The last two ignore whatever the asset is set to, so you are never boxed in by an earlier choice.
- You sign it. The receiver is not on the popup-free delegated key’s allowlist, deliberately — see Wallets & keys. A claim is an interactive click, so it rides your own credential.
- Nothing expires. An unclaimed balance sits in contract storage indefinitely. There is no forfeiture rule and no decay.
#It is per wallet, on purpose
The contract knows addresses, not accounts. Your balance, your rate and your payout asset all key off the wallet that signed the trade, and there is no account linking inside it — which is the same property that makes running several wallets meaningful in the first place. If it aggregated your wallets on-chain, it would be publishing that they are related.
The Portfolio card papers over that where it is convenient and honest to: it sums every wallet for the headline, claims from each one in turn (one signature each), and the asset picker can apply your choice across all of them. Those are client-side loops over separate transactions, not a shared on-chain state.
#Rates
| Rate | What it is |
|---|---|
| 25% | The default (defaultRateBps), applied to every wallet with no override. This is what you get without asking for anything. |
| Higher | A per-wallet override (rateBpsOf) the protocol can set for a wallet — the hook for volume tiers and campaigns. The Portfolio card flags a boosted wallet as such. |
| 90% | MAX_RATE_BPS, a compiled-in constant. No setter can exceed it, so “up to 90% of the platform fee back” is the outer bound of what this contract can ever pay. |
A rate change only affects future trades. Cash back is credited at trade time from the rate in force then, and once credited it is a balance — nothing can re-price it downwards afterwards.
#What protects the balance
- The treasury cannot touch what is owed. Withdrawals are capped at
freeBalance()— the contract’s ETH minus the sum of every trader’s unclaimed balance. The invariant holds whatever the rate config does next. - Split control. The owner key configures rates; a separate, self-rotating treasury address is the only one that can move the protocol’s own share out. Neither can reassign your balance or change your payout asset.
- Every step is an event. Accrual, rate changes, asset changes and claims all emit, so the Portfolio card’s history and any independent audit read the same chain. Nothing about cash back lives in a private database.
defaultRateBps() and effectiveRateBps(you) are the authority.