Docs

Build with nearfun.

How fee vaults, hourly rounds and native-chain claims work under the hood, plus a public API you can call from anywhere.

Overview

nearfun is the pump.fun launchpad that pays holders on the native chain. Not SOL, not a wrapped token on Solana: real BTC on Bitcoin, ZEC on Zcash, DOGE on Dogecoin, ETH on Ethereum. 17 assets across 12 chains, delivered by NEAR Intents solvers with no bridge for the holder to touch.

Under the hood, each coin’s 3% creator fee collects in its own vault, is split among holders every hour, and leaves Solana only when a holder claims it to the chain they pick.

Paid out on

12 native chains

Delivered by

NEAR Intents 1Click

Wrapped tokens

None

Quickstart

  1. 1

    Launch a coin

    Open Launch, add a name, ticker and image, and sign one transaction. The coin goes live on pump.fun with its vault already set as creator.
  2. 2

    Hold it

    Any wallet holding 10,000+ tokens is paid automatically every hour. Nothing to stake or register.
  3. 3

    Claim anywhere

    On Claim, pick an asset and paste an address on its chain. Sign once and it arrives natively.

For holders

You choose the chain you get paid on. Your balance sits in ZEC on Solana until you claim, then it arrives as the real asset on its own chain: BTC to a bitcoin address, DOGE to a dogecoin address, never a wrapped copy.

You want toDo this
Get paid nativelyPick one of 17 assets, paste an address on its own chain, and sign one transaction on Solana. Solvers deliver it, usually in under a minute.
See your balanceOpen Claim and connect, or paste any address to look it up read-only.
Be eligibleHold 10,000+ tokens of any nearfun coin. Every hourly round credits you by balance.
Keep it on SolanaChoose raw ZEC on Solana. It works from 0.0001 ZEC and skips the route.
Verify a payoutEvery round and claim links to its Solana transaction. Routed claims also show the NEAR Intents status until delivered.
Selling below 10,000 tokens only stops future rounds. Whatever you already earned stays in your balance and never expires.

For launchers

A launch takes one signature and costs roughly 0.03 SOL: pump.fun rent and network fees, plus 0.01 SOL of fuel that pays for the vault’s future collections.

What you setWhat nearfun sets
Name, ticker, image, descriptionQuote asset: ZEC on Solana, creator fee 3%
X and Telegram links (optional)Creator on the curve: the coin’s own vault
Optional first buyWebsite: the coin’s page, www.nearfun.app/coin/<mint>

That is the pitch to your community: holders of your coin get paid in real BTC, ZEC, DOGE or ETH on the native chain, from the first trade. The launcher never receives the creator fee and can't redirect it later.

Fees and vaults

Every launch is a pump.fun create_v2 transaction quoted in ZEC (A7bdiY…QXaS) with a creator fee of 300 bps. The creator recorded on the curve is a vault address derived for that one coin, so the launcher never receives the fee.

The same transaction moves 0.01 SOL to the vault so it can pay network fees for collections. You sign once; nearfun co-signs only with the new coin address it generated for you.

Vault keys are derived on the server, so nearfun is custodial for fees in transit. Keys only sign fee collections and claims the holder has signed. Every round and claim is public on Solana.

Payout rounds

A round runs every 60 minutes. Holders are read from Solana before collecting, and the amount split is the exact ZEC received in the confirmed collection, never an estimate.

round.ts (simplified)
// Runs at the top of every hour for each coin vault
const pending = await pendingFees(vault)            // ZEC waiting in pump.fun
if (pending < 20000n) return         // 0.0002 ZEC minimum

const holders = (await readHolders(mint))           // straight from Solana
  .filter((h) => h.tokens >= 10_000)        // eligibility floor
  .filter((h) => !isCurveOrPool(h) && h.owner !== vault)

const received = await collect(vault)               // exact amount from tx meta
const total = holders.reduce((s, h) => s + h.tokens, 0n)

for (const h of holders) {
  credit(h.owner, (received * h.tokens) / total)    // pro rata, base units
}
carry(received - sumOfCredits)                      // dust rolls to next round
RuleValue
Minimum to run a round0.0002 ZEC
Minimum holding10,000 tokens
ExcludedBonding curve, AMM pools, the vault itself
SplitPro rata by balance, integer base units
Rounding dustCarried into the next round

Claims

A wallet’s balance is the sum of every round it was in, minus what it already claimed. Balances never expire. A claim pays from every coin vault you earned in (up to 6 per claim) in one transaction you sign.

StatusMeaning
preparingTransaction built, waiting for your signature (expires in 3 minutes)
sendingVaults co-signed and sent the payout to the deposit address
sentConfirmed on Solana; NEAR Intents is delivering
failedThe payout failed on chain; your balance is untouched

Routed payouts need 0.002 ZEC of balance (Bitcoin asks a little more). Raw ZEC to your Solana wallet needs 0.0001 ZEC. If a route can’t complete, NEAR Intents refunds your Solana wallet.

Destinations

Every route below is quoted live from ZEC on Solana before you sign. Use the id as the asset parameter.

