Custody and security
Where money sits, protections, and trusted roles.
Where the money sits
Unclaimed fees sit in contracts. The replacement registry trusts the attester for the first payout-wallet binding; later changes belong to that wallet. The path is:
- Pons Fee Escrow, a Pons contract, holds the creator share, credited to one specific address.
- That address is a fee vault: a tiny contract fees.sh creates for the launch. It has no owner or private key. It pays the registered wallet and the configured platform fee to the treasury.
- The registry contract keeps the list of which wallet belongs to which X or GitHub account, and is the only thing allowed to tell a vault to pay out.
On-chain protections and limits
- Restricted payouts. Read
FeeVault.sol: only the registry can call its payout functions. Native and ERC-20 payouts have a reentrancy guard and pay only the bound wallet and treasury. There is no caller gas reimbursement. - Your wallet is yours. The wallet created at sign-in is a Privy embedded wallet. Privy holds part of the key in secure hardware; your device holds the rest. fees.sh never sees it. You can export the whole key from your profile at any time.
- First binding trusts the attester. Our server checks OAuth ownership before signing. The contract checks the signature, nonce, and deadline; it cannot independently verify an OAuth login. A compromised attester can misbind an identity that has not yet been registered.
- Wallet-controlled changes. Once bound, neither the attester nor owner can overwrite the payout wallet. Only the current wallet can call
changeWallet. Losing that wallet's key can therefore prevent recovery of future fees. - Platform fee limit. The platform fee is capped at 10% and initially set to 2%. The transaction sender pays gas separately.
- Inspect the source. Check the configured address and verification status on Blockscout. See Verify the code yourself.
What the server can do
The server verifies linked accounts and signs first-time identity bindings. Your connected wallet submits the claim and pays gas; the server does not submit it. If the server disappears, anyone can still submit claims for already-bound identities. New identities still need the attester; existing wallet changes require the current payout wallet.
What the contract owner can do
The owner can replace the attester for future first bindings, change the treasury, and set the platform fee up to 10%. It cannot overwrite an existing binding or enable caller gas reimbursements. There is no explicit pause function, but a treasury that rejects ETH can block native claims with a nonzero platform fee. Those transactions revert without moving the fees.
