Applied Digital Matter Theory — or — How I’m using DMT to “UNATify” my first Bitcoin Ordinals Collection

Astral Arkitekt
Astral Architecture
5 min readApr 27, 2024

Digital Matter Theory has been living rent-free in my brain ever since I read the Gitbook. I’d like to share one of my biggest learnings so far with you, today.

I’m building an immersive sci-fi cosmic card battling game that spans an entire universe, and it occurred to me that player Heroes would need a way to get around, and a driving force to move about the universe at large.

Learn More at AstralAssemblage.com

Enter, the Void Mosaics… Void Mosaics are essentially specialized starships deployed across all the Hypostasis — The consortium of galaxies at the heart of the conflict in Seven Archons: Aeon’s Ascent. But they didn’t start out as such… Nah, they were an accident!

https://voidmosaic.xyz/view/662023

Void Mosaics are an upcoming ordinal collection I’m working on with in-game utility for Seven Archons: Aeon’s Ascent.

They’re created by plotting a rectangular prism in 3d space whose dimensions are determined by the sum of a Bitcoin Transaction’s Outputs.

Sounds like applied Digital Matter Theory — just without the underlying elemental pattern, right?

But I had a problem…

https://voidmosaic.xyz/view/128821

A Void Mosaic could be a 3d Bitmap rendering if I were better at math, lol. It’s true. If I’d gotten the grid-size and coordinates correct — I’d have created 3d bitmaps, but I got the math wrong and “discovered” Void Mosaics instead.

The problem?

~10% of Bitcoin Block’s contain a single transaction, like this palindrome Void Mosaic: #128821. While uncommon, definitely not an edge case. And they all look the same while every OTHER Void Mosaic looks fairly wildly different from the next.

I wanted to solve for this problem as I knew I was talking about some significant historical blocks in this subset of my data. Potentially some of the most collectible. They can’t all look the same…

I languished for weeks, until… I finally read the Digital Matter Theory gitbook.

Recently, I turned the VoidMosaic.xyz viewer into a Block Explorer of sorts. I figured why not throw in Block Info and make it a tool.

I spent a LOT of time staring at those Merkle Roots while implementing that feature…

That’s when I had an epiphany…

The Void Mosaic Viewer for Block #238900 — https://voidmosaic.xyz/view/238900

The Merkle Root is a hash of all the transactions included in a Bitcoin Block and is used to verify the authenticity of the transactions without the need to verify each transaction individually. And my brain really liked toying with the idea that the Merkle Root is the Fingerprint or DNA of a bitcoin block.

So, I thought… why not use each Block’s Merkle Root as actual DNA? This way each Block could express certain traits lending non-arbitrary rarity to each piece in my collection.

Here’s How… Let’s look at that title image one more time…

The Merkle Root can act as DNA if you break the string up into 32 pairs of 2-character strings.

At center you have the whole Merkle Root, and on the bottom you have the 32 pairs of values deconstructed from the whole Merkle Root.

Now we have 32 pairs of values ranging from 0–255, see? Hexadecimal works in pairs. a single pair ranges from 00-FF or 0–255. Use these values as percentages.

Then it becomes a matter of determining potential uses for these values.

I brainstormed with chatGPT for one of my UNAT projects to come up with a 32-trait list.

Things were a bit more straightforward for the Void Mosaics, though… Here’s my first-draft of traits:

As you can see, for the Genesis Collection I’ve decided on 16 traits so far.

You can use as many or as few traits as you like. You don’t have to use all 32 Merkle Root pairs. The choice is up to you as the Buidler.

Let’s do an example using Void Mosaic #238900!

https://voidmosaic.xyz/view/238900

Void Mosaic #2388900’s Merkle Root has a first-pair of “5b”

That’s a value of 91 out of a possible 255. Let’s make that a percentage. 91/255 = 0.3568 * 100 = 35.68%

the Hue(h) in css’s hsl() color property is a value between 0 and 360. So if we take our percentage and multiply it times the max value of Hue, we can figure out what Hue value our Void Mosaic is supposed to have.

If we fix saturation and lightness (the s and l in hsl) at 100% and 50% respectively, we would get this hsl property: hsl(128.47, 100%, 50%)

A pretty sort of emerald green color like in the swatch below

Determining a percentage between 0 and a max value is one thing, but some people get hung up on applying these percentages to number ranges where the minimum is greater than 0.

Here’s how you do that in Javascript…

// Hexadecimal value as a string
var hex = "5b";
// Convert hex to decimal and normalize by 255
var traitValue = parseInt(hex, 16) / 255;
// Define the range for the expressed value
var validRange = { min: 100, max: 1000 };
// get the expressed value of the range
var expressedValue = (traitValue * (validRange.max - validRange.min)) + validRange.min;

The result for this example would be: 421.18

Using the above Hue property alone could really do a lot to differentiate those single transaction Void Mosaics, but I know I can do better. So my next step is to develop 7 unique shader materials to apply to the Void Mosaics that consist of single-transaction blocks.

Conclusion

The Void Mosaics are Minting soon, but to be a part of the Genesis Collection of 777 FIRST Void Mosaics on-chain, you’ll need a mint-pass. You can grab one on Magic Eden.

Want to see what happens when you take all 32 pairs and use them to create something Unique? Stay tuned. I’m cooking something Cosmic!

--

--

Astral Arkitekt
Astral Architecture

Experimentoor building Cosmic Web 3 things on Bitcoin using Javascript and Three.js