Docs

How a Keyless vault works, what each job does, and what no key can change.

Overview

Keyless is a token launchpad on Robinhood Chain. Tokens launch through the Pons v2 factory, and each token’s creator fees go to its own vault contract instead of a wallet.

The vault runs one to six of thirteen jobs the creator picks at launch. Nobody holds a key to it. Anyone can run its cycle, and every payout is an on-chain transaction you can check.

  • One vault per tokenSet as the token’s Pons creator fee recipient at launch.
  • Jobs fixed at launchNo function changes the jobs or their shares afterwards.
  • Open to anyoneAnyone can run a cycle and earn 1% of what it hands out.

$KEYLESS

$KEYLESS is the Keyless token. The Keyless team launches it on Pons, and the treasury’s 5% of every vault claim buys it and burns it, so every token that runs on Keyless feeds it.

Once it is live, the board, token pages and portfolio mark it as official and flag any other token that uses the Keyless name, and the launch form stops accepting the name for new launches.

Contract addressShown here once the token is live on Pons.
Official X account@KeylessLaunch

How it works

A cycle moves a token’s fees from Pons into its jobs. Anyone starts one by calling run(tipTo) on the vault, at most once every 5 minutes. The first cycle can run 5 minutes after launch, well past the Pons snipe-tax window.

  1. SweepThe vault asks Pons to move pending fees into its fee escrow: from the bonding curve before graduation, from the Uniswap v4 pool’s hook after it. A sweep that needs Pons’ own operator is skipped; the operator sweeps those about once an hour.
  2. ClaimIt claims what the escrow holds for it, always in the pair asset: ETH or USDG.
  3. SplitOf the balance, 5% goes to the platform treasury, 1% to the address the caller names, and 94% to the jobs by their shares.
  4. WorkEach job runs with its own gas budget of 1.5 million. A job that fails keeps its balance for the next cycle, and the other jobs still run.
  • 94%to the token’s jobs
  • 5%to the platform treasury
  • 1%to whoever ran the cycle

A token runs one to six of the thirteen jobs, each at most once. Each gets at least 5% of the job split, the shares add up to 100%, and the creator, vested creator, team split, own contract and partner buyback jobs share a cap of 50% together.

The Keyless keeper calls run() when a vault is due, but it has no special rights. If it stops, anyone can call the same function and earn the tip.

Jobs

Every job is its own contract and holds only its own balance. Jobs that trade accept work() only from their vault, and each buy moves the price by at most about half the token’s own trading fee, so pushing the price before a cycle costs more than it can earn. What does not fit waits for the next cycle.

Buy and burn

Burn

Buys the token with its balance and sends every token bought to the dead address: on the bonding curve before graduation, in the Uniswap v4 pool after it.

Dip buyer

Buys and burns only after a dip. Each cycle it reads the token price in the pair asset, from the curve reserves before graduation and the pool price after it, and keeps the day’s high in seven daily slots. The peak is the highest of the last seven days.

When the price is at least the dip the creator picked (10%, 20% or 30%) under that peak, the job buys the token with its balance and burns it. Above that line its balance waits, and between the two graduation steps there is no price, so it waits then too. Its buys share the price-impact limit with the vault’s other jobs that buy the token, so pushing the price down to set off a buy costs more in fees than the buy can return.

Partner buyback

Buys another token launched on Pons with its balance. The partner is fixed at launch and must be a Pons v2 launch on the same pair asset, never the token itself; the launch reverts otherwise. The partner’s own fee and tax set how far one buy may move its price.

Each buy is also anchored to the price at its last turn: it never pays more than that price plus the allowed move, and the anchor rises by at most one such step per turn. A price pushed up right before a cycle buys nothing; the balance waits for a later turn. The first turn only records the price.

The creator picks what happens to the tokens bought: they go to the dead address, or they stream to the token’s Hold vault, so holders earn the partner token. $KEYLESS, the Keyless token, is a natural partner.

Its share counts toward the 50% cap with the creator jobs, because the creator picks the token it buys. It buys while the partner trades on its curve or in its pool; if the partner never gets there, the balance waits.

Liquidity

Liquidity

Waits until the token graduates. From then on each cycle buys the token with about half its balance and adds a full-range position to the token’s Pons Uniswap v4 pool.

The job has no owner and no function that removes liquidity, so every position stays in the pool for good. One cycle adds at most 1% of Pons’ locked liquidity, or a quarter of the pool’s fee when that is smaller. Graduated pools charge no LP fee, so there is nothing to collect.

Floor wall

Waits until the token graduates, then adds single-sided pair-asset liquidity to the token’s Uniswap v4 pool in a band from 10% to 50% under a reference price. When the price falls into the band, the wall buys the token, and what it buys stays in the position. The job owns every position for good; it has no function that removes one.

The reference is the lower of the pool price now and the price the job stored at its previous cycle, and the first cycle after graduation only stores the price. A push has to hold across two cycles, at least 5 minutes apart, to move where the wall sits. The band’s ticks are rounded away from the current price, so it never includes it. One cycle adds at most 1% of Pons’ locked liquidity, or a quarter of the pool’s fee when that is smaller.

