How Gemline works
A Gemline coin is a pump.fun coin with one raw trading card sealed inside, and a grade that arrives later from PSA. Everything below is what the code does today.
1. Sealing the card
The creator photographs the card, front and back. The browser re-encodes both photos as JPEG (longest edge 1,600 px), which also removes EXIF data such as the camera and the GPS position. The server pins each photo on IPFS through Pinata and computes its SHA-256 from the exact bytes it pins.
The coin's metadata JSON then carries, under the key gemline: the card's name, set, collector number, year and language, the two photo links with their SHA-256, the grader (PSA) and the reveal date in days (30 to 180). The coin is created with that metadata's address, which pump.fun fixes for good. The front photo is also the coin's image.
2. Launching
- PumpPortal builds the creation transaction (create plus your dev buy).
- Before your wallet sees it, Gemline checks the fee payer is you and refuses any program outside pump.fun, the token programs, Metaplex, the compute budget and PumpPortal's router.
- Your wallet signs, then the mint key made in your browser signs. The transaction is simulated, and refused if it would take more SOL than the review showed.
- The server reads the transaction back from the chain (it succeeded, it created this mint on pump.fun, you paid for it, the metadata has a Gemline seal) before listing the coin.
Gemline never sees a private key. The mint key is created in your browser, signs once and is dropped.
3. The signed steps
Two steps move a coin forward: sent to PSA (once, with an optional note) and cert linked. Each is a plain text message signed by the creator's wallet with signMessage: no transaction, no fee. The message names the action, the coin, the grader, the cert or note, and the time:
Gemline v1 Action: link-cert Coin: <mint> Grader: PSA PSA cert: 12345678 Signed at: 2026-10-20T10:00:00.000Z
The server rebuilds this text from the request and checks the Ed25519 signature against the wallet that paid for the coin's creation. Signatures more than 10 minutes off the server's clock are refused. The signature is stored and shown on the coin.
4. Reading the grade
When a cert is linked, the server asks PSA's public API for it (GetByCertNumber, and GetImagesByCertNumber for the slab scans when PSA has them). The grade shown is PSA's label text, read from PSA, never typed by the creator. If PSA doesn't know the number yet, the coin shows "waiting for PSA" and the server asks again, at most every 6 hours, when someone opens the coin.
Then the cert is compared with the card sealed at launch: the collector number must be equal once normalized ("4/102" and "004" both read as 4), and one word of the card's name must appear in PSA's subject. The result is shown as match, partial or mismatch, with each field. Both descriptions are written by different people, so a partial match is left for you to judge.
5. Rules that keep the reveal honest
- One cert backs one coin. A cert linked to a coin can't be linked to another.
- Once PSA confirms a cert, it's locked to the coin. Before that, the creator can replace it (a typo); every replaced number stays listed.
- "Sent to PSA" can be signed once.
- Past the reveal date with no confirmed cert, the coin is marked "past the reveal date" everywhere it shows.
6. Verify
On every coin, Verify downloads both photos from IPFS in your browser and recomputes their SHA-256, then compares them with the hashes sealed in the metadata. The metadata JSON is linked so you can read the hashes yourself, and pump.fun shows the same metadata. Every grade links to PSA's own cert page.
What nobody can check
- That the slab holds the very copy of the card in the photos, and not another copy of the same card. Number and name can match for both.
- That the creator sends the card to PSA at all, or links the cert by the reveal date. That is the creator's word.
- That PSA's grade is right. Gemline shows PSA's result as PSA publishes it.
- Anything about the coin's price. The card isn't sold, shared or redeemable; holders get no right to it.
Who enforces what
The photos and card details can't change after launch
Enforced on-chain by pump.fun's metadataTheir IPFS links and SHA-256 are in the metadata the coin is created with. pump.fun fixes it; Verify recomputes the hashes in your browser.
The grade shown is PSA's
Read from PSARead from PSA's public cert API, never typed by the creator. Each grade links to PSA's cert page so you can check it there.
Only the creator's wallet moves the coin's stages
Tracked by Gemline, verifiableEach step is a message signed by the wallet that paid for the coin's creation, checked on the server and shown with its signature. Signatures older than 10 minutes are refused.
One cert, one coin. No swap once PSA confirms
Tracked by Gemline, verifiableA cert linked to a coin can't be linked to another. A cert can be replaced only while PSA hasn't confirmed it (a typo), and every replaced number stays listed.
The slab holds the card that was sealed
Tracked by Gemline, verifiableGemline compares PSA's card number and name with the card sealed at launch and shows match, partial or mismatch. It can't see the card itself: another copy of the same card would pass.
The card is sent to PSA, and the cert linked by the reveal date
Creator's wordThe creator's word. The date (30 to 180 days) is fixed at launch and the coin is marked "past the reveal date" when it passes.
Holders get the card, or anything from it
NobodyNo. The card belongs to the creator. The coin is a memecoin about its grade; it gives no right to the card, a sale, or any money.
Fees
Creating a coin
No creation fee from PumpPortal. pump.fun's trading fee applies to the dev buy.
pump.fun
PumpPortal
0.5% of the dev buy, taken by PumpPortal's router in the creation transaction.
PumpPortal
Network
Solana fees and rent for the new accounts (about 0.02 SOL), plus the priority fee you choose.
Solana
Stages and reveal
Free. Each step is a wallet signature, not a transaction.
Gemline
Grading
Paid by the creator to PSA, outside Gemline, at PSA's prices.
PSA
Gemline
Nothing. No fee on launches, no share of your creator fees.
Gemline
For bots and dashboards
GET /api/coins lists coins launched here with their grade state. GET /api/grade/<mint> returns one coin's grade state.