Field guide

Patch a hook, test it, attach it to a new coin. Everything the panel does, and the code behind it.

Open the workbench

What jackfield is

jackfield is a workshop for reward hooks on Solana coins. A hook is a small, fixed rule that decides where a coin's trading fees go: how often holders get paid, which wallets count, and how big each share is. You build it on a jack panel, by plugging cords into jacks, the way studios route audio.

A jackfield coin launches on Meteora's Dynamic Bonding Curve. Every trade pays a 2.5% fee. Meteora keeps 0.5%, the other 2% runs into your hook, and the hook splits it between holders and the reserve every round. Holders receive SOL in their wallet. Nobody claims anything, nobody stakes anything.

Words used in this guide

WordMeaning
hookThe rule: round length, minimum hold, weighting, holders share. Six numbers, nothing else.
patchA hook as it looks on the panel, before launch. You can change a patch, never a launched hook.
roundOne payout cycle. Fees that arrived since the last round are split and sent.
potThe holders' part of a round. If nobody qualifies, it waits for the next round.
reserveThe non-holder part of the 2%, plus rounding dust. It pays for the round worker and the panel.
fingerprintjf1_ + the first 16 hex of a SHA-256 over the hook. Written into the coin's metadata at launch.
NOTEThe panel, recipes, tests and dry runs work today in any browser. Coin launches open together with $JACKFIELD.

Quick start

  1. Pick a recipe or plug cordsOpen the workbench. Start from Reward loyal holders or drag the plugs yourself: CLOCK sets the round length, GATE the minimum hold, LOYALTY the weighting. The fader sets the holders share.
  2. Test itPress Test this hook. Change balances and holding times of up to eight sample wallets and watch each share move. Follow the sample funds shows every lamport.
  3. LaunchOpen Launch, add a name, ticker and image, check the attached hook and its fingerprint, then sign with your wallet. The hook is locked from that moment.

Prefer words? Press Describe a hook and write what you want, for example "pay holders every hour by token balance, 90% to holders". See Describe a hook.

Where a fee goes

Every buy and every sell pays the same 2.5%. The split is fixed by the protocol, not by the hook:

PartShare of the tradeNotes
Meteora keeps0.5%Pool fee of the bonding curve.
Into the hook2%Claimed by the round worker each round.
→ holders2% × holders %1.6% of the trade with the default 80/20.
→ reserve2% × (100 − holders) %0.4% of the trade with the default.
Creator0%No creator fee share, on any coin.

Liquidity is locked when the coin graduates from the curve. Rewards build up per coin: no trading means no new rewards.

CLOCK · when rounds run

The amber cord. Plug it into 10, 20, 30, 40, 50 or 60: that is the round length in minutes. Rounds are aligned to the UTC clock, so a 10-minute coin pays at :00, :10, :20 and so on.

Short or long rounds

Short rounds feel alive: wallets see SOL arrive every few minutes. Long rounds make bigger, cleaner payouts and lose less to transaction costs. Amounts too small to send carry over to the next round.

NOTEThe little packets running down the amber cord on the panel move faster when the clock is set shorter. It is decoration, not a timer.

GATE · who counts

The red cord sets the minimum hold: ANY, 10 min, 30 min, 1 h, 2 h or 4 h. A wallet earns nothing in a round until it has held that long. With ANY, a wallet counts from its first block.

Selling resets the clock

Any sale or transfer out, partial or full, resets that wallet's holding time and loyalty to 1x. Its unpaid share returns to the pot for the others. Rewards already sent stay paid. Buying more keeps the holding time.

Shares follow token balance, so splitting tokens across wallets never raises what you earn. A wallet that receives tokens starts its holding time at zero.

LOYALTY · weight

The blue cord. BAL means shares follow token balance only. 2X, 3X and 5X turn loyalty on: a wallet's weight is its balance times a multiplier that grows with time held, reaching the ceiling after the time on the MAX AFTER knob (1 to 8 hours).

The curve is a square root, so early hours count most:

multiplier = 1 + (maxX − 1) × √(min(held, ramp) / ramp)
weight     = balance × multiplier
share      = pot × weight / Σ weight
Held5x after 4 h3x after 2 hBAL
0 min1x1x1x
30 min2.41x2x1x
1 h3x2.41x1x
2 h3.83x3x1x
4 h5x3x1x

