Skip to content

$NOTE ​

$NOTE is minted to traders when they close positions, on winning and losing closes alike, in proportion to realized PnL. You can stake it to earn a share of protocol revenue in USDC.

What it is ​

  • $NOTE is an SPL token (6 decimals, on-chain symbol NOTE). You can hold it in any Solana wallet, transfer it, and trade it wherever it is listed.
  • It is earned and staked on your trading account. Closes credit your account's unstaked balance, and staking moves $NOTE between unstaked and staked there. That way fills and liquidations never need access to your wallet.
  • Withdraw to wallet turns unstaked $NOTE on your account into SPL tokens in a wallet. Deposit from wallet turns them back, for example to stake $NOTE you bought.
  • Staking earns USDC rewards. Wallet tokens earn nothing until deposited and staked.

Moving $NOTE between your account and a wallet ​

  • withdraw_token(amount) takes amount from your unstaked balance and mints the same amount of SPL $NOTE into a token account of the $NOTE mint. Staked $NOTE must be unstaked first (instant). The app always sends to your own wallet.
  • deposit_token(amount) burns amount from a $NOTE token account you own and credits your unstaked balance.
  • Both need your wallet's signature. A 1-click session key can't sign either one, so a leaked session key can't move $NOTE out. Neither is ever paused.
  • The program is the only issuer. The mint's authority is the program's config account, and only four instructions use it: these two, and the admin's claims of the liquidity reserve's and the protocol's $NOTE (below). Nobody can mint $NOTE any other way, and the mint has no freeze authority, so nobody can freeze wallet balances. The mint is recorded once and can never be replaced.
  • Supply. Everything ever minted by closes (traders', the reserve's and the protocol's shares) equals the unstaked and staked balances on all accounts, plus the reserve's and the protocol's unclaimed $NOTE, plus referrers' unclaimed referral balances, plus the SPL supply in wallets, plus anything holders burned directly. Withdrawing and the reserve's claim move $NOTE into wallets; depositing moves it back.
  • The admin keeps the right to update the token's display metadata (name, symbol, logo). That right can't mint, burn or freeze.

Minting ​

Every close is evaluated for minting: wins, losses, liquidations and retired-market settlements. Minted $NOTE is credited to your unstaked balance immediately.

minted = floor(basis × rate_e9 / 1e9)        (basis in USDC base units, minted in $NOTE base units; both 6 decimals)
Closebasis
Win, paid now or queuedraw_pnl − floor(raw_pnl × fee_bps / 10000): the raw PnL before the win haircut, net of a 2% fee
Loss, queue emptyloss − floor(loss × fee_bps / 10000): the amount the house kept
Loss, queue active (fee waived)loss
LiquidationThe full margin
  • Wins mint on raw PnL, not on the haircut payout. A deadband win with positive raw PnL pays $0 but still mints on its raw PnL.
  • A close with zero raw PnL (exit equal to entry) mints nothing. Integer rounding can also turn a very small basis into 0 $NOTE.
  • A queued win mints at close, not when its claim is paid. Its basis uses the fee_bps in force at close. That is not the payout fee: the payout fee is charged later, on each queue payment, at the rate in force then.
  • The rate is read before the close moves the house: before a loss is credited, or before a win is paid.

Emission per hedged pair. Wins mint as well as losses, at flat_per_usd = 44 per $1 (50 before the referral slice was carved out; see Referrals), roughly half the 100 per $1 that loss-only minting used. So a hedged pair mints about what its losing leg alone minted under the loss-only rule at rate 100. A hedged pair here means equal size on opposite sides, opened and closed at the same prices. This holds when the queue is empty, neither leg is liquidated, and both legs close at the same mint rate, apart from base-unit rounding: a loss rounds up and a win rounds down. A liquidated leg mints on its full margin, and a loss while the queue is active mints without the fee deduction, so in those cases the pair mints more. Directional traders now mint on their winning closes too, not only on losses.

The liquidity reserve ​

$NOTE trades in a NOTE/USDC pool funded by the protocol. A reserve accrues on-chain:

  • 20% of staker revenue (the staker share of fees, and house overflow sweeps), in USDC. Stakers receive the other 80%: 40% of all fees instead of 50%.
  • An extra 4% of every close's mint, in $NOTE, on top of what the trader receives. It is not deducted from the trader's mint; it is new supply.

The protocol's allocation. A further 2% of every close's mint goes to the protocol itself (its treasury), also on top of the trader's mint. Like the reserve's $NOTE, it is minted only when the admin claims it. There is no vesting. Governance can lower it to 0 or raise it to at most 5%, through the same timelocked proposal.

The admin claims the reserve and adds it to the pool. The pool charges a 1% swap fee. The liquidity providers' share of it (84% on Raydium's standard pools, the rest goes to Raydium) goes to the protocol's dev treasury, and the liquidity is locked permanently. The claim is bounded by what accrued and can't touch any trader's balance, the house or stakers' cash. Adding it to the pool happens off-chain, so you trust the admin (a multisig) to do it. Both rates are governance parameters: at most 50% of staker revenue and at most +20% per close.

Referrals ​

Every trader gets a referral code automatically: 6 letters and digits, registered with their trading account on their first deposit or order. Codes are derived from the trader's address by the program itself (no look-alike characters), so nobody can choose or take someone else's. A new trader links to a referrer by entering their code once; the link never changes and never expires.

On every close, a referral slice of 15% of the trader's mint is split:

