Tony Wong /Projects

14 June 2022

Market Making JPEGs

·
720
NFTs flipped
84%
Win rate
+22%
Median return
8.0
Sharpe ratio

01 — Summary

The Strangest Market in the World

In late 2021, monkey pictures traded like penny stocks. New NFT collections launched every day, prices could swing 50% in an afternoon, and a cartoon ape with laser eyes might sell for more than an apartment. To most people, it looked like a casino.

I had just started at a crypto HFT firm, and looking at that chaos, I kept coming back to one question: What is this actually worth? If you can answer that question, even roughly, you may have an edge in a market where most people are pricing on vibes.

We built the boring half of the casino: a pricing engine that tried to estimate the value of every NFT in a collection, and a trading system that automatically bought anything listed far enough below that estimate, within seconds, around the clock. This is the story of how it worked, told through the only part that really mattered:

How do you price a JPEG?

02 — Background

What's an NFT?

An NFT is, in essence, not very different from other crypto tokens. The main distinction is that NFTs are issued under a standard such as ERC-721, which makes each token a unique, non-fungible, one-of-a-kind item. These tokens connect to different images because each token points to a small metadata file, and that file contains information such as the NFT's traits, attributes, and associated image.

An NFT collection is simply a group of these tokens. Many collections contain around 10,000 items, though the number varies. Within a collection, traits are often what matter most to buyers. Each trait appears at a different frequency, so some are common while others are relatively rare.

Here we take an example from the Bored Ape Yacht Club, token id 3749

This is the data linked to the token stored on Ethereum.

{
  "image": "ipfs://QmQpxqZ6hPnx8ofapPVgbg9JAh7S9oh3fNYvWwU7okdCU8",
  "attributes": [
    {
      "trait_type": "Mouth",
      "value": "Small Grin"
    },
    {
      "trait_type": "Hat",
      "value": "Sea Captain's Hat"
    },
    {
      "trait_type": "Eyes",
      "value": "Laser Eyes"
    },
    {
      "trait_type": "Clothes",
      "value": "Black T"
    },
    {
      "trait_type": "Background",
      "value": "Yellow"
    },
    {
      "trait_type": "Fur",
      "value": "Solid Gold"
    }
  ]
}

Lifecycle of an NFT collection

  1. 1
    Create
    The project generates the art and metadata for every piece and uploads them to the blockchain.
  2. 2
    Mint
    The collection opens to the public; buyers pay a fee to mint a random token, and the art is revealed once minting closes.
  3. 3
    Marketplace
    Owners list their tokens for sale on the chain's major marketplaces.
  4. 4
    Price discovery
    As trading picks up, the market decides which traits deserve a premium, and prices begin to diverge.

Most of the blue-chip NFTs lived on Ethereum, and that's where the whole thing began. Back in June 2017, two developers at Larva Labs released CryptoPunks: 10,000 pixel-art portraits, built almost as an experiment and claimable for free. It predated ERC-721, the standard that would later give every NFT on Ethereum a common format, and effectively created the template every project after it would copy. Four years on, the Bored Ape Yacht Club turned that template into a cultural phenomenon. A wave of projects followed, and a handful of names came to define the era:

CryptoPunks

CryptoPunks

Chain
Ethereum
Launched
Jun 2017
Supply
10,000

One of the first Ethereum NFT projects and an inspiration for the ERC-721 token standard. 10,000 algorithmically generated pixel characters, originally claimed for free in 2017, that became the template for profile-picture collecting and the ultimate blue-chip status symbol.

A few of the blue-chip collections that defined the 2021–2022 NFT boom.

Where NFTs live

NFTs were never only an Ethereum story. They also became a kind of onchain identity, as communities formed around specific ecosystems and each blockchain developed collections that felt native to its own culture. Faster and cheaper chains became more attractive because they reduced the cost and friction of minting and trading, helping drive the rise of Solana's NFT scene. At the same time, flagship applications made these ecosystems more vibrant, most notably NBA Top Shot on Flow and Axie Infinity on Ronin, the Ethereum-linked sidechain created for that game. Roughly how the major venues compared:

Chain Marketplaces Chain characteristics
Ethereum OpenSea, LooksRare, Blur ~12s blocks · ~$10–30 gas per NFT trade in 2021, over $100 at peak
Solana Magic Eden, Solanart Sub-second blocks · gas under a cent
Flow NBA Top Shot Purpose-built consumer chain for NBA Top Shot · no crypto wallet needed
Ronin Axie Marketplace Purpose-built sidechain for Axie Infinity · near-zero gas

