Genesis Commands

Launch Pool

What You'll Do

Run the full launch pool lifecycle from the CLI:

  • Add a launch pool bucket with allocation and time windows
  • Configure optional penalties, vesting, and allowlists
  • Deposit, withdraw, transition, and claim tokens

Summary

A launch pool collects deposits during a window and distributes tokens proportionally. This page covers the full launch pool lifecycle — from creating the bucket to claiming tokens.

  • Distribution: Proportional — your share of deposits determines your share of tokens
  • Commands: bucket add-launch-pool, deposit, withdraw, transition, claim
  • Optional features: End behaviors, deposit/withdraw penalties, bonus schedules, claim vesting, allowlists
  • Quote token: Wrapped SOL by default — wrap SOL before depositing

Out of Scope

Presale buckets, unlocked buckets, Genesis account creation, finalization, frontend integration, token economics modeling.

Jump to: Add Bucket · Deposit · Withdraw · Transition · Claim · Full Lifecycle · Common Errors · FAQ

Add Launch Pool Bucket

The mplx genesis bucket add-launch-pool command adds a launch pool bucket to a Genesis account.

Add a launch pool bucket
mplx genesis bucket add-launch-pool <GENESIS_ADDRESS> \
--allocation 500000000000000 \
--depositStart 1704067200 \
--depositEnd 1704153600 \
--claimStart 1704153601 \
--claimEnd 1735689600

Options

FlagShortDescriptionRequired
--allocation <string>-aBase token allocation in base unitsYes
--depositStart <string>Unix timestamp when deposits openYes
--depositEnd <string>Unix timestamp when deposits closeYes
--claimStart <string>Unix timestamp when claims openYes
--claimEnd <string>Unix timestamp when claims closeYes
--bucketIndex <integer>-bBucket index (default: 0)No
--endBehavior <string>Format: <destinationBucketAddress>:<percentageBps> where 10000 = 100%. Can be specified multiple timesNo
--minimumDeposit <string>Minimum deposit per transaction in base unitsNo
--depositLimit <string>Maximum deposit per user in base unitsNo
--minimumQuoteTokenThreshold <string>Minimum total quote tokens required for the bucket to succeedNo
--depositPenalty <json>Penalty schedule JSONNo
--withdrawPenalty <json>Withdraw penalty schedule JSON (same format as depositPenalty)No
--bonusSchedule <json>Bonus schedule JSONNo
--claimSchedule <json>Claim vesting schedule JSONNo
--allowlist <json>Allowlist configuration JSONNo

JSON Option Formats

Penalty schedule (deposit or withdraw):

Penalty schedule format
{"slopeBps":0,"interceptBps":200,"maxBps":200,"startTime":0,"endTime":0}

Bonus schedule:

Bonus schedule format
{"slopeBps":0,"interceptBps":0,"maxBps":0,"startTime":0,"endTime":0}

Claim vesting schedule:

Claim schedule format
{"startTime":0,"endTime":0,"period":0,"cliffTime":0,"cliffAmountBps":0}

Allowlist:

Allowlist format
{"merkleTreeHeight":10,"merkleRoot":"<hex>","endTime":0,"quoteCap":0}

Examples

  1. Basic launch pool:
Basic launch pool
mplx genesis bucket add-launch-pool <GENESIS_ADDRESS> \
--allocation 500000000000000 \
--depositStart 1704067200 \
--depositEnd 1704153600 \
--claimStart 1704153601 \
--claimEnd 1735689600
  1. With end behavior and minimum deposit:
With end behavior
mplx genesis bucket add-launch-pool <GENESIS_ADDRESS> \
--allocation 500000000000000 \
--depositStart 1704067200 \
--depositEnd 1704153600 \
--claimStart 1704153601 \
--claimEnd 1735689600 \
--endBehavior "<DESTINATION_BUCKET_ADDRESS>:10000" \
--minimumDeposit 100000000
  1. With claim vesting:
With claim vesting
mplx genesis bucket add-launch-pool <GENESIS_ADDRESS> \
--allocation 500000000000000 \
--depositStart 1704067200 \
--depositEnd 1704153600 \
--claimStart 1704153601 \
--claimEnd 1735689600 \
--claimSchedule '{"startTime":1704153601,"endTime":1735689600,"period":86400,"cliffTime":1704240000,"cliffAmountBps":1000}'

Deposit

The mplx genesis deposit command deposits quote tokens into a launch pool bucket during the deposit window. If using SOL as the quote token, wrap it first.

Deposit into launch pool
mplx genesis deposit <GENESIS_ADDRESS> --amount 10000000000 --bucketIndex 0

Options

FlagShortDescriptionRequired
--amount <string>-aAmount of quote tokens in base units (e.g. lamports)Yes
--bucketIndex <integer>-bIndex of the launch pool bucket (default: 0)No

Examples

  1. Wrap SOL and deposit 10 SOL:
Wrap and deposit
mplx toolbox sol wrap 10
mplx genesis deposit <GENESIS_ADDRESS> --amount 10000000000 --bucketIndex 0

Withdraw

The mplx genesis withdraw command withdraws quote tokens from a launch pool bucket. Only available during the deposit period.

Withdraw from launch pool
mplx genesis withdraw <GENESIS_ADDRESS> --amount 5000000000 --bucketIndex 0

Options

