IntegrationEnglish
Referrals
Binding, resolution, payout
A referrer earns 0.10 % of every trade made by anyone bound to them, on every market, for 90 days, renewed on each new click.
Binding
- Someone opens a link carrying a scout's handle:
unpriced.xyz/r/<handle>. - The site records it.
- When that visitor signs in with a wallet, the server writes the binding on chain through the referral operator key.
Users never write their own bindings. bind is gated by OPERATOR_ROLE, and reverts on SelfReferral.
function bind(address account, address referrer) external onlyRole(OPERATOR_ROLE);Behaviour
| Window | 90 days from the click. Immutable in the contract |
| Renewal | Each new click restarts the full 90 days |
| Conflict | Last click wins. A new bind overwrites the previous referrer |
| Expiry | referrerOf returns the zero address, and the referrer share goes to the platform |
Changing the window means deploying a new registry and pointing the factory at it, versioned like the fee preset. It is never edited in place.
Payout
On every trade the market resolves the trader's referrer:
market → factory.referralRegistry() → registry.referrerOf(trader)Both hops are staticcalls with a graceful fallback. A missing factory, a missing registry or a reverting registry never blocks a trade. The referrer share goes to the platform instead. A growth feature does not get to stop someone from selling.
The cut accrues inside the market contract and is withdrawn with claimFees(). It is never pushed, so a referrer whose wallet cannot receive dollars blocks nothing.
Reading
registry.referrerOf(account) // active referrer, or address(0)
registry.bindingOf(account) // (referrer, expiresAt)
registry.attributionWindow() // 90 days in seconds
market.referrerFeeShareBps() // 2500 = 25% of the fee = 0.25% of volume
market.feesOwed(referrer) // waiting to be claimed on this marketLifetime earnings come from FeeSplit, whose referrer field is indexed:
sum(FeeSplit.referrerFee) where referrer == <address> // earned
sum(FeesClaimed.amount) where account == <address> // withdrawnEarnings accrue per market. A referrer with active referees across ten markets makes ten claimFees() calls. There is no aggregator contract.
Stacking with the creator share
A creator who shares their own market's card through their own referral link earns both: the creator share, 0.70 % for life, plus the referrer share, 0.10 %, for 0.80 % of the volume they generate. A creator who shares nothing earns 0.70 %.
Rules for integrators
- Display only earnings derivable from the chain or the index. If it is not in
FeeSplitorfeesOwed, it is not a number. - Show counts and volumes, not referee identities.
- A binding expires, is overwritten, and grants the referrer no visibility into anyone's positions.