In November 2015 I issued several trading cards on XCP.
These are among the oldest blockchain cards in existence, and quite possibly the first ever set of immutable ones.
The first three cards (GENET, GRAYWOLF and LOCHNESS) have all the essential properties defined in 2015.
- Asset issued with 100 indivisible tokens in 2015*.
- Text description mentioning trading card, unchanged from 2015.
- Onchain hash from November 2015 proving their design.
The other cards have some properties set recently.
- For WILDDOG the hashing transaction did not go through, so it has no onchain proof before 2022.
- After I notarized WOLVERINE in 2015, I discovered the name was already reserved. In 2022 I was able to buy the asset and issue 300 tokens.
- CHURCHHILL was a test notarization back in 2015 but I didn’t bother registering the asset back then. In 2021 it was still available, and I issued 100 tokens.
All cards, except CHURCHHILL, use CC licensed designs from the Weird n’ Wild directory.
Initially I did not promote or announce the cards. After they were discovered in 2021, I locked the token supply from further issuance and made my first sales from a dispenser.
In late 2015 I worked on a project, XCP CARDS, which aimed to be a crypto trading card directory.
An essential part of the project was to notarize all cards, meaning engraving hash proofs inside Bitcoin transactions.
The address 1CRDzy made 37 on-chain broadcasts with sha256 hashes of card images. The first 26 were Spells of Genesis (SoG) cards. For each card I made a broadcast like
xcpcards.com/FDCARD qFEfPw9v where
qFEfPw9v was the base64 representation of the image hash, truncated at 8 characters (48 bits).
This solved what I considered to be a problem; card designs had no blockchain references. By embedding a card’s image hash in a Bitcoin transaction the image would be timestamped and remain forever indisputable – how all crypto cards should be!
Of course, this was unofficial. I was not associated with Spells of Genesis. But I did create cryptographic proofs of the designs existing at the time, and I did show which images I, as a fan, considered to represent those tokens.
The first card I attempted to notarize was CLEFCARD. Unfortunately the hashing algorithm was wrong. The first successful notarization was CNPCARD. I then went on and did FDCARD, GEMZCARD, GOXCARD, BAZAARCARD, ETHXCPCARD, LTBCARD, MINERCARD, RIPPLECARD, SHUMAICARD, SJCXCARD, SWARMCD, XAJIBESAAR, XCPCARD, ZAIFCARD, BEARWHALECD, BLOCKSIZECD, ETHEREUMCARD, GENESISCARD, SATOSHICARD, SHAPESHIFTCD, XAJIARKETAAR, XAJIBASILAAR, XAJIJASPAAR and XAJIYEREMAAR. Puffhh… a lot of manual work!
The following five broadcasts were tests, e.g.
xcpcards.com/TEST aA+AaZz12. When I rediscovered this, I initially thought I had accidentally NFT’ized the asset TEST – but no, these were dummy hashes not representing any real image file.
The CHURCHHILL Card
The next broadcast tested the website’s upload algorithm. I used a random image. It was an image of Winston Churchill holding a Tommy Gun. For whatever reason the filename had a typo in it. When I discovered this in 2021 I noticed the CHURCHHILL name was still available, and I issued 100 tokens under this name. I leave it to the community to decide on CHURCHHILL’s timestamp. Is it a 2015 artifact or yet another 2021 wannabe vintage NFT?
Weird & Wild Creatures
Finally I uploaded four trading cards from a wiki with a CC license. First up was WOLVERINE whose name had already been claimed by Xchain’s J-Dog. The following three were LOCHNESS, GRAYWOLF and GENET. I simultaneously registered (back then in 2015) the names with 100 tokens each and description ‘TRADING CARD’.
Before I got any further a Counterparty Development Contest was announced. It was a 10 week hackathon with a first prize of 6000 XCP. I decided to switch all focus on this, My project was a wallet / toolbox.
Here’s a special SoG edition of the wallet I made for the contest:
I ended up winning the contest – which today gives a bittersweet feeling as it took my focus away from the XCP Cards project.
Anyway, the project did lead to the immortalization of several SoG cards and some of the first immutable 1/N NFTs. Not too bad.
The First Crypto Trading Cards
There are no known tokens before FDCARD (March 2015) that claim to represent a trading card. Not on Counterparty and not on any other platform.
Apart from dozens more SoG cards issued, several empty name registrations hinting at trading cards were made in 2015. Less than ten of them possibly were real cards with a design but I cannot connect any of them to an image – only broken json links without offchain or onchain evidence.
I believe the Weird n’ Wild cards are the only surviving trading cards from 2015 apart from SoG.
Sure, empty registrations may have images added now but they will only be partially rooted in 2015. The design’s timestamp will be new. This includes some of my own empty 2015 assets like FRANKLIN (BENJAMIN FRANKLIN CARD) and CHAVEZ (HUGO CHAVEZ CARD * FOR EXPROPRIATION *).
I have left a database dump at the bottom of this article so you do your own research.
Note: The idea of crypto trading cards dates back to 1993. By no other than Hal Finney himself.
How to Verify the Images
“Don’t trust, verify” is a mantra in the crypto movement. Here is how you can verify the GENET card. The process is the same for all Weird n’ Wild cards (as well as the SOG cards I also notarized).
- Check GENET’s issuance history on Xchain. Click on the oldest issuance and you’ll see that
GENET TRADING CARDis the description with timestamp 2015-11-24. This proves the intent, but for image verification you need to dig a bit deeper.
- Search for GENET on Xchain and click the broadcast tab.
- The message
xcpcards.com/genet JTh/QRy2is fully onchain, meaning it is engraved inside a bitcoin transaction. For redundant proofs, check out my XCP Decoder and Timeline, and notice the timestamp; 2015-11-26.
- Open the URL
xcpcards.com/genetand right-click-save the image.
- Get the file’s sha256 hash, eg with SHA256 File Checksum.
- Convert the hash from hex to base64.
That’s it! Now you have what it takes to verify the image.
- The text
xcpcards.com/genet JTh/QRy2is onchain with a 2015 timestamp.
- The keys
JTh/QRy2links the asset to the image.
Now you may ask why the hash value is so short.
Shortening a hash is perfectly fine – unless by too much. I used a short hash as a tradeoff between strength and having the text fit Bitcoin’s 80 byte op_return encoding.
At eight base64 characters the hash is 48 bits strong. There are
64^8 = 2^48 = 2.81e14 = 281 trillion possible hashes. In other words, two random images have a infinitesimal 1 in 281 trillion chance of ending up with the same hash.
In theory someone who, for whatever reason, wants to make a collision could use brute force computing. This means his computer generates images with random variations until one comes up with the exact same
I tested the speed of brute forcing in python on a CPU:
The computer can hash the image 1000 times over per second. To find a collision it needs to first randomly modify the image, however, and then hash it. This drastically reduced the speed to <200 hashes/sec.
A speed of 200/sec equates to around 6 billion per year. In other words, you have less than a 0.01% chance of finding a match in one year.
If you really want to, and invest significant resources, you can run several computers in parallel or even optimize the algorithm for GPUs. However, even at a 1000x increase in hashing speed, the chance of finding a collision is only around 2% per year.
I concluded it would be an honor if someone did try. Spending such big resources for what? A second matching image would be little more than a nice talking point.
Full Node Verification
A great strength of Counterparty is that everything is derived from Bitcoin. You don’t need to trust Xchain.
If you really want the strongest possible verification you can run your own node. Follow the Running a Node guide to set up a Bitcoin node with the Counterparty extension.
It will download the Bitcoin blockchain, and then parse all transaction to build the Counterparty DB.
The database can be opened with the DB Browser for SQLite.
issuances table and filter by
description. You’ll easily enough find the trading cards linked to underlying Bitcoin
Similarly, you’ll find the hashes in the
For further evidence, I made available a zip file with the screenshots from Wayback Machine, Counterpartytalk and other relevant content.
List of “Card” Assets
This is a dump of asset issuances mentioning card either as part of the name or description. As you can see already in the first entries, most results are false positives.
Here’s the exact SQL search command:
SELECT asset, quantity, divisible, description FROM issuances WHERE ((' ' || description || ' ') LIKE '% card %' OR (' ' || description || ' ') LIKE '% cards %' OR asset LIKE '%card') AND quantity > 0
Most results are empty name registrations. Since XCP has a unique name system, it’s common to reserve a name, hoping to resell it later to someone who wants to issue tokens under said name. Such registrations are often made with an arbitrary amount of tokens initially, although the best practice is zero tokens.
Apart from SoG, I could only find a few cards pre Weird n’ Wild that I believe contained designs at the time. None of these seem to have sources linking them to their respective designs – at least I cannot find any.
A few empty registrations from 2015 do have designs, but these were added recently. Such cards include NAKAMOTOCARD (not to be confused with RAREPEPE from 2016), MTGOXCARD, and a handful others.
Since this list only shows assets mentioning card, it cannot be ruled out that some unknown cards do exist – without the keyword card.
|8||VCARD||1||0||BUSINESS CARD TOKEN|
|9||MYCARD||1||0||MY BUSINESS CARD TOKEN|
|10||BUSINESSCARD||1||0||BUSINESS CARD TOKEN|
|11||BIZCARD||1||0||BUSINESS CARD TOKEN|
|12||CALLINGCARD||1||0||CALLING CARD TOKEN|
|13||FDCARD||30,000,000,000||1||Spells of Genesis/Moonga card for FLDC|
|14||GETS||1||0||SEC GETS CARD|
|15||GETSCARD||100,000,000||1||SEC GETS CARD|
|17||POSTCARD||1,000||0||Redeem for a postcard.|
|20||OYSTER||100,000,000||1||OYSTER CARD TOKEN SYSTEM|
|22||BOOUUSEGG||20||0||Game card in Moonga|
|23||SJCXCARD||1,000||0||Moonga SOG Storj card|
|24||GEMZCARD||100,000,000,000||1||Moonga getgems card|
|34||DEBTC||100,000,000||1||BTC DEBIT CARD TOKEN|
|36||DEBITC||100,000,000||1||deBiTC: Bitcoin debit card secure token|
|37||TARJETADEBIT||100,000,000||1||BIT CARD (SPANISH)|
|48||KARTA||100,000,000||1||CARD (ENGLISH TO GREEK TRANS)|
|54||FREEROSSCARD||1||0||We will see|
|55||OCTOCARD||1||0||We will see|
|56||SHUMAICARD||1,000||0||Moonga spells of Genesis card|
|57||CNPCARD||100,000,000,000||1||SOG Moonga card|
|65||DOGECARD||100,000,000||1||Asset to the moon|
|70||BLOCKSIZECD||300||0||Battle for blocksize SOG card|
|71||SILKROADCARD||100,000,000||1||silk road card|
|72||SILKROADCD||100,000,000||1||silk road card|
|73||FREEROSSCD||100,000,000||1||free ross card|
|77||TAMAMICARD||1,000||0||TAMAMI CHAN KAWAII !!!!!|
|79||PSYCHICCRED||100,000,000,000||1||PSYCHIC CREDIT CARD|
|82||ETHXCPCARD||1,000||0||Ethereum vs Counterlord SOG card|
|84||ZAIFCARD||1,000||0||SOG game asset|
|85||BAZAARCARD||1,000||0||Spells of Genesis open bazaar card|
|86||CARDAUGUR||1,000||0||Spells of Genesis Card|
|92||GOXCARD||1,200||0||Spells of Genesis game asset|
|94||OCTOALPHADH||100,000,000||1||OCTO Fantasy MMA Alpha Dan Henderson Card|
|96||CARDAUGUR||200||0||Spells of Genesis Card|
|97||BTCDRAGONCD||800||0||spells of genesis card|
|98||BCYDRAGON||300||0||Spells of Genesis card|
|110||LOTRCARD||1,500,000,000||1||Lord of the Rings Hand Drawn Sketch Cards|
|111||GOYASILVER||5,000,000,000||1||Blockchain Card Rdeemable for Silver Coin|
|112||STARWARSCARD||100,000,000,000||1||Redeem for Star Wars Blockchain Cards|
|113||CARDASTEMA||1,200||0||Spells of Genesis game card|
|114||WILDDOG||100||0||WILDDOG TRADING CARD|
|115||GENET||100||0||GENET TRADING CARD|
|116||GRAYWOLF||100||0||GRAYWOLF TRADING CARD|
|117||LOCHNESS||100||0||LOCHNESS TRADING CARD|