The Fractal Frontier: Exploring the Microcosm of “Byte Modalities” in Digital Assembly Theory

Astral Arkitekt
Astral Architecture
14 min readJul 24, 2024

I wanted to make the Merkle Root into a web. Can’t really explain why, I just wanted to make it happen. That’s how this all began. Before I knew what I’d done, I’d discovered a rabbit hole that literally has no bottom.

I call this rabbit hole, Byte Modalities, and it solved a big problem when I realized what I’d just stumbled onto. A massive problem. Byte-Modality solved the problem of creating a Universe.

You might not know this about me, but I’m building a Multiverse. That’s right. Not one universe. Nope… I didn’t think that was challenging enough I guess, so here I am, sat in front of a pile of lore that spans two universes. And now, I’m on the hook to create interactive 3d galaxies for each of them.

Do you want to know why I’m not scared anymore? Why the demons let me sleep at night, now?

Digital Assembly Theory… That’s why.

What’s that you ask? Well, it’s a way of looking at how we create digital constructs — games, pfp’s, avatars, in-game items, metaverse experiences, etc — that allows you to start simple and work up complexity over time. It’s a way to introduce evolution to your Ordinal projects so that replayability, revisitability, and the experience of the user can change as we move deeper and deeper into that strange unknown we know simply as … Time.

Digital Assembly Theory (DAT) was borne of a need for greater definition in the “how” of applying Non-Arbitrary Trait Selection & Expression (NATES — You’d think NATSE is the proper acronym, but say it out loud and you’ll regret it haha, so, the acronym is NATES. Deal with it).

Why I Needed More Definition for NATES

As I delved deeper into the world of Non-Arbitrary Trait Selection & Expression (Ok, fine, I mean DMT — I just like the term: Non-Arbitrary Trait Selection & Expression, okay? Sorry!), it became clear that while the theory was sound, its application needed more precision. The complexity of Bitcoin Block Data, with its inherent randomness and vast potential, required a structured approach to harness its full creative power. I needed a framework that not only made sense of this data but also provided a method to systematically evolve digital constructs from simple beginnings to complex, interactive experiences. This necessity drove the creation of Digital Assembly Theory, bridging the gap between raw data and intricate digital creations.

Summing Up Digital Assembly Theory

Digital Assembly Theory (DAT) transforms the way we approach digital creation. By leveraging Byte Modalities and other advanced techniques, DAT offers a structured yet flexible framework for developing complex digital constructs. It allows creators to utilize the inherent properties of blockchain data, ensuring that each project can grow and evolve over time. With DAT, we’re not just building static digital assets; we’re creating dynamic, living constructs that adapt and change, providing endless opportunities for innovation and engagement. Welcome to the future of digital creation. Welcome to Digital Assembly Theory.

Shew — Now that’s out of the way, can I tell you about the rabbit hole?

Astral’s Web — or How I FAFO’ed all about Byte Modalities

This was the MVP — the first “finished” version of the Astral’s Web Experiment.

This is my “web.” I made it to prove a point to myself. You can use a single Merkle root to create a trippy, evolving, intricate experience for someone. If you would like to see the Web “in action,” visit Astral’s Web.

What makes Astral’s Web “special” is that it was the catalyst for discovering Byte Modalities.

To fashion a web, you need lines. To create lines, you need two points in space. And webs aren’t all straight lines; they have curvature.

When it comes to NATES, DMT, DAT — whatever you want to call it — I’m somewhat of a purist. I believe in making as few arbitrary decisions as I can. So just using the raw Merkle Root as DNA — my favorite approach to teach NATES — wasn’t going to really cut it for me. As a purist, there is no relation between Byte 1 and Byte 2 of a Merkle root beyond the fact that they’re neighbors. It would be arbitrary to link these two points together to create one of the lines for my web.

Let’s quickly cover some basics of using DAT to apply the concept of Non-Arbitrary Trait Selection and Expression to building this web, and the Byte Modalities concept is going to sort of fall into place as a result… Sweet? Sweet.

What’s a Merkle Root?

Here’s a Merkle Root split onto 4-lines. Note that it is a Hexadecimal hash, meaning a random string of characters made up of 0–9 and a-f