Holders

Hold rewards

Streams its balance of the pair asset to the token’s Hold vault, where depositors earn it by weight over 24 hours.

Buyback rewards

Buys the token with its balance and funds everything it holds of the token to the Hold vault, so holders earn the token itself, streamed over 24 hours like every reward. The Hold vault keeps deposits and rewards apart, so a payout never touches anyone’s deposit.

Jackpot

Builds a pot. Once a round, at least an hour long, one Hold vault ticket wins all of it. The draw uses drand randomness checked on-chain, explained in Jackpot fairness.

Stock rewards

Buys up to three tokenised stocks from the stock registry, by weights the creator sets, and streams them to the Hold vault. ETH pairs buy through USDG, two swaps in one transaction; USDG pairs buy in one.

Each swap stops 0.5% worse than the Chainlink prices, fees included. A stock is skipped while its feed is older than 26 hours or its token reports a paused oracle, and its share waits.

Reading the stock registry

Works with ETH and USDG pairs.

Creator and team

Creator

Pays its share to an address fixed at launch. Creator, vested creator, team split, own contract and partner buyback together get at most 50% of the job split.

Vested creator

Pays an address fixed at launch through one rolling stream of 30, 90 or 180 days. Each new amount joins what is still locked, and the end of the stream moves out in proportion to its size: the new end is the amount-weighted average of the old end and a full length from now, so a small top-up barely moves it. A top-up smaller than 0.1% of what is locked waits until it is larger.

Anyone can call release(), and what has vested always goes to the fixed address. A payment the address refuses stays claimable for it.

Team split

Splits its share between one to three distinct wallets by weights fixed at launch, each at least 5% of the job’s part and adding up to 100%. The last wallet takes the rounding.

Anyone can make it pay. A wallet that refuses a payment keeps it owed to that wallet only, and the others are still paid.

Your own code

Own contract

An own contract is the creator’s code, not a Keyless job. Keyless does not review it, and what it does with its share is up to that code. Its token page tells holders so.

Sends its share to a contract the creator deployed and named at launch; the launcher accepts only an address that already holds code. Each cycle the job sends its whole balance to that contract in the pair asset, then calls its hook:

interface IKeylessReceiver {
    function onKeylessFunds(address asset, uint256 amount) external;
}
  • asset is the pair asset: address(0) for ETH, otherwise the ERC-20 that was sent.
  • The hook gets at most 1,000,000 gas. If it fails, or the contract has no such function, the payment still stands; the token page shows whether the hook ran.
  • ETH arrives through receive() with a fixed 100,000 gas, so keep it cheap and do the work in the hook or in a function anyone can call. A contract that refuses the payment leaves the share in the job for the next cycle.
  • Only the vault can make the job pay and call the hook, once per cycle, so the hook always runs with its full gas and at the cycle's pace.
  • Its share counts toward the 50% cap with creator, vested creator, team split and partner buyback, because the creator decides where that money goes.
Writing it in Custom Contract Studio

In Custom Contract Studio you write the contract by talking with Keyless AI Agent. Each reply that changes it is a new version: one self-contained Solidity 0.8.26 contract with no constructor arguments, compiled and checked on the server before you see it. Every contract and its chat is saved to your wallet, so you can come back to it later.

Deploy a version from your own wallet. Its source goes to Sourcify so anyone can read it. In the launch and adopt forms, pick it under My contracts and its address fills the job. A contract you wrote yourself works the same way: paste its address.

Keyless AI Agent in the studio and the vault assistant in the launch form have the same limits:

  • Sign in with your wallet first: one signature, no gas. A sign-in lasts 24 hours.
  • The wallet holds at least 0.002 ETH on Robinhood Chain.
  • Each wallet gets 10 vault drafts and 20 studio messages a day, counted in UTC.
  • All wallets share one daily budget. Once it is used, both pause until the next day.

Hold vault

Every token whose jobs pay holders gets a Hold vault. Holders deposit the token and earn the payouts on-chain, with no snapshots and no list kept off-chain.

LockWeightWithdrawJackpot tickets
None1xAny timeNo
7 days1.5xAfter 7 daysYes, equal to weight
30 days2xAfter 30 daysYes, equal to weight
90 days3xAfter 90 daysYes, equal to weight
  • Each deposit is a position. Its weight is the amount times the multiplier, fixed for the position’s life, also after the lock ends.
  • Rewards come in up to four assets: the pair asset, the token itself when buyback rewards run, the partner token when a partner buyback pays holders, and the stocks. A launch that would need more reverts. Each payment streams over 24 hours, so a deposit made just before a payout cannot capture it.
  • Claim any time. Withdraw once the lock ends.
  • While a jackpot draw is pending, positions with tickets stay in until it settles.
  • Only a position’s owner can move its tokens.

Jackpot fairness