SPLIT · how much

The green fader sets the holders share of the hook's 2%, from 0 to 100 in steps of 5. The rest goes to the reserve. At 100% the reserve only receives rounding dust; at 0% the hook is a plain fee and holders get nothing, which the panel allows but the recipes never use.

WARNINGThe split is locked at launch together with the rest of the hook. There is no admin key that can move it later.

Describe a hook

Write the rule in plain words, up to 600 characters. The reader maps every phrase it knows to a jack, lists what it did not understand, and lists what has no jack at all, with the nearest setting. Your patch changes only when you press Use this hook.

PhraseSets
hourly · every 20 minCLOCK
hold at least 1 hour · no minimumGATE
by balance · 3x · after 2 hours · loyalLOYALTY and MAX AFTER
90% to holders · 30% to reserve · halfSPLIT
burn · buyback · dev wallet · team · lottery · USDCNo jack. Listed with the reason.
Try it
Press Read it.

Test on sample wallets

The Test step runs the same simulate() the round worker runs, with sample fees and up to eight sample wallets. Each row shows whether the wallet qualifies, its weight and why.

  • A wallet that does not qualify gets no share.
  • If nobody qualifies, the holders part stays in the pot for the next round.
  • Shares are computed in lamports with integer math. Rounding dust goes to the reserve, never to a wallet.
  • A preview is not a transfer. Figures are gross: before network fees and payout minimums.

Recipes and files

A recipe is a named hook. The recipes page holds the official ones and the ones you saved in this browser. Use in workbench loads it into the panel; nothing launches.

RecipeClockGateWeightHolders
Reward loyal holders10 minany5x after 4 h80%
Pay holders hourly60 minanybalance80%
Split fees10 minanybalance50%
No paper hands20 min1 h3x after 3 h85%
Night shift60 min30 min2x after 8 h90%
Patience pays30 min10 min5x after 8 h80%

The Recipe menu exports a patch as a small JSON file and imports one back. A recipe file holds settings only, never keys or coin data:

{
  "jackfield": "0.1.0",
  "name": "No paper hands",
  "hook": { "v": 1, "every": 20, "minHold": 60, "maxX": 3, "ramp": 180, "holders": 85 }
}

Copy share link puts the same thing into a URL (/?h=…), so a patch can travel in a message.

Launch a coin

Launch carries your patch into coin setup: name (32), ticker (10), image (PNG, JPG, GIF or WebP up to 4 MB), optional description, X and site, and an optional first buy. Costs are shown before you sign:

ItemSOL
Rent0.01450
Metadata fee0.01000
Network fee est.0.00009
First buyyour amount, includes the 2.5% trade fee
NOTELaunching opens with $JACKFIELD. Until then the Launch step checks the form and your wallet and keeps the draft in this browser.

How rounds run

A round worker watches every jackfield coin. On each tick of the coin's CLOCK it claims the fees from the pool, rebuilds holdings from the chain, applies GATE and LOYALTY, splits the pot with simulate() and sends SOL to every wallet that earned more than the payout minimum. Smaller amounts carry over.

FieldValue
Sent bythe jackfield round worker
How oftenon the hook's CLOCK
Where to checkthe Payouts page, each row with its transaction
If pausedthe coin keeps trading, fees keep building, payouts resume with the pot intact

Fingerprint

A hook is serialized with fixed key order and hashed with SHA-256. The fingerprint is jf1_ plus the first 16 hex characters. It is written into the coin's metadata, which cannot change, so anyone can check that a coin is paying by the hook it launched with.

import { fingerprint } from "https://jackfield.vercel.app/lib/jackfield.js";
const fp = await fingerprint({ every: 10, minHold: 0, maxX: 5, ramp: 240, holders: 80 });
fp.id;  // "jf1_14ff4d6f13ca442f"

Dry runs and Explore

Explore lists live coins on Meteora's bonding curve and runs your current patch over each coin's real 24 h volume: holder pot per day and per round. Payouts goes further: it takes the last ~300 real trades of a coin, rebuilds who held what, and replays your hook round by round. Every row links the last real trade of that round.