At the centre of the crypto hype in 2021, the surge in NFT demand kept Ethereum heavily congested. Congestion was costly: every purchase and sale competed in Ethereum's gas market, with fees during peak periods often climbing into the hundreds of dollars.

From a trading perspective, participating in this market would have meant sending many transactions just to win a single underpriced listing. On Ethereum, paying $50 to $200 in gas for every attempt would have made even testing the strategy prohibitively expensive, and in many cases could have wiped out any profit before it was realized. Solana offered a far better starting point: near-zero fees, sub-second block times, and a constant stream of new collections launching every day. That's how we started on Solana.

03 — The Pricing Engine

How to Price an NFT?

From CryptoPunks and Bored Apes to DeGods and Mad Lads, every NFT collection shares the same basic structure: each piece is assembled from a set of traits, some common, some rare, and that mix is what makes one token worth more than another. So when you value an NFT, one number matters more than any other: Rarity. That is where the pricing engine starts. It reads each token's trait metadata and turns it into a rarity score, which lets us rank the whole collection from most to least rare. We then price that ranking against real market data, the current listings and recent sales, to get a sense of what each rank should trade for. Some traits are more appealing and worth more than others, so we nudge the result to match the market. Finally we compute our trigger price after fees and required edge. What comes out the other side is a roughly right number: a sensible price for every token in the collection.

Let's walk through an example with the Bored Ape Yacht Club. We grab the data from the real 10,000-ape collection and see how the engine turns a single ape into a fair value.

  1. 01
    Rank
    Score every token by rarity
  2. 02
    Price
    Map the score onto market data
  3. 03
    Nudge
    Move prices to match the market
  4. 04
    Trigger
    Apply fees, and ask for more edge

The pipeline of our pricing engine.

1 · Rank — rarity is a choice, not a fact

Coming up with a rarity score is not the hard part. The catch is that there is no single standard: the public uses several, and they can disagree by a lot. The three most common are the trait-sum score, statistical rarity, and the rarity.tools score.

Trait-sum score

score = Σ (collection size ÷ trait count)

Add up how rare each trait is. This score emphasizes specific rare traits: one very rare trait can lift a token to the top.

Statistical rarity

score = log [ 1 ÷ Π (trait probability) ]

Multiply the odds of every trait, the way you'd price a poker hand. This score emphasizes all-around rarity: a token that is rare across many traits at once rises to the top.

rarity.tools score

score = Σ [ (collection size ÷ trait count) ÷ category values ]

The same additive idea as trait-sum, but each trait category is scaled so no single category can dominate the total. This is the score used by rarity.tools, a popular NFT rarity ranking site, standard to use if the collection is listed here.

Custom ranking

score = the project's official list

Some teams publish their own ranking, usually only on their website. When they do, the market trades on it.

Different formulas can produce very different results, because each one weighs traits in its own way. The trait-sum score leans on a single standout trait, while statistical rarity rewards being rare across many traits at once. The example below runs all three on the Bored Ape Yacht Club: watch how the same ape can land at a wildly different rank just because the formula changed.

Top 20 leaderboard

Score = Σ (10,000 ÷ trait count)

RankRarity score

Rarity score

BAYC #8135

BAYC #8135

+357
+154
+78.1
+45.5
+12.2
+8.1
+8.0
+5.3
  1. Background Army Green1243/10k
  2. Clothes Hip Hop128/10k
  3. Earring Silver Stud823/10k
  4. Eyes Hypnotized220/10k
  5. Fur Black1229/10k
  6. Hat Trippy Captain's Hat65/10k
  7. Mouth Bored Unshaven Dagger28/10k
  8. Trait count 7 of 71883/10k

Highlights NFTs with one specific, very rare trait.

Trait-sum#1

score 668

Statistical#6

score 11.92

rarity.tools#7

score 317

Same ape, a 6-place spread across formulas.

So which formula should we use? It depends. In a market priced by belief, the right formula is whichever one the crowd ends up using. We apply the score most retail traders are likely to reach for, weighing:

  • which rarity sites are popular for the collection, since different sites and different chains may use different formulas;
  • which formula best fits where the collection's recent trades have landed;
  • whatever the project itself has endorsed, if it has published an official ranking.

