en
Back to the list

The Story Behind The Bitcoin Infinity Day Public/Private Keys

source-logo  bitcoinmagazine.com 22 February 2022 21:15, UTC

The story of the Bitcoin Infinity Day Keys spans seven months of my life. The story evolves and transforms until it reaches its final form, crystallizing forever like the root of a Merkle tree. Over these seven months, the keys went from a test design I threw together and forgot about to a project that consumed my every waking moment. I’m going to take you on a walk through my mind to observe the path from idea to reality.

As the idea spread through the Bitcoin community, serendipitous manifestations would arise, leading the project in unimagined directions. A message here, a tweet there. Each piece is a subtle nudge in the direction of mapping out the end result. The idea grew and blossomed over time, pushed from one boundary to another on its hero’s quest to actualization. I’ve tried to find those pivotal moments to share with you. This is the story of how it all came to pass.

The Idea

The idea for the keys presented itself in a sly, roundabout way. It didn’t arrive as a finished vision, but rather as a stepping stone from one level of skill to another. I had just completed The Bitcoin Full Node Sculpture 7.0 made out of silver mirror and was preparing to start on #8 (it is a series of 10 sculptures).

As an artist, I always want to grow with each new project. Not only because doing the same thing over and over can be boring (even when successful), it’s also a safe zone. The world and market motivate you to repeat your greatest hits but you do that at the expense of furthering your growth. I like to try things that I’m not sure I can pull off. I try to work at a level slightly above my current skill set. This is the way I grow. It takes a ton of experimentation and testing to obtain and grow the skills. It also takes a willingness to fail. Failing is fine and should be done hard and fast so you can move on to winning.

The next move for me was to see if I could use colored mirrors to create new dimensions in the node sculpture. I quickly put together a two-layer design. Then I engraved, cut, painted, and assembled the test pieces. I had four colors of mirror to work with — silver, gold, blue, and rose gold — so I made 16 pieces to test all the different color combinations. Check out the tweet for the original video.

I got a lot of encouragement and, surprisingly, people wanted to buy my test cut design as an art piece. I wasn’t prepared for this at all. I didn’t think of the design as anything other than a test for a future sculpture. People were breathing life into the concept that the keys stood as their own design. I quickly fell in love with the idea. An art piece for the Plebs. In an edition of 210.

On the same day, July 5, I tweeted this video and then, just as quickly as I fell in love with the idea, I forgot about it.

It’s easy to forget about things when I‘m working on a project. My attention gets sucked in like a whirlpool until I’m far too deep to pay attention to anything else. I spent the next month working like this, tirelessly. By August 7, 2021, I completed the Full Node Sculpture #8.

This was about two weeks before the first Bitcoin Infinity Day: August 21, 2021.

Before we go any further, I want to make sure you’re familiar with the origins behind the Infinity Day keys. I made them to help spread the meme created by Knut Svanholm, “Bitcoin: Everything there is, divided by 21 million” and the original article, released August 21, 2020, called “Deeper Down the Rabbit Hole.”

It’s fun to note — and Knut says it was unintentional — that the original article was published on August 21, 2020. That date can be written more succinctly as “8/21.” Notice that the “8” can be viewed as an infinity symbol (∞) standing on its end. So the date “8/21” can be read as Knut’s meme: “Everything there is (infinity or “8”), divided by 21 (million).” So August 8 is Bitcoin Infinity Day. This is astounding, considering it was published on August 8, a year before the Bitcoin Infinity Day meme even existed.The idea for Bitcoin Infinity Day seems to have arisen right around the time I finished the sculpture (August 10, 2021). This is only 11 days! Not much time to birth a meme holiday…

The First Transformation

The idea for the Infinity Day Key came during a private conversation with the collector who purchased the Full Node Sculpture #8. Without this one comment from @Protagonist4now at 5:21 on August 17, the Infinity Day Keys would probably never have happened. He was asking me why Knut didn’t have one of the Bitcoin Full Node Sculptures…

On August 19, just two days before Infinity Day, I was able to get sculpture #8 shipped out. With that project done I could work on a new one, but time was short. It was August 20, just one day left.

Not sure if I could pull it off, I knew it was a pass-or-fail idea. I’d either do it in time and it’d be awesome, or I’d end up empty-handed and no one would know this was ever an idea. The only way to find out was to try. Proof of work. I reached out to Knut to get the “look” he liked for the meme.

Here you can see me start to work on re-creating the design in vector format, and making small corrections as I go.

And you can find both the PNG and vectorized .AI versions of the logo here on my Github page, open source and free to use however you’d like.