WARNINGA dry run only sees the trades in its window. A wallet that bought before the window is invisible to it, so real rounds pay more wallets than a dry run shows.

jackfield.js

All the math on this site lives in one ES module with no dependencies. The workbench, recipes, explore and payouts pages import it from the same address you can.

import * as jf from "https://jackfield.vercel.app/lib/jackfield.js";

const hook = jf.RECIPES[0].hook;
console.log(jf.describe(hook));
console.log(jf.simulate(hook, 1, [{ balance: 1000, minutes: 0 }, { balance: 1000, minutes: 240 }]));

Node 20+ needs the file saved with an .mjs extension or a "type": "module" package.

API reference

ExportDoes
FEES{ trade: 2.5, meteora: 0.5, hook: 2, creator: 0 }
LIMITSAllowed jacks: every, minHold, maxX, and [min, max, step] for ramp and holders.
DEFAULT, RECIPESThe default hook and the six official recipes.
normalize(h)Snaps any object to the nearest valid hook.
describe(h)One plain sentence.
multiplier(h, min)Loyalty multiplier after min minutes held.
simulate(h, fees, wallets)Splits one round. Returns toHolders, reserve, carry, dust and a row per wallet with eligible, mult, lamports, sol, why.
parse(text, base?)Words → { hook, read, unread, unsupported }.
fingerprint(h)Async. { id: "jf1_…", hex }.
canonical(h)The exact JSON that gets hashed.
encode(h, name) / decode(text)Recipe files.
dryRun(h, trades)Replays trades [{ t, wallet, kind, sol, tokens, tx }] round by round, newest first.
meteoraCoins(page)Live Meteora DBC coins from GeckoTerminal, by 24 h volume.
poolTrades(pool)Last ~300 trades of a pool, shaped for dryRun.
coinByMint(mint)One coin from DexScreener.
perDay(h, vol24Usd)Holder pot per day and per round from a day of volume.

Dry-run a live coin in six lines

import * as jf from "https://jackfield.vercel.app/lib/jackfield.js";
const [coin] = await jf.meteoraCoins();
const trades = await jf.poolTrades(coin.pool);
const rounds = jf.dryRun(jf.DEFAULT, trades);
console.log(coin.symbol, rounds[0].toHolders, "SOL to", rounds[0].wallets, "wallets");
Try it · live

Runs the snippet above in your browser against the busiest Meteora coin right now.

Press Run dry run.

Limits and threat model

RiskWhat stops it
Changing the rules laterThe hook is locked at launch and its fingerprint is in immutable metadata.
Wallet splittingShares follow balance, so ten wallets earn what one wallet would.
Wash trading for rewardsEvery trade pays 2.5%, and at most 1.6% returns to holders as a group. Wash trading loses money.
Snipe, sell, rebuyAny sale resets holding time and loyalty. A sale and rebuy between two rounds still counts as a sale.
Dust payoutsAmounts under the payout minimum carry over instead of being sent.
Worker stopsFees stay in the pool. Payouts resume with the full pot when the worker runs again.

What hooks cannot do: burn supply, buy back, pay a dev or team wallet, pay in anything but SOL, pick random winners. The reader in Describe a hook says so when you ask.

$JACKFIELD

$JACKFIELD is the coin that runs this panel. It launches with the same hook anyone can patch here, no special jacks: rounds every 10 minutes, 80% of the 2% to holders, loyalty up to 5x after 4 hours.

FieldValue
Ticker$JACKFIELD
ChainSolana
Contractsoon
HookReward loyal holders · jf1_14ff4d6f13ca442f

FAQ

Do holders need to claim or stake?

No. Holding the coin in a wallet is enough. SOL arrives every round the wallet qualifies.

Why is my reward zero in the test?

Either the wallet holds no tokens, or it has not passed the GATE yet. The Why column says which.

Can I change a hook after launch?

No. Patch a new one and launch a new coin. That is the point of the fingerprint.

Where do the Explore numbers come from?

GeckoTerminal for Meteora pools and trades, DexScreener for $JACKFIELD once it trades. Nothing is estimated beyond the hook math shown on each card.

Is the reserve a creator fee?

No. Creators get 0%. The reserve funds the round worker and the panel, and catches rounding dust.