Trading on the wrong ranking can get expensive, and we learned that the hard way. The lesson: your model isn't the truth, it's only a forecast of what the market will believe.

2 · Price — let past trades price each rank

A ranking only tells you that one ape is rarer than another. It doesn't tell you what either is worth. Another useful input for pricing is market data: the current listings, the floor price, and above all the recent trades.

Let's plot our rarity score against each and see what they tell us.

Live listings vs rarity

Listings land all over the chart: a seller can ask whatever they like.

The live listings really scatter everywhere. That's understandable: a seller can ask whatever they like, so there is no clean shape here. Look closely at the denser dots near the bottom, though, and you can make out a faint upward drift.

Now let's see how the rarity score lines up against past trades instead.

Last trades vs rarity

Last trades show a clearer pattern, since they reflect real demand from the market.

It shows a pattern: prices sit near the floor through most of the collection, then turn sharply upward in the rare tail. That is the insight we are interested in.

We turn each token's score into a percentile, group the collection into a handful of rarity buckets, and read off the recent trades to answer one question per bucket:

How much premium over the floor does this band deserve?

Percentile Band Where recent trades land Premium
30th0–30thRight at the floor, ~10 ETH+0
50th30–50thNo real change, ~10 ETH+0
70th50–70thStill hugging the floor, ~10 ETH+0
85th70–85thThe trend starts to lift, 10–15 ETH+2.5
95th85–95thClearly above the floor now, 15–25 ETH+5
99th95–99thA steep premium, 25–35 ETH+10
100th99th+The trophy tokens, 40+ ETH+30

We pin those steps to the buckets and draw straight lines between them. That is the first draft of our theoretical price (theo).

Now let's lay that theo back over the data and see if it is legitimate.

Pricing curve vs the market

The first draft of our theo.

As you can see, the theo is not trying to price every token exactly. Instead it works out the right floor for each token given its rarity percentile. The premiums are deliberately not a tight fit to the market either: we keep them wider on purpose, which asks for a bigger margin of safety and more edge on every buy. We may trade less volume that way, but our risk is lower too.

With this pricing curve in hand, we can now spot the mispriced opportunities in the market.

Spotting mispriced listings

After fitting the pricing curve, listings that sit meaningfully below it become candidates for a potentially attractive buy.

3 · Nudge — the rarest token isn't always the most wanted

Our theo gives us a solid baseline, but the whole thing rests on one assumption: that rarer means more valuable. Most of the time it holds. Sometimes it breaks, because some traits are simply more appealing to buyers. Bored Apes is the canonical example. The two rarest traits in the collection, Bored Unshaven Pizza (26 out of 10,000) and Bored Unshaven Dagger (28 out of 10,000), are never among the most expensive sales. Instead, the top of the market belongs to Solid Gold fur (46 out of 10,000) and Blue Beams (49 out of 10,000). They are simply better looking and more appealing to the general public.

Thus we need to price this into our system. Look at the order book and it is easy to see: Solid Gold has a much higher listing floor and sells far above its rarity-band peers. In this case, we bump every gold-fur token up to meet it.

The Gold Fur Premium

We add +20 Ξ to every gold-fur token since gold-fur trades cluster around 40 Ξ, so this lifts their theo to where they actually sell. With the curve in the right place, we can spot the mispriced gold apes and lock in those opportunities.

4 · Trigger — our final price to the market

Before we start shopping the market, two things to keep in mind: fees and edge. Start with the fees.

Fees

Every NFT trade carries three kinds of cost. The marketplace fee is the venue's cut of the sale. The royalty is a percentage paid to the collection's creator on every resale, set by the project, not the venue. And gas is the network fee to settle the trade on-chain.

Marketplace fee

Marketplace Chain Fee
OpenSea Ethereum 2.5%
LooksRare Ethereum 2.0%
Magic Eden Solana 2.0%
Solanart Solana 3.0%

Royalties

Collection Chain Royalties
CryptoPunks Ethereum 0%
Bored Ape Yacht Club Ethereum 2.5%
Pudgy Penguins Ethereum 5%
Doodles Ethereum 5%
Degen Ape Academy Solana 10%
DeGods Solana 9.99%
Okay Bears Solana 7.5%
Monkey Kingdom Solana 10%