FlagShortDescriptionRequired
--amount <string>-aAmount of quote tokens to withdraw in base unitsYes
--bucketIndex <integer>-bIndex of the launch pool bucket (default: 0)No

Transition

The mplx genesis transition command executes end behaviors after the deposit period closes, moving collected quote tokens to destination buckets.

Transition end behaviors
mplx genesis transition <GENESIS_ADDRESS> --bucketIndex 0

Options

FlagShortDescriptionRequired
--bucketIndex <integer>-bIndex of the launch pool bucketYes

Notes

  • Must be called after the deposit period ends
  • Only needed if the bucket has end behaviors configured

Claim

The mplx genesis claim command claims base tokens from a launch pool bucket. Users receive tokens proportional to their deposit.

Claim from launch pool
mplx genesis claim <GENESIS_ADDRESS> --bucketIndex 0

Options

FlagShortDescriptionRequired
--bucketIndex <integer>-bIndex of the launch pool bucket (default: 0)No
--recipient <string>Recipient address for claimed tokens (default: signer)No

Examples

  1. Claim to your own wallet:
Claim to self
mplx genesis claim <GENESIS_ADDRESS> --bucketIndex 0
  1. Claim to a different wallet:
Claim to another wallet
mplx genesis claim <GENESIS_ADDRESS> --bucketIndex 0 --recipient <WALLET_ADDRESS>

Full Lifecycle Example

Complete launch pool lifecycle
# 1. Create the Genesis account
mplx genesis create \
--name "My Token" \
--symbol "MTK" \
--totalSupply 1000000000000000 \
--decimals 9
# (copy GENESIS_ADDRESS from output)
GENESIS=<GENESIS_ADDRESS>
# 2. Timestamps
NOW=$(date +%s)
DEPOSIT_END=$((NOW + 86400))
CLAIM_START=$((DEPOSIT_END + 1))
CLAIM_END=$((NOW + 31536000))
# 3. Add a launch pool bucket with end behavior
mplx genesis bucket add-launch-pool $GENESIS \
--allocation 500000000000000 \
--depositStart $NOW \
--depositEnd $DEPOSIT_END \
--claimStart $CLAIM_START \
--claimEnd $CLAIM_END \
--endBehavior "<UNLOCKED_BUCKET_ADDRESS>:10000"
# 4. Add an unlocked bucket to receive SOL
mplx genesis bucket add-unlocked $GENESIS \
--recipient $(solana address) \
--claimStart $CLAIM_START \
--allocation 0
# 5. Finalize
mplx genesis finalize $GENESIS
# 6. Wrap SOL and deposit
mplx toolbox sol wrap 10
mplx genesis deposit $GENESIS --amount 10000000000 --bucketIndex 0
# 7. After deposit period, transition
mplx genesis transition $GENESIS --bucketIndex 0
# 8. Claim tokens
mplx genesis claim $GENESIS --bucketIndex 0
# 9. Revoke mint authority
mplx genesis revoke $GENESIS --revokeMint

Common Errors

ErrorCauseFix
Deposit period not activeCurrent time is outside depositStartdepositEndCheck timestamps with genesis bucket fetch
Claim period not activeClaiming before claimStartWait until after the claim start timestamp
Withdrawal period endedTrying to withdraw after deposit window closedWithdrawals are only available during the deposit period
No wrapped SOLDepositing native SOL instead of wrappedRun mplx toolbox sol wrap <amount> first
Below minimum depositDeposit amount is less than minimumDepositIncrease the deposit amount to meet the minimum
Exceeds deposit limitUser's total deposits exceed depositLimitReduce the deposit amount — you've hit the per-user cap
End behavior not configuredRunning transition on a bucket without end behaviorsTransition is only needed for buckets with --endBehavior
Deposit period not endedRunning transition before deposits closeWait until after depositEnd timestamp

FAQ

How are tokens distributed in a launch pool? Tokens are distributed proportionally. If you deposited 10% of the total quote tokens in the pool, you receive 10% of the bucket's base token allocation.

Can I withdraw after depositing? Yes, but only during the deposit period. After the deposit window closes, withdrawals are no longer possible.

What are end behaviors? End behaviors forward collected quote tokens from a launch pool to destination buckets (usually unlocked buckets) after the deposit period ends. You must call genesis transition to execute them.

What is a claim schedule? A claim schedule adds vesting to token claims. Instead of receiving all tokens at once, they are released gradually based on the configured period, cliffTime, and cliffAmountBps.

What happens if minimumQuoteTokenThreshold is not met? If the total deposits don't reach the threshold, the bucket does not succeed and depositors can reclaim their funds.

Can I split end behaviors across multiple destinations? Yes. Specify --endBehavior multiple times with different destination addresses and percentages (in basis points, totaling 10000).

Glossary

TermDefinition
Launch PoolBucket type that distributes tokens proportionally based on deposit share
End BehaviorRules forwarding collected quote tokens to destination buckets after deposits close
TransitionThe command that executes end behaviors — must be called explicitly after the deposit period
Claim ScheduleVesting configuration controlling gradual token release over time
Deposit PenaltyFee applied to deposits, configured as basis points with optional time-based slope
Withdraw PenaltyFee applied to withdrawals during the deposit period
Bonus ScheduleExtra token allocation for early or specific-timing deposits
AllowlistMerkle-tree-based access control limiting who can deposit
Basis Points (bps)1/100th of a percent — 10000 bps = 100%, 100 bps = 1%