Moocon

How It Works

From deposit to prize tier to draw and claim, the full Moocon Vaults lifecycle.

The short version

Moocon Vaults redirects lending yield into prize draws. You keep a redeemable position in pTokens, and the yield the vault generates is split across two prize tiers and paid to winners.

Moocon Vaults lifecycleYouVaultJupiter LendOperatorMagicBlock VRFDEPOSIT AND YIELDdepositJupUSD or SOLsupply underlyingmint pTokens1 pToken = 1 ticketyield accruessplit the yield across tiersBull Sprint 70% / 1hGolden Horn 30% / 7dTHE DRAWseal snapshot: root + hash(secret)prize and ticket total fixed hererequest randomnessvia Ephemeral RollupVRF outputreveal secretverify hash, XOR, pick winnerneither side controlsthe outcome alonePAYOUTprize in pTokenspermissionless claim

Deposits and yield

When you deposit, the vault supplies the underlying token to Jupiter Lend and it begins earning. The vault tracks your share with pTokens, minted one per unit of the token you deposited.

The yield source is ordinary overcollateralised lending. What Moocon changes is where the yield goes: instead of everyone receiving a small pro-rata amount, it accumulates into prize pools.

pTokens and tickets

pTokens are the position tokens for a vault.

  • Minted when you deposit, burned when you withdraw.
  • SPL tokens, so they sit in your wallet like any other token.
  • Your balance is your ticket count. One whole pToken is one ticket.

More tickets means better odds, but every eligible depositor has a chance.

Prize tiers

Each vault splits its yield across two tiers, each with a share of the yield and its own cadence. The shares always add up to the whole, so all generated yield is assigned to a tier.

  • Bull Sprint is the short tier. It pays often and keeps something happening between the bigger draws.
  • Golden Horn is the long tier. It collects its share over a longer window and pays a larger prize.

On mainnet today, Bull Sprint takes 70% of the yield and settles every 1 hour, while Golden Horn takes 30% and settles every 7 days. Each vault card in the app shows the live cadence, countdown, and current prize estimate for both tiers, and those are the numbers that count.

Between draws, each tier accumulates its share. When a tier's interval elapses, that tier's accumulated balance becomes the prize for the next draw and its counter resets.

Who is in a draw

Eligibility is snapshotted, not taken at the instant of the draw.

For the short tier, the draw uses the round's snapshot set. Deposits made after the snapshot join a later round, and tickets that were withdrawn or transferred away do not survive into the draw.

For the long tier, that set is narrowed further: you must have held continuously since that tier last paid out. Depositing partway through a Golden Horn window earns Bull Sprint tickets right away, but Golden Horn counts you from the start of its next window.

The app shows where you stand per tier:

  • You're in: you are in the set this tier would draw against right now.
  • Joining next round: you deposited mid-round and are eligible from the next one.
  • Qualifies next cycle: you are holding, but have not held across this long tier's whole window yet.
  • Deposit to enter: no position in this vault yet.

The draw

When a tier is due, the operator seals every eligible wallet and its ticket weight into a Merkle tree and commits the root on-chain, alongside the hash of a secret it has chosen but not revealed. The prize amount and total ticket count are fixed at the same moment.

Randomness then comes from MagicBlock VRF, fulfilled against a request account delegated to a MagicBlock Ephemeral Rollup. Once it lands, the operator reveals its secret. The program checks the secret against the committed hash, XORs it with the VRF output, and derives the winning ticket from the result.

Neither source can decide the outcome alone. The operator commits its secret before it knows the randomness, and the VRF cannot see the secret. The prize, the ticket total, and the eligible set are all fixed before either is known.

What can be verified

After a round settles, the committed Merkle root defines the eligible set and every ticket weight, and the revealed secret plus the VRF output define the randomness. With the round data and a Merkle proof anyone can check:

  • that a wallet was in the snapshot;
  • how much ticket weight it had;
  • that the winner the program selected follows from the published round data.

The app exposes the round's commitment, randomness, and transaction signatures for each settled draw.

Claiming

The prize is paid as pTokens of the same vault, so a win is already deposited and earning again. You can hold it or redeem it like any other pToken.

The winner can claim permissionlessly, creating the token account in the same transaction if needed. An authorised operator may also deliver the prize automatically when the account already exists.

Depositors who are not drawn keep their pTokens and stay eligible for later rounds unless they withdraw.

On this page