Bookrunner  ·  Mechanics  ·  Robinhood Chain (4663) ← Bookrunner  ·  Market

Every moving part, written down.

The front page keeps the mechanics out of the way on purpose. This page is the opposite: the whole machine, in order, including the parts that are inconvenient for us. Where a number appears, it comes from the contract or from a measurement, and the measurement is named.

Revised whenever the contract changes · numbers verified on chain 4663

Section 1What an offering is

An offering is a subscription with a deadline. People send ETH into a contract during a window. If the founder fires the listing before the window closes, the contract spends that money buying the token on the launchpad — inside the listing block itself — and every subscriber owns a share of what was bought. If the listing never happens, everybody takes their money back.

Nothing here is custodial. Subscribed ETH sits in the contract from the moment it arrives until it is either spent on the listing or returned to the wallet that sent it. There is no third state, no treasury, no multisig, and no human step in between.

The life of an offering

  1. CreationThe founder writes the terms into the contract: the window, the caps, the rounds and their weights, the vesting, the buyers' share of the bag, the floor on what the money must buy, and the launchpad configuration the money will be spent through. After this call, none of it can be edited. Not by the founder, not by us.
  2. SubscriptionAnyone may send ETH between opensAt and closesAt, subject to the minimum, the per-wallet maximum and the hard cap. Each contribution is weighted by the round it lands in. Anyone may also withdraw in full, at any moment, until ten minutes before the deadline.
  3. The listingThe founder calls launch. It only goes through if the goal was met and the window is still open. One transaction deducts the platform fee, buys the token, deploys the fee vault, checks the bag against the floor, and credits any change back to the subscribers.
  4. Or the deadlineIf the founder never fires, or the goal is never met, the window simply closes. The exit reopens permanently and everybody withdraws the exact amount they put in. The founder gets nothing: no tokens, no fees, no consolation.
  5. Afterwards, indefinitelySubscribers pull vested tokens as they unlock and pull dividends as the pool generates fees. There is no end date on either. The contract does not stop caring about a sale once it has listed.

What an offering is not

  • It is not a promise of a fixed number of tokens. See §3 — this is the single most important design decision in the whole system.
  • It is not a yield product. Dividends are a share of trading volume, and volume is usually zero. Nobody here will quote you a percentage.
  • It is not a claim on the founder. The contract does not know how to sue anybody. What it enforces, it enforces mechanically; everything else is trust, and we will tell you which is which.

Section 2Rounds and weights

An offering has one, two or three rounds. A round is not a price. It is a weight — a multiplier applied to the ETH that lands in it. Your share of the offering is your total weight divided by the total weight of everybody.

A round is defined by two numbers: its weight, and the cumulative book size at which it closes. Round I with a cap of 1.0 ETH means "the first 1.0 ETH raised, by anybody, in any number of contributions". Rounds do not have their own clocks; they fill in order, and they fill by money, not by time.

What the contract enforces at creation

  • At most three rounds.
  • Every weight is between 1.0× and 3.0×. Nobody can mint a 50× founder round.
  • Weights never improve: each round must be worth the same as or less than the one before it. Without this rule a founder could hang back and take the best deal at the end of the queue, which is the oldest trick in the presale book.
  • Caps strictly increase, and the last round's cap must reach the hard cap — so there is no band of the book that no round covers and no way to reach the hard cap through a gap.

Contributions that cross a boundary

They are split at the boundary and weighted piecewise. If the book stands at 0.4 ETH, round I closes at 1.0, and you send 0.8 ETH, then 0.6 of your ETH is weighted at the round I multiplier and 0.2 at the round II multiplier. There is no rounding trick and no rejection: the arithmetic is weightFor(), it is a view function, and the app calls it before you sign so the number you are shown is the number you get.

Worked example — a 3.0 ETH book, filled by four people

