GRAIL
Trust

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 GrailIf it fails or misbehaves
This websiteIt 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
BroadcasterPrivate 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 snapshotNew users cannot finish setup, or a wallet misses notes until it is replaced. It cannot spend funds
Indexer and APILists 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 canThe owner cannot
Change the protocol fee recipient, never to a reserved addressTouch pools, positions, creator fees or anyone's tokens
Pause new launchesPause trading, which happens on Uniswap
Transfer ownership, in two stepsChange 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

The contracts have not had an external audit. They have had an internal audit only. Please size your use accordingly.
CheckResult, as of 2026-11-02
Internal audit0 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 tests16 passing
Sepolia fork tests against real Uniswap v327 passing
Mainnet fork tests3 passing, plus a full rehearsal with the real deployer key
Backend tests24 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

LimitDetail
Other poolsAnyone can open another fee tier for a token. Trades there pay no Grail fee
Third-party liquidityConcentrated liquidity in the same pool shares the fee on the trades it fills, which is inherent to Uniswap v3
Browser storageChrome 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 machinesNot tested yet. The private balance stores about 600 MB and needs about 1 GB free
Gas spikesThe 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.