Chapter 07

Contracts

Addresses, functions and events for LaunchFactory, PersonHook, PersonEscrow, OleyRouter and QuoteRegistry.

ContractAddressRole
LaunchFactoryReadingCreates the coin, its pool and the single-sided position, and runs the first buy
PersonHookReadingTakes the 3% on every swap and keeps the fee ledgers
PersonEscrowReadingBinds a platform account to a wallet, pays claims and runs sweeps
OleyRouterReadingExact-input buys and sells
QuoteRegistryReadingQuote assets and their Chainlink USD feeds
PoolManager0x8366a39CC670B4001A1121B8F6A443A643e40951Canonical Uniswap v4 core

LaunchFactory

launch(LaunchParams) is payable and creates the coin and pool, with an optional dev buy in the same transaction.

struct LaunchParams {
  string name;
  string symbol;
  address quote;        // address(0) = native ETH, else a registered stock token
  bytes32 salt;
  uint8 platform;       // 0 X, 1 YouTube, 2 TikTok, 4 Snapchat, 5 Twitch, 7 Farcaster
  string handle;        // canonical lowercase handle
  uint256 devBuyQuote;  // 0 = no dev buy
  uint256 devBuyMinOut;
}

Emits Launched(id, token, personKey, quote, launcher, platform, handle, sqrtPriceX96, openingTick, liquidity). The factory computes personKey = keccak256(platform, handle) itself and accepts canonical handles only (a-z 0-9 _ . - :, 1 to 64 bytes).

PersonHook

  • pools(id) returns token, quote, launcher, personKey, quoteIsCurrency0, seeded, launchedAt and haltMaxStaleness.
  • personFees(id) returns the claimable person fees for the pool.
  • previewBuyFees(quoteIn) returns protocolFee, personFee and total.
  • Emits HookSwap(id, trader, recipient, isBuy, quoteAmount, tokenAmount, feeQuote) on every swap.

PersonEscrow

  • persons(personKey) returns wallet, platformUserId and boundAt. bindNonce(personKey) returns the current nonce.
  • attest(Attestation a, bytes sig) binds or rebinds; the caller must be a.wallet.
  • claim(bytes32[] ids, address to) pays each pool in its quote; the caller must be the bound wallet of every pool.
  • cycleStart(id), sweepDue(id) and sweep(PoolKey key) run the 90-day cycle.
  • Events: PersonBound, Claimed, Swept.

OleyRouter

  • buy(key, quoteIn, minOut, recipient, deadline), payable for ETH quotes; approve the router for stock quotes.
  • sell(key, tokensIn, minOut, recipient, deadline); approve the router for the coin first.
  • Exact input only.

QuoteRegistry

QuoteRegistry.priceUsd8(quote) and quoteHalted(quote, maxStaleness) back the opening price and the trade guard.

Locked liquidity

Every pool's single-sided position is added once by the factory. PersonHook reverts every liquidity removal on its pools, so the position can never be withdrawn by anyone.