This is: - ERC721 compatible (uses reference OZ implementation) - users get an block of the city when they place it - placing blocks generates more of the city - all city placement rules and data are in the smart contract - the city is on giant piece of art composed of all users blocks - block placement effects properties of the city - users are restricted in what they place (based on account) Later (not implemented yet): - sectors can be claimed & named (with OS integration to trade as a sector) - as city moves through stages (hamlet, village, ... metropolis etc) the renderer will adopt new features and render them in previously existing locations (evolving city art as with growth stage)

Cotropolis showcase

How it's made

Tech outline: - solidity contract, tested against hardhat locally and rinkeby, but considering later L2 deployment - all city data is in contract, client is just a vizualizer - hardhat for contract pipeline and deployment - client uses ethers.js and pulls via local web3 provider - client interface is all pure HTML/JS/CSS - client city render is on canvas via the roughjs library Later will add: - pull of OpenSea listings for blocks or sectors (to show directly on map) - server-side serving of city data (for browsers without local web3 wallet) - server-side pre-render of city blocks (client-side render of a large city will be slow)