Skip to content

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Charity launch hub (Robinhood Chain)0xc292986D70cD33F36BDFAEF0728008767a896815
Pons fee escrow (Robinhood Chain)0xd3AFEB2a57f70eF218Aa82451c51B2fb0416Ac9e
Across spoke pool (Robinhood Chain)0xD29C85F15DF544bA632C9E25829fd29d767d7978
donate.gg donation relay (Base)0x02A0d2a39732082b824a5A3D3b026C54d581DCC8

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.