Start here
What Tithe is
Tithe is a launchpad built on top of Pons, the coin launchpad on Robinhood Chain. When you launch a coin through Tithe, you choose someone it is for: a charity, an organisation, a creator, a person, or any wallet you paste in. A fixed share of the coin's trading fees then goes to them, automatically, for as long as the coin trades.
Three things make it different from simply promising to send someone money:
- The share is locked in a contract. Each coin gets its own vault. Who it pays and how much are written into that vault when the coin is created, and the vault has no owner and no function that could change them. Not the creator, not us.
- Nobody has to claim anything. The recipient does not sign up, connect a wallet, or even know Tithe exists. Their share is pushed to where they already receive money: a nonprofit's Endaoment or donate.gg account, or their own wallet on Base or Ethereum.
- Every step can be checked. From the trade that produced a fee to the transaction that delivered it, every hop is a public record on a public chain, and this site links to each one.
Tithe started as a charity launchpad, so the contracts still use the word "charity" (CharityVault, charityBps). That is history. The same contracts pay organisations and people too; charityBps simply means "the recipient's share".
The short version
- You launch a coin and pick a recipient, their share (at least 10%) and a trading fee of up to 10%.
- People trade it. Each trade pays the trading fee.
- The fees collect for the coin's vault.
- The keeper sweeps them every few minutes once there is enough to be worth the gas, and the vault splits them by the locked share.
- Your share is paid to you on Robinhood Chain straight away.
- Their share crosses to Base or Ethereum through the Across bridge and lands in their account or wallet, usually within seconds.
That's it. Everything below is how each of those steps actually works, and how to confirm it did.
Words used here
- Pons
- The launchpad on Robinhood Chain that Tithe builds on. It creates the coin, runs its bonding curve, and later its Uniswap pool.
- Robinhood Chain (RHC)
- An Arbitrum Orbit layer-2 chain that settles to Ethereum. Where coins are launched and traded.
- Bonding curve
- The automatic market a new Pons coin trades on before it graduates. Price rises as people buy.
- Graduation
- When a coin's curve fills, its liquidity moves into a Uniswap v4 pool and trading continues there.
- Trading fee (creator tax)
- The percentage of each trade, set at launch between 0% and 10%, that goes to the coin's fee recipient. This is the money Tithe splits.
- Vault
- The contract, one per coin, that receives the coin's trading fees and splits them. It has no owner.
- Recipient
- Whoever the coin is for: a charity, organisation, creator, person or custom address.
- Split / charityBps
- The recipient's share of the trading fees, in basis points (1,000 = 10%). Minimum 10%, fixed forever.
- Keeper
- A bot that sends the transactions that move fees along. It has no special access; anyone can do what it does.
- Across
- The bridge that carries the recipient's share from Robinhood Chain to Base or Ethereum.
- Forwarder
- A small contract on Base, one per charity, that receives bridged funds and credits them to that charity.
- Endaoment
- A US 501(c)(3) that gives nonprofits on-chain accounts and grants the money out to their bank.
- donate.gg
- Another platform nonprofits sign up with to receive crypto. Some charities on our list use it instead of Endaoment.
- Basis point (bps)
- One hundredth of a percent. 50 bps = 0.5%.
How money moves
The path of a fee
Follow one trade from start to finish. Every arrow is a transaction or a contract call you can look up.
A trade on Pons. Someone buys or sells the coin. Pons takes its 1% and the coin's trading fee. The trading fee belongs to the coin's fee recipient, the vault, but is not handed over yet.
The fee waits. On the bonding curve (or, after graduation, the pool's hook) until someone sweeps it. Nothing is paid out per trade.
Sweep and claim. The keeper calls the vault, which sweeps the curve into the Pons fee escrow and claims its balance from there.
Convert, if needed. If the coin trades against a stock or USDG, the vault swaps those fees to ETH on Uniswap first.
Split. The vault divides the ETH by the locked share. The recipient's part is sent first.
Bridge. The recipient's part is deposited into Across, addressed to the recipient's chain. The creator's part is paid on Robinhood Chain.
Arrival. A relayer fills the deposit on Base or Ethereum. A person is paid in ETH right there. A charity's forwarder swaps to USDC and credits the charity, inside the same fill transaction.
Off-chain, charities only. Endaoment grants the balance out to the nonprofit's bank account. This is the one step that is not on a chain.
Where fees wait
Pons does not pay trading fees out on every trade. That would put a transfer inside every buy and sell, and a recipient that refused the transfer could break trading for the coin. Instead the bonding curve keeps a running tab and hands the fees over only when someone calls sweepFees().
This matters because the vault's claim reads the fee escrow, not the curve. On a coin still on its curve, the escrow is empty until a sweep happens, so a plain claim would find nothing. The vault's sweepCurveAndDonate does both: sweep the curve, then claim. A sweep that fails is caught and only delays fees. If there is nothing at all to pay out, the call reverts with NothingToDonate and nothing moves, so calling it early is harmless, just wasted gas. The keeper checks first.
How much is waiting
The curve has no "fees pending" read. The amount is worked out from its balances: the curve's ETH balance, minus the part that backs its reserves. The launch baseline is recovered from the constant-product formula (q0 = quote × base ÷ totalSupply). The keeper and the coin pages use the same calculation.
After graduation
Graduation changes less than it sounds. Pons still charges the trading fee, still credits the same escrow, and the vault is still the fee recipient with the same locked split. What changes is where unswept fees wait: the curve closes, liquidity moves to a Uniswap v4 pool, and the contract that holds the fees becomes that pool's hook.
The vault's sweepPoolAndDonate calls the hook's sweepPoolFees and then claims. Every Pons pool uses the same pool settings (fee 0, tick spacing 200), so the pool's id can be computed from the coin without searching logs. The hook has no "how much is waiting" read either, so the keeper simulates the call first: it only succeeds when there is something to collect, and a wrong pool id fails safely without sending anything.
Pons's hook is 0xE5e7…e044. More than 40 Pons coins have already graduated through it. No Tithe coin has graduated yet, so this path is verified piece by piece against the live chain but has not yet run end to end for one of ours.
The split
Each vault stores charityBps, the recipient's share in basis points, set in its constructor and never again. The contract refuses anything below 1,000 (10%). The creator gets the rest.
Before splitting, the vault sets aside 2% of what it holds as the most it could ever refund in gas. It splits the other 98%, pays the refund out of the 2%, and leaves whatever the refund did not use in the vault, where it is split again next time. Nothing is lost; it is just paid out one round later.
- The recipient is paid first, unconditionally. If the creator's address cannot receive ETH, their share simply stays in the vault and is split again next time. A creator cannot block a payout.
- Rounding: below about 10 wei, the recipient's share rounds to zero and the creator takes it. It is economically meaningless, but it is the one direction rounding goes.
- Example: a vault holds 0.1 ETH with a 90% split. 0.002 ETH is set aside for gas. Of the remaining 0.098, 0.0882 ETH goes to the recipient's bridge deposit and 0.0098 ETH to the creator. The caller is refunded the gas they actually used, at most 0.002, and the rest of that 0.002 stays for next time. See Who pays for gas.
Crossing chains
Recipients live on Base or Ethereum, not Robinhood Chain, so their share has to cross. Tithe uses Across, and only Across.
- How it works: the vault wraps the ETH and deposits it into Across's contract on Robinhood Chain, naming the destination chain and address. An independent relayer pays the recipient on the other chain from its own funds, usually within seconds, and is repaid by Across later.
- Cost: the vault offers relayers 0.5% by default, with a hard maximum of 1% in the contract.
- If nobody fills it: Across refunds the deposit to the vault as WETH. The vault's
unwrapRefund()turns it back into ETH, and every claim does this automatically, so the money re-enters the next split. - Why there is no fallback: an earlier version fell back to Arbitrum's native withdrawal when Across was unavailable. That route settles to Ethereum, while the charity forwarders live on Base, and one donation landed at an address with no code. So the fallback was removed. If Across is down, claims stop and fees stay in the vault until it is back. Money that has not moved cannot be lost.
Across had no enabled routes to Solana when we checked, which is why recipients can only be paid on Base or Ethereum today.
Paying a charity
A nonprofit is paid through whichever platform it has actually signed up with. Sending money to a platform a charity never set up would mean a donation that is provably theirs and never collected.
Through Endaoment
Each Endaoment charity has a CharityForwarder on Base. Across fills the deposit straight into it, and the forwarder, in the same transaction:
- unwraps the WETH to ETH,
- swaps it to USDC on Uniswap v3 (the 0.05% pool), refusing any price worse than Chainlink's ETH/USD minus 1% (and refusing entirely if the price feed is more than an hour old),
- calls
donate()on the charity's Endaoment org contract, which credits the nonprofit and firesEntityDonationReceived.
Endaoment keeps 1.5%. The rest is on the nonprofit's on-chain balance the moment that transaction confirms. Endaoment then grants it out to the nonprofit's bank account, off-chain, and issues the receipt.
The strongest part: an Endaoment org address is not typed in by anyone. It is computed from the nonprofit's IRS tax ID (EIN) by Endaoment's factory, so it is the only address that EIN could produce. The Verify page recomputes it in your browser and compares.
Through donate.gg
Charities on donate.gg have a different contract on Base, a DonateGgForwarder. It has no swap: it unwraps the WETH and passes the ETH to donate.gg's relay with that charity's donate.gg id, and donate.gg credits the charity. As with Endaoment, the fill triggers it in the same transaction, and whoever calls it by hand is repaid gas capped at 2%. The split and destination are just as fixed, but the guarantee is narrower and we say so: the id is issued by donate.gg rather than derived from a tax ID, so confirming it belongs to the charity means checking their directory, and their relay can be upgraded by a single key holder.
Endaoment's own dashboard can lag the chain by hours; they confirmed their sweepers take a while to pick up balances. A donation is final when its transaction confirms, not when their site catches up. This site always shows the chain.
Paying a person or organisation
Organisations without a nonprofit account, creators, people and custom addresses are paid the simplest way: Across delivers ETH straight to their wallet on Base or Ethereum. There is no forwarder, no swap and no platform fee. When the fill confirms, the money has arrived.
For listed organisations and people, the wallet comes from a source shown on their card and on /verify: either a page they published themselves (for example a donations page) or a public attribution such as an Arkham entity. The site says which, every time.
Stock-paired coins
A coin can trade against ETH, or against another token Pons supports on Robinhood Chain, such as USDG or a tokenised stock like GLD or IBM. Its trading fees then arrive in that token, not ETH, and cannot cross the bridge as they are.
So the vault converts them first. convertPairToEth swaps the fees to ETH along a fixed Uniswap v3 route on Robinhood Chain (one or two hops, set per pair in the launch factory), then the normal split and bridge follow.
- Price protection: the swap is refused if any pool on the route has moved more than about 1% (100 ticks) away from its 30-minute average price. That stops anyone from pushing the price just before a conversion to take a cut.
- Minimum out: the keeper also asks for at least 99.5% of the quoted amount.
- Proven: a GLD-paired coin's fees were claimed as gold, swapped to ETH, bridged, swapped to USDC and credited to Doctors Without Borders, unattended, in about eight minutes.
Using Tithe
Launching a coin
The launch page walks you through six steps, and everything happens in one transaction: the factory deploys the coin's vault and launches the coin on Pons with that vault as its fee recipient.
- Name: name, ticker, description and image.
- Fees: the recipient, their share (10% to 100%) and the trading fee (0% to 10%).
- Pair: what the coin trades against: ETH, or a token the factory supports.
- Socials: X, Telegram and a website, all optional.
- Buy: an optional Developer buy and snipe tax exemptions.
- Review: everything in one place, with the live cost, before you sign.
The vault address is predictable before launch (the factory uses CREATE2), which is how the form can show it to you in advance. The coin's own address is not, because it depends on details like the socials.
The factory disables Pons's buyback option on every launch. A buyback would divert fees away from the vault and quietly shrink the recipient's share.
Choosing a recipient
The Entities page lists everyone you can pick, in three groups: Charities, Other entities (open-source projects, public goods, organisations) and Individuals & Creators. Each card shows how they are paid and links to the proof of their address. "Launch for them" opens the launch form with them already selected.
The list is fixed in each launch factory when it is deployed, so a recipient cannot be quietly swapped out from under a coin. Adding a new recipient means deploying a new factory; older coins keep exactly what they launched with.
Custom addresses
Not on the list? Choose Custom wallet, paste any address and pick Base or Ethereum. The coin is launched with launchCustom and recorded with recipient id 255, which means "custom".
- It is paid as ETH to that wallet on the chain you chose.
- Check it twice. Like everything else in a vault, it can never be changed.
- Nobody verifies who owns a custom address, so everywhere on the site it is shown as "Custom address" and the address, never as a name, even if it happens to match someone on the list.
- EVM addresses only. Solana is not possible today because Across has no route there.
Developer buy and snipe tax
Developer buy
Buy your own coin in the same transaction that launches it, so nobody can get in before you. On an ETH-paired coin you pay in ETH. On a stock-paired coin you pay in that stock: the factory pulls exactly the amount you set from your wallet, approves exactly what arrived, and resets the approval to zero. Your wallet needs to hold that token before you launch.
Snipe tax exemptions
Pons charges 99% on buys in the coin's first second, falling to zero over about three seconds, to stop bots. You can list up to 32 wallets that are not charged it, for example the wallets your team buys with. Pons judges the wallet that receives the tokens, not the one that sends the transaction. Your own wallet is added automatically when you make a Developer buy.
Reserved names
Nobody but Tithe can launch a coin whose name or ticker reads as "Tithe" through our contracts. The launch factory checks it on-chain and reverts with ReservedName. The check looks past tricks: upper and lower case, spaces and symbols between letters, look-alike characters (1, !, | and l for i; 3 for e; 7 and + for t) and letters from other alphabets.
The site applies the same rule, so a coin like that from any other route (an older factory, or a vault linked by someone else) is never listed either.
Vaults without a launch
On the Vaults page you can create a vault before a coin exists, or for a coin you launched on Pons directly.
- Create the vault: pick a listed recipient or a custom address, the split, and what the coin will trade against.
- Point a coin at it: launch on Pons with the vault as the creator fee recipient, or, for an existing coin whose fees your wallet receives, hand them to the vault with Pons's
transferCreatorFeeRecipient. - Link the coin: this tells Tithe the coin belongs to the vault, so the keeper services it and it appears on the site.
Linking is protected: only the wallet that created the vault can link coins to it, Pons must confirm the vault receives that coin's fees right now, and the coin must trade against the same thing as the vault. The vault is the same CharityVault contract a Tithe launch deploys, with the same guarantees.
Check any address
Paste a coin or a vault into the checker on the Vaults or Verify page. It tells you whether it runs through Tithe, who gets the money (or "Custom address" and the address), the split, and whether Pons is still sending the coin's fees to that vault.
Buying and selling
While a coin is on its bonding curve, its page has Buy and Sell. After graduation it trades on its Uniswap v4 pool, which the coin page does not trade against yet; the page says so and you trade it on Pons instead. An ETH-paired coin trades straight against its bonding curve. A stock-paired coin is bought and sold with plain ETH through TitheTrade, which swaps ETH to the stock and into the curve (or back) in one transaction, so you never need to hold the stock. There is no fee from us on either; you pay Pons's fees, the coin's trading fee and, for stock coins, the Uniswap pool fees.
The machinery
The contracts
Six contracts, all verified with public source. None of them can redirect money: vaults, both kinds of forwarder, TitheTrade and the vault factory have no owner at all. The launch factory has an owner, whose powers are listed under CharityLaunchFactory; none of them touch where fees go.
| Contract | Chain | One per | Owner | Does |
|---|---|---|---|---|
CharityVault | Robinhood Chain | coin | none | Receives fees, converts, splits, bridges |
CharityForwarder | Base | Endaoment charity | none | Receives bridged funds, swaps to USDC, credits the charity |
DonateGgForwarder | Base | donate.gg charity | none | Receives bridged funds, passes ETH to donate.gg for the charity |
CharityLaunchFactory | Robinhood Chain | deployment | fee only | Deploys the vault and launches the coin in one transaction |
TitheVaultFactory | Robinhood Chain | deployment | none | Creates standalone vaults and links coins to them |
TitheTrade | Robinhood Chain | deployment | none | Buys and sells stock-paired coins with ETH |
CharityVault
The heart of Tithe. Deployed once per coin, with everything that matters set in its constructor:
charityBps()- The recipient's share. At least 1,000.
forwarder()- Where the recipient's share is sent on the destination chain: a charity's forwarder, or the person's wallet.
destinationChainId()- 8453 for Base, 1 for Ethereum.
creator()- The creator's address, paid on Robinhood Chain.
pairToken()- What the coin trades against. Zero for ETH.
Functions anyone can call
sweepCurveAndDonate- Sweep the bonding curve, claim from the escrow, split and send.
sweepPoolAndDonate- The same for a graduated coin, through the pool hook.
claimAndDonate- Claim what is already in the escrow and send it, offering relayers the default 0.5%.
claimAndDonateFast- The same with a relayer fee rate you choose, up to 1%. Takes a rate, never an absolute amount.
convertPairToEth- Swap a non-ETH pair's fees to ETH, with the price guard described above.
unwrapRefund- Turn an Across refund (WETH) back into ETH.
There is no function that changes the recipient, the split, the creator or the destination. Money leaves a vault in exactly three ways: the recipient's share, the creator's share, and the capped gas refund to whoever called. A vault handles ETH and its own pair token (which it converts). Any other token sent to it by mistake cannot be moved out, which is why a vault is a fee-collection contract and not a donation address.
CharityForwarder
One per charity, on Base. It knows exactly one destination, its charity's Endaoment org (or donate.gg id), fixed at deployment. It receives WETH from Across, unwraps it, swaps to USDC on Uniswap v3's 0.05% pool and donates. Whoever calls it can ask for a stricter minimum than the Chainlink-based floor, never a looser one, so nobody can sandwich the swap by calling with no minimum.
The forwarder addresses were created by a single deployer wallet in order, which makes them reproducible and publicly checkable against the list on /verify.
CharityLaunchFactory
Launches coins. In one transaction it deploys the vault with CREATE2, launches the coin on Pons with the vault as the creator fee recipient, optionally makes the Developer buy, and passes the snipe tax exemptions.
- Recipient list: fixed at construction, with each recipient's route and destination.
- Pairs: each supported pair token has a fixed Uniswap route for converting to ETH.
- Launch fee: priced in dollars, bounded to $2–$5 and never above 0.01 ETH.
- What the owner can do: set the dollar fee within $2–$5, set the ETH fallback fee used when the price check fails (never above 0.01 ETH), hand over or give up ownership, and launch a coin with a reserved "Tithe" name. Nothing else, and nothing that touches a vault.
- Custom recipients:
launchCustomfor any address on Base or Ethereum. - Reserved names:
isReservedNameis public, so anyone can check a name. - No balance: the launcher pays everything; the factory holds nothing between calls.
TitheVaultFactory
Creates standalone vaults with createVault and links coins with link. It has no list of its own: recipients, pair routes, the fee, the treasury and the escrow are read at call time from one launch factory, fixed when it was deployed: the current launch factory, 0x8cbdd18a…4a8, with all 156 recipients, its pairs and its dollar fee. That is why adding recipients means deploying a new vault factory alongside the new launch factory; the previous vault factory, 0xfd3b2f55…f169, keeps working for the vaults and coins it already made. vaultsBy(creator) lists a wallet's vaults and coinsOf(vault) a vault's coins. predictVault shows a vault's address before it exists. Linking emits the same event as a launch, so everything downstream treats a linked coin exactly like a launched one.
TitheTrade
Buys and sells stock-paired coins with ETH: WETH → Uniswap → the stock → the curve, or back. It takes no fee, has no owner, keeps no balance, resets every approval to zero and enforces a minimum at every leg. It exists because Pons's own site routes stock coins through an aggregator that keeps 1%.
The keeper
Money on a blockchain does not move by itself; someone has to send each transaction. Tithe runs a keeper that does it, every 5 minutes:
- It checks every coin's vault: coins launched on Tithe and coins linked through the vault factory, across every factory ever used.
- When a vault holds about $5 of fees and the gas is under 2% of that, it sweeps and pays out. Smaller amounts wait until they are worth sending.
- Recipients on Ethereum have a higher bar: the payout must be at least 0.005 ETH, because Across relayers will not fill smaller deposits to Ethereum at the fee the vault offers. Those recipients are paid in fewer, larger payments. Base's bar is 0.0005 ETH, which $5 already clears.
- For stock-paired coins it converts first, asking for at least 99.5% of the quote.
- It watches every coin's fee recipient on Pons, so a pending change would be seen before it takes effect.
It has no special access. Every function it calls is open to anyone, so if our keeper stopped, anyone could run one (or press the button themselves) and be repaid their gas. It cannot choose where money goes; it can only make it go where the vault already says. More on the Keeper page.
Who pays for gas
Whoever sends a payout transaction is repaid the gas they actually used, out of the fees being moved. Two limits keep that honest:
- Capped at 2% of the amount, so a payout can never be eaten by gas.
- Priced at the network's base fee plus a fixed 0.1 gwei tip, whatever gas price the caller actually paid, so nobody can inflate the refund by bidding a huge gas price.
This is one of only two ways any money in a vault goes anywhere other than the recipient: the refund, and the creator's own share. It is what lets payouts keep happening without depending on us forever. A coin that never trades costs nobody anything.
Money
What it costs
| When | Cost | Goes to |
|---|---|---|
| Launching | 0.0005 ETH | Pons |
| Launching | $2 in ETH (bounded $2–$5) | Tithe |
| Creating a vault | $2 in ETH, plus about $0.50 gas | Tithe |
| Every trade | 1% | Pons |
| Every trade | 0–10%, set at launch | The vault (split between recipient and creator) |
| Stock-paired payouts | Uniswap pool fees | Liquidity providers |
| Every payout | About 0.5% of the recipient's share | Across relayer |
| Every payout | Gas, capped at 2% | Whoever sent the transaction |
| Endaoment charities | About 0.15% to swap to USDC (0.05% pool fee plus slippage), plus 1.5% | Uniswap, Endaoment |
For an Endaoment charity, roughly 97.9% of the recipient's share reaches the nonprofit, before gas: 0.5% to the bridge, about 0.15% on the swap and 1.5% to Endaoment. For a person or organisation paid in ETH, about 99.5% arrives: the bridge fee is the only deduction besides gas. Gas is refunded out of the fees before the split and is usually a small fraction of the 2% cap. Full breakdown on the Fees page.
How the launch fee is priced
The fee is set in dollars, but paid in ETH, so the factory needs an ETH price. Chainlink is not deployed on Robinhood Chain, so it reads Uniswap's ETH/USDG pool there, which holds thousands of ETH and keeps a long price history.
- It uses the pool's current price only if it is within about 1% (100 ticks) of its 30-minute average. A price someone just pushed is ignored.
- Otherwise it falls back to a fixed ETH amount.
- Either way the fee is never above 0.01 ETH, and the owner can only choose a dollar amount between $2 and $5.
The launch form reads the exact amount live from the contract (totalLaunchCost()) before you sign.
What Tithe earns
Only the launch fee and the vault fee. There is no function in our contracts that lets us take any part of a coin's trading fees, so there is nothing to trust us about there: the code cannot do it.
Trust
What cannot change
The rule every change to Tithe is held to: if it would let any human being redirect the money, it does not go in.
- The recipient, the split, the creator and the destination chain are set in the vault's constructor. The vault has no owner, no admin, no upgrade path and no setter.
- The creator picked the split and can never take more, redirect the recipient's share, or block a payout.
- We cannot change any of it either. The launch factory's owner can only adjust the launch fee (within $2–$5, or its capped ETH fallback), transfer ownership, and launch a reserved-name coin.
- A charity forwarder knows one destination, fixed at deployment.
Two bounded exceptions exist, both deliberate and both tested: the capped gas refund, and the creator's own share. Nothing else pays a third address.
The one exception: Pons
Permanent unless Pons changes it. The destination is fixed in a contract with no owner; not even we can move it. The one exception is Pons, the underlying launchpad, which can reassign a token's fee recipient. That takes a 3-day timelock, is publicly visible on-chain the whole time, and we monitor every token for it. If it ever happens, it will be on the transparency page before it takes effect.
Anyone can check it: pendingCreatorFeeRecipient(token) on the Pons factory is a public read. The keeper checks it for every coin on every run, and the Transparency page and each coin's page check it live, from your browser, every time they load. If a change is queued, a red notice appears at the top naming the coin, its vault and the new address. It cannot happen silently, but it can happen.
When something fails
- Across is down
- Claims revert and fees stay in the vault. They go out when Across is back.
- A deposit is never filled
- Across refunds it to the vault as WETH, which is unwrapped and split again.
- The creator's wallet rejects ETH
- The recipient is still paid. The creator's share waits in the vault.
- Our keeper stops
- Nothing is lost. Fees accumulate, and anyone can trigger payouts and be repaid gas.
- A pool price is being manipulated
- Stock conversions refuse to run until the price is back within about 1% of its 30-minute average.
- The Chainlink feed on Base is stale
- The forwarder refuses to swap until it updates. The funds wait in the forwarder.
- Other tokens are sent to a vault
- Anything other than ETH and the vault's own pair token is stuck there permanently. Do not send donations to a vault address.
- A payout to Ethereum is small
- It waits until it reaches 0.005 ETH, because smaller deposits to Ethereum go unfilled.
Checking it yourself
Every claim on this site is a public read on a public contract. You do not have to trust this page.
Follow a coin to its nonprofit (Endaoment)
vault.charityBps()vault.forwarder()forwarder.org()forwarder.orgId()Step 4 returns the EIN as bytes. Decode it and look it up in the IRS register. Each answer is the input to the next, so there is no step where you take our word for anything.
Confirm a coin still pays its vault
Read getLaunchedToken(token) on the Pons factory. Its fee recipient must equal the vault, and pendingCreatorFeeRecipient(token) should be empty.
Watch the money move
- Transparency: every payment from vault to arrival, with each transaction, including anything sent but not yet delivered.
- Verify: every charity's Endaoment address re-derived in your browser from its EIN, every direct recipient's address with its source, and the verified source of every contract.
- The address checker on /vault and /verify: paste any coin or vault.
- Any coin page: live trades, the vault, and every payout it has made.
The Endaoment derivation uses their factory's clone code, which is the 54-byte variant, not the more commonly quoted 55-byte one. The wrong one produces plausible but wrong addresses, so our tests compare against the live factory.
Addresses
0x8cbdd18a8721a3f725a735b955ef9282120ca4a80x4450f165b9a8135406738b796f5483577594173c0x979079b0b870f9cbaa71a8fd03bf34f61e3b7a350x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7e0xd3AFEB2a57f70eF218Aa82451c51B2fb0416Ac9e0xE5e702641Ea86F4ae6cC3cDaeD2B886f976Be0440x10fD9348136dCea154F752fe0B6dB45Fc298A5890x02A0d2a39732082b824a5A3D3b026C54d581DCC8Every coin's vault is on its coin page, and every charity's forwarder is listed on the Verify page. Contract source is verified on Sourcify.
Limits and risks
- Not audited. Our contracts are open, verified and heavily tested, including with real money, but have not had a formal audit. Pons v2 is also unaudited. Only use what you can afford to lose.
- Pons can reassign a fee recipient, behind a public 3-day timelock. See above.
- Across is a dependency. If it stops, payouts stop (and wait) rather than reroute.
- Endaoment grants out off-chain. The last step for a charity, the bank transfer, is not on a chain. We never call it trustless end to end.
- Not 100%. Bridge, swap, gas and Endaoment fees are real, and the creator has a share. We never say 100% reaches the recipient.
- donate.gg's guarantee is narrower than Endaoment's, as explained under Paying a charity.
- Vaults handle ETH and their own pair token only. Any other token sent to a vault is stuck.
- Ethereum recipients are paid less often, in payments of at least 0.005 ETH.
- Custom addresses are unverified. They are whatever the creator typed.
- Coins are risky. Coins are created by users, not by Tithe, and you can lose everything you put in.
FAQ
Does the recipient need to do anything?
No. No account, no signup, nothing to claim. They are paid whether or not they have heard of Tithe.
How long does a payout take?
Once a vault holds about $5 of fees, the keeper pays out within a few minutes, and Across usually delivers within seconds after that. Recipients on Ethereum wait until there is at least 0.005 ETH to send.
Can I change the recipient or split later?
No. That is the point. Launch a new coin, or create a new vault, if you want something different.
Can I use Tithe for a coin I already launched on Pons?
Yes, if your wallet receives its fees. Create a vault, hand the coin's fees to it with Pons's transfer, and link the coin.
What happens if Tithe disappears?
The vaults keep working. They have no owner and do not depend on our servers. Anyone can call the payout functions and be repaid gas, and the contracts' source is public.
Why is my coin's trading fee not reaching the vault straight away?
Pons holds fees on the curve until they are swept. The keeper sweeps once there is enough to be worth the gas.
Is it a tax-deductible donation?
It isn't a donation you make personally, and no receipt is issued to you. Talk to a tax advisor about your situation.
Can I pay someone on Solana?
Not yet. Across has no route to Solana, so recipients can be paid on Base or Ethereum.
Launch a token
Socials and website
X, Telegram and a website are passed to Pons and shown on the coin's page. If you leave the website empty, it is set to the coin's own page on tithe.fun, so every coin has somewhere to point.