~/jpmorgoon
$MORGOON
[SOLANA / TOKEN-2022 / BONDING-CURVE]

$MORGOON — code that runs without an operator.

A bonding curve token on Solana. Buys mint MORGOON along an exponential curve. Sells burn MORGOON and return SOL from reserves. No owner. 21,000,000 cap.


price.usd
$0.002786
reserve.sol
0
circulating
0 / 21M
0.00%
liquidity.usd
$0.00
supply.minted
0/ 21,000,000
0.00%
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
021M

bonding_curve

supply (left) · price_usd (right) · x = cumulative_sol
supply.morgoon
price.usd
SOL
slippage
Last BuyersSOL in
Loading…
Last SellersMORGOON sold
Loading…
$

Method


Pool-proof bonding curves are a 2024–2025 design pattern emerging on Solana, built on Token-2022's transfer hook extension. The idea: combine a bonding curve (mint on buy, burn on sell, math-derived price) with a transfer rule that rejects every program-owned destination — so no third party can ever spin up a Raydium, Orca, or Meteora pool for the token. The curve is structurally the only market, not by convention but by mint config.

The pattern is only a few months old in production. We're taking it and trying a memecoin spin on it: fair launch, 21M asymptotic cap, dynamic sell fee against late dumps, and self-deprecation that locks the program at 99% of supply. The math, the mechanics, and the contract details are below.

$

How It Works


Bonding Curve
Price is a pure math function of cumulative SOL in. No order book. No LP. No AMM pool to drain. The contract is the market.
No Liquidity Needed
The program mints tokens on buy and burns on sell. SOL is held in the contract as reserve. No LPs, no impermanent loss.
Always Redeemable
Sells always work as long as there is SOL in reserve. The curve guarantees the price you receive before you trade.
Fair Launch
No pre-mine, no team allocation, no presale. The first buyer and the last buyer use the same contract.
Transparent
All state is on-chain and readable. Curve position, supply, reserve, fees collected — every value is queryable from any Solana RPC. Reserve is the contract balance minus accrued fees.
Self-Deprecating
Eventually the curve fills. When 99% of supply has been minted, selfDeprecated flips on-chain and locks. From that moment forward, the contract cannot create another unit — not by the deployer, not by anyone.
Pool-Proof
Nobody can list MORGOON on Raydium, Orca, Meteora, or any AMM — present or future. The Token-2022 transfer hook rejects every transfer where source or destination is a program-owned account. The contract is structurally the only market, not by convention but by mint config.
No Upgrade Authority
The program upgrade authority is renounced at deploy in a single irreversible transaction. The bytecode you see today is the bytecode that will run forever — the dev cannot push a patch, swap a curve, or insert a backdoor.
Slippage Protected
Every buy and sell carries a minTokensOut / minSolOut parameter. If the actual price moves against you between sign and execution, the transaction reverts and you pay only the network fee. No surprise fills.
Read the technical specification
The math, the mechanics, and what the contract actually does

The curve

We use a saturating exponential bonding curve. The total amount of MORGOON that has been minted at any point is a function of the cumulative SOL that has flowed into the contract:

totalMinted(sol) = K · (1 − e^(−sol/S))

  K = 21,000,000   (asymptotic supply cap)
  S = 650 SOL      (curve scale — half-life parameter)

Early SOL mints proportionally more MORGOON than late SOL. As cumulative SOL grows, mint rate slows; the supply asymptotically approaches K but never exceeds it. After ~6·S ≈ 3,900 SOL has flowed in, supply is at 99.75% of cap.

Marginal price

The instantaneous price (SOL per MORGOON) at any cumulative-SOL position:

price(sol) = S · e^(sol/S) / K

The price is monotonically increasing. Every SOL pushed into the curve raises the price for the next buyer. Sells reverse the position and lower the price.

Buy mechanics

The buy instruction does the following, atomically:

  1. Receive solIn lamports from the buyer.
  2. Deduct flat 1% buy fee → routed to the dev wallet.
  3. Add the remaining SOL to the curve reserve (the program-controlled vault).
  4. Compute mintFor(cumulativeSolBefore, netSol) — the number of new MORGOON tokens to mint.
  5. Mint those tokens directly to the buyer's token account via the config PDA.
  6. Update curve state: cumulativeSol, totalMinted, buyCount, totalFees.

