Gemline

Connect a wallet

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

  1. PumpPortal builds the creation transaction (create plus your dev buy).
  2. 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.
  3. 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.
  4. 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

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

Who enforces what

  • The photos and card details can't change after launch

    Enforced on-chain by pump.fun's metadata

    Their 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 PSA

    Read 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, verifiable

    Each 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, verifiable

    A 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, verifiable

    Gemline 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 word

    The 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

    Nobody

    No. 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.