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.
On this page
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
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
Hold it
Any wallet holding 10,000+ tokens is paid automatically every hour. Nothing to stake or register. - 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 to | Do this |
|---|---|
| Get paid natively | Pick 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 balance | Open Claim and connect, or paste any address to look it up read-only. |
| Be eligible | Hold 10,000+ tokens of any nearfun coin. Every hourly round credits you by balance. |
| Keep it on Solana | Choose raw ZEC on Solana. It works from 0.0001 ZEC and skips the route. |
| Verify a payout | Every round and claim links to its Solana transaction. Routed claims also show the NEAR Intents status until delivered. |
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 set | What nearfun sets |
|---|---|
| Name, ticker, image, description | Quote asset: ZEC on Solana, creator fee 3% |
| X and Telegram links (optional) | Creator on the curve: the coin’s own vault |
| Optional first buy | Website: 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.
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.
// 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| Rule | Value |
|---|---|
| Minimum to run a round | 0.0002 ZEC |
| Minimum holding | 10,000 tokens |
| Excluded | Bonding curve, AMM pools, the vault itself |
| Split | Pro rata by balance, integer base units |
| Rounding dust | Carried 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.
| Status | Meaning |
|---|---|
| preparing | Transaction built, waiting for your signature (expires in 3 minutes) |
| sending | Vaults co-signed and sent the payout to the deposit address |
| sent | Confirmed on Solana; NEAR Intents is delivering |
| failed | The 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.
| id | Asset | Chain | Address | |
|---|---|---|---|---|
| zec | ZEC | Zcash | u1… or t1… | |
| aleo | ALEO | Aleo | aleo1… | |
| dash | DASH | Dash | X… | |
| btc | BTC | Bitcoin | bc1… or 1… or 3… | |
| eth | ETH | Ethereum | 0x… | |
| usdc-base | USDC on Base | Base | 0x… | |
| sol | SOL | Solana | Solana address | |
| near | NEAR | NEAR | name.near or 64-hex | |
| usdc-sol | USDC on Solana | Solana | Solana address | |
| usdc-eth | USDC on Ethereum | Ethereum | 0x… | |
| eth-base | ETH on Base | Base | 0x… | |
| eth-arb | ETH on Arbitrum | Arbitrum | 0x… | |
| usdc-arb | USDC on Arbitrum | Arbitrum | 0x… | |
| usdt-eth | USDT on Ethereum | Ethereum | 0x… | |
| usdt-tron | USDT on Tron | Tron | T… | |
| doge | DOGE | Dogecoin | D… | |
| ltc | LTC | Litecoin | ltc1… 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: *.
https://www.nearfun.app/apiCoins
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{
"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"{
"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.
{
"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.
| Param | Description |
|---|---|
| amount | ZEC base units to send, as an integer string |
| asset | Destination id from the table above, e.g. zec, btc, usdc-base |
| recipient | Address on the destination chain |
| wallet | Your Solana wallet, used as the refund address |
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
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.
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.
| Status | When |
|---|---|
| 400 | Bad wallet, address, asset or amount |
| 404 | Unknown coin, or nothing to claim yet |
| 409 | A claim is already settling, or the balance changed |
| 410 | The prepared claim expired (older than 3 minutes) |
| 422 | The signed transaction failed checks or failed on chain |
| 502 | NEAR Intents or an upstream service is unavailable |
| 503 | Payouts are not configured on this deployment |
Constants
| Name | Value |
|---|---|
| Creator fee | 300 bps (3%) |
| Round interval | 60 minutes |
| Minimum per round | 0.0002 ZEC |
| Minimum holding | 10,000 tokens |
| Routed claim minimum | 0.002 ZEC |
| Solana claim minimum | 0.0001 ZEC |
| Coins per claim | 6 |
| Vault fuel at launch | 0.01 SOL |
| Token supply | 1,000,000,000 (6 decimals) |
Addresses
| Program or asset | Address |
|---|---|
| pump.fun bonding curve | 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P |
| PumpSwap AMM | pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA |
| Token-2022 | TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb |
| ZEC on Solana | A7bdiYdS5GjqGFtxf17ppRHtDKPkkRqbKtR27dxvQXaS |
| ZEC on NEAR Intents | nep141:zec.omft.near |
New to nearfun?
The visual walkthrough explains everything in two minutes.