idAssetChainAddress
zecZECZcashu1… or t1…
aleoALEOAleoaleo1…
dashDASHDashX…
btcBTCBitcoinbc1… or 1… or 3…
ethETHEthereum0x…
usdc-baseUSDC on BaseBase0x…
solSOLSolanaSolana address
nearNEARNEARname.near or 64-hex
usdc-solUSDC on SolanaSolanaSolana address
usdc-ethUSDC on EthereumEthereum0x…
eth-baseETH on BaseBase0x…
eth-arbETH on ArbitrumArbitrum0x…
usdc-arbUSDC on ArbitrumArbitrum0x…
usdt-ethUSDT on EthereumEthereum0x…
usdt-tronUSDT on TronTronT…
dogeDOGEDogecoinD…
ltcLTCLitecoinltc1… or L… or M…

API introduction

Read endpoints are public JSON with no key. Amounts are strings in ZEC base units (8 decimals), so divide by 1e8. /api/coins and /api/ledger send access-control-allow-origin: *.

Base URL
https://www.nearfun.app/api

Coins

GET/api/coins

Every live coin with market data, plus site totals.

GET/api/coins/:mint

One coin, its payout rounds and top earners.

curl https://www.nearfun.app/api/coins
Response
{
  "coins": [
    {
      "mint": "…pump",
      "name": "Example",
      "symbol": "EXMPL",
      "vault": "…",
      "status": "live",
      "distributed": "1842000",
      "distributions": 12,
      "holders": 214,
      "pendingFees": "36000",
      "marketCapUsd": 48210.5,
      "progress": 0.31,
      "complete": false
    }
  ],
  "stats": { "coins": 1, "distributed": "1842000", "wallets": 214, "zecUsd": 1225.3 }
}

Earnings

GET/api/earnings?wallet=<solana address>

A wallet’s balance per coin and its claims. Use it to show holders what they can claim.

curl "https://www.nearfun.app/api/earnings?wallet=YOUR_WALLET"
Response
{
  "wallet": "…",
  "zecUsd": 1225.3,
  "owed": "418000",
  "earned": "618000",
  "balances": [
    { "mint": "…pump", "symbol": "EXMPL", "earned": "618000", "paid": "200000", "owed": "418000" }
  ],
  "claims": []
}

Ledger

GET/api/ledger

The latest 60 payout rounds and delivered claims, newest first. Each entry has a Solana signature you can verify.

Response
{
  "entries": [
    { "kind": "distribution", "symbol": "EXMPL", "amount": "36000", "holders": 214, "signature": "…", "at": "2026-11-03T21:00:04Z" },
    { "kind": "claim", "symbol": null, "amount": "418000", "payout": "intents", "signature": "…", "at": "2026-11-03T20:41:19Z" }
  ]
}

Quotes

GET/api/quote?amount&asset&recipient&wallet

A dry NEAR Intents quote: what a balance would deliver to an address, without reserving anything.

ParamDescription
amountZEC base units to send, as an integer string
assetDestination id from the table above, e.g. zec, btc, usdc-base
recipientAddress on the destination chain
walletYour Solana wallet, used as the refund address
curl
curl "https://www.nearfun.app/api/quote?amount=418000&asset=zec&recipient=u1…&wallet=YOUR_WALLET"
# { "asset": "zec", "amountOut": "386000", "amountOutFormatted": "0.00386", "timeEstimate": 40 }

Claiming

Claiming is two calls around one wallet signature. The server rebuilds and fingerprint-checks the signed transaction before the vaults co-sign, so a modified transaction is rejected.

POST/api/claim/prepare

POST/api/claim/submit

claim.ts
import { VersionedTransaction } from '@solana/web3.js'

// 1. Build the claim. payout: 'intents' (native chain) or 'solana' (raw ZEC)
const prep = await fetch('https://www.nearfun.app/api/claim/prepare', {
  method: 'POST',
  headers: { 'content-type': 'application/json' },
  body: JSON.stringify({ wallet, payout: 'intents', asset: 'zec', recipient: 'u1…' }),
}).then((r) => r.json())
// { claimId, transaction (base64), amount, coins, quote }

// 2. Sign it in the holder's wallet
const tx = VersionedTransaction.deserialize(Buffer.from(prep.transaction, 'base64'))
const signed = await provider.signTransaction(tx)

// 3. Submit within 3 minutes. Vaults co-sign and send.
const result = await fetch('https://www.nearfun.app/api/claim/submit', {
  method: 'POST',
  headers: { 'content-type': 'application/json' },
  body: JSON.stringify({
    claimId: prep.claimId,
    wallet,
    transaction: Buffer.from(signed.serialize()).toString('base64'),
  }),
}).then((r) => r.json())
// { status: 'sent' | 'sending', signature }

Try it live

These requests hit this site’s real API from your browser.

/api/coins
Send a request to see the live response from this site.

Errors

Errors return JSON { "error": "message" } with a status code. Messages are written to show to users as-is.

StatusWhen
400Bad wallet, address, asset or amount
404Unknown coin, or nothing to claim yet
409A claim is already settling, or the balance changed
410The prepared claim expired (older than 3 minutes)
422The signed transaction failed checks or failed on chain
502NEAR Intents or an upstream service is unavailable
503Payouts are not configured on this deployment

Constants

NameValue
Creator fee300 bps (3%)
Round interval60 minutes
Minimum per round0.0002 ZEC
Minimum holding10,000 tokens
Routed claim minimum0.002 ZEC
Solana claim minimum0.0001 ZEC
Coins per claim6
Vault fuel at launch0.01 SOL
Token supply1,000,000,000 (6 decimals)

Addresses

New to nearfun?

The visual walkthrough explains everything in two minutes.

How it works