How the harbor takes turns
Every launch registers on-chain first and waits its turn. At most 5 go live in each round of 60 seconds, in the order they registered. This page is the whole mechanism, with the numbers the contracts hold.
One line, and only the front of it moves
A launch here starts as a registration, not a launch. The queue contract writes it down under the next free number, stores the exact request behind it, and holds what comes with it. Numbers are handed out in order and never reused, so your place is a number anyone can read on-chain.
Only the registration at the head of the line can be resolved. Nobody can pay to move up. BeaconHarbor cannot reorder the line either: the contract accepts the head and nothing else, and it has no function to swap, bump or skip a registration that is still waiting.
Registration stays closed until genesis $BEACON is trading, so the first launch on this launchpad is always the platform's own. After that the line is open to every creator who meets the eligibility rules below: the $BEACON holding and a proven X account.
- Your number is the order you registered in, not the gas you paid.
- When a round is full the next launch waits for the next round. No place is lost.
- One registration open per wallet, and one per X account, at a time.
- The full request is written into the registration event, so anyone can rebuild it from one block of logs and run your launch for you.
Registrations leave the line only from the front. A cancelled one is cleared without using a slot in the round.
How a registration ends
A registration has exactly four endings. In three of them nothing is created and everything it held comes back to the wallet that registered.
| Ending | What happens | What comes back |
|---|---|---|
| Launched | The token and its pool exist, the round counts one of its 5 slots, and your dev buy was spent by your own launch. | The 1,000 $BEACON, and any dev buy USDC the launch did not spend. |
| Cancelled | Only you can cancel, and only while the registration waits. The place in line is given up. The next execution clears cancelled heads without using a slot, up to 64 in one call. | The 1,000 $BEACON and the whole dev buy. |
| Failed | The launch was attempted and reverted on-chain. No token, no pool. The line moves on and the round keeps its slot. | The 1,000 $BEACON and the whole dev buy. |
| Ineligible | A status the contract keeps for a registration that may not launch when its turn comes. Because the queue holds the $BEACON from the moment you register, no rule in this version can put a registration here. | The 1,000 $BEACON and the whole dev buy. |
Both claims are pull-based and each pays once. They refuse anyone but the wallet that registered, and they work only after the registration has ended. Nothing in the contract lets BeaconHarbor move either amount, and no owner key can reach them. Cancel and claim both live under My launches on the queue page.
5 lights a minute
A round is 60 seconds of block time, counted by the chain rather than by a server clock. At most 5 launches land in one round.
At full capacity that is 50 beacons every ten minutes, which is the most this queue can release.
A round does not wait to fill up, and an empty round simply passes. A beacon lights only when its launch is confirmed on-chain, never because a countdown reached zero. On Arc a confirmed block is final, so there is nothing to wait for after that.
Two rounds, side by side. Slots that nobody used are simply gone when the minute ends.
The queue schedules launch creation. It does not schedule trading: once a beacon is lit, anyone can buy it, under the max wallet and the per block budget below while it is on its curve.
Hold the light to launch one
1,000 $BEACON moves into the queue contract when you register. It is held, never spent and never taken, and you claim it back in full once the registration ends, whether it launched, was cancelled or failed.
The balance is checked at registration. Because the queue holds the tokens from that moment, it cannot drop before your turn, so a registration in line can never lose its place to a sale.
A registration also needs an X account the creator proves is theirs. The creator publishes a post from that account carrying a one-time code from the site and pastes its link, and BeaconHarbor reads the public post to learn which account wrote it. Where the site offers X's own sign-in instead, BeaconHarbor asks X to read the profile and nothing more. Neither way lets BeaconHarbor post, follow or message from the account. The launch service then signs a registration permit for that exact request, and the queue accepts a registration only with one.
A permit is bound to your wallet, to your request and to this chain, it expires, and it works once. A permit made for one request cannot register another, and one made for someone else cannot register for you.
- If the X account carries a badge, it is shown as information next to the launch. No badge is required, and having one buys no place in the line.
- Genesis holds no $BEACON and needs no balance. Everything else, the X proof included, works as it does for everyone.
$BEACON lights first
The first launch on BeaconHarbor is its own token, registered by the founder wallet written into the queue contract. Until that launch succeeds the queue refuses every other registration, so nothing can launch before it.
Genesis picks its token type and its tax like every launch: Normal with no tax, or Tax between 1% and 10% a side, split 70/30. It runs on the same curve, under the same max wallet and the same per block budget as everyone.
The ticker BEACON is reserved in the contract. Every other registration that asks for it is refused on-chain, so there can only ever be one $BEACON here. Anything else carrying that ticker was not launched on this launchpad.
Genesis chooses between 1M · 100M · 1B. With a smaller supply the max wallet on the curve would sit below the 1,000 tokens a registration has to hold, and standard registration could never open at all.
Before genesis, the queue owner can replace the founder wallet after a 24 hour wait, which covers a lost key. Once genesis is registered or launched, the founder cannot be changed at all.
Six steps, then a place in line
Registering is one form of six steps. Every field is either a choice the contracts accept or a fact read from them, and the last step shows the whole request before your wallet signs anything.
- IdentityName, ticker, description, category and logo. The name takes up to 48 bytes, the ticker is A to Z and 0 to 9 up to 12 characters. All of it is stored as one file named by its own hash, and the registration points at that hash, so what you approve is what the launch carries.
- Deployer and socialsThe connected wallet is the deployer and cannot be typed by hand. One signature proves the wallet is yours and costs no gas. You then prove the X account is yours and pick whether it is the project or the developer behind it. The links are optional https addresses.
- TokenomicsTwo choices are yours: the token type and the supply, one of 5 sizes from 1K to 1B. Everything under them is read from the contracts and is the same for every launch: 18 decimals, the whole supply on the curve, no minting after creation, and no owner on the token or the pool.
- TaxNormal with no tax on either side, or a rate between 1% and 10% on each side. It is written into the pool at launch and nobody can change it afterwards. Holder rewards, burn, added liquidity and buyback are not implemented in these contracts, so the form has no input for them.
- LaunchThe round rules, how many registrations are waiting, an estimated round for a registration made now, the optional dev buy with its slippage floor, and what waits with your registration. There is no registration fee. You pay network gas in USDC for your own transactions, and the form shows it before you sign.
- Review and registerThe whole request once more, with a confirmation that clears itself whenever something material changes. A draft is kept in the browser and, once you sign in, in your account, and you can download it as a file. Then one transaction puts you in line.
No registration fee exists in these contracts. Nothing is charged for a place in the queue, and there is no paid lane beside it.
From a number in line to a live market
One execution turns a registration into a token. The launchpad mints the supply the creator picked, opens a bonding curve priced in USDC with the whole supply on it, and hands the curve nothing else: no pre-mint, no reserve, no hidden allocation.
The five states of every beacon. Every step after registration is a contract state, not a decision someone makes.
Price is a curve of light
The pool is a constant-product market with a virtual reserve of 3,000 USDC, which makes the opening market cap 3,000 USDC whatever the supply. Every buy pushes the price up the arc, every sell walks it back down. There is no order book and no market maker, only the formula.
- Buy: USDC in, tokens out, price rises.
- Sell: tokens in, USDC out, price falls.
- By graduation the price is about 9 times the opening price, because it grows with the square of the pool's USDC reserve.
- Quotes are read straight from the contract before you sign, after tax.
- Every trade is a point of light: blue for buys, red for sells, sized by amount.
The chart from every token page, drawn for an example 1B beacon halfway to graduation on this launchpad's curve. The lit part is bought, the dashed beam is the path to graduation.
The creator sets it. Nobody can change it.
A Normal token has no tax at all, on either side. A Tax token carries a buy tax and a sell tax chosen by its creator, anywhere from 1% to 10% a side. On the curve the pool collects it on every trade. After graduation BeaconHarbor's hook contract collects it on every swap in the token's Uniswap v4 pool, always in USDC: on a buy from the USDC paid, on a sell from the USDC received. Both split it 70% to the creator's fee address and 30% to the protocol treasury, and both shares wait in the contract that collected them until someone claims them, in USDC.
A claim always pays the address written at launch, so anyone may press it and only pays the gas. A launch here is a business, not an exit.
Chosen once in the form, written into the pool contract at launch and copied into the hook contract at graduation, shown on the token page before you trade.
Why it cannot change: a tax that can be raised after people are in is a honeypot. The pool has no function to change it, neither does the launchpad, and the hook contract has no owner and no setter, so the number on the token page is the number for the life of the token.
Caps that hold for the whole curve, then end
While a token is on its curve, no address may hold more than 0.5% of the launch supply. The token contract checks it on every transfer, not only on buys, so it cannot be dodged by buying into one wallet and moving to another. The share is measured against the launch supply, so the graduation burn does not move it. There are no market cap tiers: the cap does not widen on the way up and it does not tighten on a dip.
Each block can sell at most 3 max wallets' worth of a token, which is 1.5% of supply. Every buy in that block counts toward the budget, from every wallet, the dev buy included. It counts tokens rather than wallets, so dust buys from throwaway addresses cannot fill a block and lock real buyers out. A bundle that tries to take a launch in one block gets spread across many, next to real buyers. Sells are never limited: funds can always leave.
The same rules for every beacon on BeaconHarbor while it is on its curve. Creators cannot switch them off, and nobody can extend them past graduation.
A straight answer on what this does and does not do: the cap is per address, not per person, and the block budget slows a bundle down rather than making it impossible. Together they stop one wallet from taking a launch in a single transaction and make a concentrated grab slow and visible while the curve fills. Neither turns a bad token into a good one. Both end at graduation: on Uniswap there is no cap at all, anyone may buy any amount, and the only rule that follows the token there is its tax.
Devs buy in the open, under the same cap
There is no presale. A dev who wants skin in the game buys inside the launch transaction itself, on the same curve, priced by the same formula with no discount and taxed like everyone, and at most the max wallet, 0.5% of supply. The buy counts toward its block's budget like any other, and it is labelled on the token.
The USDC for it moves into the queue contract at registration and is spent only by your own launch. The queue checks at registration that the buy can actually go through, so a request that would revert inside the launch never takes a place in line. If the launch never happens, the whole amount is yours to claim back.
Full light, then Uniswap v4 with the liquidity locked
When the curve has raised 6,000 USDC it closes, inside the buy that fills it. The pool keeps exactly the tokens the last curve price needs against that USDC and burns the rest, about 11% of supply with this launchpad's numbers, a virtual reserve of 3,000 USDC and 6,000 USDC to graduate. BeaconHarbor's graduator contract then opens a TOKEN/USDC pool on Uniswap v4, Uniswap's own deployment on Arc, at exactly the price the curve ended on, in the same transaction: there is no pause and no step in the price, and every holder's share of supply grows. The Uniswap pool's own fee is zero. The only charge on a swap is the creator's tax, taken in USDC by BeaconHarbor's hook contract at the rates fixed at launch, 70% to the creator and 30% to the protocol, and a Normal token pays nothing.
The raised USDC and those tokens go in as one full-range position owned by the graduator contract, which has no function to remove it. That is the lock: no withdraw path, no LP token to hold or sell, and no key, BeaconHarbor's included, that can pull the liquidity. From graduation on, trading happens on Uniswap. The token page trades through BeaconHarbor's own router, and any Uniswap interface or aggregator works too. The max wallet and the per block budget end at that moment, so anyone may buy any amount. DexScreener indexes Uniswap v4 pools on Arc, so a graduated token appears there by itself, under its pool id.
Two failure modes of older launchpads are designed out: funds frozen at graduation, and a price cliff at graduation.
Anyone can run the head of the line
Execution is permissionless. BeaconHarbor runs a keeper that watches the chain and launches the head whenever the round has room, but it holds no privilege: the contract checks the order and the round itself, so running a launch gives the runner no place, no priority and no fee.
If the keeper stops, nothing is stuck. Any wallet with an RPC can run the head from the queue page, including the registrant's own wallet. That is the whole recovery plan: the queue cannot be held hostage by a server, because no server is part of it.
Every launch gets the same fixed amount of gas from the contract, so whether it succeeds can never depend on the limit an executor picked. An executor who starves the call makes it revert instead of turning a valid launch into a failed one. A run that finds cancelled registrations at the head clears up to 64 of them in the same transaction.
The one thing an executor decides is when. Nobody can decide who, and nobody can decide the order.
Every key, and its limit
These are all the privileged roles in the system. Each one is named with what it can do and what it cannot, so nothing has to be taken on trust. Changes marked with a wait are announced on-chain first and can only be applied after 24 hours.
| Role | Can | Cannot |
|---|---|---|
| Launchpad owner | Bind the graduator contract once, before the first launch. Change the curve numbers for future launches and the protocol treasury, each after a 24 hour wait. A new treasury also receives the protocol share of every hook claim made after the change. | Replace the graduator, or touch a launch that already exists: its tax, its supply, its curve or its Uniswap liquidity. The graduator and the hook contract have no owner at all. |
| Queue owner | Appoint a new permit signer after a 24 hour wait, remove the current one at once, which stops new registrations only, raise the gas each launch receives, and replace the founder wallet before genesis. | Reorder, skip or cancel a registration, touch the $BEACON it holds or its dev buy USDC, pause the queue, or take a fee. |
| Permit signer | Sign the registration permit after the launch service has checked the X account, or refuse to sign one. | Reorder, skip or cancel registrations, launch anything, or reach escrow. A leaked key stops new registrations, never the ones already in line. |
| Keeper | Run the head of the line when a round has room, and pay the gas for it. | Choose which registration goes, change the order, or stop anyone else from doing the same. |
| You | Cancel your registration while it waits, claim back what it held once it ends, and run the head yourself. | Change your launch after it happens. Name, ticker, supply, tax and pool are fixed for everyone, you included. |
What the contracts enforce, and where to check it
| Rule | How it is enforced | Where to verify |
|---|---|---|
| Launch order | Registrations get sequential numbers and only the head can be resolved. At most 5 launches per round of 60 seconds. | Queue contract |
| Holding rule | 1,000 $BEACON moves into the queue at registration and is claimable by the registrant once it ends. The queue can never spend it. | Queue contract |
| Reserved ticker | The ticker BEACON is refused for every registration but genesis. | Queue contract |
| Max wallet | 0.5% of the launch supply per address while the token is on its curve, checked by the token on every transfer. None after graduation. | Token contract |
| Per block budget | Each block sells at most 3 max wallets' worth, 1.5% of supply, every buy in the block counted, the dev buy included, until graduation. | Pool contract |
| Fixed tax | 0% on a Normal token, or 1% to 10% a side on a Tax token, immutable, split 70/30. The pool charges it on the curve, the hook contract on every Uniswap swap, both in USDC. | Pool and hook contracts |
| No presale | The contracts have no discounted mint path. A dev buy pays curve price inside the launch, under the max wallet. | Launch transaction on explorer.arc.io |
| Fixed supply | Minted once at creation, with no mint function. It can only shrink: the surplus is burned at graduation, and any holder may burn their own tokens. | Token contract |
| Locked liquidity | Curve funds live in the pool contract. At graduation the surplus is burned and the rest moves into a Uniswap v4 pool as one full-range position owned by the graduator contract, which has no function to remove it. | Graduator contract |
| Honest data | The site renders only what the chain returns. A number it does not have is shown as unknown, never invented. | Any token page |
Built on Arc
- Network: Arc, Circle's USDC-native L1, chain id 5042.
- Gas: paid in USDC, so costs read like money rather than like gwei.
- Finality: a confirmed block is final, which is why a lit beacon is live with nothing left to wait for.
- Everything on-chain: registrations, launches, trades, graduations. The site is a lens, not a ledger.
Audit: the contracts have not been audited. An unaudited contract is a risk to price in before you put real money on a curve, and no review by us replaces one.