Rounds last at least an hour. The winner comes from drand quicknet, a public randomness beacon nobody can predict, and the contract checks the beacon itself.

  1. CommitOnce the round has run an hour, anyone (or the vault’s next cycle) calls commit(). It freezes the pot, the open tickets of the positions that exist now, and the drand round published 10 minutes later, which nobody can know yet.
  2. WaitUntil the draw, ticket positions cannot be withdrawn, so the frozen tickets stay exactly as committed. Positions created after the commit cannot win this round.
  3. DrawOnce that drand round is out, anyone calls draw(signature). The contract verifies the beacon’s BLS signature on-chain with the BLS12-381 precompiles (EIP-2537), takes the randomness modulo the ticket count and sends the whole pot to that ticket’s owner.
  • Your odds are your tickets divided by all tickets at commit.
  • A round with no tickets rolls its pot into the next one. A round nobody draws within a day of its beacon expires and rolls over too.
  • If the winner cannot receive the pot, it is credited to them and they collect it with claimPrize().
drand quicknet chain hash52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971

Adopting a Pons token

A token that already launched on Pons can send its creator fees to a Keyless vault. You need the wallet that is the token’s creator fee recipient on Pons today.

  1. Create the vaultFrom that wallet, call adopt(token, jobs) on the Keyless launcher. It creates the vault, its jobs and, when a job pays holders, a Hold vault. Cycles stay off for now.
  2. Point the feesFrom the same wallet, call transferCreatorFeeRecipient(token, vault) on the Pons factory.
  3. ActivateAnyone calls activate() on the vault. It checks on Pons that the vault is now the fee recipient, turns Pons’ own buyback off if it was on, and the first cycle can run 5 minutes later.

If the token had Pons’ buyback on, its existing buyback vesting stays pointed at the vault, and the vault does not release it.

Adopt a token

Trust and limits

What no key can change

  • Vaults, jobs and Hold vaults are immutable contract clones. There are no upgradeable proxies.
  • No function changes a token’s fee recipient, its jobs or their shares, and no address can withdraw from a vault or a job.
  • The 5% treasury share and the 1% tip are constants in the vault code.
  • The one exception is an own contract: it is the creator’s code, and it can have keys of its own. The job that pays it cannot change, and the token page says when a token has one.
  • Every function that keeps fees moving is open to anyone: run(), commit(), draw(), activate(), convert() and buyAndBurn().

What the owners can do

Three Keyless contracts have an owner. None of them can reach an existing vault, job or Hold vault.

Launcher owner
Registers each new job kind once; a kind can never point to other code later. Can pause and resume new launches and adoptions.
Treasury owner
Sets $KEYLESS once and the stock registry once.
Registry owner
Sets USDG, the ETH/USDG pool and the USDG/USD and ETH/USD feeds once, and lists each stock once. Jobs copy their entries at launch, so a new listing reaches only later launches.

What Pons can do

The Pons owner can redirect any launch’s future creator fees, a Keyless token’s included, after a 3-day timelock. That power sits in Pons, outside Keyless. The token page flags a pending change, and the keeper runs a cycle before it can take effect. If it does, the vault stops receiving new fees; balances already in the jobs and the Hold vault keep working.

Treasury

The 5% of every claim goes to the platform treasury, which spends it on buying and burning $KEYLESS. It has no withdrawal function.

  • convert(asset) turns USDG into ETH in one swap and a listed stock into ETH in two, through USDG. Each swap stops 0.5% worse than the Chainlink prices, fees included, and nothing trades while a feed is older than 26 hours.
  • buyAndBurn() buys $KEYLESS with the treasury’s ETH and sends it to the dead address. Like the partner buyback, it is anchored to the price at its last call and never pays more than that plus the allowed move, so a pushed-up price buys nothing and the ETH waits for the next call.
  • Both are open to anyone. Each asset trades at most once every 5 minutes.
Set in the treasuryReading the treasury

Contracts

All on Robinhood Chain, chain id 4663. Every vault, job and Hold vault is a clone the launcher announces when it creates it; each token page links its own.

  • Keyless launcherLaunches and adopts tokens, creates every vault
  • Platform treasuryReceives the 5%, buys and burns $KEYLESS
  • Stock registryStocks, pools and feeds the stock job can use
  • Pons v2 factoryWhere every Keyless token launches
  • Pons fee escrowHolds creator fees until a vault claims them
  • Pons hookCollects trading fees in graduated pools

Public API

Read only, no key, open to any origin. Each client gets 300 requests a minute.

Base URLhttps://api.keyless.family
  • GET/v1/statsPlatform totals: tokens, cycles, burned and returned to holders.
  • GET/v1/tokens?job=&pair=&sort=new|returned|volume&limit=Tokens, filtered by job and pair asset, sorted by age, returns or volume.
  • GET/v1/tokens/:addressOne token with its vault, jobs, shares and totals.
  • GET/v1/tokens/:address/cycles?limit=The token’s latest vault events, newest first.
  • GET/v1/board?window=24h|7d|allTokens ranked by USD returned to holders.
  • GET/v1/wallets/:address/positionsA wallet’s Hold vault positions and claimable rewards.
  • GET/og/:addressOn this site: a 1200 by 630 share card with the token’s live numbers.
curl https://api.keyless.family/v1/board?window=7d