RoundWeightCloses atWho lands in it
I1.5×1.0 ETHAlice in full; Bruno partly
II1.2×2.0 ETHBruno partly; Carmen partly
III1.0×3.0 ETHCarmen partly; Dan in full
SubscriberBook on arrivalPaysWeighted asWeightShare
Alice0.00.400.40 × 1.50.6016.22%
Bruno0.40.800.60 × 1.5 + 0.20 × 1.21.1430.81%
Carmen1.21.000.80 × 1.2 + 0.20 × 1.01.1631.35%
Dan2.20.800.80 × 1.00.8021.62%
Book full3.003.70100%

Read Alice against Dan. Dan paid twice what Alice paid and holds 21.62% against her 16.22%. Per ETH subscribed, Alice's money is worth exactly 1.5× Dan's — which is precisely what the round card said it would be, and the only thing the round card ever says.

Notice also that nobody was rejected, nobody was rationed, and the weights sum to something finite. That is the whole trick: shares of one bag, never quantities.

What happens when somebody leaves

The exit is all-or-nothing: you withdraw your entire subscription, your weight goes to zero, and the book shrinks by exactly what you put in. Since rounds fill by book size, your departure reopens the cheap capacity you were occupying for whoever comes next. If Bruno exits in the example above, the book falls from 3.0 to 2.2 and the next 0.8 ETH is weighted from 2.2 upward — at round III, not at Bruno's old blend. Weights are a function of where the book stood when the money arrived, and nothing else.

The corollary matters if you are thinking of exiting and re-entering: you cannot get your old round back. Re-subscribing is weighted at the book's current position, which is normally worse.

Section 3What your allocation is actually a share of

You own a share of the tokens the offering bought. Not a promised quantity, not a price, not a rate. This is worth being blunt about, because it is the difference between a presale that can fail its last customer and one that cannot.

Why not a fixed price

The launchpad sells along a curve: the more of the supply the purchase takes, the more each additional token costs. A contract that promised "N tokens per ETH" would be writing cheques against a curve it does not control. Raise more, or launch at a different point on the curve, and the sum of the promises exceeds the tokens that exist. The contract would be insolvent and the last person to press claim would find an empty till.

With shares, the sum of everybody's claim is the bag, by construction. It cannot overdraw. The cost of that guarantee is that you cannot know your token count in advance, only your percentage — and we would rather show you an honest percentage than a dishonest number.

Where the raise actually goes

Three deductions stand between the book and the bag, and all three are visible before you subscribe. Using the 3.0 ETH book from §2:

StepWho takes itETH
Subscribed by the four buyers3.0000
Platform fee, 1% of the raiseThe platform, once, at listing− 0.0300
Sent to the launchpad2.9700
Launchpad listing fee, flatThe launchpad, once− 0.0005
Spent buying the tokenInto the curve2.9695

At 2.9695 ETH the curve delivers about 68.4% of the one-billion supply, roughly 684,300,000 tokens. That figure is not a guess: the curve was measured on chain and follows ETH = 1.37 · p / (1 − p) for a fraction p of supply, accurate to within 0.01 percentage points at every size we tested up to 15 ETH. It is also why a bigger book does not buy proportionally more tokens — the last ETH into a large raise buys far less than the first.

The bag, split

The bag is divided once, at the listing, into the buyers' share and the founder's payment. The buyers' share is a term of the offering (buyersBps), fixed at creation, and the contract refuses to create an offering that gives buyers less than half. Say this one set 80%:

HolderTokensOf supplyReleased
Buyers, as a group547,440,00054.74%By vesting schedule, pulled individually
The founder136,860,00013.69%After the launchpad's per-wallet window
The bag684,300,00068.43%

The remaining ~31.6% of supply is not held by anybody — it is still in the pool, which is what makes the pool a market. The founder's payment is held by the contract and pulled, never pushed; see §4 for why that is not a courtesy but a requirement.

Individual allocations, from the same example

SubscriberShareTokensOf supply
Alice16.22%88,774,0548.88%
Bruno30.81%168,670,70316.87%
Carmen31.35%171,629,83817.16%
Dan21.62%118,365,40511.84%

