Visual expression of time and ownership on chain
Summary / tl;dr
A Gaussian timepiece is a simple NFT trinket. A timer. It’s an oscillator that cycles through a fixed number of seconds based on Ethereum’s average block time. But an owner’s relationship to a Gaussian timepiece is more complex. A timepiece contains “complications,” as they are called in watch-speak. These complications connect the ceaseless stochastic thrum of the blockchain to its owner — who is, in part, embedded in it.
Timepieces are generated on chain, and the ERC-721 contract updates their colors uniquely as they complete their cycles. The timepieces use a “dial” of moving elements rather than numbers, and these elements create a dynamic tapestry indicating the start and end of the timer. The number of these elements is proportional to the blocks assembled during the timer’s cycle — transitions across stochasticity towards another inevitable block height.
There are five durations of timepieces: 2, 4, 8, 16, and 32 blocks (26 seconds to 7 minutes). Timepieces are distinguished with a few attributes summarized in sections below. Primary among these attributes is that a timepiece contains markers on its bezel indicating how many on-chain NFTs its owner has (among 15 projects: Avastars, ChainFaces, [sol]Seedlings, etc.). Here are some timepieces, showcasing some variation:
This small NFT side project is being released first for collectors and supporters of prior work; thank you. A maximum of 100 timepieces will be pre-minted by the creator and listed on OpenSea. Each supporter or collector can secure one timepiece for a low reserve price (to recover minting and transfer gas). I will post further information on the OpenSea collection here. (Eligibility will require currently holding an NFT from at least one of two prior projects: Ethstory and the_coin.)
Like prior projects, a Gaussian timepiece also relates to statistics and data visualization. Most elements on each timepiece are based on some aspect of data. Some are based on pseudorandom number generation using block time and owner address (computed by the contract itself). Others are based on how block times are stochastic (see small study below) and how many “on-chain” elements the owner possesses in their wallet.
The primary, original motivation for the project was to express the statistical “Gaussian” nature of blockchain time. That’s where it gets its name, and where the project started. So I kept it. But in the course of building these, they became a few other things: a timer, a data visualization, a symbolic status signaler. These trinkets reveal state and dynamics, tokens and time. Owning one links expressions of time on the entire chain with an owner’s presence on it.
Are these timepieces “art”? I don’t think of myself as an artist. As in my prior projects, these timepieces are a kind of visual exploration of technical aspects of the chain and its data. Owners are free to conceive of them in any way they wish. We can be aesthetic relativists of a more reflective sort. I simply explain what I did below. I hope you find it interesting, and forgive the vanity of all the detail…
- Time, NFTs and Blockchain
- “Bitcoin is Time”
- Ethereum as a Clock
- Gaussian Timepieces
- Features, Distribution, Terms
- Endnotes and Sundries
Time is trite. We speak of it a lot. About not having enough of it, how fast it flies by, how times are remembered and well wished: “Have a good time.” The word “time” is among the most common in the English language, and expressions about time concepts pervade cultures and languages.
But this commonality derives from time’s pervasiveness, its paradoxes and mystery. Time is the great destroyer, yet it is also construction. We can think of it in absolute terms, but know it is observer dependent. Our perception of it may change with age. It unfolds alongside considerable randomness and surprise, yet leads to a singular inevitability for us all.
In some ways, blockchain bears an interesting resemblance to many of these conceptions of time. Block height on the ledger ticks forward inevitably, but those ticks are variable. Sometimes they happen in quick succession, sometimes we wait a bit longer. It is a reflection of much familiar — waiting for a delivery, for a friend to call, for the beer to arrive. But there are deeper relationships with our sense of time here. Like the arrow of time, blocks tick forward ceaselessly (endnote 1). Block 1,000,000,000 on Ethereum is inevitable, eventually. This assumes, of course, that Ethereum lives on for many more years. And if it doesn’t, if Ethereum never reaches that milestone, it echoes that other inevitability we mortals experience with time.
This post describes a small-scale NFT project called “Gaussian Timepieces.” These timepieces are meant to encapsulate these relationships with time. They are inspired by the statistical patterns of block time, seeking to analogize them with our own temporal practices. These NFTs encapsulate concepts of time encoded on the chain, expressed in the form of a curious timer I’ll call a Gaussian timepiece.
First, before introducing these timepieces, some background.
2. Time, NFTs and Blockchain
This summer of NFTs has brought many explorations of time. One of my favorites is “Alien Clock” by Shvembldr. These generative pieces have us imagining a “multidimensional being is looking at this clock and thinking about the impermanence of existence and the infinity of the universe.” They are dynamic and mysterious. Alexis André’s “720 Minutes,” WAWAA’s Timepieces and others explore time in fascinating ways. The dynamic changes of “Mutant Garden Seeder” by Harm van den Dorpel invoke a playful use of time as they update now and again, delighting their owners. Functioning clocks have been added to the chain, like brucethegoose’s dynamic, second-by-second “Matter of Time” and Ariel Becker’s innovative “Binary Clockchain.” Another favorite is the clever project by Inner Space called “Moon in Motion.” It uses the timestamp on chain to create a dynamic NFT that changes with the phases of the moon.
I’ve been intrigued for a while to explore notions of blockchain time. Some past work has involved investigations of origins and history. Inspired more recently by “Moon in Motion” and the dynamics of “Mutant Garden Seeder,” I wanted to create visualizations that combined elements of time and dynamics to capture core characteristics of the chain — of Ethereum’s dynamics. But the original inspiration for this project came from outside Ethereum altogether: an incredible blog post on Bitcoin and time from earlier this year.
3. “Bitcoin Is Time”
Bitcoin’s relationship to time has been studied in great detail by the inimitable Gigi in a blog post entitled “Bitcoin is Time.” In this analysis, Gigi notes that Bitcoin’s capacity to represent value inheres in its ability to represent time — a fusion of ledger and token concepts, in digital form.
It is the combination of causality and unpredictability that allows the creation of an artificial “now” in the otherwise timeless digital realm.
The ledger is represented by a 10-minute ticking connectivity from one block to the next, with each new block marking its connection, by cryptographic hash, to its past. This chaining of events, encoded by coordination and preserved for all, is a kind of “relentless beating” of a clock:
Bitcoin is time in more ways than one. Its units are stored time because they are money, and its network is time because it is a decentralized clock. The relentless beating of this clock is what gives rise to all the magical properties of Bitcoin.
Bitcoin’s 10-minute clock is highly variable, as Gigi describes. Sometimes, time differentials can even go in reverse as blocks are committed to the chain, though this is rare. But the decentralized consensus mechanism operates by maintaining an average tick of about 10 minutes, and will correct when it deviates from this.
Ethereum is also a relentless clock. It is perhaps a more frenetic one: Ethereum’s blocks are confirmed every 10-to-20 seconds or so. But this timing can vary widely, too. This has been shown in other analyses. Let’s revisit some of these basic ideas.
4. Ethereum as a Clock
Ethereum’s blocks tick ahead every 10-to-20 seconds (endnote 2). But there is a distribution, a spread, around block times. Let’s take the batch of over 100,000 blocks that occurred since EIP-1559 (from 8/5–8/24 or so). Across these 100,000 blocks, when going from one block to the next block, the timing varies in the following way.
Often blocks follow each other in rapid succession, almost instantenously (on the left of this plot). Other times, but very rarely, it can take a minute or two (right side of this plot). This variation is due to at least two factors. The primary factor is the timing variability in proof of work. There is inherent stochasticity in finding blocks, and so it takes variable amounts of time. Another is network latency. Miners must coordinate, and it can take time for successful blocks to propagate. Another potential factor is block reorganization. There has been much talk of the “Dark Forest,” and miner-extracted value (MEV) has introduced various approaches to bundle transactions into blocks strategically. Together, these factors bring variation — sometimes blocks come quickly, and sometimes they take several seconds or even minutes to arrive as miners race for the next reward.
But consider waiting for, say, 10 blocks. Looking at the time from one block to the 10th block after it, we get a different pattern, one that begins to resemble a bell curve, often called a normal or Gaussian distribution:
The reason for this change in shape is that going from one block to the next 10th integrates across all the variation from each one to the next. This illustrates a beautiful principle in probability theory and statistics. For example, let’s take a bigger time window of the next 100th block:
“In the limit,” it’s said, the average block time approaches a characteristic 13 seconds or so — what we could call “canonical” block time. Despite the skewness of one block to the next, the randomness is integrated across the many blocks inside our 100-block estimation. The result is a symmetric spread with the average and median both at the peak.
So if we used Ethereum as a clock, we’d achieve more stability at larger units of time. This can be further shown by dividing the variation by the duration of time, called the coefficient of variation. This coefficient measures the variation in your spread relative to how high the mean is. So if we used Ethereum as a clock or timer, how much would we be off relative to the time we wished to estimate?
As we look to the next 1 block, 2 blocks, … 100 blocks, the spread shrinks relative to the time we wish to estimate. It can be said that “Ethereum time” is stationary in the limit. How about the 100,000th block after EIP-1559? The time from block 12,965,000 to 13,065,00 was 1,333,061 seconds, 13.33 seconds per block.
In this sense, blockchain is a stochastic clock. It clicks ahead relentlessly, but if we used it to tell time, there’d be variation around our estimates. This variation is systematic and beautiful in its way. Blockchain is, in a sense, a Gaussian timepiece.
5. Gaussian Timepieces
Imagine a birthday party. You plan it long in advance. Its time on a given date is rather precise relative to the many weeks you plan ahead for it. On the day, the “start” of the party may be more variable relative to the day itself, 1:01pm or 1:26pm. Games are played at 2:24pm… or 2:13pm. The cake is lit at 5pm — or so. And during the party, smaller events can be rather unstructured, surprising, sudden and spontaneous — the skew of briefer time estimates. Perhaps most human activities can be resolved into this temporal patterning —variation around the inevitable when depends to some extent on how far we plan and look ahead.
A stochastic clock or timer should express this uncertainty. The following principles could be expressed by such a timepiece:
- It should express the long-term tendencies of the timing regime, even if imprecise. This marks the stochastic but long-range stable characteristics of the blockchain.
- The timepiece should also have indices regarding the relative precision based on unit of time (a few blocks vs. a dozen or more blocks). This is more variable, less stable, yet more pertinent to reading off the timer for a specific period of block time.
- The timepiece should contain signatures of uncertainty that cue its holder into a sense of transition from one moment to another inevitable moment despite the randomness that can intervene between them.
The form of this timer should also have a familiar shape, with familiar components. I used the classic cyclic logic of the circular form. A hand or some other mechanism sweeps around this form, indicating relative moment in time and also recurrence of the time cycle as a whole. We’ll also have data-inspired components like the bezel and hand and watch “complications.”
To project these ideas of block time onto a circle, we take the bottom center of the circle as the start of the timer, and the number of blocks multiplied by the canonical block time (13 seconds) as one full rotation of this timer. So a “4-block timer” will start at the bottom and loop around for 52 seconds. A “16-block timer” will loop for about 3.5 minutes.
But this is the “canonical” timing, noted above. It’s what we get with a long time estimation on our timepiece. We need an expression of the variability of the shorter timespan. To do this, let’s take the dense, central portion of the observed Gaussian distributions. Consider three simple block timers — 4 blocks, 8 and 16. This is what it looks like when their spread is superimposed onto the circle, flattened to hug the outside of the circular form:
Notice how it rotates towards our canonical time? This is the effect of increasing the sample of blocks included in our timer, and so brings the estimate closer to the 13-second figure. It is the same effect as when we compared 1, 10, and 100 above. This spread from the observed Gaussian distributions tells the timepiece’s owner: “Your block target may indeed be reached within this wide range — earlier or later.”
To express canonical time, we can adorn the piece with a Gaussian distribution at the bottom center, serving as a reminder of underlying temporal order from a stochastic process (endnote 3). Rendering this frame as an SVG with alignment and coloring, we have the timepiece’s bezel and hand, along with a watch “complication” (the crescent) that hints at the randomness. Here’s the base for a 2-block timer.
The expressions for #1 and #2 above have been addressed. So far we have minor accents highlighting the stable long-term behavior of the chain (centered Gaussian) along with an indication of the spread of that block timer (the dampened spread that now appears like an inside complication). But I also noted a third feature: “The timepiece should contain signatures of uncertainty that cue its holder into a sense of transition from one moment to another inevitable moment despite the randomness that can intervene between them.” To do this, let’s create a “dynamic dial.”
To establish a sense of this randomness and transition, I used a dynamic display of elements inside the face that marks progression of the timer. These move in and out of the watch face in sync with the timer. Here’s an example. The SVG has animation in opacity too. The elements begin with full opacity at the center of the timepiece face. This marks that the beginning is certain — we know where the timer starts. As the timepiece unfolds, these elements shift to the side and opacity fades. The target block is uncertain as the chain bundles its information into a series of blocks. But these elements return at the period’s end, connoting an inevitability as they return to the center with full opacity. An example is shown here, along with a number of other “complications” included on the timepiece. These are summarized in the next section.
6. Features, Distribution, Terms
6.1 Contract features
Maximum issuance: 100 (pre-minted) timepieces, specified in the verified contract here on Etherscan (0x5f619758…).
Dynamic “dial.” Another main feature of “Gaussian Timepieces” contract is how these elements are selected. The more of them there are, the more dynamic and rich the display. To choose the number of items cycling inside the face, I used a simple equation based on the timer and the owner’s “on-chain-ness”:
# items = 0.5(# blocks) + floor(owner ETH balance) + # on-chain NFTs
So if you have a 4-block timer, 1 ETH in your wallet and 5 on-chain NFTs, the number of elements you’d have is 0.5(4) + 1 + 5 = 8. These items are capped at 16, and take the form of circles or blocks (see below).
Important note: This means those with a 2- or 4-block timer and only a few on-chain NFTs will not have so many as those with 16- or 32-block timers. Faster timers may start off quite sparse. It is possible for those without any on-chain NFTs and a 2-block timer to have a single circle swinging to and fro. I did this on purpose. This increases variation in experience. The serene, plain surface of a simple timepiece may be preferred by some. And those who start with fewer rings may find pleasure in populating their timepiece.
The ticks on the right side of the bezel represent the number of these on-chain NFTs owned (up to 30 ticks). On the left, ticks represent the number of unique projects on which NFTs are owned, up to 15 projects (multiplied by 2 to make it possible to achieve symmetry with the right ticks).
The on-chain projects that determine these numbers represent a further homage. This project is a fun, experimental representation of blockchain and time. It accompanies no declarations of being first or early. Gaussian timepieces are not even the first integration of multiple NFT contract details — that honor might belong to the cute TOON project. But an owner’s “on-chain” score honors several projects that were indeed early in some way or other. I chose the following, though this should not be interpreted as an endorsement (disclosure: I only own a few on half of these projects):
- Mandala Tokens
- [sol]Seedlings: Genesis / 512Print
- And if I may: the_coin
Gaussian timepieces summon the balanceOf() function of these contracts when rendering the NFT in tokenURI(). (I’m sorry if your favorite on-chain project is not listed here. Narrowing was necessary.)
100% on-chain, updated each cycle. The timepiece updates each cycle of the timer itself. For example, a 4-block timer will alter its colors and elements every minute or so. A 16-block timer, every 3.5 minutes or so. This is done pseudorandomly using keccak256() on the owner’s address and token ID. This also means that if an owner has several Gaussian timepieces, they will not be rendered in the same way. Use the “refresh metadata” button on OpenSea to check for changes (NB: OpenSea may take several minutes sometimes to update).
Complication: start, end. On either side of the block time specification (e.g., “+2” or “+16”) is the start block and end block for the last time the timepiece was fetched from the chain.
Complication: gas tracker. The asterisk characters above the block time specification (e.g., “+2” or “+16”) tell the timepiece “wearer” what the present base fee is, in increments of 25 plus one. So a 54 gwei gas price would appear as “***” on the timepiece.
Complication: real time. Orbiting the bezel as a small pointer is the real time using the 12-hour interval.
Composability. The real-time marker is UTC, but timepieces are configured to facilitate programming on top of them. First, the contract’s reveal() function takes two arguments and outputs raw SVG data. One is the tokenId, and the second is the timeZone, specified as UTC-minus-k hours. Owners could setup a website and routinely refresh their pieces with this function and specify k hour value in such a way that it yields their desired time zone (k value must be positive). Note also that all these objects in the SVG contain a descriptive ID, so it is possible to manipulate the output SVG for further restyling, coding, etc. with JS. (Also note: due to the integer requirement, this can only represent whole-hour time zones relative to UTC; apologies to those in 30- and 45-minute time zones!)
- Block counts: 2, 4, 8, 16, and 32 (equally common)
- Colors: Dark mode and light mode (equally common)
- Shapes: Circles (common), blocks (rarer)
I will pre-mint all tokens on “Gaussian Timepieces.” Pieces will be available on OpenSea. There will only be 100 timepieces, reserved first for collectors and supporters (see here for details). NB: Collectors must still hold one of my prior projects (Ethstory, the_coin) on or before Friday, September 10th, 2021 to be eligible for a timepiece. Eligibility grants access to one timepiece.
6.4 Terms, Conditions, Rights
Terms. “Gaussian Timepieces” is an experimental project, use at your own risk. Each token is provided as-is and as-available without any and all warranty. By using the contract you accept sole responsibility for any and all transactions involving “Gaussian Timepieces.”
Rights. Owners have full rights over the timepieces, they may modify and adapt them as they wish, including for commercial purposes. However, if owners redistribute the underlying data of these timepieces, the license requires them to grant to their users these same freedoms (via GPLv3).
A consensus protocol’s resolution is stochastic, but inevitable. These timepieces symbolize time on the chain — while average block times are more stable in the limit, there is rich randomness from moment to moment. The timepieces also symbolize varied notions of NFTs. A watch is worn. It can be the clock our days tick to, or a status symbol for others to see. Indeed, these timepieces permit their owners to adorn them with signs of cross-project ownership. They also contain sufficient temporal information that you could put the NFT into time-telling service. There is some, perhaps minimal, utility here. I myself enjoy watching their rhythm, a moment of peace, accepting the inevitable passage of time — and all its effects — expressed here in time that emerges from one of our strange technologies.
8. Endnotes and Sundries
- While reorgs may in a sense “reverse time,” they are also constrained by the arrow of time. Reorgs only work if they establish a “heavier” set of block solutions — in other words, maintaining the direction of time, even if the past can be to some extent rearranged. In Ethereum (and proof of work generally), this is done by achieving greater cumulative computation than the blocks that are being replaced. Curiously enough, perserving our analogy with human time, the brain sometimes hovers in this realm of temporal uncertainty.
- Ethereum’s block times have sometimes fluctuated due to various features of the protocol, in particular difficulty adjustments and related issues. I ignore some of these details in this project. For example, under proof of stake, Ethereum 2.0 will likely have more consistent 12-second block times.
- James Prestwich (@_prestwich) has a very nice little blog post from several years ago hinting at these themes. James writes we are now “setting up social processes and technological systems, building these distributed technologies, and tipping them into eternal clockwork motion. We will rarely get a chance to right our mistakes once they’ve left our hands, and we may not always be around to tend our creations. When someone finds our work lying on the ground in the forest, its gears spinning and its hands turning, what will they conclude about us?” James describes innerworkings of such systems, with watches as an example, and I skirt over possible further relationships here for simplicity. For example, in a watch, the balance wheel serves as the key mechanical piece that maintains time, and will deviate only slightly even after years when well designed. In Gaussian timepieces, the corresponding computational element is the keyframes duration set on the SVG animation — simply as a linear function of block count, tB. In Ethereum itself, the analogous maintenance is sustained by a more complex function, illustrated below from a detailed summary of difficulty adjustment on Ethereum.