Gas Fee

Chain Fee
Ethereum $50 to $100
Gas on Ethereum is an auction, a mispriced NFT can set off a gas-fee bidding war. I once watched a single buy pay 15 ETH in gas. That auction dynamic is the tricky part of trading on Ethereum.
Solana Under $0.001
A fixed fraction of a cent, first come first served.

Adding up all these fees, the cost of trading can easily run over 10%, and gas can eat in even further. A snipe needs a big enough discount to clear all of it before we are confident enough to trigger.

Edge

After learning all the costs, the edge is how much we ask for to make a trade worth it. It answers one question: how far below fair value, after costs, would we buy? In other words, our expected profit.

If it were set to zero, every fill would be a coin flip. We could be left holding the token (opportunity cost), and the floor might fall before we resold it (price risk), turning a flat trade into a loss. So we always demand positive edge, and more of it as rarity climbs: a rarer piece ties up more capital, takes longer to resell, and its theo is more opinion than fact, so each trade needs more conviction:

Rarity bucket Edge required
Common · up to 70th pctile 15%
Trading at the floor, the most liquid zone.
85th percentile 20%
Starting to lift off the floor, fewer comparable sales to anchor the theo.
95th percentile 25%
Starting to get more expensive, longer exit and less liquidity.
99th percentile 30%
Ties up a large amount of capital, requires more conviction.
99.5th and above 40%
Grails. Ties up the most capital, requires the most conviction.

Let's put it together on a common Bored Ape sitting on the floor at 10 ETH. How low would a listing have to drop before the system triggers a buy?

trigger price = theo × (1 − fees) / (1 + edge)

theo
10 ETH

50th percentile fair price

fees
5%

2.5% marketplace + 2.5% royalty

edge
15%

common bucket, up to 70th pctile

10 × (1 − 5%) / (1 + 15%)

= 8.3 ETH

04 — The Trading System

From Listing to Buy in Seconds

We now have a good grasp on what an NFT is worth. Knowing the price, though, is only half the job: acting on it by hand does not scale. New listings land every second, across several marketplaces, at every hour of the day, and an underpriced one is usually gone before a person could even open it. We invested in a system to do the watching and the buying for us. It pipes the latest transactions straight off the blockchain, scores every new listing against the pricing engine, and the instant one clears its edge bar, fires a buy transaction back to the chain.

Blockchain Solana · Ethereum Position Keep track of the current holdings Market Data Decode the latest transactions from OpenSea, Magic Eden, Solanart Strategy Prices each listing, decides whether to buy Execution Manage and optimize order execution Controller Control panel for traders to set parameters Database · Stores the system's data: params, trades, current listings, positions Alerts · Real-time Telegram alerts pushed by every service Transactions Signed Transaction buy
The architecture overview of the trading system.

Market Data, Strategy and Execution are the three core components. Every trade, from a fresh listing to a filled buy, flows through them:

  1. 1

    Market Data

    • Decodes every new listing and sale from the marketplaces, surfacing each one for opportunity evaluation.
    • Keeps the listing data current, an accurate live book and floor price for Strategy to price against.
  2. 2

    Strategy

    • The pricing engine described earlier: scores each listing against its theo and fires a buy once it clears the threshold.
    • Recomputes the theo for every new movement in the market.
    • Risk evaluation, including retreats and position caps.
  3. 3

    Execution

    • Builds, signs and sends the order on-chain through the marketplace.
    • For opportunity sniping, fires aggressively to maximize the odds of winning the fill.

The system works differently on each chain, because the Solana and Ethereum marketplaces run on very different designs and trading logic, shaped by the chains underneath: gas cost, transaction ordering, block speed, and more.

Solana

On Solana we decode the chain transaction by transaction. A listing here is itself an on-chain transaction: it moves the NFT into the marketplace's escrow with the price baked into the instruction, so it exists on-chain the instant it is made. As long as we listen to the incoming transactions on each marketplace's smart contract, we have a live, complete picture of the market.

Sniping an opportunity is just sending a transaction, and with near-zero gas and no public mempool or gas auction to bid into, there is nothing to outbid. So we brute-force it, firing many transactions in parallel to maximise the chance that one lands.

Pros

  • Listings are equal for everyone, anyone with access to the blockchain sees them at the same speed we do.
  • Solana is first-come-first-served, execution is simpler.
  • Easy to reconcile, every transaction lives on-chain to look back on.