The floor

At creation the founder commits minBagTokens: the minimum number of tokens the purchase must actually yield, or the listing reverts and the money stays refundable. It is published with the terms, so before you subscribe you can read the worst bag the offering is allowed to accept. If the launchpad changes its curve, its fee, or its configuration between creation and listing, this is the tripwire that catches it.

Section 4The listing block

The founder fires the listing with one call. What that call does, in order, inside a single transaction:

  1. ChecksCaller is the founder; the sale is neither listed nor cancelled; something was raised; the window has not closed; the goal, if any, was met.
  2. Books the platform fee1% of the raise is set aside inside the contract as owed to the platform. It never leaves as part of the purchase, and it is booked exactly once — a subtlety that cost us an audit round, see §10.
  3. Deploys the fee vaultA fresh FeeVault, belonging to this sale and no other, which will be the launchpad's fee recipient for this token forever.
  4. BuysThe rest of the raise goes into the launchpad through the shared bundler, which creates the token and executes the purchase in the same block, then points the pool's fee stream at the vault.
  5. VerifiesThe tokens received are counted and checked against the committed floor. Under the floor, the entire transaction reverts and the offering is exactly as it was a second earlier: refundable.
  6. Splits and settlesThe bag is divided into the buyers' share and the founder's payment. Any ETH the launchpad hands back as change is credited to the subscribers as a dividend — not to the founder, not to us.

Why the same block matters

The launchpad reserves the listing block: in the block the token is created, the only buy that can execute is the creator's, which here is the offering's. A sniper's first opportunity is the block after, by which time the offering already holds its tokens and the subscribers already own their shares of them. This is the one structural advantage the format has, and it is borrowed from the launchpad, not invented here.

The per-wallet window, and what it means for you

For two blocks after the listing the token itself refuses to let any wallet end up holding more than 5% of supply — except transfers coming from the token's deployer, which is the bundler, so the offering can take delivery of its entire 68% bag without tripping it.

The consequence is on the way out. In the example above, Alice's 8.88% and the founder's 13.69% both exceed 5%. If they tried to claim during those first blocks, the token would reject the transfer. So:

  • The founder's payment is held by the contract, not sent at listing, and becomes claimable only after the window has passed with a margin. Pushing it during the listing would make any large founder share revert the entire listing — a defect we shipped once and an auditor caught.
  • If your own allocation is over 5% of supply, your claim will revert during the window too. Wait a few blocks. The app does this for you; if you are calling the contract by hand, this is the reason your transaction failed.

Every reason a listing reverts

ReasonWhat it means
not the creatorOnly the founder can fire it. Nobody can list on their behalf.
closedAlready listed, or cancelled.
nothing raisedAn empty book cannot be listed.
window is overThe deadline passed. There is no grace period and no extension.
goal not reachedThe soft cap was not met. Subscribers withdraw.
token already usedThe address produced is already tied to another sale. Salt collision, refused.
bought less than promisedThe purchase came in under the committed floor.

In all seven cases the money stays exactly where it was: in the contract, refundable, in the subscribers' names.

Section 5Vesting

An offering may release the buyers' tokens gradually. Three numbers, all fixed at creation and all visible before you subscribe:

TermMeaning
tgeBpsFraction unlocked the moment the listing lands. 2000 = 20%.
vestStepBpsFraction that unlocks at each step afterwards. 1000 = 10%.
vestStepBlocksLength of a step, in blocks. Zero means no vesting at all.

Unlocking is tge + steps × step, capped at 100%, where steps is whole blocks elapsed divided by the step length. It is a stair, not a ramp: nothing accrues between steps. Claims are cumulative — the contract remembers what you have taken and gives you the difference, so claiming early costs you nothing except gas.

Read this before you convert blocks into hours