If the slippage check fails (tokens minted < the buyer's minTokensOut), the entire transaction reverts.

Sell mechanics

The sell instruction is the inverse of buy:

  1. Receive tokensIn MORGOON from the seller.
  2. Compute burnFor(currentTotal, tokensIn) — the SOL to release.
    burnFor(currentTotal, tokensIn)
      = S · ln((K − currentTotal + tokensIn) / (K − currentTotal))
  3. Burn the seller's tokens (supply decreases).
  4. Deduct dynamic sell fee on the SOL amount → dev wallet. Fee is 1% by default; once supply exceeds 80% of cap, it ramps linearly to a maximum of 2% at 99% of cap. Capped at 2% — the seller never sees a higher rate.
    fill_pct = total_minted / K
    sell_fee_bps =
      100                            if fill_pct < 0.80
      100 + 100 * progress           if 0.80 ≤ fill_pct < 0.99
      200                            if fill_pct ≥ 0.99
    where progress = (fill_pct − 0.80) / 0.19
  5. Transfer the remaining SOL from the reserve vault to the seller.
  6. Update curve state.

Sells always work as long as the seller actually owns the tokens and the curve state is consistent — by construction, the reserve is always sufficient.

Self-deprecation

When totalMinted ≥ 0.99 · K, the program flips the on-chain selfDeprecated flag to true. From that point forward, the buy instruction reverts unconditionally. The mint authority is the program PDA, so even after self-deprecation, no human can mint a single additional unit. Sells continue to function as long as reserves remain.

Pool-proof transfer hook

The mint is configured with a Token-2022 TransferHook extension pointing at a small companion program. On every transfer_checked call, Token-2022 invokes the hook. The hook enforces a single rule:

source_owner.owner == SystemProgram
  AND
destination_owner.owner == SystemProgram

In Solana, a normal user wallet (Phantom, Solflare, hardware wallet) is owned by the System Program. Any program-derived address — Raydium pool authority, Orca whirlpool, Meteora DLMM, future AMMs we've never heard of — is owned by its own program. So this single check rejects every AMM, lending market, and smart-contract-wallet integration, while permitting wallet-to-wallet transfers.

Mint and burn don't trigger transfer hooks — they're separate Token-2022 instructions — so the buy and sell flows are unaffected. The hook only fires on direct token transfers, which is exactly where rogue pools and predatory routing would attempt to insert themselves.

Authorities & verification

  • Mint authority: Config PDA — derived from the program ID. No upgrade key, no multisig, no human signer.
  • Freeze authority: None (set to null at initialize).
  • Update authority: None — config struct has no setters after initialize.
  • Verification: The deployed BPF binary lives on-chain at the program ID. Anyone can fetch it via solana program dump and disassemble or run it through a BPF analyzer.
$

FAQ


Why a bonding curve instead of a Raydium/Meteora pool?
Bonding curves don't need liquidity providers, don't suffer impermanent loss, and can't be drained by an LP exit. The curve is the price; the contract is the market. Reserves grow with buys and shrink with sells, deterministically.
Can someone open their own Raydium / Orca pool for this token?
No. The mint uses a Token-2022 transfer hook that allows transfers only between user wallets (System-Program-owned accounts). Any AMM pool would need a program-owned token account on one side; the hook rejects those transfers. This means no rogue pools, no fake-fee scams, no sandwich attacks routed through Jupiter — by mint config, not by promise.
What stops the dev from rugging?
There is nothing to rug. Mint authority is the program PDA — the dev cannot mint extra tokens. There is no LP to pull. There can never be a third-party LP to pull either — the transfer hook blocks all AMM pool creation. The dev wallet only receives the 1% fee, openly disclosed. The dev wallet is a normal wallet — its balance is public and on-chain at all times.
Where does the fee go and why is the sell fee dynamic?
Every fee — buy and sell — goes to the dev wallet, on-chain and visible. Buy fee is a flat 1%. Sell fee is 1% normally and ramps up linearly to 2% only as supply approaches saturation (between 80% and 99% of cap). The intent: a tiny disincentive to dump near the top. You will never see more than 2%. The dev wallet address is published before launch.
Why is there a hard cap at 21M?
The exponential curve asymptotically approaches K = 21M but never crosses it. At ~99% of cap, the contract self-deprecates: the buy instruction is permanently disabled. After that, the supply only goes down (sells burn). No human can re-enable it.
Is the contract audited?
No. We made that call deliberately — audits cost time and money we'd rather put into testing. Mitigations: full math test vectors (mpmath ↔ Rust agreement to 1e-12 precision), devnet validation, and an attack-scenario test suite covering known exploit patterns. The deployed BPF binary is on-chain and disassemblable by anyone who wants to verify the logic.
What chain is this on?
Solana. Token-2022 standard. The bonding curve logic lives entirely in a custom Anchor program — no oracles, no external dependencies, no cross-program invocations beyond the SPL token program for mint/burn.
Can I sell at any time?
Yes. The sell instruction works as long as the curve state is valid. The price you'll receive is computed by the curve at the moment of execution and shown to you in the UI before you sign. Slippage protection: you can set a minimum SOL out — if the actual price slips below your minimum, the transaction reverts.
$Contract Details
Curve formula
totalMinted(sol) = K · (1 − e^(−sol/S))
K = 21,000,000 · S = 650 SOL
Fee
1% flat on buys. Sells start at 1% and ramp up to 2% only when supply crosses 80% of cap (linear up to 99%). Sent to the dev wallet, openly disclosed.
Dev wallet, mint address, and program ID are published on this page. Every state field is queryable on-chain via any Solana RPC — no off-chain trust required.
SOL In: 0
Price: $0.00278571
Minted: 0 / 21M
SOL/USD: $90.00
MORGOON · Solana