Cons

  • The decoding is a slog, no libraries in 2021 and the marketplaces never publicised their smart contracts.
  • Brittle to maintain, any change to a transaction type means reworking the decoder.

Ethereum

Ethereum is almost the opposite. OpenSea was the near-monopoly venue, and it ran on API access rather than on-chain transactions, a listing never touches the chain. To list, a seller pre-signs a message ("sell #123 for 10 ETH") that OpenSea keeps in its own database, with no transaction and no gas, a design forced by Ethereum's $50 to $200 gas. A transaction only fires once someone agrees to buy. That makes the API key the golden ticket: it was not publicly available back then, had to request access for one and heavily rate limited. Thus there was a market for OpenSea API keys, one would need 5+ keys to trade OpenSea algorithmically, there's a real demand for that.

Execution is two steps, the API and then a gas auction. We first fetch the seller's signed order from the API, then submit an on-chain transaction to fulfil it. The gas auction is the other competitive layer on Ethereum: bidding the right fee can make a material difference to the edge we end up with. All in, Ethereum execution is more challenging, a speed-and-gas game, where Solana is first-come-first-served.

Pros

  • No decoding work, just follow the API docs to get everything we need.
  • Privileged at scale, with many API keys and good rate limits we could pull far more than a normal user.

Cons

  • Hard to get a key, and access is gated rather than open to anyone on-chain.
  • Rate limits are aggressive, so it takes constant workarounds to pull all the data without getting throttled.
  • Extra work to optimise the gas auction, otherwise the fee eats your edge easily.

05 — Results

Flipping NFTs

We put the system into production in early 2022, on Solana first, right as the NFT hype was cresting. It worked. Across 707 flips, 84% closed in profit, with the median flip returning 22% on a one-day hold, which annualizes to about 80x.

That track record gave us the confidence to expand to Ethereum. Ethereum was the far bigger market, more volume and more collections, but also harder to trade. It took on more risk in general: gas was an expensive variable next to Solana ($50 vs $0.001), and the average piece cost an order of magnitude more (100 ◎, ~$10k vs 30 Ξ, ~$100k).

Even against that friction, the edge carried over. The Ethereum book was smaller and started later, but it flipped at a similar hit rate and finished ahead in ETH.

Realized P&L

P&L

+603

$57,121

Win rate

84%

591 winners out of 707 flips

Median return

+22%

per flip

Median hold

0.67d

per flip

Sharpe

8

Sortino 86.9

Volume

5,689

$553k · 249 collections

Cumulative realized P&L

Rarity and Return

winlossbucket medianall flips median
rarity buckets:Commonbottom 70%Uncommon70-90thRare90-99thGrailtop 1%

Grouped by rarity, the rarer buckets return more, which matches the edge we price for. But volume falls as rarity climbs. The goal is striking the right balance between volume and edge.

Trade History

