Docs
How Esse works.
This page describes what the contracts in this repository actually do. Where a number can change, it says who can change it and what the change affects.
01Launch process
A launch is one call to EssePad.createToken. In that transaction the contract deploys a new ERC-20 with your name and symbol, mints its whole supply to itself, creates the token’s empty Uniswap v2 pair, and opens the bonding curve. The contract charges no creation fee; you pay network gas.
You can add an initial purchase. It runs inside the same creation transaction, at the same price and fees as any other buy, and it requires a USDG approval beforehand, so a launch with a purchase is two wallet confirmations. The app approves the exact amount, never an unlimited one.
Name, description, image and links are stored by the Esse server. Their canonical JSON is hashed with keccak256 and that hash is written on-chain at creation, so the text and image shown for a token are the ones its creator committed to. Images are re-encoded to a 256×256 WebP on upload; SVG is refused. Links must be plain https:// addresses and are only ever rendered as outbound links: the server never fetches them.
- Supply
- 1B tokens, 18 decimals, fixed
- Curve allocation
- 750M (75%), sold through the curve
- Pool allocation
- 250M (25%), paired with the reserve at graduation
- Creator / team / platform allocation
- None
- Quote asset
- USDG (Global Dollar), 6 decimals
02Curve mechanics
Price follows a constant-product curve over virtual reserves. With sold = tokens sold so far and reserve = USDG held for this launch:
x = VIRTUAL_TOKENS − sold y = virtualQuote + reserve x · y ≥ k, k = VIRTUAL_TOKENS · virtualQuote spot price = y / x
VIRTUAL_TOKENS is 1.13B and virtualQuote is half of the graduation target. Those two choices make the curve end exactly where the pool begins: selling all 750M curve tokens leaves a reserve of exactly the target, and the final curve price equals target ÷ 250M, which is the price the pool opens at. The final price is always 9× the starting price.
- Graduation target
- 12,000 USDG in the curve reserve
- Starting price
- 0.0₅5333 USDG per token
- Final curve price = pool opening price
- 0.0₄48 USDG per token
These are the values the deployment script proposes. Nothing is deployed yet.
All math is integer arithmetic on base units, so it does not depend on how many decimals the quote asset has. Every rounding step favors the curve: a buy rounds tokens out down, a sell rounds USDG out down. The reserve therefore always covers every possible sell, and buying then immediately selling can never return more than was paid. The app’s previews use the same integer math, and the trade ticket prices against the contract’s own quoteBuy / quoteSell views.
A sell worth less than one base unit of USDG is rejected instead of being accepted for nothing. A buy larger than what the curve still needs takes only the needed amount, returns the rest untouched, and completes the curve.
03Fees
Every buy and sell on the curve pays a trade fee in USDG, split into a creator fee and a platform fee. The deployment default is 0.50% + 0.50%. On a buy the fee is taken from what you pay before the rest reaches the curve; on a sell it is taken from the proceeds.
Fees never enter the curve reserve. The contract keeps three separate ledgers per quote asset (curve reserves, creator fees per creator, platform fees) and tracks their sum, so its USDG balance can be checked against what it owes at any time through solvency(). Creator fees are pull-based: only the creator’s wallet can claim them, at any time, from Portfolio. Platform fees can be sent only to the configured fee recipient.
Each launch snapshots its fee rates at creation. The owner can change the rates for future launches, capped at 2.00% in total, but cannot change them for a launch that exists. There is no fee on token transfers, and none after graduation other than the Uniswap v2 pool’s own 0.30% swap fee, which is set by Uniswap v2, not by Esse.
04Slippage and deadlines
The price moves with every trade, so the price you see can change before your transaction is included. Two contract-enforced limits protect a trade:
- Minimum received
- Your estimated output minus your slippage tolerance (0.5%, 1%, 3% or custom). If the trade would return less, the whole transaction reverts and nothing moves.
- Deadline
- Ten minutes after you confirm. A transaction included later reverts.
- Maximum spent (buys)
- The amount you entered. The contract never pulls more, and pulls less when the order completes the curve.
Before asking for a signature, the app re-reads your balance, allowance and network, takes a fresh quote from the contract, and simulates the transaction. A trade shows as confirmed only after its receipt reports success; a rejected signature, a reverted transaction and a transaction you cancelled or replaced in your wallet are each reported as what they are.
05Graduation
Trigger: tokensSold == CURVE_SUPPLY, which can only happen when the reserve equals the graduation target. The buy that sells the last curve token attempts the migration in the same transaction.
What moves: 250M tokens and the entire curve reserve go to the token/USDG Uniswap v2 pair that was created with the token. The pair’s opening price is reserve ÷ 250M, identical to the final curve price, with no rounding gap because the target is required to be even and the split is exact. Accrued creator and platform fees are not part of the reserve and stay claimable.
A pair that already exists is handled explicitly. Until graduation the token refuses transfers to its own pair, so nobody can add liquidity or set a price there early, and the contract requires the pair’s LP supply to be zero before it seeds it. If someone donates USDG to the empty pair to distort the opening price, a donation below the target is offset (the contract deposits that much less, so the pool still opens at the curve price) and the offset is credited to the creator’s fee balance.
If the migration fails (for example because USDG transfers to the pair are blocked), the failure is caught: the buy still succeeds, the launch is not marked graduated, a GraduationDeferred event is emitted, the reserve stays in the curve, and sells remain open. Anyone can retry with graduate(token); it is permissionless and costs only gas. If holders sell in the meantime, the curve simply reopens until it is filled again. A launch can graduate once: every later attempt reverts with AlreadyGraduated. A completing buy with too little gas for the migration reverts as a whole rather than silently deferring it.
06LP ownership
The LP tokens minted by the pair are sent to the burn address 0x…dEaD inside the graduation transaction. They are burned, not locked: there is no timelock, no owner and no key that could ever withdraw that liquidity, for Esse, the creator or anyone else. The share of swap fees that Uniswap v2 pays to liquidity providers accrues to that burned position, so it stays in the pool.
After graduation the curve is closed for good, and the token trades in the pool like any other Uniswap v2 pair. Esse does not route or index pool trades.
07Token permissions
- Mint
- None. The whole supply is minted once, in the constructor. There is no mint function.
- Owner / admin
- None. The token has no owner, no pause and no blocklist.
- Transfer tax
- None.
- Transfer restriction
- One, temporary: until graduation, tokens cannot be sent to the token’s own Uniswap v2 pair. It is lifted inside the graduation transaction and cannot be re-enabled. Every other transfer is unrestricted at all times.
- Sell restrictions
- None. Selling back to the curve is always open until graduation, including while creation is paused.
- Creator powers
- None over the token, the curve or the reserve. The creator can only claim accrued creator fees.
08Privileged roles
The launchpad has one privileged role, the owner (two-step transferable). Everything it can do affects launches created afterwards only:
- setFees
- Creator and platform fee rates for future launches, capped at 2.00% in total.
- setQuoteAsset
- Enable or disable a quote asset and set its graduation target for future launches.
- setFeeRecipient
- Where platform fees are sent when claimed.
- setCreationPaused
- Pause or resume new creations. Trading, claims and graduation cannot be paused.
The owner cannot change an existing launch, pause trading, mint, move curve reserves, or touch creator fees. There is no upgrade mechanism and no function that withdraws reserves to an administrator.
Separately, USDG itself is issued by a third party behind an upgradeable proxy, with role-based administration, a pause switch and global transfer settings. If its issuer pauses or restricts USDG transfers, trades and claims that move USDG revert until that ends. Esse cannot prevent or override that.
09Network and contracts
- Network
- Robinhood Chain mainnet · chain ID 4663
- Gas token
- ETH
- EssePad
- Not deployed yet. Launching and trading are disabled in this app until an address is configured.
- Indexed from block
- —
- USDG (quote asset)
- 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168
- Uniswap v2 factory
- 0x8bcEaA40B9AcdfAedF85AdF4FF01F5Ad6517937f
- Uniswap v2 router
- 0x89e5DB8B5aA49aA85AC63f691524311AEB649eba
None of these addresses were typed in by hand. pnpm verify:config re-derives them: the chain ID, RPC, explorer and the USDG address from the official Robinhood Chain docs, the Uniswap v2 contracts from Uniswap’s deployments feed, and then checks each against the chain (chain ID from the RPC, bytecode, symbol, decimals, router.factory()). Last verified September 18, 2026.
- networkhttps://docs.robinhood.com/chain/connecting
- quoteAssethttps://docs.robinhood.com/chain/contracts (Token Smart Contracts → USDG)
- dexhttps://developers.uniswap.org/deployments.json (repo https://github.com/Uniswap/contracts, generated 2026-07-15T22:25:40.000Z)
The contracts are not audited. They are covered by unit, fuzz and invariant tests in this repository, including a full lifecycle against a fork of Robinhood Chain with the real Uniswap v2 factory and the real USDG contract.
10Data and metrics
Everything on this site comes from one of two places: a live read of the chain, or an index built from the EssePad contract’s own events. Nothing is sampled, seeded or estimated from third parties.
- Price
- Spot curve price after the latest confirmed trade, in USDG per token. For a graduated token it is the final curve price; the live price is then set by its pool.
- Volume
- Gross USDG that changed hands on the curve, fees included: what buyers paid plus the gross the curve released to sellers. Pool trading after graduation is not included.
- Curve progress
- Tokens sold ÷ 750M.
- Curve reserve
- USDG held for one launch. It is what backs sells. It is not DEX liquidity until graduation moves it into the pool.
- Fully diluted value
- Price × 1B supply. A multiplication, not redeemable money: only the reserve backs sells.
- Holders
- Not shown. Esse indexes curve trades, not every token transfer, so it has no complete holder list.
- Profit and loss
- Not shown. Esse does not know the cost of tokens that arrived by transfer.
The indexer backfills from the deployment block, syncs incrementally, writes each batch and its checkpoint in one database transaction, keys every row by transaction hash and log index so re-processing is harmless, and recovers from chain reorganizations by walking back to the newest block hash it still agrees with. When it falls behind, pages say so and by how much.
11Risks
Tokens on Esse are created by anyone, in seconds, with no review. Most new tokens go to zero. A token’s name, image and links are chosen by its creator and prove nothing about who is behind it. The price on a curve can fall as fast as it rose, and a large sell moves it a lot. After graduation the pool is ordinary permissionless liquidity. Smart contracts can have bugs, and these have not been audited. Only trade what you can afford to lose.