Skip to content
Esse

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.