So now it was almost 2 p.m. on the day before Bitcoin Infinity Day — crunch time. Just 10 hours left until the first-ever Bitcoin Infinity Day. I worked through the night and into the next day. Almost 24 hours later, I was done. I tweeted this video at 3:41 p.m. EST. I thought this was the end of the Infinity Day key project. But, as we know, life has a way of reorienting us when we least expect it…

Original goal: Achieved! Here’s a photo of Knut Svanholm, creator of the Bitcoin Infinity Day meme, holding his Bitcoin Infinity Day Private Key 1/21. Success!

After posting the Infinity Day key video, I began to get a barrage of tweets and DMs of plebs asking to buy a key. Since I never planned to sell the keys, I made only five of them. I planned to make a few extras to account for errors and mistakes, but all five turned out great. I knew I wanted to give two to Knut as a gift, but I wasn’t sure what to do with the other keys. Also, I wasn’t sure how I’d price the key fairly, as my last piece sold for 15.1 bitcoin. So I decided to do a giveaway.

And here are the rules I set for the giveaway:

The contest went on for about a week and I realized I loved so many of the answers that I had more than two people I considered winners. I highly recommend checking out the thread, it’s densely packed with interesting Bitcoin trivia. You can see here where we jump from two keys as the giveaway to five and then to 21. I even added the idea to auction the last key here.

Originally I was going to auction key #21 of 21 on Scarce.city, but again the idea man, @Protagonist4Now came through with the vision — #8 of 21 would be the one to auction, as it is the physical embodiment of the “8/21” meme within the set.

Second Transformation — The Numbered Plaques

Now that I had to make 21 of the key sculptures, I began to feel self-conscious about sending out the keys with no way to display them. I felt like I needed to do better. I came up with the idea of creating numbered mirrored plates and personalizing them for each person (video here).

That was on September 11, and below in this thread on October 9, you can see I just finished the 21 private keys. I have videos of each of the keys in the thread. The first video shows all the pieces after being cut, engraved and painted, but not yet assembled.

You can see the list of the 20 Private Key winners here:

The Public Keys - One for the Plebs

The idea for the Public Keys didn’t come to me until after the contest was over. I started getting Dms on Twitter from plebs who missed out on the Private Key giveaways, but were worried they wouldn’t be able to afford to bid on #8/21 in the auction. Auctions can get quite high, and can easily outprice plebs just trying to get their hands on some legit bitcoin art. I knew I wanted to do something for us, for the plebs. The bitcoiners who really want it, but can’t shell out an entire bitcoin on art. This was the birth of one of the craziest sales ideas the world has ever seen.

I started thinking about it, and over a few days the idea solidified. We’ll get more into the design of the sale and how it works soon, but the important thing here was that I wanted to do a sale that was open to everyone. Anyone could get a key as long as they were able to get into the sale “in time.” I would not be doing something like this again, but I wanted to make sure everyone had at least this one chance to own an original FractalEncrypt art piece. But the window would be short, and people had to be ready and have bitcoin handy to pay (so I had to give people time to get sats out of cold storage, etc.).

Michael Saylor is probably the most famous of the key winners. Here’s a never-before-seen photo from Bitcoin White Paper Day 2021. Saylor owns Private Key #11 and is also the owner of one of the artist-proof versions of the Public Key.

Third Transformation — Holographic Rainbow Background

I was working on the Bitcoin Full Node Sculpture #9 of 10 at the same time as I was working on the Infinity Day Keys project. During the creation of #9, I was experimenting with making my own custom materials to use in my sculptures. The black holographic rainbow material was used in #9 and I thought it would also make a nice background for the keys.

I made an artist’s proof version of the Public Key to see how it would look with the new holographic background, took some video and posted it to Twitter with a poll to see what people thought.

The Auction and The Sale

As things took shape, I prepared for the auction of Private key #8 of 21 and the sale of the Public Keys. This was set for the weekend of October 31, 2021, the 13th anniversary of Bitcoin White Paper Day.

The auction format is pretty straightforward, no surprises there, but the format for the Public Key sale was something I dreamed up and tasked the guys at Scarce.city with actualizing. I wanted the sale to be defined by the Bitcoin network. It would be a limited-time sale, but not limited by clock time, but rather the world’s first sale limited to Bitcoin block time. The sale wouldn’t run for a set number of hours or days, but instead for a set number of blocks mined in the Bitcoin network.

