Security and limits
What you have to trust, what the contracts prevent, how the code has been checked, and what Grail does not protect against.
Who holds what
Grail is non-custodial. Private keys exist only in the user's browser, and Grail's servers hold no keys and no mapping between public and private addresses. Grail cannot move, freeze or recover anyone's funds. That also means it cannot help someone who loses both their phrase and their browser's copy.
| Part run by Grail | If it fails or misbehaves |
|---|---|
| This website | It delivers the code that handles your phrase, so a compromised site could steal from people who use it. This is the largest trust assumption, as with any web wallet |
| Broadcaster | Private trades and withdrawals stop until it returns. It cannot steal or change a trade, because the proof fixes the calls. It can see IP addresses |
| Tree snapshot | New users cannot finish setup, or a wallet misses notes until it is replaced. It cannot spend funds |
| Indexer and API | Lists and charts stop or show wrong data. Tokens, pools and balances are unaffected, and they keep trading on Uniswap |
What the owner can do
The owner of GrailLaunchpad is a Safe, set in the constructor, so a hot key never owns the contract.
| The owner can | The owner cannot |
|---|---|
| Change the protocol fee recipient, never to a reserved address | Touch pools, positions, creator fees or anyone's tokens |
| Pause new launches | Pause trading, which happens on Uniswap |
| Transfer ownership, in two steps | Change the launch fee, the launch price, the guard or the fee split |
| Renounce ownership, which is disabled |
The contracts are not upgradeable.
How the code has been checked
| Check | Result, as of 2026-11-02 |
|---|---|
| Internal audit | 0 critical, 0 high, 2 medium, 7 low, 17 informational and 2 gas findings. The two medium findings are the blocked launches and Uniswap's protocol fee, both described in these docs |
| Unit and fuzz tests | 16 passing |
| Sepolia fork tests against real Uniswap v3 | 27 passing |
| Mainnet fork tests | 3 passing, plus a full rehearsal with the real deployer key |
| Backend tests | 24 passing |
Live tests on Sepolia covered launches, public and private buys and sells, key rotation and withdrawals. Mainnet tests before launch covered the deposit, the standby and a withdrawal through the broadcaster.
What privacy does not cover
- Timing and amounts. A deposit of 0.5 ETH followed by a private buy of 0.5 ETH can be matched by anyone. Vary amounts and leave time between steps.
- Withdrawals. The recipient is public. Withdrawing to the wallet you deposited from links the two.
- Early private buys. A private buy in the first blocks of a token may be guessed to be the creator's.
- A small crowd. Private trades in a new token are easy to count, and few people may be trading privately at first.
- Network metadata. The broadcaster sees your IP address, as do the RPC provider and Grail's server. Use a VPN if that matters to you.
- Your device. Malware, or someone using your unlocked browser, can reach what the tab can reach. Lock the wallet on a shared computer.
Known limits
| Limit | Detail |
|---|---|
| Other pools | Anyone can open another fee tier for a token. Trades there pay no Grail fee |
| Third-party liquidity | Concentrated liquidity in the same pool shares the fee on the trades it fills, which is inherent to Uniswap v3 |
| Browser storage | Chrome may evict site data when a disk is nearly full. The app asks for persistent storage, and Chrome may refuse. The recovery phrase is what makes funds safe, not the browser's copy |
| Phones and low-end machines | Not tested yet. The private balance stores about 600 MB and needs about 1 GB free |
| Gas spikes | The broadcaster pauses when its gas wallet could not pay for a 6M-gas transaction at the current price |
Reporting a problem
If you find a security issue, please message @Graildotfamily on X, without details, and we will arrange a private channel.
Grail is an independent project built on Railgun's public contracts and SDK. Railgun contributors do not run, review or endorse Grail, and they did not write this documentation. Their own documentation is at docs.railgun.org.