In December 2017, CryptoKitties had just brought Ethereum to its knees, and I couldn’t stop thinking about why. Everything on the chain until then was money — ERC-20 tokens, fungible by definition, every unit identical to every other. The cats broke that. Underneath the cartoon breeding game was a draft standard, ERC-721, whose early proposals used the word deed — a token where every ID was distinct and ownable on its own. A deed doesn’t say how much you own. It says which one is yours.
The oldest unique thing we know how to own is space. I wanted a deed to point at a place.

A city out of voxels
Over the next two months I built Aether: a virtual city on Ethereum where every property is a token. Anyone could open the site in a browser and click Construct to claim a building — no auction, no land sale, just a transaction. The city is hierarchical the way real cities are: districts at the top, then buildings, then units — the smallest form of ownership, ten cubic metres of addressable space at a coordinate. A building owner can subdivide their tower and mint units inside it, then sell them or hand them out at the door. That was the part I found most interesting, and still do: owning a confined space isn’t just a record, it’s a capability. A gallery that issues its own limited editions. A venue whose tickets are rooms.

The launch post I wrote promised that “our team at Aether Labs is excited for the challenge ahead.” Aether Labs was me.
A contract written against a draft
The technically strange part was the timing. ERC-721 wasn’t finalized until June 2018 — three months after Aether launched. In December 2017 the “standard” was a GitHub discussion thread and a draft interface from Dieter Shirley, CryptoKitties’ CTO. There was nothing to import, so the draft went into Aether’s source by hand — the verified contract on Etherscan still contains a file literally named ERC721Draft.sol, with his name in the header:
/// @title Interface for contracts conforming to ERC-721: Non-Fungible Tokens
/// @author Dieter Shirley <dete@axiomzen.co> (https://github.com/dete)
contract ERC721 {
function implementsERC721() public pure returns (bool);
function totalSupply() public view returns (uint256 total);
function balanceOf(address _owner) public view returns (uint256 balance);
function ownerOf(uint256 _tokenId) public view returns (address owner);
function approve(address _to, uint256 _tokenId) public;
function transferFrom(address _from, address _to, uint256 _tokenId) public;
function transfer(address _to, uint256 _tokenId) public;
}
Read that against the final standard and you can see how much hadn’t been invented yet. There is no safeTransferFrom and no receiver hook — send a token to a contract that didn’t know how to hold one and it was simply gone, a problem the ecosystem hadn’t solved yet. There is no setApprovalForAll, because the idea of a marketplace acting as your standing operator wasn’t a pattern anyone had needed. There is no ERC-165 introspection — you discovered an NFT by calling implementsERC721() and trusting the answer, a handshake on the honor system. Metadata was a function returning an “infoUrl”, marked // Optional in the draft; tokenURI and the JSON schema every marketplace now renders came later.
The tooling was just as thin. OpenZeppelin — then a package called zeppelin-solidity — could offer Ownable and Pausable, but no NFT base class. There was no marketplace to conform to either; OpenSea was weeks old. So Aether ships its own market inside the token contract, a Dutch-auction facet called ClockAuction where the city’s first buildings were sold. The only reference implementation on earth was CryptoKitties itself, read straight from its verified source — which is why Aether’s architecture echoes the cats’ faceted design, right down to the CEO/CFO/COO access-control roles. The comment at the top of the file still calls the project by its working codename: Laputa, the castle in the sky.

My favorite parts are where the spec had no opinion at all and the contract had to invent its own physics. The entire universe is declared in one line of storage — bool[100][100][100] public world — a million-voxel occupancy grid that makes overlapping properties structurally impossible. Progression is the city’s growth clock: a property’s distance from the center of the grid. The 2018 city occupies a 30 × 30 patch at progression 15, with room to grow to 50, and each step of progression re-runs _computeHeight() for every building, recomputing the skyline as a cone in integer math, because the EVM has no floats:
uint256 scale = 100 - (distance * 100) / progress;
uint256 height = 2 * progress * _height * scale / 10000;
The city grows outward, and the towers nearest the center earn the sky. Scarcity composed with growth — a city that can densify without ever minting itself into meaninglessness. And because a deployed contract is immutable, all of it — the draft interface, the auction house, the cone — became permanent on March 11, 2018, the day 0x31d4C5be1082A88F2ABAFeA549B6C189C2cf057F went live. There is no patch release for a city.
A dead start
Then the market collapsed. ETH crashed within weeks of launch, the speculative air went out of everything, and a virtual city that nobody was paid to promote went quiet. Aether was a passion project launched into a falling knife — a dead start. I moved on, the way you do. The contract kept running, minting nothing, forgetting nothing, for three years.
The revival
In 2021 the world rediscovered non-fungible tokens, and with it came the NFT archaeologists — collectors digging through the chain for the earliest contracts, the primordial experiments that predated the standard itself. You can date those contracts by their interfaces alone: implementsERC721() where supportsInterface() should be is a 2017 accent. They found Aether: one of the first metaverse projects on Ethereum, asleep since 2018. I dusted it off and started a relaunch; Adam, watching my first fumbling attempts at it, joined to help execute a proper one. We locked the original 2018 properties for six months while the new community found its footing — flippers, collectors, whales, and people who just wanted a room in an old building — and started modernizing the client around them.
The strange gift of the dead start is that the city skipped its own hype cycle. It’s better that Aether went through the lull and found a stronger community in the present day than to have been carried, briefly, by a wave that receded. A city is only as good as its people, and this one got to choose its people twice.
Deeds
The wave that followed — the land rushes, the energy cost of a proof-of-work chain, the word “metaverse” becoming a corporate strategy and then a punchline — mostly obscured what was interesting about the original question. It was never really about speculation, or even virtual worlds. It was about whether property, one of the oldest social technologies we have, could be reimplemented in public: a register of unique spaces that no one administers, where ownership is a fact anyone can check and a capability anyone can build on.
That contract has now run unchanged for eight years. Every deed it ever issued still resolves. I’ve shipped a lot of software since 2017, and almost none of it can make that claim.