Documentation
Using the terminal
Castellum is four contracts per project: a fixed-supply token, a two-round sale, a staking vault, and a router that splits incoming value. There is no backend and no indexer — every page here reads the chain directly, and every action is a transaction you sign.
Overview
A launch is created in one transaction. The Launchpad deploys the token at a deterministic address, then clones a Sale, a RewardVault, and a RewardRouter wired to each other. Nothing is upgradeable and nothing holds a key to your funds: the sale escrows contributions until it finalizes or refunds, and the vault only ever moves the tokens you staked.
Launchpad.launch() ├── CreatorToken fixed supply, minted once, no owner ├── Sale private round → public round → finalize/refund ├── RewardVault stake the token, accrue up to 32 reward assets └── RewardRouter splits every deposit → vault / creator / treasury
Open a launch
- 01Connect a wallet on chain 4663
The header switches networks for you. Gas is ETH; a launch costs well under a cent at current base fees.
- 02Describe the token
Name, symbol, and total supply. Supply is minted once at launch — there is no mint function afterwards, and the token has no transfer tax and no owner.
- 03Pick a quote asset
Contributions are collected in ETH or USDG (0x5fc5360D…, 6 decimals). Several impostor USDG tokens exist on the explorer; the app only offers the Paxos one.
- 04Configure the two rounds
Each round has a window, a token allocation, a hard cap, per-wallet minimum and maximum, and an optional vesting cliff and duration. The private round also takes a merkle root.
- 05Set the vault lock and creator cut
Lock duration is how long a stake is held after each deposit, up to 365 days. The creator cut is the share of routed rewards that goes to you instead of stakers.
- 06Fund the sale
Transfer the tokens the rounds will sell into the Sale contract. Until it is funded, no one can contribute.
Set a soft cap you would genuinely accept. If the combined raise ends below it, the sale flips to refund mode and everyone withdraws their contribution — you cannot override that afterwards.
Join a sale
Both rounds are fixed price: a round selling tokensForSale for a hard cap of hardCap prices every contribution the same way, whether you are first or last.
tokens = contribution × tokensForSale / hardCap
The private round is gated by a merkle allowlist — your wallet needs a proof, published by the creator, to contribute. The public round is open. Both enforce a per-wallet minimum and maximum, and a contribution that would cross the hard cap is accepted up to the cap with the remainder refunded inside the same transaction, so a race at the close never reverts your whole trade.
After the creator finalizes, claim your tokens on the launch page. If the round vested, your claimable balance unlocks linearly after the cliff. If the sale was canceled or missed its soft cap, the same page lets you withdraw your contribution instead.
Robinhood Chain sequences transactions first-come-first-served, so paying more gas does not win an allocation. Fairness is enforced on-chain by the allowlist and the per-wallet caps.
Stake and claim
The vault takes the creator token and pays out any reward asset routed to it. Accounting is pull-based: each reward token has an accumulator, and your claimable balance settles whenever your stake changes. Rewards notified while nothing is staked are parked and folded in with the next deposit rather than being stranded.
- Stake
- Approve, then stake. Each deposit restarts your lock.
- Lock
- Set per launch, capped at 365 days.
- Claim
- Claim any subset of reward tokens at any time — no lock on rewards.
- Unstake
- Available once your lock has elapsed. Claims settle first.
- Reward assets
- Up to 32 per vault.
Route an airdrop
Any project can pay a creator's holders without asking permission: approve the launch's RewardRouter and call deposit(token, amount). The router splits the deposit between the vault, the creator, and the protocol treasury, registers the asset with the vault if it is new, and emits a Deposited event. Trading fees arrive through exactly the same path.
Fees
- Protocol fee on a raise
- 2.00% of proceeds at finalize
- Protocol cut of rewards
- 5.00% of every routed deposit
- Creator cut of rewards
- Set per launch, deducted before the vault
- Liquidity reserve
- Optional share of proceeds sent to the liquidity recipient
- Fee to open a launch
- None, beyond gas
Contract reference
Only the Launchpad address matters for integrating — everything else is discoverable from it. Source is verified on Blockscout.
- Sale template
- 0x6CB679A2Ae3451f89b2E1F345BB7311Bb894f9dC
- RewardVault template
- 0x8F6f251DFeb15b10EE7CCb826d2A15b4E60C51A9
- RewardRouter template
- 0xD57e3507A92aEe3Ff938762126655f6CAdEBC16F
- USDG (Paxos)
- 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168
- RPC
- https://rpc.mainnet.chain.robinhood.com
- Chain id
- 4663
The three templates are never called directly. Each launch gets an EIP-1167 minimal clone, so a launch costs a fraction of a full deployment and every clone runs identical bytecode.
Safety
The contracts ship with a full unit and mainnet-fork test suite; an external review has not been completed yet. The protocol owner can change fees, cancel a sale, and pause staking — that role is currently an EOA and is being moved to a Safe multisig.
Before contributing to any launch, check on the explorer that the token supply matches what the page claims, that the sale is funded, and that the quote asset is the real USDG. Castellum does not vet creators, and a launch appearing in the registry is not an endorsement.