It’s a 64-character hexadecimal string created by hashing the transactions in a Bitcoin block until only a single hash, the Root, is left. This becomes that Block’s Merkle Root. This process is why I consider the Merkle Root to be the DNA of a Bitcoin Block. In Digital Assembly Theory, this is our go-to for learning how to apply Digital Matter Theory, Digital Dimensions Theory, and Non-Arbitrary Trait Selection and Expression in general.

What’s a Byte?

In hexadecimal, the love language of byte-modalities, you have an 8-bit byte. That’s two characters, like “a0” or “ff.” These bytes can range in value from 0 to 255, giving us 256 possible values per byte. And we have 32 bytes in a Merkle Root.

What’s a Modality?

You know how in music we have many scales? Most of us are familiar with Major and Minor scales, but there are hundreds across the world. In Western Music, we have the 7 modes, including the Major and Minor scales along with some really fun others (see Phrygian). These are Modes, and a Modality is the overall framework related to the specific use of Modes. I hope that helps 😅

Now, back to how Byte Modalities came to be…

So, Astral’s Web… I decided to plot each Merkle root byte, eight to a side, in a square image. That was the easy part. But that also consumes all 32 bytes of data available in the Merkle Root. That didn’t buy me a web, it just got me a bunch of points on some lines.

At this point, I could have added another field into the mix to plot the “opposite” points that allow each Merkle root byte to form a line crossing the square, but that, again, would be an arbitrary decision. My goal was to do this in the most non-arbitrary way I could, using only the Merkle Root as my data source.

Now, if you’re already familiar with Digital Assembly Theory — number one, I wanna shake your hand, you’re so freakin early to this party! — you might be saying to yourself — Dude, just use Hash Cycling. You invented it. Duh.

I wanted to try this without taking the easy way out. Because, even if I did use Hash Cycling, there would be no real correlation between byte 1 from Merkle Root A, and byte 1 from Merkle Root B (the hash cycled Merkle Root). It would be an arbitrary connection because it would simply be me deciding that it was appropriate to do, without any real logic, precedent, or standard to support non-arbitrary expression here.

So I began thinking about the nature of a Hexadecimal byte. You can represent a Hexadecimal byte as an integer, a fraction, a percentage… and all are valid.

In Hexadecimal, “a0” is the same as the integer value, 160. As a fraction, this would be 160/255. I really dialed in here on that maximum value, and it was about then, I realized, a byte-pair has modes just like music. 🤯

You have the actual value, and then you have a complementary value. You get the complementary value by subtracting 160 (the value of “a0” as an integer) from 255 (the max integer value of a byte). This gives you a complementary value of 95.

This was an aha moment for me because now I had an anchor point (the actual byte value) and a counterpoint (the complementary value) that I could plot somewhere along the rest of the square!

Discovering Byte Modality

With the complementary value in hand, it dawned on me that these were very straightforward maths, and maybe, just maybe… bytes have modes, just like music. This led me to explore further and define the first four modes of a byte to complete the Astral’s Web experiment:

  1. Primary Value: The actual value of the byte. In our example, “a0” equals 160.
  2. Shadow Value: The complement of the primary value, found by subtracting the primary value from 255. For “a0” (160), the shadow value is 95.
  3. Cowl Value: The third value I discovered is what I call the “Cowl” value. This is the difference between primary and shadow values across the midpoint. For “a0,” this is calculated as 255 - Math.abs(160 - (255 - 160)), which results in 160. (the Math.abs() bit is to keep the value positive! — it can get sad sometimes, but Math.abs() stops that in its tracks 🙃)
  4. Light Value: The Light value represents signal energy, calculated as Math.floor(Math.pow(160, 2) / 255), which equals 100. (Math.floor () rounds down to the nearest whole number, and Math.pow() is a function for getting the power of 2 in this case)

So after I found that complementary value, I soon after was like, “Well hey — I can make a ‘child’ value too — I’ll multiply the Primary and Shadow and then modulo it against the max value to keep the number in range.” — And it did the trick, but after closer examination was a bit too arbitrary for my taste. So I eventually arrived at the formula above.

I used the child to create the curve, or sag in the lines, because KIDS ARE A DRAG! (jk jk — wait wait, no don’t leave! awwww) But seriously, it was a perfect solve for the problem I was working through, but I had no idea right then and there that I’d just jumped into a bottomless rabbit hole!