This is an Arbitrum-style chain, and the block number a contract sees is the settlement-layer block number — what the RPC calls l1BlockNumber — not the sub-second block number the explorer shows you. A vesting step of 300 blocks is therefore on the order of an hour, not thirty seconds. Anyone reading a schedule off the explorer's block counter will be wrong by roughly two orders of magnitude, in the direction that makes it look like the vesting has already finished. The app converts using the same number the contract uses.

Worked example — 20% at listing, then 10% per step of 300 blocks

Alice's allocation is 88,774,054 tokens. At the listing 20% unlocks: 17,754,811. Each subsequent step of 300 blocks releases 8,877,405 more, and after eight steps she is fully unlocked. In settlement-layer terms that is about an hour per step and about eight hours end to end.

If she claims nothing for four steps and then claims once, she receives everything unlocked so far — 60% of her allocation — in a single transfer. The schedule is a floor on when tokens become available, never a deadline to collect them.

Two things vesting does not touch. It does not touch the founder's payment, which is governed by the per-wallet window instead and is otherwise released in full. And it does not touch dividends: you earn on your whole subscription from the first block, unlocked or not. Vesting slows down what you can sell, not what you are paid.

Section 6The dividend, and how it is funded

Every trade in the pool pays a fee. That fee is the only source of dividends in this system. There is no emission, no treasury top-up and no rebate — if nobody trades, nothing is paid, and no amount of clever accounting changes that.

The path a fee takes

  1. The pool accrues itThe pool sits in the 1% fee tier. Fees accumulate in both assets — ETH on one side, the token on the other — depending on which direction each trade went.
  2. The launchpad takes its cutThe launchpad's locker keeps 30% before anything reaches us. This is not our fee and we cannot waive it. See §7.
  3. The vault receives the restThe remainder is paid to this offering's FeeVault and nothing else is ever paid there. One vault per sale is what makes the accounting exact — there is no shared pot to misattribute, and nobody triggering a collection out of turn can strand or misdirect it.
  4. Anyone harvestsharvest is permissionless. It pulls the collection, drains the vault, unwraps the ETH side and splits everything. It can only move money towards the people already owed it, which is why it does not need a guard. If there is nothing to collect it does nothing and says so.
  5. You pull your shareCredited through an accumulator, so an offering with five thousand subscribers costs the same to distribute as one with five. Nothing is pushed at anybody.

The split

SideBuyersFounderPlatform
ETH side of the fee50%40%10%
Token side of the fee100%

Those percentages are constants in the contract. There is no setter, no governance and no owner who could add one. The token side goes entirely to buyers because it is the same asset they already hold a claim on — it arrives as extra tokens attached to your next claim, not as a separate thing to remember.

Worked example — a real measurement, not a hypothetical

A purchase we executed on this chain generated 0.029695 ETH of pool fees. Following it:

StageETHOf the fee
Accrued in the pool0.0296950100%
Launchpad keeps 30%− 0.008908530%
Delivered to the vault0.020786570%
→ subscribers, as a group0.010393235.0%
→ founder0.008314628.0%
→ platform0.00207877.0%

Alice, holding 16.22% of the weight, is credited 0.0016854 ETH from that harvest. Stated the way a trader would rather hear it: every 1 ETH that changes hands in the pool pays about 0.0035 ETH to the subscribers as a group, and about 0.0028 ETH to the founder.

Three properties worth knowing before you plan around this

Your share is frozen at the listing

Weights cannot change after the listing, because the exit closes at the listing. Whatever fraction of the book you held in that block is the fraction of every future dividend you will receive, forever.

The dividend follows the wallet, not the tokens

This is the most misunderstood part of the design, so plainly: selling your tokens does not end your dividends, and buying tokens on the open market does not start any. The right belongs to the subscribing address. It is not a token, it is not transferable, and there is no function anywhere that moves it. If you want the dividend, subscribe; if you want the dividend and someone offers to sell you "their position", they cannot deliver it.

Dust is carried, not swallowed

Integer division leaves a remainder on every harvest. That remainder stays booked as buyers' money and is added to the next harvest's pot rather than being split again or written off. Over thousands of harvests it comes out to a handful of wei in somebody's favour, and we would rather it be yours.

