Verify a donation
Four public transactions. No trust required.
Every donation made through RWI can be followed from the moment the charity fee is claimed to the moment the charity's wallet is paid. Open any donation in the donation feed and press "Verify" to see the four transactions for that donation. This page explains what each of them proves.
01
Charity fees are claimed on Robinhood Chain
Trading a coin pays a fixed 2% fee into the Pons fee escrow, plus the creator's share of Pons' own 1% fee - identical for every coin and not changeable by anyone. Every 5 minutes the keeper calls harvest() on the coin's fee vault, which pulls the accrued income into the vault and, in the same call, sends exactly one quarter of it to the RWI platform wallet (about 0.7% of volume; coins on hub v2 pay one fifth of their 2.5% fee). The share is a constant of the contract; the rest can only be bridged to the donation receiver.
What to look for: On the harvest transaction: a Harvested event from the coin's vault with the claimed amount and a PlatformShare event with the share that went to RWI. The vault address is listed on every coin page.
02
The vault bridges the fee to Base through Across
Right after the claim the keeper calls bridge(): the whole vault balance goes into the Across spoke pool with the donation receiver on Base as recipient and the charity's donate.gg config id in the message. Base is used because it has the lowest transaction fees and donate.gg settles directly in USDC there, so the maximum reaches the charity. The keeper cannot change the recipient.
What to look for: On the bridge transaction: a Bridged event (input and output amount) and an Across V3FundsDeposited event whose recipient is the donation receiver.
03
The receiver donates on Base
An Across relayer delivers the ETH to the donation receiver on Base, which immediately calls donateNative on donate.gg's relay with the charity's config id. This is the transaction linked on every donation row.
What to look for: On the Base transaction: a Donated event from the receiver and a DonationMade event from the donate.gg relay carrying the same config id and the epoch the donation was booked into.
04
donate.gg pays the charity
donate.gg processes each charity's epochs on its own schedule: the ETH is swapped into USDC and 97% is transferred to the charity's receiver address, 3% to donate.gg. This settlement is a public transaction too; the site indexes it and shows it under the donation as soon as it exists.
What to look for: On the settlement transaction: a DonationEpochProcessed event from the relay listing the receiver, its share in basis points and the USDC amount, plus the USDC transfer itself.
The contracts
Fixed addresses, open source.
These are the only contracts money passes through. The hub and the receiver are RWI's; the escrow, the bridge and the relay belong to Pons, Across and donate.gg.
What cannot happen
- The platform share is a constant fraction of each claim (one quarter on the current hub), written into the vault contract. Nobody can raise it, and the platform wallet cannot touch anything else.
- A fee vault has no withdraw function: its balance can only be bridged to the fixed donation receiver.
- The keeper only triggers claims and bridges. It cannot change the recipient, the charity or the amounts.
- The receiver only accepts Across fills and forwards them to the donate.gg relay with the config id it was given.
- A coin's charity can only be changed by its creator, to another approved charity, after a public delay.