The Web was now virtually complete.

But it didn’t look very good. It was still, lifeless, and a bit mono-chromatic. None of those things make me happy.

Next I decided to go ahead and introduce Hash Cycling into the Astral’s Web experiment to make a more interesting looking web. This was an opportunity to see if my “modes” performed as expected as well.

I devised a plan to complexify this simple data visualization into something more… me. Something trippy. Something colorful. Something with “life.”

It was only because of Hash Cycling that I was able to do this in a non-arbitrary deterministic manner.

What is Hash Cycling, exactly?

From the Digital Assembly Theory Primer Article:

Hash Cycling is a non-arbitrary and deterministic method rooted in block data for extending a given hash to accommodate the number of data points required for non-arbitrary trait selection and expression. I will reach for this tool again and again as the starting point of my experiments.

Crucially, Hash Cycling allows for the extension of the Merkle root (or any other hexadecimal string rooted in the Block data), so if your project requires more than 32 traits, you can simply hashCycle() the Merkle root to extend it by another 32 bytes, creating 32 more data points for trait selection. Need more? Hash Cycle your Synthesized Merkle Root to extend it again. And again with THAT Synthesized Merkle Root. As many times as you need, this tool will provide. ♾️?

So, for my last act of the night, I devised a plan to Hash Cycle the merkle root 7 more times. This would allow me to plot 8 total merkle roots worth of data points to increase the complexity of the web, and validate whether these new “byte modes” I’d just created were doing there job as expected.

The result was pretty epic! look at this crazy web!

I was a bit stuck at this point though. I’d fixed the problem of “lifelessness” that I felt was there earlier. But it was still motionless and colorless.

I knew I could fix the colorless-ness but I was struggling with what value to use to colorize each strand of the web. Unsure of how to proceed, I decided to call it a night.

One 6 hour snooze later…

I don’t dream much, ya know? I’ve always found that a bit odd. I’ve had maybe 2 dozen dreams that I can recall in the last decade. Truly.

But something interesting definitely goes on in my brain when I time travel in my bed at night. (You probably call it “sleeping”… sheep 🐏jkjk- no! don’t leave again!)

I woke up feeling quite caffeinated and urgent, if I’m being honest. I may not have had a dream, but like I said, something was going on in the ol noodle, because when the cobwebs receded, they were immediately replaced by Astral’s Webs.

I must’ve been experimenting while my body was sleeping. Because the “Light” value mode just sorta snapped into existence upon waking. It was just there in my head.

It was so simple… (And not quite right, yet, but little did I know… 🙃)

If the Primary could have a complement, so could the Shadow and the Cowl. I figured the Cowl was the most logical to derive a complement from since it was the offspring (thematically speaking) of the Primary and Shadow values. So I came up with:

Math.abs( 255 - cowlValue )

I practically ran to my studio, impatiently punching in my computers unlock code, and got right to work. I didn’t even stop for caffeine, y’all. I just went for it.

With a fourth mode, the Light value, I had all the ingredients necessary to colorize the web. What I got next, was just beautiful!

This accomplished my original goal, but left me wanting.

Motion. Action. “Life.” — That’s what I was missing… but how do get?

But wait… there’s more?

I burned an entire day thinking.

I did remember to eat some snacks, but didn’t manage to get much else done. Here’s why…

It was really bugging me thematically that in Digital Dimensions Theory and Digital Assembly Theory I have 10 dimensions to work with.

I wanted symmetry now. I wanted 10 modes of a byte to work with, and damn it all, I was going to find them.

I had a few requirements…

  1. The math had to be as simple and straight-forward as possible. I want anyone to be able to look at these equations for deriving these modal values and understand what is going on.
  2. The arbitraryness of each mode must be as low as I could get it. I used Claude.ai to help me evaluate this and come up with other maths when my choices were considered anything more than “Low” on the Arbitraryness spectrum we devised.
  3. The 6 new modes must fit thematically with my initial concept of Primary, Shadow, Cowl and Light modalities.

Here’s what Claude.ai and I came up with!

The 10 Modalities of a Hex Byte.