One loose end the contract also closes: if the launchpad ever routes tokens to the bundler after the listing, sweepBundler brings them in and credits them to buyers on the token side. It is permissionless, and it is the only path those tokens have.

Section 7Fees, in full

Every fee in the system, who pays it, and when. There are no others. If you find one this table does not list, the table is wrong and we want to know.

FeeAmountPaid byPaid toWhen
Subscribingnone
Withdrawing before the listingnone
Creating an offeringnone
Platform fee1% of the raiseThe offering, out of the bookThe platformOnce, at the listing
Launchpad listing fee0.0005 ETHThe offering, out of the bookThe launchpadOnce, at the listing
Pool fee1% of each tradeTradersSplit belowEvery trade, forever
— launchpad's cut30% of the pool feeoff the topThe launchpadBefore the offering sees a cent
— subscribers50% of the ETH that arrives
100% of the token side
Subscribers, by weightForever
— founder40% of the ETH that arrivesThe founderForever
— platform10% of the ETH that arrivesThe platformForever
Founder's paymentthe bag minus the buyers' shareThe offering, in tokensThe founderOnce, after the listing
Gaswhatever the chain chargesWhoever callsThe chainPer call
The row people get wrong

The launchpad keeps 30% of every trading fee before the offering sees anything. We measured it: 0.029695 ETH of pool fees delivered 0.0207865 ETH to the vault. So when this page says subscribers get half the ETH side, that is half of the 70% that survives — about 35% of the pool fee, not 50%. A model built without the 0.7 factor overstates the dividend by roughly 43%. We would rather you catch that here than in a spreadsheet three weeks from now.

Two structural limits sit behind the table. Subscribers are always entitled to at least half the bag — the contract refuses to create an offering that gives them less. And the platform address is fixed when the contract is deployed; it cannot be repointed, and it has no authority beyond being an address that is owed money.

Section 8The emergency exit

Before the listing you can withdraw everything you subscribed, in one call, at any time. It is not a request, nobody approves it, and it does not depend on the founder being reachable, alive or cooperative. The money was never anywhere else.

SituationExit
Window open, more than 10 minutes before the deadlineOpen
Window open, final 10 minutesLocked
Founder cancelled the offeringOpen, immediately, including inside the final 10 minutes
Deadline passed with no listingOpen, permanently
ListedClosed. The money is now a pool.

Why the ten minutes exist

Without them, one wallet could occupy the entire hard cap for free, keep everybody else out of the book for the whole window, and walk away one block before the founder fires — killing the offering at zero cost and zero risk. The lock is the smallest window that makes that attack cost something: the attacker has to be genuinely willing to be listed. Ten minutes is short enough that nobody is trapped in a meaningful way and long enough that the founder can act on a book that will still be there when the transaction lands.

The lock is also the one moment in the whole flow where you are not fully in control of your money, so we would rather point at it than bury it. The offsetting rule: if the deadline passes without a listing, the exit reopens and never closes again. There is no window in which the money is stuck with no way out.

Cancellation

The founder can cancel at any time before the listing. Cancelling is permanent — it cannot be undone, no further subscriptions are accepted, and it reopens the exit for everybody immediately, including during the final ten minutes. It is the founder's way of saying "this is not happening, take your money now" without waiting for the clock.

Withdrawal is all-or-nothing: there is no partial exit. And after the listing there is no exit at all, in any circumstance, for anybody — the ETH is not ETH any more, it is a pool and a bag of tokens with your name on a share of them.

Section 9What the contract can and cannot do

The useful question about any contract holding other people's money is not what it promises but what it is capable of. Both columns below are statements about code, and both are checkable in Schedule B.

It can

  • Hold subscribed ETH and give it back to the exact wallet that sent it.
  • Spend it, once, on the launchpad configuration committed at creation.
  • Deduct the 1% platform fee, once, at the listing.
  • Hold the bag and hand out shares of it against a vesting schedule.
  • Pull trading fees from the vault and credit them by weight.
  • Refuse a listing that buys less than the published floor.

