Creating 1337 Zeros

Ever wondered how much time, effort or money goes into making a web3 collection?

Well I’m going to detail everything about 1337 Skulls launch of 1337 Zeros - our first generative Ordinal collection.

Concept

1337 was very early to ordinals. In the first week of Feb 2023, after suddenly deciding it needed to happen, we went into crunch mode and created the 69 golden 1/1s that formed the 1337 Ordinals.

1337 Ordinals
1337 Ordinals

Over that weekend I ran out and bought a new SSD, span up a local node and started inscribing them in batches of 10. The first one hitting the blockchain as Inscription #8440 Unfortunately there was an infamous slooooow block that caught us (and bunch of other early inscribers) out and we only got 40 of our 69 sub10k. The whole collection was in sub11k though.

1337 h4x0rz

Skip to Jan 1st 2024 and the 532’s of 1337 are starting to get that pixel itch again. It had been months since 1337 Brians and we wanted to create something together again.

Flashrekt came up with the idea of 1337 h4x0rz - “1337 skulls that are #00FF00 and always wearing hoods”. At the start we weren’t sure whether it was going to be generative or 1/1s like the Ordinals, which gave us a few mentalists like this:

Nerds can't handle their Dew
Nerds can't handle their Dew

After a little FAFO we settled on a strict green n grey palette of 16 colors, 32x32 pixels in 4 layers:

  • Background

  • Skull

  • Hood

  • Vision

1337 Zeros Palette
1337 Zeros Palette

One bonus of creating for ordinals rather than an eth project is that it is really easy to include animated traits! With the restricted color palette and 32x32 dimensions the filesizes are teeny, so we had to take advantage of that…

1337 Zero #494
1337 Zero #494

We trialled creating some 1/1’s 1337 Ordinals in the Zero palette but decided not to include them.

1337 Ordinal Zeros?
1337 Ordinal Zeros?

But how do you curate the art for a collection like this? Luckily we have a Hoanh!

1337's custom-built art curation site
1337's custom-built art curation site

Hoanh’s heroic efforts meant that not only did we have a place to upload our art but we could curate the % chance of each trait being used. Then on the Simulate page we could create a full run of the collection giving us a breakdown of how common each trait was. We (flash) could replace an individual Zero with a newly generated one. We could even export the entire collection as json detailing the traits used.

Flashrekt was up next, he created a python script that could check the entire simulated run for “primary” or “secondary” duplicates. Ensuring that each Zero in the collection felt unique with almost no trait overlaps. It took an insane amount of runs to get it right, every day for a week or 2 he asked us to give the latest another pair of eyes.

After god-knows how many runs of Zeros we hit it, the perfect rarity chart where each and every Zero passed a Quality Control check. We were ready…

Recursive Traits

So we have our art but how do you get it onchain in a 1337 way?

Just uploading flattened PNGs felt a bit lame compared to what you can do on Eth and it wasn’t until I saw The Pepes on MagicEden that Recursion struck me.

The Pepes traits on MagicEden
The Pepes traits on MagicEden

The gist is that any Ordinal can load the content of any other ordinal by simply referencing it in the source of your inscription.

e.g. <img src=”/content/[inscriptionId]”> would load the image of an ordinal with a given inscriptionId (assuming the inscription is an image).MagicEden actually loads these “Recursive Submodules” and links to them from your Ordinal page. If these are images, then it will actually display them. That means that if your final Inscription is a layered Image of different traits, it will actually break down the traits and show them individually - pretty neat! So that inspired us to inscribe all of our traits individually. The other problem to overcome is how do you prove that these traits are apart of the 1337 Zeros collection and not just random inscriptions? With Provenance.

Provenance

Provenance basically allows you to create child inscriptions from a specific Ordinal you own, proving the hierarchy, and declaring that these inscriptions make up our collection. Flashrekt’s golden thong hood 1337 Ordinal was a natural choice to use as our parent giving the Zeros sub10k inscription provenance - awesome! We inscribed the 1337 Zeros logo using the 1337 Ordi as the parent, that would then set the logo as the “top parent level” of the collection with the intention that anything linked to it should be considered as part of the 1337 Zeros Collection. Great, time for the traits inscriptions.

Inscribing the Traits

First though we had to convert our collection json into inscribable data, a little help from GPT and Python and boom we have a batch script ready to inscribe all our traits against the 1337 Zeros logo.

Here’s a snippet showing you a few inscriptions, we also added the metadata of each trait - it’s not used anywhere but still damn 1337.

mode: separate-outputs

parent: 9a8db4559b2dfdfd2e06dd6d139f5de597f6e257423bc7b21debc85a27782954i0

postage: 550

inscriptions:
- file: F:\Inscribe\Traits\Skull\Ape.png
  metadata:
    author: 1337
    collection: 1337 Zeros
    trait type: Skull
    trait name: Ape
    animated: false

- file: F:\Inscribe\Traits\Skull\BALAPA.png
  metadata:
    author: 1337
    collection: 1337 Zeros
    trait type: Skull
    trait name: BALAPA
    animated: false

We inscribed these in separate batches for each trait type which all together came out at ~1,260,000 sats @ 35 sats/VB ($518 when BTC was $36,500)

Creating the Ordinals

OK, so we have traits and a logo, how do you create a layered 1337 Zero? First up was an incredibly painful (for me) step to manually add all these trait inscription id’s into our trait json. The responses that came out of the ord wallet after inscribing were luckily still in order so it was a straight copy from side to side - still 4 hours of my life gone…Now we have a beautiful JSON collection detailing the traits and where they are on the blockchain.