Awwww yeah. We got there folks. Welcome to the 10 modalities of a Hex Byte. Want to learn more about how it all works? Visit the Byte Modality Explorer at: https://digitaldimensionstheory.tech/tools/byte-modalities

A few iterations later, I had all the maths updated in my Astral’s Web project, and now we have something with a much more varied color palette to enjoy.

Much more nuanced, right? But still… lifeless.

Well… At this stage in development, I had used:

  • Primary — as the anchor point of each line in the web
  • Shadow — as the counter point of each line in the web
  • Cowl — as the curvature of each line in the web
  • Light — for the lightness of each line’s color
  • Amplifier — for the saturation for each line’s color
  • Spectral — for the hue of each line’s color

That left with me 4 data-points for each line to work with, and bring this baby to life!

Claude made me compromise on some of the ideas I had for fear of melting someone’s GPU but hey… this is SCIENCE BROH!

After a brief break to go run some errands — which I was late to getting to because I had gotten so wrapped up in my cook up, here — I got back to work, and came up with a plan to use the remaining byte modes.

The plan went something like this:

  • Dissonance — the movement speed (probably best represented as a percentage) of the given line
  • Reflection — The “flex” of a given line
  • Echo — The motion blur of a given line
  • Harmonic — The hue shift per frame of a given line

So uhhh, what do you think the result of that was? 🙃Have a look-see below. I’ll give you a tour of some of my favorite block’s Merkle roots as Astral Webs.

Ok, home stretch. If you’re still reading, you’re wondering about that Universe in a single-byte of data, I’d bet. Or maybe it’s the Rabbit Hole with no bottom that’s got ya curious. Read on, my brethren. Read on.

That’s When Things Got Fractal…

A byte is a byte. Whether it’s the direct-value from the Merkle root, or one of the modes that I devised, a byte is still a byte.

And guess what that means? It’s modal. It has modalities.

And guess what that means?

Your Shadow value? It’s got 9 more modes.

Your Cowl value? It has 9 more modes.

Your Light value? IT HAS 9 MORE MODES.

And let’s say, you jump in to one of the 10 modes of the first Byte in your merkle root, and you need MOAR DATA FOR SELECTIONS… Well guess what? You can haz, fren. You. Can. Haz.

Let’s. Get. FKN Fractal.

Imagine you’re diving into a cosmic whirlpool where every byte spins off into its own dimension. Every modal value becomes a new primary byte, each with its own set of 10 modes, each mode with 10 more, and so on. It’s like zooming in on a Mandelbrot set, where each layer reveals more complexity, more depth, more detail.

The universe isn’t just in the details; the universe is made of details, repeating infinitely in a mesmerizing dance of complexity. Your Merkle root is no longer just a static array of bytes; it’s a living, breathing entity with an infinite number of layers, each more intricate than the last.

This fractal nature of Byte Modalities transforms your digital constructs into evolving masterpieces. The possibilities are limitless. Every tiny byte is a portal to an entire universe of creative potential, waiting to be unleashed.

So there you have it. From the spark of an idea to the endless fractal journey through Byte Modalities, Digital Assembly Theory offers a rather different approach to creating non-arbitrary digital constructs. It’s a journey into the heart of the digital cosmos, where every byte holds a universe, and every universe is a byte.

Conclusion

If you’ve made it this far, you’re probably as excited as I am about the boundless possibilities that Byte Modalities and Digital Assembly Theory offer. Dive deeper into the rabbit hole, explore Astral’s Web, and experiment with the Byte Modality Explorer.

To stay updated on the latest developments, follow Astral Arkitekt on X, and DDTEco on X, or join our growing community on Discord. Whether you’re a seasoned creator or just starting your journey, there’s a place for you in our ever-expanding digital cosmos.

Let’s build the future of digital creativity together. Your universe awaits.

Be sure to follow me, Astral Arkitekt, within the next few days, on-chain javascript tools comin atcha to make all this as easy and fun as I possibly can for you. Because the more we build, the more we grow. And the more we grow? The more wild the show.

Always. Be. Building. 👷‍♂️🏗️🟧🌌

Subscribe to Astral Architecture so you don’t miss the follow-up articles on Digital Assembly Theory or the Digital Dimensions Theory Creativity Framework.

--

--

Astral Arkitekt
Astral Architecture

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