It cannot

  • Send subscribed money anywhere except into the listing or back to the subscriber. No function exists. Not for the founder, not for the platform, not for whoever deployed it.
  • Be paused, upgraded, migrated or steered. It has no owner and no admin role at all.
  • Change the terms once an offering exists — the founder's own included.
  • Give the founder more than half the bag.
  • Redirect the fee stream away from the vault. The only address the launchpad would accept that instruction from is this contract, and this contract has no function that sends it. The redirect is permanent by omission.
  • Block your withdrawal, your claim or your dividends. Everything is pulled, never pushed, so a wallet that refuses ETH — including ours — can only ever block itself.
  • Accept a stray ETH transfer. Money that arrives outside buy() is refused, because it would be money credited to nobody.

One contract, many offerings

A single deployment escrows every live offering at once. That is efficient and it is also the sharpest edge in the design: an accounting error in one sale could reach into another sale's escrow. It has happened — see the second audit round in §10, where a platform fee counted twice would have paid one sale's subscribers out of every other sale's money. Every balance the contract reads is now measured as a delta against a baseline taken in the same call, never as a share of the total balance. If you audit one thing in this contract, audit that.

What it cannot do for you, either

  • Make the token worth anything. It buys a memecoin; the market does the rest, usually downward.
  • Force a founder to list, or to be interesting after they have.
  • Stop the founder from selling their share the moment the restriction window drops.
  • Get your money back after the listing.
  • Recover a lost wallet. The subscription, the vesting and the dividend right all live at that address and nowhere else.
  • Do anything at all about the launchpad's decisions — see §11.

Section 10Audit history, and what was fixed

The contract has been through two adversarial review rounds, each run by several independent reviewers working from different angles, with no instruction to be kind. The first round found five critical defects. Naming them is the point of this section — a list of what was found is worth more than a badge saying it was.

First round — five criticals

The defectThe fix
The listing paid all leftover change to the founder, and the spend parameters were chosen at listing time. A founder could raise a hundred, spend one, and keep the rest. Parameters are committed at creation; change is credited to subscribers.
The founder's tokens were pushed during the listing, inside the launchpad's per-wallet window. Any founder share above 5% of supply would have reverted the entire listing. The payment is held and pulled afterwards.
Dividends were pushed with a hard requirement on success. One address that refused ETH would have frozen every other subscriber's dividends permanently. Everything is pulled, per address.
Token claims and dividend claims were welded into one call, so a failure in either blocked both. Separate calls, plus a convenience wrapper that takes whichever has something waiting.
The token side of the trading fee was stranded forever, and the ETH side could be griefed to zero by anyone calling the collection out of turn. A dedicated vault per offering, and both assets captured on every harvest.

Second round — the fixes were audited too

The second round confirmed nine of twelve fixes and found two regressions introduced by the fixes themselves. The first: the platform fee was being counted twice — once as fee and again as change — which would have paid one offering's subscribers out of every other live offering's escrow. The second: a fee route that, as written, could never have been triggered at all, quietly paying nobody. Both are fixed.

We are recording this because it is the honest lesson and not a flattering one: patching money code without re-auditing the patch is the same as not auditing. The second round existed only because we assumed the first round's fixes were safe, and they were not.

Standing rule

No offering accepts a stranger's money before a complete rehearsal on mainnet, with trivial amounts, start to finish — subscribe, exit, subscribe again, list, claim, harvest, withdraw — verified in public. Plumbing that has been read is not plumbing that has been proved. An audit is a reason to test, not a substitute for it.

Section 11What we don't control

The token, the pool, the curve, the fee schedule and the fee locker all belong to the launchpad. We are a customer of it. That dependency is load-bearing and you should price it.

