H

Markov's Dream — on-chain

Markov's Dream is a series of generative animations that Harm van den Dorpel began in 2022 as a remake of Markov's Window (2004). The about page plans 32 tokens, "gradually released over time", each one "a 'setting' of a computer programme" (about text); the last of them, Goo, was minted on 13 November 2026. Until November 2026 everything a collector could see of a token depended on his web server at markovs-dream.harm.work: the token's description, its picture and the animation. On 12 November 2026 he moved all three off that server. The description and the animation are now stored on Ethereum, and the pictures on Arweave, a network for permanent file storage.

Markov's Dream (2022), token 1, played from the page the chain returns

The frame above runs the page that Ethereum returns for token 1, decoded and nothing else changed. The token's description reads: "A remake of the 2004 work Markov's Window, with identical palette."

Where the tokens pointed before

An NFT stores very little. The Markov's Dream contract of 2022 (0x518f…e587) records who owns each token, and for each token it gives out one address, which marketplaces and wallets read to find out what the token is. The contract builds that address by appending the token's number to a base address, and its owner can change the base. Until November 2026 the base pointed to his server, so token 5's address was https://markovs-dream.harm.work/api/tokens/metadata/5. That address returned a short text in JSON, with the token's name, its description, six traits, a link to a picture on the same server and a link to the animation, a page on the same server again.

All three links led back to one machine. Had it gone offline, the tokens would have kept their owners and lost everything a collector could see.

The web3:// address

A web address that starts with https:// names a server, and the server decides what to send back. A web3:// address names a smart contract, a program stored on a blockchain, and a question to ask it. The format is defined in ERC-6860, a draft proposal for Ethereum that revises ERC-4804 (2022) with corrections and clarifications. Token 5 of Markov's Dream is now:

web3://0x0414f126c2dd496f98db1158f6fa61c14e09824f/tokenJSON/5

PartWhat it says
web3://ask a contract, not a server
0x0414…824fwhich contract: its address on Ethereum's main network
tokenJSONwhich of its functions to run
5the value to give it

A program that meets this address, a marketplace for instance, sends the question to any computer that keeps a copy of Ethereum. The contract runs tokenJSON(5) and returns some bytes, and those bytes are the document: here the token's JSON. Reading costs nothing and changes nothing on the chain, and no particular computer has to stay online for the answer to come.

Browsers do not open web3:// addresses themselves. Gateways translate them into ordinary web addresses: 0x0414…824f.w3eth.io/tokenJSON/1 shows the JSON of token 1. OpenSea's documentation says it reads web3:// metadata, and harm.work reads it with its own reader, which marks the tokens' metadata as "on-chain (web3)".

Why one setting was enough

The 2022 contract can only change the base address; it cannot store a description per token. A data: address, which carries a whole file inside the address itself, would not work here, because a description with the token's number glued to its end is still the same description for every token. Bison went another way the day before: he minted new tokens on his own contract, so each token's address could carry its own data (→ Bison, under On-chain (2026)).

A web3:// base turns the number the old contract appends into the argument of a function. With web3://0x0414…824f/tokenJSON/ as the base, the contract of 2022 produces …/tokenJSON/1 up to …/tokenJSON/31 by itself. So Markov's Dream moved without replacing its contract, without new tokens and without asking collectors to do anything: its owner sent one transaction that changed the base address.

What the chain returns

The metadata contract returns the JSON the server returned, with the same name, description, traits and outside link, in the same order. Two values changed:

The page is put together from four files stored on-chain: a short head, the graphics library PixiJS in version 6.4.2, the code of tokens 1 to 31, and a short start-up script. The contract writes the token's number between the head and the library, and the page draws that token. The library is the exact version the server had run since 5 December 2023, and the code is the code the server ran, so each page draws what collectors had seen since then. The animation restarts from scratch every two minutes, as it did on the server.

Versions

Goo: a rounded square shaded from white to blue on black, filled with soft lobes in magenta, grey, lilac and green, with violet where magenta and blue have mixed
Goo (2026), token #32, the image stored with it on Arweave

The files sit in their own contract, a file store (0x374a…76d2), and a stored file can never be changed. A version of the artwork is a list of stored files. Versions are numbered and only ever added, and each token points to one of them. A correction to one token means storing the changed file, adding a version and moving that token to it; the other tokens stay where they are. Only the owner of the Markov's Dream contract can move a token to another version, and he can freeze one, after which it never moves again.

Tokens 1 to 31 show version 1. Token 32, Goo, was stored as version 2 and given its text before he minted it on 13 November 2026. Its page is a single program written for the token in WebGL, with no library. It has already moved once. Version 3 is the same work made to answer touch as well as the mouse: on a phone a swipe stirs the paint and divides the cells it crosses, and a long press takes hold of a cell. Version 2 stays stored (→ The Markov's Dream Palette, under Goo).

The arrangement keeps every state. A token that moves to a new version leaves the old one stored and readable, so the chain records the collection's history along with its present. The series is named after a process that forgets: the about text describes the Markov process as "memoryless", and human beings as "creatures of memory". The chain that draws each token forgets; the chain that stores it does not (→ The Markov's Dream Palette, under Palette as memory).

Tending

The move is care of the same kind as Bison's, taken before anything failed rather than after, and he counts it as part of the work: "Digital art needs tending to stay alive, unlike, let's say, a sculpture. The continuous care and tending of the work, the archiving, the updating, is part of the work for me." His formula "The Work = The Work + Its Documentation" (992) here covers the means of showing the work as well as its record. Mediation and the Archive compares what on-chain storage keeps in Field, Bison and Markov's Dream (under Flash, and the score kept on-chain).

Record

ContractAddress
Markov's Dream (2022)0x518f…e587
Metadata (2026)0x0414…824f
File store (2026)0x374a…76d2

See also