The duration of the sale would be entirely decided by Bitcoin block time. The edition size (how many keys I would need to make), was also left entirely up to bitcoiners. I would make as few or as many keys as were ordered, no more, no less. If people bought three, I’d make only three. If they bought 1,000, I’d make 1,000. The price would increase as new blocks were mined. This meant waiting had a cost. If you wanted a key, the longer you waited to buy one, the more expensive it got.

As the day of the sale got closer, I began to get concerned. I wasn’t sure if the sale concept would make sense to others, so I reached out to some collectors I know, (Eric Weiss and Jeff (@SatoshisArk), and asked for opinions. I explained the idea, but both guys seemed confused, so that made me more uncomfortable.

This is the explanation of how the sale would work on the Public Key Sale page on Scarce.City (the bitcoin-only auction site);

The idea for the sale was this:

  1. It is a limited-time offer, but available not for a specified time, but rather a specified number of Bitcoin blocks. Bitcoin blocks are mined about every 10 minutes so 210 blocks would take about 36 hours, or a day and a half to elapse.
  2. Anyone can buy at any time during the 210 block window and there is no limit on how many keys would be made.
  3. The price will increase by about $5 every time a new block is mined (this turned out to be 8200 sats per block on the day of the sale).
  4. Once the 210th block was mined, the edition would be locked at the final sale count.

The morning of Saturday, October 30 arrived full force. I woke up nervous. Was my idea too far out there. Would people understand? Does anyone even care?

It’s always scary to put your work on auction. The fear of whether it will do well or not can be intense. Couple this with the stress of inventing a completely new sale format and it all felt like staring off into an abyss of uncertainty. Both the sale and the auction would begin that Saturday and end sometime on Sunday, October 31. The Public Key sale would start first at 11:11 AM and the Private key auction would begin at 3:33 PM.

The sale of the Public Keys started first. It was set to begin as soon as the first block was mined after 11:11 AM, which was block 707,443. The amazing thing is that collectors wanted to be the very first to click “buy” once the sale went live, so they could get lower edition numbers. The first buyer to click buy, would get key #1, the second would get key #2. However no one knew when the sale would begin, since it began only once a block was mined after 11:11 AM. The block was not mined until 11:17, a LONG 6 minute wait for plebs with fingers at the ready.

42 keys were sold before the next block was mined only 21 seconds later. The sheer dedication of those bitcoiners who were ready at the keyboard, and clicked “buy” before that next block was mined just seconds later, cannot be overstated. As we know from Douglas Adams’ writing, the number 42 in “The Hitchhiker’s Guide to the Galaxy,” is the “Answer to the Ultimate Question of Life, the Universe, and Everything”. I took this to be a good sign, but I’m not one to declare victory before the end of the battle, so I remained cautious.

By the time the Private Key auction started at 3:33 p.m., just over 100 of the Public Keys were sold. Bidding on the Private Key went live and we were at 0.1 BTC within an hour.

Things were off to a nice start, but I still felt nervous. There was so much energy leading up to this; the emotional buildup was strong. The day passed seamlessly into night and by the time I fell asleep, over 150 Public Keys had been sold and the Private Key auction was up to exactly 21,000,000 satoshis. Tomorrow would be Bitcoin White Paper Day.

I woke up excited. Not only would both the auction and the sale end today, but I was going to a fancy invite-only bitcoiner BBQ for Bitcoin White Paper Day. I arrived just before noon, made the rounds and settled in at a table by the pool while I tried not to look too anti-social watching the auction on my phone. Around 1 p.m., with only two hours left before the end of the auction, we hit 0.25 BTC. A bidding war broke out between ObiWan, willebra and TH pushing us over half a bitcoin. What happened next shocked everyone.

ObiWan busts through the door with a 6 BTC bid. $367,000! OMG! Twitter goes wild. I jump out of my seat, mouth agape, pointing to my phone to show Eric Weiss.

In disbelief I say, “This must be an accident!” Eric inhaled, thought for a second and agreed. No. No way the bid went from 0.575 BTC to 6 BTC. I took some deep breaths, calmed down and in a few moments the page updated. The world zoomed back into focus. Not 6.0 BTC. One-tenth of that: 0.6 BTC. Okay.

The bidding went on for another 30 minutes. Hitting 1.0 BTC was a beautiful moment and the auction came to a climax with a bid at 1.05 BTC by pekf73.

Now with the Private Key sale over, the adrenaline rush hit me hard. I switched focus back over to the Public Key sale. The Public Key sale edition amount would be entirely decided by how many plebs bought keys.

I checked the current total and we were at 199 keys. I saw this tweet from Glenn Hodl and I saw the vision immediately. 210. I certainly didn’t know how much work it would be to make that many keys.

With hours to go, and the price increasing every 10 minutes… is it going to hit 210?

It was a long weekend and the sale was going to close in about hours. I needed some sleep. My heart wanted to stay awake but my mind was not having it. By this time the counter was at 206 keys. I couldn’t stay up anymore. I gave up on the dream of hitting 210 keys. The fact is, the price got higher with each passing block, so selling more keys became less and less likely with each block mined. I couldn’t keep my eyes open any longer. I went to sleep. 206 was a good run, nothing to be ashamed of.

The next morning I woke up to a Bitcoin miracle. By the very last block of the sale, block number 210, only 208 keys had sold. It was over and done with, we weren’t hitting 210.

Then, literally in the nick of time, in that very last block an anonymous pleb bought both 209 and 210, forever cementing the edition in at a perfect 21:210 ratio of Private Keys to Public Keys. Absolutely beautiful.

The anon pleb who bought #210 created this Twitter account and you can follow them here.

Now you might think the story ends here, but there’s so much more. Once the 210 keys were sold, I needed to make and ship them all. On the sale page, I wrote that it would take me 4-6 weeks to have the keys completed and shipped. Later I realized that I set this time frame before I even knew how many keys I would sell. Making the 21 Private Keys took longer than I thought, but making 210 keys took the amount of work required to a whole new level.

We’ll jump into the creation process and I’ll share some insights into the journey, but first we have the next transformation.

Fourth Transformation — Taproot Keypairs

This part of the story is truly amazing, as it arose entirely after the sale of the keys. No mention of this was made during the sale, so none of the purchasers had any knowledge about this, and, in the end, I feel it’s one of the most important pieces of the project. This idea didn’t all come about at once either. It formed into little pieces that fit like clockwork as they came together.

It all started with this question:

It got me thinking. I had what I thought was an answer, but it wasn’t a very good one. In the end, things got much deeper and far more interesting. Take note of the date, it’s Oct 31. Things take time to percolate.

About two weeks later, Taproot activated on the Bitcoin network at block height 709,632. This block was mined just before midnight on November 14 in my timezone and while I was sleeping, cypherpunks were playing. By the time I woke up, many interesting taproot transactions had been sent and then discovered by other cypherpunks. I began exploring everything I could find.

Check out this tweet from Pieter Wuille. They crunched 2.4 quadrillion keys to find some amazing vanity bitcoin addresses, I’m intrigued! I continue digging.

Click on the image below and take a look at this transaction. Take note of the vanity addresses of course, but also the values transacted. 0.1337 BTC sent and then the first 3 inputs have values of 340, 341, and 342, these correlate to the Bitcoin Improvement Proposals related to taproot.

Note bc1p is the prefix for taproot addresses. The vanity parts of the addresses come after bc1p.

Looks like I found this around 9:23 AM.

Then just eight minutes later I get a message from Yegor Petrov, “Hey Fractal”;

These two puzzle pieces clicked and fit together perfectly. Combining an on-chain Certificate-of-Authenticity for the keys using taproot vanity addresses with an OP_RETURN (hidden message)... a fire was lit within my mind.

First things first, I needed to download the new version of Bitcoin Core so I could get the new taproot functionality and begin teaching myself how to do this.

I spent the day learning as much as I could about taproot, and you can follow my education in this tweet thread. It has links to all my educational sources and screenshots as well.

You can see me trying and failing to create taproot addresses in Bitcoin Core because that functionality is not yet released. You know when you’re trying to do something and you run into a wall? Well, we can’t give up, this is Bitcoin. There’s either going to be a way to do this or an explanation as to why we can’t.

During my research I saw that to generate addresses, I needed to import and construct taproot descriptors into my wallet. Okay, what? Andy to the rescue!

This was all on November 15 and I spent the rest of the day reading the documentation. I read it like 20 times. This isn’t something I get a handle on with just a cursory glance. Also, I read this from Learning Bitcoin From the Command Line, and this too.

Now that I had a few hours’ worth of foundations in taproot, I needed to find out how to generate vanity addresses. I looked at several methods before landing on the program used in the tweets above. It was created by Bitcoin Core developer Andy Chow. (again, Andy to the rescue, and he will become much more helpful soon.)

Link in hand, I downloaded the program, excited to get rolling and immediately ran into a series of errors that took me hoursof hard work to get past.

I installed Rust and a bunch of other dependencies, but nothing was working. No matter what I tried, I couldn’t get the program to do anything. So what do I do? Request help through Twitter DMs from the guy who wrote the software. I know this is probably not “the way” I should do it. It’d be more polite to ask via a post on StackExchange or BitcoinTalk, but luckily, within a very short window, I got a response, and it was exactly what I needed.

With this simple, magnificent piece of info, I was rolling! I’ll note that this step is nowhere to be found in the Readme on Github.

I ran into a few other issues that Andy kindly and patiently walked me through. Note the “restricted characters”, especially the limitation on using the number “1” after the bc1p prefix, as this comes up again later.

With this, I am now able to generate the taproot vanity keypairs! Fuck Yes! But… now how do I use them? Note how the answer seems very tricky at first, but is easily distilled (luckily!)

It took me a full day to learn how to properly create the “correct” kind of bitcoin wallet within Bitcoin Core that would allow me to use my vanity taproot bitcoin addresses. By about 3:24 p.m. that afternoon (Nov 18), Andy had walked me through it. Without his help, this entire part of the project would never have happened.

With the vanity bitcoin taproot address part of the project now a reality, I began formulating my plan (hint: The plan changes). I would generate 210 vanity addresses and then send 1 satoshi (0.00000001 BTC) to each address. Then I would include the private key to the address on the backside of the art, so the owner could sign a message from the address, proving that they own that specific key, but also making the sculptures almost impossible to forge (we’ll touch more on this later).

However there is something in Bitcoin known as the “dust limit” it’s an anti-spam feature of Bitcoin, and also helps avoid “blockchain bloat.” Dust is an amount of bitcoin that is defined by the software as too small to send.

Instead of looking up the dust limit myself, I decided to “ask Twitter”, not something I’d usually do. This post is at 4:07 p.m. on Nov. 18 about 30 minutes after I figured out the last step (constructing and importing taproot descriptors into Bitcoin Core).

At first, I wasn’t getting any helpful answers so I did what any good bitcoiner would do, verify the shit myself. I constructed a transaction with a one sat output in my Bitcoin Core QT wallet.

I signed the transaction and tried to broadcast it to the network. I got to that last step and was immediately hit with the dust error (Bitcoin Core QT doesn’t give very expressive error messages).

Then at 4:31 p.m., Michael Moffit posted this.

Then he dropped this series of bombs and cemented the path forward for the taproot keypairs.

That lead me to Vijay Boyapati’s amazing idea and execution (which I copied; steal like an artist they say!):

Mind Blown.

I loved the idea of creating an on-chain bitcoin transaction where each address is tied to the numbered edition of the book. Merging this idea to the idea of using vanity taproot addresses was a moment of more fireworks going off in my mind. These critical puzzle pieces were all instrumental in framing the art project, and are all aspects of the human side of the bitcoin network. Without participants working individually on their goals and then together as a community, none of this would be possible.

The timing of events here is an astounding unfolding. Consider the vanity taproot address generator software was released on November 10, 2021, just days before this. Vijay’s tweets were from September and October 2021, just weeks from this moment of realization. These building blocks are critical and necessary for the Bitcoin Infinity Keys to find their final form. And the building blocks themselves are forged by both the code and human facets of the bitcoin network.

Mining the Vanity Taproot Bitcoin Addresses

Now that I had a plan and verified I could do (most of) the steps, I began mining vanity bitcoin addresses like a madman. On my desktop computer (threadripper CPU, 128GB RAM) I was able to mine the 3-digit vanity addresses quickly enough that I was able to gather the 210 vanity addresses within a week.

Here’s how the process of mining the vanity addresses works. The software asks you to define the vanity words or phrases you want to find. Imagine you wanted to say “Hello World.” You’d enter that into the vanity address software as “bc1pHelloWorld.” The “bc1p” prefix is required for all taproot bitcoin addresses (also known as “bech32m” addresses), and then your vanity words go after the prefix. The software then begins searching for any Public/Private key combination that results in a bitcoin address with your prefix.

Depending on how many letters or characters are in your search, your search may be quick or take an eternity. The more characters, the longer it will take. To find the 3-letter “key” addresses didn’t take long at all, however, to find an address with bc1pFractal it took me almost 5 days to find a single key pair. Finding bc1pEncrypt took me another 7 days and I almost quit looking for it as I was running out of time. Finding a bc1pFractalEncrypt address may have taken me more than my lifetime so I didn’t even attempt it.

Once I mined 210 “key” addresses I was ready to go. Or so I thought. As I started looking at the addresses, I noticed that some had numbers following the word “key.” This meant that I could have addresses like “Key1, Key2, Key3, …, Key210” I began searching and sorting my addresses to see what I had. I quickly saw that I already had many addresses that followed this format and I began organizing them.

Once done, I went back into the vanity address generator and began trying to find the missing addresses. I was missing “key1” so, of course, that was the first one I tried to mine. Immediately I hit a brick wall. “1” is a restricted character in taproot addresses, so mining any address with a 1 would be impossible. So that ruined that whole idea. I can’t do a series of numbers without “1” 1, 11–19, 21, 31, …, 100–199, etc. I was screwed. I had an okay idea, but it just wasn’t actually possible.

After a few minutes of thinking, I came up with the idea to try a lowercase “L” in place of the “1”s and see if that would work. It did. Okay, back in business!

Mining the addresses in a series like this was extremely time-consuming and I only made it to 50 before the addresses became too hard to mine, and I ran out of time. So keys 1–50 are special for this feature alone.

After “50” the only numbers I was able to mine the “numbered key” vanity addresses for were these:

Testnet Transaction

To create a Bitcoin transaction, I used a simple text editor called Notepad. I just typed it all out (or copied/pasted in the case of addresses). I’d never written a transaction this big before, it was intimidating. 210 outputs! Each output was one of the bitcoin vanity addresses I mined. But before I used the precious vanity addresses and spent real bitcoin, I needed to test things out. Mistakes on-chain are forever, so I didn’t want to look like an idiot to far-future generations.

The good thing is, once I created the testnet transaction, I could use that same text file as a template to create my “real” mainnet transaction later. In my testnet transaction, I didn’t use my precious vanity addresses, I just used regular bech32 addresses (taproot are bech32m addresses). The raw bitcoin transaction simply states what inputs are being spent and how they are spent. Here we see 2 inputs followed by the first 26 testnet addresses.

I also encoded a “secret message” within the transaction as well.

The tricky thing with sending raw bitcoin transactions is figuring out the fees. Fees are not expressly stated in a bitcoin transaction, they are implied. For example, if you want to send 1.0 bitcoin, you type that out. If you want to pay a fee of 500 sats, that amount is nowhere in the text of the bitcoin transaction. The way the fee is calculated is a math equation. We won’t get into the specifics here, but you just need to understand it’s something you do not write out numerically into your transaction.

In addition to not writing out a specific fee amount (meaning you can make a big expensive mistake without realizing it), the fee is based on how many characters are in your transaction. This is called “sats per byte” and you pay your fees in a specific amount of satoshis for each letter or number you want to include on-chain.

I do not know a method to take a signed raw transaction and calculate the number of bytes. So I usually just try to guess at how many bytes I think are in a transaction. Since I’ve never sent a very large transaction like this, paying out to 210 addresses, and since I’m on testnet playing with free fake bitcoin, guessing is okay. I happened to guess 16x higher than necessary, and I was surprised to find out how compact a transaction like this could be.

For comparison, a regular transaction with two inputs and two outputs averages 150 - 250 bytes. I made a guess and figured for 200 outputs, maybe this would be about 105,000 bytes (half of 210, then multiplied by 100). In my guestimation, I paid out 109,467 testnet satoshis (or 0.00109467 tBTC) in fees. I knew if I was too low, my node would not send the transaction. There is a minimum of 1 sat/byte that is enforced by my node, so it won’t send a transaction with a smaller fee than that. An error is my indication that I’ve underestimated. If you overestimate, well, too bad, you just overpay for your transaction. That’s why we do this on testnet.

I was shocked to find that my transaction only turned out to be 6996 bytes. I thought it was going to be closer to 100,000 bytes. Sending these batch transactions is very economical in terms of both onchain data and the cost to place it there.

I did make a mistake in the testnet transaction and if I hadn’t caught it, I would’ve looked like an idiot to all my descendants and brought shame to my family. I had two outputs paying 1003 satoshis. Whoops, but this is why we do things on testnet first. Luckily I did catch this and was able to fix it before sending my “real” mainnet transaction.

Making the Keys

At the same time while I was mining vanity taproot addresses, I was also cutting and engraving the pieces for the keys (Video link).

You can see a video of the pieces in the tweet above and scroll down in the thread to see a video of the laser machine cutting the clear back pieces. I covered the Private Key plates in the video with the microfiber glove.

Once the pieces are cut, I have to paint each one. I also custom cut and apply double-sided industrial adhesive that welds the pieces together.

Painting all the pieces was a much larger job than I expected and I needed to acquire new tools and skills to pull it off. I also needed this big bounce-house-inspired inflatable paint booth!

Here are a few pics of painting the key pieces. This was my first time using a professional auto paint sprayer and I have to say the results came out fantastic.

The Art of The Transaction

While I was busy making the physical key parts, I put off sending the mainnet bitcoin transaction. I just took the risk and engraved all the Public Addresses into the mirrored plates and painted them. Heck, I even had the private keys all cut, engraved, and painted too. Failure here would be disastrous. If anything went wrong and I wasn’t able to send the transaction and use these keypairs, all that work would be wasted. Time for the acid test. I needed to send that transaction!

The reason I put it off is because it was a huge amount of work and must be done exactly right. I needed to copy and paste 210 addresses and get them in precisely the right order, no mistakes allowed, not a single one. It was intimidating and I also was feeling the pressure to get the physical pieces done. Time was up. I needed to construct, sign and broadcast the Public Key mainnet transaction.

I took a few days to get the file set up correctly, checked, double-checked and ready to send. By the time it was done, I felt the transaction itself was a work of art. I encoded all kinds of Easter eggs into the transaction, not only what you could see in the text of the transaction, but even the fee amount. I had calculated the fee to the exact satoshi (we talked about the fee amounts before — remember, this is something you do not write into the transaction, it’s implied). I don’t think I could say this for many transactions, but even the raw hexadecimal signed transaction is beautiful.

Bitcoin Is Time

Let’s back up one second here. Before I was able to send the main transaction, I had to pre-fund my vanity addresses. It took me almost two weeks to mine these two addresses, and I wanted to fund them with exactly the right amount of satoshis, no more, no less. This must be executed with surgical precision.

This is the pre-funding transaction. I want to spend frommy “FractalEncrypt” addresses to all the Public Key Addresses. To do that I needed to make sure I had the right amount of bitcoin in the right addresses.

I was hoping to have the transaction mined at a specific time, to add to the magic, but that was not to be. That’s okay, we take our wins where we can take them.

I wanted the transaction to be sent at a cool date and time. The date was December 21, 2021, so 12/21, and I was hoping to send my transaction at 8:21 to reference the Infinity/21M meme, so it would be sent at 8:21 on 12/21/2021.

It looks like I wasn’t the only bitcoiner thinking 12/21 was a cool date.

The clock was running down. It was getting close to 8:21. I didn’t want to submit my transaction too soon or too late. A bitcoin block can be mined at any time, so I was afraid to send my transaction too early. It was a risk, but one I had to take. It was 8:20, and no block had been mined in the past 9 minutes, it was almost perfect. The tension was insane. I had to send it right then.

I clicked to send and… FUCK!

The transaction wouldn’t send! I didn’t have enough in fees. Fuck! My testnet transaction was 6996 bytes, so I thought by sending 8,888 satoshis in fees, I would be overpaying, not underpaying! This was a disaster of the highest order. I didn’t haveany more satoshis in my vanity addresses and sending more to them just wouldn’t look the way I want onchain. The feeling of defeat at that moment cannot be explained.

I got myself together and began thinking. Maybe 8:21 was something of an illusion. Maybe I just see that in block explorers because that is my local time…if this is true, then it’ll be 8:21 in one more hour, one timezone to the west of me. Back to Twitter. And, yes. That’s how it works.

So now I knew I had another 50+ minutes to figure out some way to get my transaction sent without ruining any of my encoded Easter eggs. I knew I could mine a new simple vanity address and send funds to that. I’d use those new funds to pay the missing fee amount. Instead of having my send addresses be the “Fractal” and “Encrypt” addresses, I could add a third address that contained the fees and I could make it say anything I wanted.

I went to my list of vanity keys that I’d already mined, but not yet used. I found one of the keys was a “bc1pkeys” address. Using this would make the send addresses:

“Fractal Encrypt Keys”

This was cool, I liked it, but now I needed to decide how much in fees to pay. I knew I needed to pay at least 9248 in fees because of this error, but that number had nothing to do with the “8/21” meme, so...

My prior fee amount was 8,888 but since that was too low, I pondered other numbers like 21,888 and 21,821 but settled on 88,888 to dig into the “Infinity” part of the meme deeper. To do this, I had to construct a new taproot descriptor for the private key of this new address, import it into Bitcoin Core to be able to spend to and from it and then send some sats there. I had to do all this quickly, as I had under an hour left.

Judging by the timestamp on the funding transaction for this address, it took me about 15 minutes after the first transaction failed (from 8:21 p.m. when the transaction failed to 8:36 p.m. when this transaction was confirmed) This may seem quick, but it was an intense and terror-fraught 15 minutes. Notice I didn’t put any fancy messages in this one. Stressed!

With this transaction confirmed, I had 80,000 satoshis in my “keys” address, allowing me to add these new funds to my transaction as an input. By doing this, I could spend the full amount. Adding the new 80,000 sats to the 8,888 I already had in my transaction would bring my total to 88,888. This is why I said that the amounts in the addresses had to be handled with surgical precision. An error of a single satoshi would ruin the magic.

Now I just had to wait for 9:21 p.m. EST, which would be 8:21 CST. Also, 8 p.m. is 20:00 in military time (or 24-hour time), this makes 9 p.m. 21:00 so if I could get it at 21:21, that would be magical! It was not to be, I was off by seconds, and it went through at 21:20. Here’s the transaction. See how many Easter eggs you can find yourself or just continue reading for the spoilers.

First, we can see that our math came out correctly and we spent exactly 88,888 in fees.

We can see the transaction is recognized as a taproot transaction, but this was also my first-ever RBF transaction. I’d been wanting to learn that for a while, and never did until now. I’m proud of this RBF flag!

The three inputs in the transaction have the vanity addresses reading “FractalEncrypt Keys”:

And here we can see the two input values of “8” and “21”

Now the outputs, these are really special. Each key sculpture is numbered and engraved with its public key on the front of the sculpture, and the private jey tied to that address engraved on the back. The owner of key 1/210 has the vanity public key address of “bc1pkey1” and in that address is 1001 satoshis. The owner of key 2/210 has the vanity public key address of “bc1pkey2” and in that address is 1002 satoshis.

One of the cool things about having the unique private/public key pairs on the sculpture is that if the owner keeps the private key secret, then it makes that specific key almost impossible to forge. And even if one of the key owners was careless enough to expose their private key, it would only make that ONE person’s key forgeable, but no one else’s numbered key edition would be in the same jeopardy.

Not only that, but the owners can also spend the sats in their addresses and (in the future) sign a message with the private key to their public address, verifying ownership of the art trustlessly and provably (note that message signing functionality for taproot addresses is not currently available in Bitcoin Core at the time of this writing).

Finally, at the end of the transaction, the 211th output is non-spendable. It is called an OP_RETURN output and has a unique feature. This special type of output allows you to encode a secret message within your transaction.

A Path Not Taken: 21-of-210 Multisig Treasure Hunt

I thought it would be cool to combine all the addresses on all the keys into one huge multisig “pot” that could only be accessed by possessing access to 21 of the keys. I wanted to make it so all keys are part of a 21-of-210 multisig scheme so that if any one person or group of key owners assembled any 21 of the 210 keys they could spend all the sats in all 210 of the addresses. This may not be worthwhile today, but in 20 - 50 years, it may be a treasure worth hunting down the keys to unlock (literally!).

I can imagine a dedicated collector hunting down 21 of the keys, or convincing a group of other key owners to join forces to unlock generational wealth. It was a nice daydream, but the fact is, writing this transaction (if possible) would have been a huge undertaking! I quickly found out that I could not use 210 keys together in a giant multisig. The most I would be able to use together at one time was 20.

Shipping The Keys

Once I had all the key pieces cut, engraved, painted and ready to assemble, it took me almost two weeks to get them all completed. I had hoped to ship them in time for the 2021 winter holidays but didn’t have them shipped until early January 2022.

Even putting the labels on the boxes took me a full weekend of non-stop work. When you’re trying to get precisely numbered sculptures matched to 200+ shipping labels, it takes attention to detail. It also takes patience. I also ran into unexpected supply chain issues. The Private Keys were shipped using a laser-cuttable foam. I was able to custom-cut the foam to fit the boxes and the sculpture.

But when I tried to order enough of the foam to ship 210 keys, I ran into supply chain issues. The foam wasn’t available in any size, at any price. So I ended up buying a bubble wrap-making machine and making the packaging myself. My whole art room was filled with rolls of bubble wrap that I filled myself. It was a pretty interesting process and, in the end, I now have a new cool machine.

By the end of the weekend, my front porch was filled with boxes ready to go out into the world.

The UPS driver wanted to know what I was shipping. I said marijuana. Just kidding. I tried to explain the keys without mentioning bitcoin or anything too specific (for opsec). She was like, “oh cool, art.”

And with that, the keys were sent to their new homes and this story comes to a close. As the keys arrived in their homes, I saw many delightful posts and received messages from the new owners. I’m sure the close of this story is the beginning of many others. Thanks for sharing the journey with me. Happy Bitcoining!

This is a guest post by FractalEncrypt. Opinions expressed are entirely their own and do not necessarily reflect those of BTC Inc or Bitcoin Magazine.

bitcoinmagazine.com