PieceOwned byWhat it decides
Launch factoryThe launchpadThe curve, the supply, the listing fee, the per-wallet window
Fee lockerThe launchpadHow much of the trading fee it keeps, and who may collect
The poolThe DEXThe fee tier, and whether the market functions at all
The bundlerNobody — no owner, no pauseBundles the launch and the buy into one block; points the fee stream at the vault

What could change, and what it would do

  • The launchpad raises its cut of the trading fee. Dividends shrink, proportionally and immediately. We cannot stop it and cannot opt out. The measured 30% is what it was when we measured it, not a guarantee.
  • The launchpad changes the curve or the listing fee. Existing offerings buy a smaller bag than modelled. This is exactly what the committed floor is for: under the floor, the listing reverts instead of proceeding on worse terms.
  • The launchpad changes the per-wallet window. A longer window delays large claims. Nothing is lost; claims simply revert until it lapses.
  • The pool goes illiquid, or the token stops trading. Dividends go to zero and stay there. Nothing breaks; there is simply nothing to distribute. This is the ordinary outcome, not the exotic one.
  • The launchpad's own contracts fail. A listing that reverts leaves the money refundable, which is the good case. A pool that misbehaves after the listing is not something this contract can undo.

What none of them can do is reach your subscription. The launchpad never holds it. Neither do we. The worst a change on their side can do before the listing is make the listing fail — and a failed listing is a full refund.

Section 12Plain questions

What happens if the offering misses its goal?

Nothing is listed and everyone withdraws in full. The founder gets no tokens and no fees. The only thing anybody loses is the time the money spent parked.

Can the founder simply never press the button?

Yes, and there is nothing anybody can do about it. Then the deadline passes and the exit reopens permanently. This is the reason the exit exists in the form it does.

Can I subscribe more than once?

Yes, subject to the per-wallet maximum if the offering sets one. Each contribution is weighted by where the book stood when it arrived, so your second subscription is usually worth less per ETH than your first.

Can I withdraw only part of my subscription?

No. The exit is all-or-nothing. You can withdraw everything and subscribe again, but the new money is weighted at the book's current position — normally a worse round.

Do I earn dividends on tokens I have not claimed yet?

Yes. Dividends are computed from your subscription weight, not from your wallet balance. Vesting never delays a payment.

If I sell my tokens, do I keep the dividends?

Yes — and this surprises people, so it is worth repeating. The dividend right belongs to the address that subscribed. Selling the tokens does not sell it, and buying tokens on the open market does not buy it.

Can I sell my position before the listing?

Not through this contract. There is no transfer function for a subscription. Your only exit before the listing is a withdrawal, and it pays you exactly what you put in.

Why did my claim transaction fail right after the listing?

Almost certainly the launchpad's per-wallet cap: for two blocks after the listing no wallet may end up holding more than 5% of supply. If your allocation is larger than that, wait a few blocks and claim again. Nothing is lost.

Who can call harvest?

Anyone, including you, including a bot. It can only move money towards the people already owed it. If there is nothing to collect, it does nothing.

What if nobody ever calls harvest?

The fees sit in the vault, which belongs to that offering alone, and wait. They are not lost and they cannot be redirected. Any subscriber can trigger the collection at any time.

What stops the founder dumping their tokens instantly?

Nothing beyond the launchpad's two-block window, and we will not pretend otherwise. What you can check before subscribing is how large their share is: it is a published term, it is capped at half the bag, and a founder who takes the maximum is telling you something.

Can the platform change the fees after my offering is created?

No. Every split in §7 is a constant in the contract, and the contract has no owner. Changing them would mean deploying a different contract, which existing offerings would never touch.

What if I lose the wallet I subscribed with?

Then the subscription, the unvested tokens and the dividend right are gone. There is no recovery, from us or from anyone. This is not a policy; it is the absence of a function.

How do I verify all this myself?

Read Schedule B, then read the source. Every claim on this page maps to a specific function or the demonstrable absence of one, and every offering's terms are readable on chain before you send anything.

Is this a security?