TokenBoughtSoldP&L
Collection / Token
Rarity
Date
Date
Hold
$
ROI
Baby Ape Tiger Club
#4770
Uncommon · 73rd9 Jun 220.4214 Jun 220.564.7d+0.14+$0+33%
Magnum
#1272
Rare · 93rd7 Jun 221.4413 Jun 221.686.5d+0.24$9+17%
LabMonke
#2549
Rare · 94th6 Jun 220.2811 Jun 220.334.6d+0.05$1+16%
Cynova Legacy
#1750
Rare · 91st9 Jun 220.8011 Jun 221.081.8d+0.28+$5+35%
Baby Ape Tiger Club
#678
Common · 7th7 Jun 220.5010 Jun 220.563.3d+0.06+$1+12%
Cynova Legacy
#3505
Uncommon · 89th9 Jun 220.8410 Jun 220.980.9d+0.14+$3+17%
Neopet
#4193
Common · 37th4 Jun 221.009 Jun 221.114.6d+0.11+$5+11%
Ganja Gators
#4743
Uncommon · 81st7 Jun 221.509 Jun 222.681.9d+1.18+$48+79%
Ganja Gators
#3796
Uncommon · 87th8 Jun 222.789 Jun 223.531.3d+0.75+$33+27%
Baby Ape Social Club
#4197
Common · 61st9 Jun 223.699 Jun 224.560.2d+0.87+$35+24%
Meerkat
#1708
Common · 22nd9 Jun 221.509 Jun 221.660.0d+0.16+$6+11%
Bunnies N Homies
#2360
Grail · 100th5 Jun 226.008 Jun 227.553.0d+1.55+$62+26%
Cynova Legacy
#1840
Uncommon · 75th7 Jun 220.558 Jun 220.630.0d+0.08+$3+14%
LabMonke
#4220
Rare · 93rd8 Jun 220.218 Jun 220.270.0d+0.06+$2+26%
LabMonke
#206
Common · 69th8 Jun 220.158 Jun 220.180.1d+0.03+$1+17%
Capsule X
#1713
Uncommon · 84th1 Jun 222.467 Jun 224.055.9d+1.58+$60+64%
Bunnies N Homies
#3109
Grail · 100th3 Jun 226.007 Jun 228.173.2d+2.17+$91+36%
Ganja Gators
#2616
Uncommon · 74th7 Jun 221.007 Jun 221.130.5d+0.12+$5+12%
Cardboard Citizens
#651
Rare · 94th7 Jun 224.007 Jun 224.920.0d+0.92+$36+23%
Magnum
#1999
Uncommon · 73rd4 Jun 221.606 Jun 221.802.3d+0.20+$14+12%
Cynova Legacy
#3076
Uncommon · 77th6 Jun 220.706 Jun 220.790.3d+0.09+$4+13%
GG
Ganja Gators
#217
Uncommon · 90th5 Jun 222.205 Jun 223.080.6d+0.88+$34+40%
Moshiheads
#2937
Common · 29th5 Jun 220.655 Jun 220.720.0d+0.07+$3+11%
TENJIN
#1491
Uncommon · 84th4 Jun 221.164 Jun 221.420.1d+0.26+$10+23%
Bunnies N Homies
#4583
Uncommon · 78th4 Jun 222.554 Jun 222.910.0d+0.36+$14+14%
Bunnies N Homies
#1414
Uncommon · 83rd4 Jun 222.154 Jun 222.410.1d+0.26+$10+12%
MO
Moshiheads
#2504
Uncommon · 89th4 Jun 220.904 Jun 221.030.0d+0.13+$5+15%
Slot Zombie
#1332
Common · 15th17 May 220.063 Jun 220.0917.1d+0.03+$0+50%
Capsule X
#317
Common · 0th29 May 2215.002 Jun 2216.254.0d+1.24$11+8%
Total · 707 trades
net +603 net +$57,121ROI +24%

06 — Conclusion

What Survived the JPEGs

BAYC prints another all-time high, floor past 100 ETH.

Sotheby's holds a night sale for NFTs; an Alien CryptoPunk goes for $11.8M.

Gas on a single Otherside mint runs over $1000, more than $170M burned in fees.

We were trading through the top, though you never know that while it's happening. It didn't last long, and not much after was kind to crypto. Terra collapsed in May 2022 and erased tens of billions in a week. FTX collapsed that November, trapping billions more. NFT volume drifted down fast, and the market slid into a different era: marketplaces fighting each other just to survive the bear. I moved on to other opportunities not long after.

Most of the NFTs didn't survive. Many of the collections we traded now change hands near zero, and even OpenSea, once effectively a monopoly, is fighting to stay relevant. Still, it was a genuinely interesting run, we built one of the more unusual strategies around at the time. The ideas and the lessons have survived, and they made me a better trader. Everything I've traded since has been a version of the same problem:

  1. The worse a market is at pricing itself, the more it pays someone who can.
  2. Reason from first principles when pricing something unknown: find the fundamentals everyone agrees on.
  3. 80% of success is showing up: roughly right and early beats precisely right and late.

Notes

Notes & Disclosures

  • The pricing figures are illustrative. The BAYC collection in the pricing figures is procedurally generated for this article; its sales and listings are referenced to real trading data, and are scored, bucketed and priced by the same formulas the production system used.
  • The trades are real, and on-chain-verified. The Results figures are reconstructed directly from Solana and Ethereum, across the desk's wallets, pulled and matched from the chain.
  • Rarity and images come from the chain. Rarity ranks are computed from each collection's full on-chain trait table. The NFT images shown are the public on-chain artwork; some may no longer load, their links broken by burned tokens or dead marketplaces.
  • Nothing here is investment advice, least of all about JPEGs.