Nobody referred the traderThe trader was referred
The tradertheir minttheir mint +5%
Their referrer—10% of the trader's mint, into their referral balance
The liquidity reservethe whole 15%—

So total emission per close is the same either way: referrals redistribute $NOTE, they don't add any. To make room for the slice the flat rate is 44 per $1 (it was 50); at the flat rate a close mints about 53.2 $NOTE per $1 of basis in total, as before (53).

  • Referrers claim their balance into their own unstaked $NOTE (owner or session key), ready to stake or withdraw.
  • You can't refer yourself (the same wallet); a second wallet of your own is allowed and unavoidable.
  • The 5% / 10% split is a governance parameter (timelocked; together at most 30%).

The mint-rate curve ​

rate per $1 of basis = flat_per_usd                       while the house has never passed the cliff
                     = flat_per_usd × (S / (S + H))²      afterwards
ParameterCurrent value
flat_per_usd44 $NOTE per $1 of basis
cliff$2,000,000
decay_s (S)$120,000,000
monotonic_minttrue
  • H (tail_progress) is the highest value treasury + all-time sweeps − cliff has ever reached. It only goes up, so the rate only goes down.
  • The rate is flat until the treasury plus everything ever swept to stakers first exceeds $2,000,000. With monotonic_mint = true, the rate never returns to flat after that, even if the house is later drawn below the cliff.
  • Sweeps count towards H, so moving LP profit to stakers doesn't reset the curve.
H$0$10M$40M$120M$360M
$NOTE per $14437.4924.7511.002.75

Earlier closes mint more $NOTE per dollar of basis than later ones. The rate falls as the house's cumulative gains grow.

Examples at the flat rate (44), $10,000 notional (before any referral bonus):

  • +1% win: raw $100, basis $98, 4,312 $NOTE.
  • −1% loss with the queue empty: the same 4,312 $NOTE.
  • +5 bps win: raw $5, basis $4.90, 215.6 $NOTE.
  • +0.2 bps win: inside the deadband, so it pays $0 but mints 8.624 $NOTE.

Staking and unstaking ​

  • stake(amount) moves unstaked $NOTE to staked, and unstake(amount) moves it back. Both are instant. There is no lock-up, cooldown or penalty, and unstaking keeps the rewards you have already accrued.
  • The owner or a live session key can sign either one.
  • Rewards are shared in proportion to staked amount, with conservative integer rounding. The pool rounds each allocation down and carries the leftover forward as dust. Each account's reward checkpoint rounds up, so fractional USDC base units can be lost when an account settles, and many small claims can receive slightly less than one large claim.

Rewards (USDC) ​

Sources. All rewards are USDC:

  1. The staker share of every fee: currently 50% of the 2% loss fee and of the 2% payout fee, including payout fees on queue payments.
  2. LP excess sweeps: the treasury above staker_cap ($5,000,000), swept whenever the payout queue is empty and a settling instruction runs (The house).

20% of both goes to the liquidity reserve instead (pol.share_bps, rounded down), and stakers receive the rest.

Streaming. New revenue isn't paid out instantly. It vests linearly in fixed-schedule tranches:

epoch = ceil(reward_stream_s / 8)                     (currently ceil(3600 / 8) = 450 s)
start = (floor(now / epoch) + 1) × epoch              (the next epoch boundary)
end   = start + reward_stream_s                       (currently 1 hour later)
  • Revenue added within one epoch joins the same tranche. Up to 10 tranches can be active at once. Each tranche keeps its own schedule, so new revenue never delays older revenue.
  • Whatever has vested so far is credited to the current stakers whenever a staking-related or settling instruction runs. Staking and unstaking settle vesting first, so you earn only from vesting that happens while you are staked.
  • Why. Revenue arrives in bursts, for example a big liquidation or a sweep. If it were paid instantly, someone could stake just before a burst and unstake right after (just-in-time staking). Because vesting starts at the next epoch boundary and runs for an hour, a stake held for seconds around a burst earns almost nothing from it.
  • Revenue that vests while nobody is staked is held back. When someone stakes again, it is rescheduled as a new tranche.
  • Timing. With an unchanged window and a free tranche slot, revenue starts vesting at the next epoch boundary (within 450 s) and streams for one window (1 hour). If governance shortens the window while all 10 slots are occupied, new revenue waits in the held pool until a slot frees up, which can delay it longer. Existing tranches keep their schedules.
  • reward_stream_s is a governance parameter: 3,600 s (1 hour) to 7 days in production builds. Test and devnet-feature builds also allow 0, where new revenue is allocated immediately if anyone is staked. Held revenue, and revenue that arrives while nobody is staked, is still scheduled (over a 1 s window), and existing tranches are unchanged.

Claiming. claim_rewards credits everything accrued to your available USDC balance (your trading balance in the app). Rewards are never sent to your wallet directly; use withdraw to move them out. The owner or a live session key can claim.

Claimable amount in the app. The Papersol app simulates claim_rewards without signing it, refreshes about every 15 s, and shows the last simulated amount. If the simulation fails it shows a client-side estimate instead. The amount actually claimed can differ, because vesting and state keep moving.

Governance ​

flat_per_usd, cliff, decay_s, monotonic_mint, fee_bps, staker_share_bps, staker_cap and reward_stream_s are all economics parameters, and the reserve's pol.share_bps and pol.mint_bps are set by their own proposal. After launch they change only through a governance proposal (Oracle and safety).

Papersol is experimental software. Trading with leverage can lose your whole margin.