# Lysa: launching and trading from an agent Served at https://lysa.fun/agents.txt. As of 2026-11-06. Lysa's agent API, a Claude Code skill and an MCP server (lysa-mcp) are being built; until they ship, this file is the recipe. Lysa is a launchpad on Elysium, chain 99901, an Arbitrum Orbit chain that settles to HyperEVM. Gas is HYPE (18 decimals). A launch is one transaction to Lysa's factory: the token, its Uniswap V4 pool and a locked position. No API key and no sign-up. ## Where to send - Read from any of: https://rpc.lysa.fun, https://rpc-live.elysp.com, https://rpc.chainzy.io - Send ONLY through https://rpc.lysa.fun. Elysium's public RPCs do not take transactions yet. Lysa's relay keeps a signed transaction to Lysa's contracts and Lysa's poster posts it to Elysium through HyperEVM's Inbox; it lands in seconds to a minute. GET https://rpc.lysa.fun/health says whether the poster is on. GET https://rpc.lysa.fun/tx/ says where your transaction stands. - Sign where the key is. Never send a private key anywhere. ## Contracts (chain 99901) Factory 0x66820fAA4fFbbAdfb18CE7BE542D21B6ac069b4D launches Hook 0xd157Da542191c6769D00f01e86415A4B309aE8ec fees, the sniper fee, the first 24 seconds' caps Escrow 0x0e813a0b1Ee5857713a1a054fC809F155e096318 creators' fees Router 0xef75c02F5Ec50217fb75905263fC6414a60d535A lysa.fun's swap router ## The launch struct Socials { string twitter; string telegram; string discord; string website; string farcaster; } struct Metadata { string logo; string description; Socials socials; } struct LaunchParams { string name; string symbol; Metadata metadata; bytes32 salt; address[] recipients; uint16[] bps; uint16 creatorTaxBps; uint16 buyFadeBps; uint24 buyFadeWindow; uint16 sellFadeBps; uint24 sellFadeWindow; uint256 devBuyIn; uint256 minDevBuyOut; } function launch(LaunchParams p) payable returns (address token, bytes32 poolId, uint256 devBuyOut) function launchFee() view returns (uint256) function launchEnabled() view returns (bool) event Launched(address indexed token, address indexed creator, bytes32 indexed poolId, uint16 creatorTaxBps, string name, string symbol, string logo, uint256 devBuyIn, uint256 devBuyOut) Flat, for cast: launch((string,string,(string,string,(string,string,string,string,string)),bytes32,address[],uint16[],uint16,uint16,uint24,uint16,uint24,uint256,uint256)) The rules; a launch that breaks one reverts: - value = devBuyIn + launchFee(), exactly. launchFee() is 0 today. - name 1 to 64 bytes, symbol 1 to 16 bytes, logo at most 512, description at most 2,048, each social at most 256. - recipients: 1 to 5 fee wallets, each share above 0, the shares (bps) summing to exactly 7000: the creator's 0.7% of every trade. One wallet: recipients [you], bps [7000]. - creatorTaxBps: 0 to 1000 (0 to 10%), on top of the fee, to the fee wallets. - The sniper fee, each side: whole percents (multiples of 100 bps), at most 2900 bps above the 1% base (30% in all); buyFadeWindow at most 900 seconds, sellFadeWindow at most 300; a fee with a 0-second window is refused. lysa.fun's default: buyFadeBps 900, buyFadeWindow 24, sellFadeBps 0, sellFadeWindow 0 (buys start at 10% and fall to 1% over 24 seconds). Zeros mean no sniper fee. - The dev buy: at most 5% of supply, or the whole launch reverts (DevBuyOverCap): about 2.47 HYPE at the start price with the default sniper fee. Simulate first. - salt: a fresh random bytes32. - logo: lysa.fun shows images from https://img.lysa.fun only. Leave it "" if you have none; uploads for agents come with the agent API. - minDevBuyOut: simulate first (an eth_call), then use the simulated devBuyOut less your slippage. A recipe with Foundry's cast, the key in your own keystore (cast wallet import mykey --interactive): R=https://rpc.lysa.fun F=0x66820fAA4fFbbAdfb18CE7BE542D21B6ac069b4D ME=$(cast wallet address --account mykey) SEND='launch((string,string,(string,string,(string,string,string,string,string)),bytes32,address[],uint16[],uint16,uint16,uint24,uint16,uint24,uint256,uint256))' DEV=100000000000000000 # a 0.1 HYPE dev buy, in wei; 0 for none SALT=0x$(openssl rand -hex 32) P="(\"Moon Rabbit\",\"TSUKI\",(\"\",\"\",(\"\",\"\",\"\",\"\",\"\")),$SALT,[$ME],[7000],0,900,24,0,0,$DEV,0)" # 1. simulate: the token's address, its pool, the dev buy's tokens cast call $F "$SEND(address,bytes32,uint256)" "$P" --value $DEV --from $ME --rpc-url $R # 2. set minDevBuyOut (the last 0 in P) to the simulated tokens less ~3%, same SALT, then sign and send cast send $F "$SEND" "$P" --value $DEV --account mykey --rpc-url $R --async # 3. follow: once it lands, the receipt's Launched event names the token; its page is https://lysa.fun/t/ cast receipt --rpc-url $R ## Reading - Lysa's public API, rate-limited (https://lysa.fun/api/v1): /board?pad=all|lysa|kleos|boxa|elysp|ascend&sort=new|hot|top|vol, /token?token=0x…, /trades?token=0x…, /candles?token=0x…&tf=1m, /wallet?addr=0x…, /hype. - The factory's Launched event. rpc.chainzy.io answers eth_getLogs over about 1,000 blocks at a time. ## Trading through lysa.fun's router function buy(uint256 venue, address token, uint256 minOut, uint256 deadline) payable returns (uint256 out) function sell(uint256 venue, address token, uint256 amountIn, uint256 minOut, uint256 deadline) returns (uint256 out) function quoteBuy(uint256 venue, address token, uint256 hypeIn) returns (uint256 out) function quoteSell(uint256 venue, address token, uint256 amountIn) returns (uint256 out) - venue 0: Lysa's coins. The other pads' native-HYPE V4 coins: 1 Kleos V4, 2 Kleos V5, 3 Boxa V4, 4 Boxa Pairs, 5 ElysPump v2. Ascend's coins trade through Ascend's own Universal Router, not this one. - A quote is an eth_call; ask it from your own address, so the token's caps answer for you. - A sell needs the router approved for exactly that amount first (approve(router, amount) on the token), sent and landed before the sell. - lysa.fun's 0.2% comes off the HYPE side of each trade. - In a coin's first 24 seconds no wallet may hold more than 5% or have bought more than 5.5% of supply. A router that takes the tokens itself counts as one buyer for everyone it serves; buy from your own address, or through this router, which delivers to the buyer. ## Fees, in the trade's terms A 1% fee on every trade: 0.7% to the creator's fee wallets and 0.3% to Lysa, plus the creator tax when set, and the sniper fee while it lasts. A creator collects and claims on the coin's page, or calls collect(token) on the hook, then claim() on the escrow.