_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.
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.
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.