_tryPay succeeds trivially on a zero share, so a tiny collect can
emit Paid(amount=0) with no outbound transfer. Indexers must not
treat every Paid as an actual push.
GITLAWB exists on Robinhood Chain as a LayerZero V2 OFT
(0xd1b0d44E4f6ed940fcC7A9F59Bf30Daf62cCFe3D, community repo contracts.ts), minted 1:1 against
GITLAWB locked in the GitlawbOFTAdapter on Base (peers verified both ways on-chain). So the
Robinhood side needs no bridge work: the OFT is now a fixed quote next to USDG and ETH.
- config: robinhood quotes [USDG, ETH, GITLAWB]; same key, same badge, same live USD
(the Base pool price; the two are one supply kept within arbitrage by the bridge)
- queries: filter + USD factor match per chain (Base address on Base, OFT on Robinhood)
- filter chip offered on both chains; launch form nudge on any chain that offers GITLAWB
- copy: form, token page, rules, agents, llms.txt, README mention the bridged token
- contracts/test/LaunchFactory.gitlawbRobinhood.fork.t.sol: pins endpoint + Base peer and
proves launch/buy/sell/collect with the fee burned as GITLAWB on live Robinhood Chain
Only Burned had an expectEmit assertion; Launched, Registered,
Collected, Paid, Credited and Claimed were observed indirectly.
Add test/LaunchEvents.t.sol (7 tests): exact expectEmit for
Launched / Registered / Claimed, log-decoded assertions for
Collected + Paid sums, Credited on push-fail, Burned on empty
recipients, and the per-collect invariant
Paid + Credited + Burned == Collected.
Document the mapping in docs/LAUNCHPAD.md so the app indexer
(bb_launches / bb_launch_fee_events) has a contract-side schema
reference. No contract change.
Launches on Base can now be priced in GITLAWB (Gitlawb's token), next to ETH and
Coinbase tokenized stocks. Same contracts, same ERC-20 quote path (Permit2, salt
ordering); trading fees are paid in GITLAWB, or burned when no beneficiary is named.
- lib/launchpad/gitlawb.ts: token facts, the WETH/GITLAWB Uniswap v4 pool key
(dynamic-fee hook, tick spacing 200; pool id asserted = keccak(abi.encode(key))),
USD from sqrtPriceX96 x ETH/USD with a sanity window, dollar->GITLAWB presets, tile
- lib/launchpad/gitlawbServer.ts: StateView.getSlot0 read, 60s cache, fail-soft
- config: quote key "gitlawb", Base quotes [ETH, GITLAWB], presets, quoteKeyOf()
- queries: live USD factor in SQL sorts/volume/mcap + totals, gitlawb list filter
- launch form: GITLAWB chip with live price, dollar start-cap presets, compact units
- token page + share card: "priced in GITLAWB" note/pill with the Gitlawb mark
- fmtQuote: 18-dec amounts >= 100K read as 1.2M (GITLAWB is millions per dollar)
- copy: rules (new FAQ entry), agents, llms.txt, README
- tests: gitlawb.test (pool id, price, presets), filter + card cases (256 total);
contracts/test/LaunchFactory.gitlawb.fork.t.sol proves launch/buy/sell/collect on
live Base with the 1% fee burned as GITLAWB
openlaunch — launch a token. Free. Open source. On Base or Robinhood Chain.
Contracts (LaunchFactory / LaunchLocker / LaunchToken, Foundry), the site (Next.js),
brand assets. No platform fee, liquidity locked forever.