Skip to main content

Session — stage 1, launching

Closed 14 Sep 2026. What a creator decides when they launch. Project state is in notes/STATUS.md; the decision is D17 in notes/DECISIONS.md.

Done

  • D17 built. launch(name, symbol, quote, CreatorFees{recipient, buyFeeBps, sellFeeBps}); the three-argument launch stays and means no creator fee.
  • BondingCurve splits every fee between the protocol and the creator, pro rata, with rounding dust to the protocol. Protocol + creator ≤ 10% each way. No setters.
  • Neither party can stop a trade. Each share is pushed with trySafeTransfer; a failure is held as creatorFeesOwed or protocolFeesOwed, with separate permissionless retries that still work after graduation.
  • Proved: CreatorFee.t.sol (11), CreatorFeeLaunch.t.sol (3), invariants with both parties randomly blocked, and CreatorFee.fork.t.sol with Circle's real blacklister blocking the creator and, separately, our own vault. make check 159/159, make test-fork 13/13.
  • FEATURES.md stage 1: creator sets the fee ✔, names the wallet ✔.

Decided — do not relitigate

  • Both fees exist, the ceiling caps their total, and a failed push is held rather than reverted — the developer's calls, recorded as D17's amendment. Holding on failure is not the claim model D17 rejects: nothing accrues while the recipient can be paid.
  • The two retries are separate so one blocked party never holds up the other.
  • Validation stays in the curve's initializer, not the factory, because only the curve knows the protocol fee the creator's is added to.
  • Curve storage appends only: slots 12–14, gap 40 → 38. Any real deploy of this curve is a new beacon (D12).

Still open in this thread

  • Pool fees for the creator — still O17; the migrator's fee sink is one shared address.
  • Fees pointed at holders, a buyback or a burn, and anti-snipe (O12) — deliberately deferred.
  • Deploy.s.sol and dev/smoke.sh still launch with the three-argument form; nothing exercises a creator fee outside the tests.