[
    {
        "inscription_id": "657ca4d196268cadaf63f9e0c300668167036c5abd666dcb4644442d53b4fd8ci0",
        "type": "Background",
        "name": "9m",
        "filename": "9m.png",
        "animated": false
    },
    {
        "inscription_id": "657ca4d196268cadaf63f9e0c300668167036c5abd666dcb4644442d53b4fd8ci1",
        "type": "Background",
        "name": "Beam",
        "filename": "Beam.png",
        "animated": false
    },
...
]

Next up it’s time to finally create the 1337 Zero SVG files. They’re pretty straightforward, just some basic setup of an SVG and a chunk of CSS to get them to render correctly in Safari.The important part is the “background-image:” here we’re loading the traits directly from the inscribed traits and layering them from top to bottom layer.

<svg
  xmlns="http://www.w3.org/2000/svg"
  xmlns:xlink="http://www.w3.org/1999/xlink" 
  id="1337 Zeros"
  viewBox="0 0 320 320"
  style="
    background-repeat:no-repeat;
    background-size:contain;
    background-position:center;
    image-rendering:-webkit-optimize-contrast;
    -ms-interpolation-mode:nearest-neighbor;
    image-rendering:-moz-crisp-edges;
    image-rendering:pixelated;
    background-color:transparent;
    background-image:
url(/content/892e4e613d4e66920a23a6b457e3d9a5bf1e1bc612f157202f32d18f706f09d5i10),
url(/content/5bb9032f95e0a3d296b87151d7292c913aad8de39f15fdef5fc6eb119fa4adc4i19),
url(/content/7b0d5cad8f3c6372072141e03a3b2292488c0eef8bbd17715aacd3289679b20di4),
url(/content/657ca4d196268cadaf63f9e0c300668167036c5abd666dcb4644442d53b4fd8ci14)
">
</svg>

Great, now with more help from GPT / Python we could take the exported collection JSON from the art curation site and link it with the full trait json to spit out ALL 1,337 of the final Zeros!

Allowlist

Our initial plan was to launch the collection through InscribeNow - a pretty neat service that lets you upload all of your final inscription files and then your minters self-inscribe the Ordinal taking on that inscription fee.

On the one hand that meant it would be completely free for us to launch (!) and handle all of the allowlists but it would mean missing out on the Zeros having onchain provenance to the collection. Still, as a team that never takes mint fees (we do this for the culture) it was a pill we felt we had to swallow.We then went about collecting wallets for 2 separate phases, first up would be guaranteed mints for the 532s (team) and the 1337 Force the 30+ members of our community that show a little spark and contribute to all things 1337. Phase 2 was made up from a massively varied pool of 1337 skull holders, holders of major Ordinal collections like Bitcoin Puppets and holders of 1337 Eth NFT collections like Cryptoadz. Phase 2 was oversubscribed roughly 2:1 so that we could try our best to guarantee a day-1 mint out without disappointing too may people, we figured we would lose a bunch of allowlisters during the InscribeNow process.3 days out this looked like the plan…

RSICs to the rescue!

So we had promised everyone that the collection was going to launch on the Friday but Monday / Tuesday the price of RSICs flew and our 1337 Ordinals team wallet happened to own 3. Suddenly we had the opportunity to pay for the inscriptions ourselves, use the 1337 Zeros logo as parent, so that we had sub 10k provenance on each Zero and airdrop these mofos to our holders as a surprise. FOR FREE. So we let those 3 RSICs go but we still had one problem… our allowlist was double the Zero collection size - gah! 48hrs to go we needed to randomly and as fairly as possible cut this list down to 1337 max. Randomly assign a 1337 Zero to each winner and build up the inscription batches similar to the traits batches.

The Worm

Another fun coincidence, a few weeks before launch the 1337 community managed to get hold of The Worm NFT and we’d been passing it between each other with the goal of getting the 1337 Skulls deployer wallet #1337!

Worm #1337 held by 1337
Worm #1337 held by 1337

Seemed like perfect timing to use this in some way… Flatmap created a totally fair randomisation script that took the eth transaction id of us receiving the worm, as a seed and gave every allowlist entrant a score between 0 and 1, 0.5 or above and you’re in :) - below and you’re out :(I didn’t have the heart to check who made and didn’t make the cut so just took the list and with more help from GPT created the inscription batch scripts setting the destination address. We created 7 batches of 200 (well, one has 137) to make sure we got them in and didn’t clog up a whole block. Due to the way provenance works that meant we needed to inscribe these batches across 7 separate blocks.

Literally hours to spare before Friday, we’re ready. We had 18mil sats to our name and a likely short window in the UTC early hours where the fees would be low enough to inscribe. We’d estimated we had the funds to inscribe/airdrop if fees were ~30 sats/VB

Launch Day

I’m up at 5:30AM local time to get these things inscribed but…. BAM turned out an hour or two earlier CC0 Cats had launched and was clogging up the mempool with 45+ fee blocks - GAH!

Luckily things went our way and after an hour a run of quick blocks being mined the fees were back down to 30 and we had our window!I pushed out the batches with one very painful 40min wait at one point but otherwise smooth sailing. For a total cost of 11,117,000 sats @ 30 sats/VB ($4,810 when BTC was $43,000).Then we sat back and watched as our community slowly began to realise they’d been airdropped their Zero for free!

1337 Zero #903 Hierarchy
1337 Zero #903 Hierarchy

Thanks for reading!

Here’s a few links to check out what 133 is all about:

Subscribe to steveruns.eth
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.