Security
What we can and cannot touch
Funds
- Vaults live in the RebateVault contract, not in any wallet we control. The contract's balance always equals the sum of token vaults, the protocol fee accrued and unattributed credits (an on-chain invariant covered by tests).
- The verifier key can only: register a token, settle a slot to its own payer against a receipt hash, mark a slot pending, close a slot, expire a slot. It cannot withdraw vault funds or change where a payout goes.
- The owner can: change the protocol fee (hard-capped at 50%), rotate verifier/treasury, pause new slots or payouts, withdraw accrued protocol fees, sweep vaults idle for 14 days, and return credits sent by unregistered tokens. Pauses never trap a payer's funds: they never held any.
- Payouts are capped per slot by the reserve taken at open, and per day by the platform caps. A compromised verifier can at worst settle fake receipts up to those caps, which is why the caps exist and the key is a separate hot key.
Your wallet
- Claiming a rebate never asks for token approvals. The only vault transactions you sign are linkWallet, openHold and cancel — none move funds out of your wallet except gas.
- Trading signs flap Portal swaps (and an approve to the Portal for sells), identical to trading on flap.sh.
- We never ask for seed phrases, X passwords or X Money credentials. Verification is a public bio code.
Your data
- Stored: X id, handle, name, avatar, account age, linked wallet, your slots, and receipt links encrypted at rest (AES-GCM). Receipt links are decrypted only to verify the slot they belong to.
- Not stored: X Money balances, cards, bank details, X passwords or tokens. We have no X app and no X Money account.
- Sessions are a signed HttpOnly cookie. No third-party analytics.
Report an issue
- Email contact@crosspaid.fun with steps to reproduce. Contract issues that risk funds: contact first, publish after a fix. We acknowledge within 48 hours.