We are not lawyers and this is not advice. What we can tell you is precisely what the contract does, which is the entire purpose of this page. Everything else is between you, your dog and your jurisdiction.

Schedule AParameters and limits

Fixed in the contract, identical for every offering

ConstantValueEffect
PLATFORM_RAISE_BPS100 (1%)Platform fee taken from the raise at the listing
FEE_BUYERS_BPS5000 (50%)Subscribers' share of the ETH side of trading fees
FEE_CREATOR_BPS4000 (40%)Founder's share of the same
FEE_PLATFORM_BPS1000 (10%)Platform's share of the same
MIN_BUYERS_BPS5000 (50%)Floor on the buyers' share of the bag
MAX_WEIGHT_BPS30000 (3.0×)Ceiling on any round's weight
MAX_ROUNDS3Ceiling on rounds per offering
EXIT_LOCK10 minutesExit freeze before the deadline
RESTRICTION_BLOCKS3Wait before the founder's payment is claimable — the launchpad's two blocks plus a margin

Chosen per offering, frozen at creation

TermWhat it setsRule the contract enforces
opensAt / closesAtThe subscription windowClose after open, and at least 10 minutes into the future
softCapThe goal below which no listing is allowedNot above the hard cap; zero means no goal
hardCapThe most the book will acceptGreater than zero; must be covered by the rounds
minBuy / maxBuyPer-transaction minimum, per-wallet maximumMax at or above min; zero max means no limit
buyersBpsSubscribers' share of the bagBetween 50% and 100%
tgeBpsUnlocked at the listingAt most 100%
vestStepBps / vestStepBlocksThe unlock stairA non-zero step length requires a step size in range
minBagTokensThe floor the purchase must clearGreater than zero — an offering must commit to something
launchConfigId / dexIdHow the money is spent on the launchpadCommitted at creation, unchangeable at the listing
rounds[]Weights and cumulative capsIncreasing caps, non-increasing weights, covering the hard cap

The launchpad's numbers, measured on chain

FactValue
CurveETH = 1.37 · p / (1 − p) for fraction p of supply
Supply1,000,000,000 tokens
Listing fee0.0005 ETH
Pool fee tier1%
Launchpad's cut of the pool fee30%
Per-wallet cap after listing5% of supply, 2 blocks
Graduation threshold4.2 ETH

Schedule BEvery function, and who may call it

The complete external surface. There is nothing else — no admin namespace, no proxy, no initializer, no emergency function. If a capability is not in this table, the contract does not have it.

FunctionWho may callWhat it does
createSaleAnyoneCreates an offering and makes the caller its founder. Terms are frozen here.
buyAnyone, during the windowSubscribes ETH and records the weight.
pullOutAny subscriber, when the exit is openRefunds the caller's entire subscription.
cancelThe founder, before the listingKills the offering permanently and reopens the exit.
launchThe founder onlyFires the listing. Chooses metadata; cannot change where the money goes.
creatorClaimAnyone — the tokens go to the founder regardlessReleases the founder's payment once the per-wallet window has lapsed.
claimTokensAny subscriberTransfers vested tokens plus any token-side fee share.
claimDividendsAny subscriberTransfers accrued ETH dividends.
claimAllAny subscriberCalls whichever of the two has something waiting.
harvestAnyoneCollects pool fees into the contract and splits them.
sweepBundlerAnyoneRecovers tokens left at the bundler and credits them to subscribers.
withdrawOwedWhoever is owedPays out a founder's or the platform's ETH balance.
weightFor, unlockedBps,
claimableTokens, claimableDividends,
sales, rounds, contributed, weightOf, owed
Anyone, read-onlyEverything the app displays, readable directly from the chain.
FeeVault.collect / drainThe offering contract onlyPulls the launchpad's collection and moves it in. The vault holds one sale's fees and nothing else.

Absent from that list, deliberately: any owner, any pause, any upgrade path, any setter for a fee or a split, any function that moves subscribed ETH to a third party, and any way to redirect a pool's fee stream away from its vault.